[Scodoc-devel] [SVN] Scolar : [1566] Amelioration recherche etudiants:

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Dim 18 Sep 15:50:22 CEST 2016


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160918/a1398b54/attachment.html>
-------------- section suivante --------------
Modified: branches/ScoDoc7/html_sidebar.py
===================================================================
--- branches/ScoDoc7/html_sidebar.py	2016-09-13 11:52:53 UTC (rev 1565)
+++ branches/ScoDoc7/html_sidebar.py	2016-09-18 13:50:22 UTC (rev 1566)
@@ -77,7 +77,7 @@
           sidebar_common(context, REQUEST) ]
     
     H.append("""<div class="box-chercheetud">Chercher étudiant:<br/>
-<form action="%(ScoURL)s/search_etud_in_dept">
+<form id="form-chercheetud" action="%(ScoURL)s/search_etud_in_dept">
 <div><input type="text" size="12" id="in-expnom" name="expnom"></input></div>
 </form></div>
 <div class="etud-insidebar">

Modified: branches/ScoDoc7/sco_find_etud.py
===================================================================
--- branches/ScoDoc7/sco_find_etud.py	2016-09-13 11:52:53 UTC (rev 1565)
+++ branches/ScoDoc7/sco_find_etud.py	2016-09-18 13:50:22 UTC (rev 1566)
@@ -86,7 +86,7 @@
     REQUEST = None
     ):
     """Page recherche d'un etudiant
-    expnom est un regexp sur le nom
+    expnom est un regexp sur le nom ou un code_nip
     dest_url est la page sur laquelle on sera redirigé après choix
     parameters spécifie des arguments additionnels à passer à l'URL (en plus de etudid)
     """
@@ -107,7 +107,10 @@
     H = []
     if title:
         H.append('<h2>%s</h2>'%title)
-    if expnom:
+    
+    if is_valid_code_nip(expnom):
+        etuds = search_etuds_infos(context, code_nip=expnom, REQUEST=REQUEST)
+    elif expnom:
         etuds = search_etuds_infos(context, expnom=expnom, REQUEST=REQUEST)
     else:
         etuds = []
@@ -129,8 +132,9 @@
             e['_nomprenom_td_attrs'] = 'id="%s" class="etudinfo"' % (e['etudid'])
             sco_groups.etud_add_group_infos(context, e, e['cursem'])
 
-        tab = GenTable( columns_ids=('nomprenom', 'inscription', 'groupes'),
+        tab = GenTable( columns_ids=('nomprenom', 'code_nip', 'inscription', 'groupes'),
                         titles={ 'nomprenom' : 'Etudiant',
+                                 'code_nip' : 'NIP',
                                  'inscription' : 'Inscription', 
                                  'groupes' : 'Groupes' },
                         rows = etuds,
@@ -147,7 +151,7 @@
         H.append('<h2 style="color: red;">Aucun résultat pour "%s".</h2>' % expnom )
         add_headers = True
         no_side_bar = False
-    H.append("""<p class="help">La recherche porte sur tout ou partie du NOM de l'étudiant</p>""")
+    H.append("""<p class="help">La recherche porte sur tout ou partie du NOM ou du NIP de l'étudiant</p>""")
     if add_headers:
         return context.sco_header(REQUEST, page_title='Choix d\'un étudiant', 
                                init_qtip = True,
@@ -173,23 +177,38 @@
 
 def search_etud_by_name(context, term, REQUEST=None):
     """Recherche noms étudiants par début du nom, pour autocomplete
+    Accepte aussi un début de code NIP (au moins 6 caractères)
     Renvoie une liste de nom en JSON
     """
     cnx = context.GetDBConnexion()
+    may_be_nip = is_valid_code_nip(term)
     #term = strupper(term) # conserve les accents
     term = term.upper()
-    if not ALPHANUM_EXP.match(term): # mais n'autorise pas les accents ;-)
+    if (not ALPHANUM_EXP.match(term.decode(SCO_ENCODING)) #  n'autorise pas les caractères spéciaux
+        and not may_be_nip):
         data = []
     else:
-        r = SimpleDictFetch(
-            context, 
-            "SELECT nom, prenom FROM identite WHERE nom LIKE %(beginning)s", 
-            {'beginning' : term+'%'})
-        data = [ { 
-            'label' : '%s %s' % (x['nom'], scolars.format_prenom(x['prenom'])),
-            'value' : x['nom'] 
-            }
-            for x in r ]
+        if may_be_nip:
+            r = SimpleDictFetch(
+                context, 
+                "SELECT nom, prenom, code_nip FROM identite WHERE code_nip LIKE %(beginning)s", 
+                {'beginning' : term+'%'})
+            data = [ { 
+                'label' : '%s %s %s' % (x['code_nip'], x['nom'], scolars.format_prenom(x['prenom'])),
+                'value' : x['code_nip'] 
+                }
+                for x in r ]
+        else:
+            r = SimpleDictFetch(
+                context, 
+                "SELECT nom, prenom FROM identite WHERE nom LIKE %(beginning)s", 
+                {'beginning' : term+'%'})
+        
+            data = [ { 
+                'label' : '%s %s' % (x['nom'], scolars.format_prenom(x['prenom'])),
+                'value' : x['nom'] 
+                }
+                for x in r ]
     #log(data)
     return sendJSON(REQUEST, data)
     

Modified: branches/ScoDoc7/sco_tag_module.py
===================================================================
--- branches/ScoDoc7/sco_tag_module.py	2016-09-13 11:52:53 UTC (rev 1565)
+++ branches/ScoDoc7/sco_tag_module.py	2016-09-18 13:50:22 UTC (rev 1566)
@@ -150,7 +150,7 @@
     """List all used tag names (for auto-completion)"""
     # restrict charset to avoid injections
     log('module_tag_search %s' % term)
-    if not ALPHANUM_EXP.match(term):
+    if not ALPHANUM_EXP.match(term.decode(SCO_ENCODING)):
         data = []
     else:
         r = SimpleDictFetch(
@@ -210,7 +210,7 @@
                 moy = nt.get_etud_mod_moy(modimpl['moduleimpl_id'], etudid) # ou NI si non inscrit
                 R.append( {
                     'sem' : sem,
-                    'moy' : moy, # valuer réelle, ou NI (non inscrit au module ou NA0 (pas de note)
+                    'moy' : moy, # valeur réelle, ou NI (non inscrit au module ou NA0 (pas de note)
                     'moduleimpl' : modimpl,
                     'tags' : tags
                     } )

Modified: branches/ScoDoc7/sco_utils.py
===================================================================
--- branches/ScoDoc7/sco_utils.py	2016-09-13 11:52:53 UTC (rev 1565)
+++ branches/ScoDoc7/sco_utils.py	2016-09-18 13:50:22 UTC (rev 1566)
@@ -366,8 +366,13 @@
 
 # Expressions used to check noms/prenoms
 FORBIDDEN_CHARS_EXP = re.compile( r'[*\|~\(\)\\]' )
-ALPHANUM_EXP = re.compile('^[a-zA-Z0-9_\-]+$')
+ALPHANUM_EXP = re.compile('^[\w-]+$', re.UNICODE)
 
+def is_valid_code_nip(s):
+    """True si s peut être un code NIP: au moins 6 chiffres décimaux
+    """
+    return re.match(r'^[0-9]{6,32}$', s)
+
 def strnone(s):
     "convert s to string, '' if s is false"
     if s:

Modified: branches/ScoDoc7/static/js/scodoc.js
===================================================================
--- branches/ScoDoc7/static/js/scodoc.js	2016-09-13 11:52:53 UTC (rev 1565)
+++ branches/ScoDoc7/static/js/scodoc.js	2016-09-18 13:50:22 UTC (rev 1566)
@@ -8,7 +8,10 @@
             delay: 300, // wait 300ms before suggestions
             minLength: 2, // min nb of chars before suggest
             position: { collision: 'flip' }, // automatic menu position up/down
-            source: "search_etud_by_name"
+            source: "search_etud_by_name",
+            select: function(event, ui) { 
+                $("#form-chercheetud").submit(); 
+            }
         });    
     
     // Date picker


Plus d'informations sur la liste de diffusion Scodoc-devel