Exemple #1
0
def control_panel_view(request, code_id):
    if (request.user.is_authenticated):
        lab = LabCode.objects.get(id=code_id)
        name = lab.code
        dict = {
            'id': code_id,
            'code_id_json': mark_safe(json.dumps(code_id)),
            'name': name,
            'content_access': lab.content_access,
            'quiz_access': lab.quiz_access,
            'content_time': "",
            'end_time': ""
        }
        data = {
            'grade': [],
            '1': [],
            '2': [],
            '3': [],
            '4': [],
            'computer': []
        }
        for participant in LabProgress.objects.filter(code=code_id):
            if participant.quiz != 0.0:
                data['computer'].append({
                    'id': participant.id,
                    'computer': participant.computer
                })
                data[participant.group].append(participant.quiz)
                data['grade'].append(participant.quiz)
        fig2 = Figure()
        canvas = FigureCanvas(fig2)
        ax1 = fig2.add_subplot(121)
        ax2 = fig2.add_subplot(122)
        # fig2, ax = plt.subplots(1,2)
        fig2.set_size_inches(14, 5)
        labels = ["Paper", "PDF", "Interactive", "Interactive + Gamification"]
        for i in range(1, 5):
            try:
                sns.distplot(data[str(i)], label=labels[i - 1], ax=ax2)
                # sns.distplot(data[str(i)], label=labels[i-1], ax=ax[1])
            except:
                pass
        try:
            sns.distplot(data['grade'], label="Total", ax=ax1)
            # sns.distplot(data['grade'], label="Total", ax=ax[0])
        except:
            pass
        ax2.set_title("Grade Distribution per Treatment")
        ax1.set_title("Total Grade Distribution")
        ax1.legend()
        ax2.legend()
        # ax[1].set_title("Grade Distribution per Treatment")
        # ax[0].set_title("Total Grade Distribution")
        # ax[0].legend()
        # ax[1].legend()
        fig2.pad_inches = 0
        buf = io.BytesIO()
        fig2.savefig(buf, format='png', bbox_inches='tight')
        buf.seek(0)
        string = base64.b64encode(buf.read())
        uri = 'data:image/png;base64,' + urllib.parse.quote(string)
        dict['image'] = uri
        # Load Survey results
        data['surveys'] = []
        surveys = SurveyData.objects.filter(code=lab)
        for entry in surveys.values():
            entry['date'] = ""
            for x in data['computer']:
                if x['id'] == entry['lab_data_id']:
                    entry['computer'] = x['computer']
                    break
            for i in range(1, 20):
                try:
                    entry['s' + str(i)] = json.loads(entry['s' + str(i)])
                except:
                    pass
            data['surveys'].append(entry)
        dict['surveys'] = json.dumps(json.dumps(data['surveys']))
        if lab.content_time:
            dict['content_time'] = lab.content_time
            dict['end_time'] = lab.content_time + timedelta(minutes=30)
        dict['duration'] = 30
        return render(request, 'admin/control_panel.html', dict)
    else:
        return redirect('home')