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), )
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 }, )
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), )
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 }, )