Exemple #1
0
def ajout_competence(request):
    POST=request.POST
    if not ('id_parent' in POST and 'tree_parent' in POST and 'graphe_parent' in POST and 'newName' in POST):
        return {'success':False,'msg':u'Clés manquantes.'}
    id=POST['id_parent']
    tree=POST['tree_parent']
    graphe=POST['graphe_parent']
    newName=POST['newName']
    if id=='src' and request.user.has_perm('application.is_admin'):
        # on rajoute une racine
        comp_ajout=Competence.add_root(nom=newName,user_id=request.user.id)
        return {'success':True,'id':comp_ajout.id,'liste':[]}
        
    try:
        comp=Competence.objects.get(id=id)
    except:
        return {'success':False,'msg':u'Compétence %s (%s) inexistante' % (newName,id)}
    if (comp.user==None) or (comp.user==request.user) or request.user.has_perm('application.is_admin'):
        #user=comp.user
        user=request.user
        comp_ajout=comp.add_child(nom=newName,user=user)
        #mise à jour des graphes
        cibles=Graphe_competences.objects.filter(competence__id=id)
        liste=[]
        for comp in cibles:
            c=comp.add_child(competence_id=comp_ajout.id,tree_id=tree,user=user)
            liste.append(comp.id)
        return {'success':True,'id':comp_ajout.id,'liste':liste}
    return {'success':False,'msg':u'Vous n\'avez pas les permissions sur cette compétence.'}
Exemple #2
0
 def save_model2(self,request,obj,form):
     ''' sauvegarde du modèle en construisant l'arbre '''
     try:
         parent=Competence.objects.get(id=form.data['parent'])
     except (Competence.DoesNotExist, ValueError):
         competence=Competence.add_root(nom=obj.nom,abbrev=obj.abbrev,description=obj.description)
     else:
         competence=parent.add_child(nom=obj.nom,abbrev=obj.abbrev,description=obj.description)
     return competence
Exemple #3
0
def liste_piliers(request):
    #TODO : envois liste pilier d'un arbre + définir dans l'arbre s'il a des piliers?
    comps=Competence.objects.get(nom="segpa").get_children() | Competence.get_root_nodes()
    #préparation de la sortie en JSON
    retour={'identifier':'id',
            'label':'nom',
            'items':[]}
    for c in comps:
        item={}
        item['id']=c.id
        item['nom']='...'*(c.depth-1)+c.nom
        item['text']=c.nom
        item['chemin']=c.chemin
        item['depth']=c.depth
        item['type']='noeud'
        retour['items'].append(item)
    return retour['items']
Exemple #4
0
def retour_branche(request):
    '''revoie la branche de l arbre des compétences définie par GET['node']
    si 'lazy'=false, renvoie la branche en profondeur (tous les descendants)
    '''
    
    def parcours_branche(noeud,iter_noeud):
        ''' parcourt la branche à partir de "noeud", retour json'''
        item={}
        item['id']=noeud.id
        item['text']=noeud.nom
        item['chemin']=noeud.chemin
        item['depth']=noeud.depth
        #item['leaf']=noeud.is_leaf()
        item['leaf']=False
        if not noeud.is_leaf():
            #c'est un noeud avec des fils
            item['children']=[]
            anc_noeud=noeud
            encore=True
            
            # parcours des fils            
            while encore:
                noeud=iter_noeud.next() # inutile de faire un try, "encore" nous suffit
                encore=(noeud.rgt<anc_noeud.rgt-1)
                # noeud.is_child_of(anc_noeud) fait une requête. On remplace
                # par un test direct
                #TODO: modifier la class NS
                # remarque : ici pas besoin de tester lft (parcours gauche à droite)
                if (noeud.rgt<anc_noeud.rgt) and (noeud.depth==anc_noeud.depth+1):
                    item['children'].append(parcours_branche(noeud,iter_noeud))
        return item
    
    envois_graphe=('graphe' in request.GET )
    
    if request.GET['node']=='ux':
        return []
    if request.GET['node']=='src':
        is_root=True
        if 'pos' in request.GET and request.GET['pos']=='gauche':
            est_graphe=True
            #TODO: intégrer le select_related a get_root_nodes (comme pour get_desc)
            comps=Graphe_competences.get_root_nodes().select_related('competence__nom')
            #comps=Graphe_competences.get_root_nodes(select_related='competence__nom')
        else :
            est_graphe=False
            if envois_graphe:
                #select_related ne marche pas sur les ..._set
                #comps=Competence.get_root_nodes().select_related('graphe_competences_set')                
                comps=Competence.get_root_nodes_infos_graphe()
                
            else:
                comps=Competence.get_root_nodes().order_by('tree_id')                
    else:
        is_root=False
        if 'pos' in request.GET and request.GET['pos']=='gauche':
            est_graphe=True
            comps=Graphe_competences.objects.get(id=request.GET['node']).get_children().select_related('competence__nom')
        else:
            est_graphe=False
            if envois_graphe:
                #comps=Competence.objects.get(id=request.GET['node']).get_children().select_related('graphe_competences_set')
                comps=Competence.objects.get(id=request.GET['node']).get_children_infos_graphe()
            else:
                comps=Competence.objects.get(id=request.GET['node']).get_children()
    items=[]
    lazy=True
    if request.GET.has_key('lazy'):
        lazy=request.GET['lazy']!='False'
    if not lazy:
        for c in comps:
            iter_arbre=Competence.get_tree(c).iterator()
            items.append(parcours_branche(iter_arbre.next(),iter_arbre))
    else:
        for c in comps:
            item={}
            item['id']=c.id
            item['is_root']=is_root
            
            if est_graphe:
                item['text']='(%2d) %s '%(c.graphe,c.competence.nom)
                item['nom']=c.competence.nom
                item['competence_id']=c.competence.id
                item['graphe']=c.graphe
                item['niveau']=c.niveau
                item['user']=c.user_id
            else:
                item['text']=c.nom
                item['nom']=c.nom
                item['user']=c.user_id
            #item['leaf']=c.is_leaf()
            item['leaf']=False
            item['feuille']=c.is_leaf()
            if c.is_leaf(): item['expandable']=True
            item['tree']=c.tree_id
            if envois_graphe :
                if c.graphe is not None : 
                    #item['text']='(%2d) %s' %(c.niveau,item['text'])
                    liste_graphes=c.liste_graphes.split(',')
                    if len(liste_graphes)>1:
                        #il y a des liens de créés
                        item['liens']='%s' % (len(liste_graphes)-1)
                        if request.user.has_perm('application.est_admin'):
                            if c.user_id is None:
                                item['iconCls']='icon-group_link'
                            elif c.user_id==request.user.id:
                                item['iconCls']='icon-user_suit'
                            else:
                                item['iconCls']='icon-folder_link'
                        elif c.user_id==request.user.id or c.user_id is None:
                            if c.depth==1:
                                item['iconCls']='icon-user'
                            else:
                                item['iconCls']='icon-folder_link'
                        else:
                            if c.depth==1:
                                item['iconCls']='icon-folder'
                            else:
                                item['iconCls']='icon-folder_link'
                        liste_graphes.remove(str(c.graphe))
                        liste=', '.join(liste_graphes)
                        item['qtip']='Des liens vers d\'autres graphes existent ('+liste+')'
                    else:
                        if request.user.has_perm('application.est_admin'):
                            if c.user_id is None:
                                item['iconCls']='icon-group'
                            elif c.user_id==request.user.id:
                                item['iconCls']='icon-user_suit'
                            else:
                                item['iconCls']='icon-user_green'
                        elif c.user_id==request.user.id or c.user_id is None:
                            item['iconCls']='icon-user'                            
                        else:
                            item['iconCls']='icon-folder'
                        item['qtip']='Aucun lien n\'a encore été créé'
                        item['liens']=None
                else:
                    item['iconCls']='icon-folder_error'
                    item['qtip']='Cette compétence ne fait pas partie d`un graphe'
                    item['qtipTitle']='Attention!'
                    
                item['liens_graphe']=c.liste_graphes
                item['graphe']=c.graphe      
                item['niveau']=c.niveau
            if est_graphe:                
                item['type_lien']=c.type_lien
                item['qtipTitle']='Lien:'
                if c.type_lien == 'E':
                    item['iconCls']='icon-arrow_right'
                    item['qtip']='Equivalencegfh'
                elif c.type_lien=='D':
                    item['iconCls']='icon-arrow_divide'
                    item['qtip']='Décomposition'
                else:
                    item['iconCls']='icon-text_heading_%s' % (operator.mod(c.niveau,6)+1)
                    #item['overCls']='cssGras' -> marche po
                    item['qtip']='pas de lien mais un qtip sur %s' % item['id']
                    item['qtitle']='Truc:'
            if request.GET.has_key('pos'): 
                item['pos']=request.GET['pos']
                #if item['pos']=='droite'and c.tree_id==5: item['iconCls']='icon-application_add' 
            items.append(item)
    return items