Beispiel #1
0
def task_set_view(request, pk):  # zobrazenie sady ako zoznam
    task_set = get_object_or_404(TaskSet, pk=pk)

    if not TaskSet.can_see(task_set, request.user):
        raise Http404

    # vytvori sa alebo updatne aktualna sada
    act = Active.objects.get_or_create(user=request.user)
    a = act[0]
    a.task_set = task_set
    a.save()

    # zoznam uloh v sade; iba tie, ktorym moze vidiet zadania v zozname
    q = Task.objects.filter(task_set=task_set)
    q_ids = [o.id for o in q if Task.can_see(o, request.user, "t")]
    tasks = q.filter(id__in=q_ids)

    # zoznam sad do horneho menu; iba tie, ktore user moze vidiet
    q = TaskSet.objects.order_by("title")
    q_ids = [o.id for o in q if TaskSet.can_see(o, request.user)]
    sets = q.filter(id__in=q_ids)

    # roztriedenie uloh na kategorie (ci su vyriesene/precitane)
    # v tomto poradi sa mu aj zobrazuju
    task_cat = []
    task_cat.append({"tasks": [], "type": "act_sub"})  # 0
    task_cat.append({"tasks": [], "type": "act_read"})  # 1
    task_cat.append({"tasks": [], "type": "sol_sub"})  # 2
    task_cat.append({"tasks": [], "type": "sol_read"})  # 3
    for task in tasks:
        if Task.is_solved(task, request.user):
            if task.type == Task.SUBMIT:
                task_cat[2]["tasks"].append(task)
            elif task.type == Task.READ:
                task_cat[3]["tasks"].append(task)
        elif Task.is_enabled(task, request.user):
            if task.type == Task.SUBMIT:
                task_cat[0]["tasks"].append(task)
            elif task.type == Task.READ:
                task_cat[1]["tasks"].append(task)

    return render_to_response(
        "tasks/task_set.html",
        {
            "active_app": "tasks",  # kvoli havnemu menu
            "task_set": task_set,  # aktualna sada
            "sets": sets,  # viditelne sady v taboch
            "style": "list",  # styl zobrazovania sady
            "categories": task_cat,  # ulohy podla kategorii
            "tasks": tasks,  # danej sady
        },
        context_instance=RequestContext(request),
    )
Beispiel #2
0
def task_set_view(request, pk):  # zobrazenie sady ako zoznam
    task_set = get_object_or_404(TaskSet, pk=pk)

    if not TaskSet.can_see(task_set, request.user):
        raise Http404

    # vytvori sa alebo updatne aktualna sada
    act = Active.objects.get_or_create(user=request.user)
    a = act[0]
    a.task_set = task_set
    a.save()

    # zoznam uloh v sade; iba tie, ktorym moze vidiet zadania v zozname
    q = Task.objects.filter(task_set=task_set)
    q_ids = [o.id for o in q if Task.can_see(o, request.user, 't')]
    tasks = q.filter(id__in=q_ids)

    # zoznam sad do horneho menu; iba tie, ktore user moze vidiet
    q = TaskSet.objects.order_by('title')
    q_ids = [o.id for o in q if TaskSet.can_see(o, request.user)]
    sets = q.filter(id__in=q_ids)

    # roztriedenie uloh na kategorie (ci su vyriesene/precitane)
    # v tomto poradi sa mu aj zobrazuju
    task_cat = []
    task_cat.append({'tasks': [], 'type': 'act_sub'})  # 0
    task_cat.append({'tasks': [], 'type': 'act_read'})  # 1
    task_cat.append({'tasks': [], 'type': 'sol_sub'})  # 2
    task_cat.append({'tasks': [], 'type': 'sol_read'})  # 3
    for task in tasks:
        if Task.is_solved(task, request.user):
            if task.type == Task.SUBMIT:
                task_cat[2]['tasks'].append(task)
            elif task.type == Task.READ:
                task_cat[3]['tasks'].append(task)
        elif Task.is_enabled(task, request.user):
            if task.type == Task.SUBMIT:
                task_cat[0]['tasks'].append(task)
            elif task.type == Task.READ:
                task_cat[1]['tasks'].append(task)

    return render(request, 'tasks/task_set.html',
                  {
                      'active_app': 'tasks',  # kvoli havnemu menu
                      'task_set': task_set,  # aktualna sada
                      'sets': sets,  # viditelne sady v taboch
                      'style': 'list',  # styl zobrazovania sady
                               'categories': task_cat,  # ulohy podla kategorii
                               'tasks': tasks,  # danej sady
                  },
                  )
Beispiel #3
0
def task_set_graph_view(request, pk=False):  # zobrazenie sady ako graf

    # ak sme nespecifikovali sadu (menu->Ulohy), zobrazi sa/vytvori sa aktivna
    if not pk:
        act = Active.objects.get_or_create(user=request.user)
        pk = act[0].task_set.id

    task_set = get_object_or_404(TaskSet, pk=pk)

    if not TaskSet.can_see(task_set, request.user):
        raise Http404

    # vytvori sa alebo updatne aktualna sada
    act = Active.objects.get_or_create(user=request.user)
    a = act[0]
    a.task_set = task_set
    a.save()

    # zoznam uloh v sade; iba tie, o ktorych moze vediet
    q = Task.objects.filter(task_set=task_set)
    q_ids = [o.id for o in q if Task.can_see(o, request.user, "g")]
    tasks = q.filter(id__in=q_ids)

    # zoznam sad do horneho menu; iba tie, ktore user moze vidiet
    q = TaskSet.objects.order_by("title")
    q_ids = [o.id for o in q if TaskSet.can_see(o, request.user)]
    sets = q.filter(id__in=q_ids)

    # roztriedime kvoli vykreslovaniu v grafe
    solved_tasks = []
    actual_tasks = []
    invis_tasks = []
    for task in tasks:
        if Task.is_solved(task, request.user):
            solved_tasks.append(task)
        elif Task.is_enabled(task, request.user):
            actual_tasks.append(task)
        else:
            invis_tasks.append(task)

    return render_to_response(
        "tasks/task_set_graph.html",
        {
            "active_app": "tasks",  # hlavne menu
            "task_set": task_set,  # aktualna sada
            "sets": sets,  # vsetky sady
            "style": "graph",  # styl zobrazovania sady
        },
        context_instance=RequestContext(request),
    )
Beispiel #4
0
def task_set_graph_view(request, pk=False):  # zobrazenie sady ako graf

    # ak sme nespecifikovali sadu (menu->Ulohy), zobrazi sa/vytvori sa aktivna
    if not pk:
        act, _ = Active.objects.get_or_create(user=request.user)

        # In case the active task was hidden, set the default task as active.
        if not act.task.can_see(request.user, 'g') or not act.task_set.can_see(request.user):
            act.task_set = TaskSet.objects.get(id='intro')
            act.task = Task.objects.get(id='submit')
            act.save()

        pk = act.task_set.id

    task_set = get_object_or_404(TaskSet, pk=pk)

    if not TaskSet.can_see(task_set, request.user):
        raise Http404

    # vytvori sa alebo updatne aktualna sada
    act = Active.objects.get_or_create(user=request.user)

    a = act[0]
    a.task_set = task_set
    a.save()

    # zoznam uloh v sade; iba tie, o ktorych moze vediet

    q = Task.objects.filter(task_set=task_set)
    q_ids = [o.id for o in q if Task.can_see(o, request.user, 'g')]
    tasks = q.filter(id__in=q_ids)

    # zoznam sad do horneho menu; iba tie, ktore user moze vidiet
    q = TaskSet.objects.order_by('title')
    q_ids = [o.id for o in q if TaskSet.can_see(o, request.user)]
    sets = q.filter(id__in=q_ids)

    # roztriedime kvoli vykreslovaniu v grafe
    solved_tasks = []
    actual_tasks = []
    invis_tasks = []
    for task in tasks:
        if Task.is_solved(task, request.user):
            solved_tasks.append(task)
        elif Task.is_enabled(task, request.user):
            actual_tasks.append(task)
        else:
            invis_tasks.append(task)

    #nakrmime graf datami
    G = pgv.AGraph(directed=True)
    G.node_attr['color'] = '#dddddd'
    G.node_attr['style'] = 'filled'
    G.node_attr['fontcolor'] = '#ffffff'
    G.node_attr['fontname'] = 'Helvetica, Arial, sans-serif'
    G.graph_attr['bgcolor'] = 'transparent'
    G.edge_attr['color'] = '#555555'
    G.edge_attr['arrowhead'] = 'open'

    RED = '#C71C22'
    BLUE_L = '#2FA4E7'
    BLUE_D = '#033C73'
    GREEN = '#73A839'
    ORANGE = '#DD5600'

    for task in solved_tasks:
        G.add_node(task.id,
                   fillcolor = (GREEN if (task.type == Task.SUBMIT) else BLUE_D),
                   shape = ('ellipse' if (task.type == Task.SUBMIT) else 'box'),
                   tooltip = task.title,
                   URL = reverse('tasks:task', args=(task.id,)),
                   fontcolor = '#eeeeee'
                   )

    for task in actual_tasks:
        G.add_node(task.id,
                   fillcolor = (RED if (task.type == Task.SUBMIT) else BLUE_L),
                   shape = ('ellipse' if (task.type == Task.SUBMIT) else 'box'),
                   tooltip = task.title,
                   URL = reverse('tasks:task', args=(task.id,)),
                   fontcolor = '#ffffff'
                   )

    for task in invis_tasks:
        #admin si vie pozerat aj invis ulohy
        if request.user.is_active and request.user.is_staff:
            G.add_node(task.id,
                    fillcolor = '#ffffff',
                    shape = ('ellipse' if (task.type == Task.SUBMIT) else 'box'),
                    tooltip = task.title,
                    URL = reverse('tasks:task', args=(task.id,)),
                    fontcolor = '#000000'
                    )
        else:
            G.add_node(task.id,
                    label = '',
                    fillcolor = '#FFFFFF',
                    shape = ('ellipse' if (task.type == Task.SUBMIT) else 'box'),
                    tooltip = ' ',
                    fontcolor = 'black',
                    style = 'dashed',
                    color = '#333333'
                    )

    #najprv trebalo pridat vsetky vrcholy, aby sa im nastavil styl, hrany az potom
    for task in solved_tasks:
        edges = task.prereqs.all()
        for edge in edges:
            G.add_edge(edge.id, task.id, style='solid')

    for task in actual_tasks:
        edges = task.prereqs.all()
        for edge in edges:
            G.add_edge(edge.id, task.id, style='solid')

    for task in invis_tasks:
        edges = task.prereqs.all()
        for edge in edges:
            G.add_edge(edge.id, task.id, style='dashed')

    G.layout()

    #vymazeme hlavicky, lebo neincludujeme svg object, ale rovno ho kreslime; inak by sme neboli html valid
    graph = '\n'.join(G.draw(format='svg').split('\n')[3:])

    return render(request, 'tasks/task_set_graph.html',
                  {
                      'graph':graph, #data pre graf (svg)
                      'active_app': 'tasks',  # hlavne menu
                      'task_set': task_set,  # aktualna sada
                      'sets': sets,  # vsetky sady
                      'style': 'graph',  # styl zobrazovania sady
                  },
                  )