[Scodoc-devel] [SVN] Scolar : [1367] Fixed html entities in URL query strings

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Mar 1 Avr 22:28:05 CEST 2014


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20140401/2b395c81/attachment-0001.html>
-------------- section suivante --------------
Modified: branches/ScoDoc7/ZAbsences.py
===================================================================
--- branches/ScoDoc7/ZAbsences.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/ZAbsences.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -812,7 +812,7 @@
         if not groups_infos.members:
             return self.sco_header(page_title='Saisie des absences',REQUEST=REQUEST) + '<h3>Aucun étudiant !</h3>' + self.sco_footer(REQUEST)
         
-        base_url='SignaleAbsenceGrHebdo?datelundi=%s&%s&destination=%s' % (datelundi, groups_infos.groups_query_args, urllib.quote(destination))
+        base_url='SignaleAbsenceGrHebdo?datelundi=%s&%s&destination=%s' % (datelundi, groups_infos.groups_query_args, urllib.quote(destination))
         
         formsemestre_id = groups_infos.formsemestre_id
         etuds = [ self.getEtudInfo(etudid=m['etudid'],filled=True)[0] for m in groups_infos.members ]
@@ -883,7 +883,7 @@
             sel = 'selected' # aucun module specifie
         
         H.append("""
- Module concerné par ces absences (optionnel): <select id="moduleimpl_id" name="moduleimpl_id" onchange="document.location='%(url)s&moduleimpl_id='+document.getElementById('moduleimpl_id').value">
+ Module concerné par ces absences (optionnel): <select id="moduleimpl_id" name="moduleimpl_id" onchange="document.location='%(url)s&moduleimpl_id='+document.getElementById('moduleimpl_id').value">
     <option value="" %(sel)s>non spécifié</option>
     %(menu_module)s
     </select>
@@ -914,8 +914,8 @@
                 
         if not moduleimpl_id:
             moduleimp_id = None
-        base_url_noweeks='SignaleAbsenceGrSemestre?datedebut=%s&datefin=%s&%s&destination=%s' % (datedebut, datefin, groups_infos.groups_query_args, urllib.quote(destination))
-        base_url = base_url_noweeks + '&nbweeks=%s'%nbweeks # sans le moduleimpl_id
+        base_url_noweeks='SignaleAbsenceGrSemestre?datedebut=%s&datefin=%s&%s&destination=%s' % (datedebut, datefin, groups_infos.groups_query_args, urllib.quote(destination))
+        base_url = base_url_noweeks + '&nbweeks=%s'%nbweeks # sans le moduleimpl_id
 
         if etuds: 
             nt = self.Notes._getNotesCache().get_NotesTable(self.Notes, formsemestre_id)
@@ -947,9 +947,9 @@
                 dates = dates[-nbweeks:]
                 msg = 'Montrer toutes les semaines'
                 nwl = 0
-        url_link_semaines = base_url_noweeks + '&nbweeks=%s'%nwl
+        url_link_semaines = base_url_noweeks + '&nbweeks=%s'%nwl
         if moduleimpl_id:
-            url_link_semaines += '&moduleimpl_id=' + moduleimpl_id
+            url_link_semaines += '&moduleimpl_id=' + moduleimpl_id
         #
         colnames = [ str(x) for x in dates ]
         dates = [ x.ISO() for x in dates ]
@@ -1012,7 +1012,7 @@
             else:
                 sel = 'selected' # aucun module specifie
             H.append("""<p>
-    Module concerné par ces absences (optionnel): <select id="moduleimpl_id" name="moduleimpl_id" onchange="document.location='%(url)s&moduleimpl_id='+document.getElementById('moduleimpl_id').value">
+    Module concerné par ces absences (optionnel): <select id="moduleimpl_id" name="moduleimpl_id" onchange="document.location='%(url)s&moduleimpl_id='+document.getElementById('moduleimpl_id').value">
     <option value="" %(sel)s>non spécifié</option>
     %(menu_module)s
     </select>
@@ -1210,7 +1210,7 @@
         if format == 'html':
             for a in absnonjust:
                 a['justlink'] = '<em>justifier</em>'
-                a['_justlink_target'] = 'doJustifAbsence?etudid=%s&datedebut=%s&datefin=%s&demijournee=%s'%(etudid, a['datedmy'], a['datedmy'], a['matin_o'])
+                a['_justlink_target'] = 'doJustifAbsence?etudid=%s&datedebut=%s&datefin=%s&demijournee=%s'%(etudid, a['datedmy'], a['datedmy'], a['matin_o'])
         #
         titles={'datedmy' : 'Date', 'matin' : '', 'exams' : 'Examens ce jour', 'justlink' : '', 'description' : 'Modules', 'motif': 'Motif' }
         columns_ids=['datedmy', 'matin']
@@ -1294,7 +1294,7 @@
                                                                 with_page_header=False) 
                        +  '<p>Période du %s au %s (nombre de <b>demi-journées</b>)<br/>' % (debut, fin),
                        
-                       base_url = '%s&formsemestre_id=%s&debut=%s&fin=%s' % (groups_infos.base_url, formsemestre_id, debut, fin),
+                       base_url = '%s&formsemestre_id=%s&debut=%s&fin=%s' % (groups_infos.base_url, formsemestre_id, debut, fin),
                        filename='etat_abs_'+make_filename('%s de %s'%(groups_infos.groups_filename, sem['titreannee'])),
                        caption=title,
                        html_next_section="""</table>
@@ -1461,7 +1461,7 @@
                     b['etat_str'] = 'à justifier'
                 b['_etat_str_target'] = 'ProcessBilletAbsenceForm?billet_id=%s' % b['billet_id']
                 if etud:
-                    b['_etat_str_target'] += '&etudid=%s' % etud['etudid']
+                    b['_etat_str_target'] += '&etudid=%s' % etud['etudid']
                 b['_billet_id_target'] = b['_etat_str_target']
             else:
                 b['etat_str'] = 'ok'

Modified: branches/ScoDoc7/ZNotes.py
===================================================================
--- branches/ScoDoc7/ZNotes.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/ZNotes.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -431,7 +431,7 @@
         sco_news.add(self, REQUEST, typ=NEWS_FORM, object=new_id,
                      text='Nouvelle version de la formation %(acronyme)s'%F)
         if redirect:
-            return REQUEST.RESPONSE.redirect("ue_list?formation_id=" + new_id + '&msg=Nouvelle version !')
+            return REQUEST.RESPONSE.redirect("ue_list?formation_id=" + new_id + '&msg=Nouvelle version !')
         else:
             return new_id, modules_old2new, ues_old2new
         
@@ -1137,7 +1137,7 @@
               '<ul><li><b>%s</b> (responsable)</li>' % login2display.get(M['responsable_id'],M['responsable_id'])
               ]
         for ens in M['ens']:
-            H.append('<li>%s (<a class="stdlink" href="edit_enseignants_form_delete?moduleimpl_id=%s&ens_id=%s">supprimer</a>)</li>' %
+            H.append('<li>%s (<a class="stdlink" href="edit_enseignants_form_delete?moduleimpl_id=%s&ens_id=%s">supprimer</a>)</li>' %
                      (login2display.get(ens['ens_id'],ens['ens_id']),
                       moduleimpl_id, ens['ens_id']))
         H.append('</ul>')
@@ -1145,7 +1145,7 @@
         saisir et modifier toutes les notes des évaluations de ce module.
         </p>
         <p class="help">Pour changer le responsable du module, passez par la
-        page "<a class="stdlink" href="formsemestre_editwithmodules?formation_id=%s&formsemestre_id=%s">Modification du semestre</a>", accessible uniquement au responsable de la formation (chef de département)
+        page "<a class="stdlink" href="formsemestre_editwithmodules?formation_id=%s&formsemestre_id=%s">Modification du semestre</a>", accessible uniquement au responsable de la formation (chef de département)
         </p>
         """ % (sem['formation_id'],M['formsemestre_id'])
         
@@ -1244,7 +1244,7 @@
                                        'responsable_id' : responsable_id },
                                      formsemestre_id=sem['formsemestre_id']
                                      )
-            return REQUEST.RESPONSE.redirect('moduleimpl_status?moduleimpl_id='+moduleimpl_id+'&head_message=responsable%20modifié')
+            return REQUEST.RESPONSE.redirect('moduleimpl_status?moduleimpl_id='+moduleimpl_id+'&head_message=responsable%20modifié')
 
     _expr_help = """<p class="help">Expérimental: formule de calcul de la moyenne %(target)s</p>
         <p class="help">Dans la formule, les variables suivantes sont définies:</p>
@@ -1299,7 +1299,7 @@
                                        'computation_expr' : tf[2]['computation_expr'] },
                                      formsemestre_id=sem['formsemestre_id'])
             self._inval_cache(formsemestre_id=sem['formsemestre_id']) #> modif regle calcul
-            return REQUEST.RESPONSE.redirect('moduleimpl_status?moduleimpl_id='+moduleimpl_id+'&head_message=règle%20de%20calcul%20modifiée')
+            return REQUEST.RESPONSE.redirect('moduleimpl_status?moduleimpl_id='+moduleimpl_id+'&head_message=règle%20de%20calcul%20modifiée')
     
     
     security.declareProtected(ScoView, 'view_module_abs')
@@ -1401,7 +1401,7 @@
                 sco_compute_moy.formsemestre_ue_computation_expr_create(cnx, tf[2])
             
             self._inval_cache(formsemestre_id=formsemestre_id) #> modif regle calcul
-            return REQUEST.RESPONSE.redirect('formsemestre_status?formsemestre_id='+formsemestre_id+'&head_message=règle%20de%20calcul%20modifiée')
+            return REQUEST.RESPONSE.redirect('formsemestre_status?formsemestre_id='+formsemestre_id+'&head_message=règle%20de%20calcul%20modifiée')
 
     security.declareProtected(ScoView, 'formsemestre_enseignants_list')
     def formsemestre_enseignants_list(self, REQUEST, formsemestre_id, format='html'):
@@ -2067,7 +2067,7 @@
             submitlabel = 'Modifier les données'
             if readonly:
                 action = 'E'
-                link='  <span class="evallink"><a class="stdlink" href="evaluation_listenotes?moduleimpl_id=%s">voir toutes les notes du module</a></span>'%M['moduleimpl_id']
+                link=' &nbsp;<span class="evallink"><a class="stdlink" href="evaluation_listenotes?moduleimpl_id=%s">voir toutes les notes du module</a></span>'%M['moduleimpl_id']
             else:
                 action = 'Modification d\'une é'
                 link =''
@@ -2433,7 +2433,7 @@
         if not can_edit_app:
             raise AccessDenied("vous n'avez pas le droit d'ajouter une appreciation")
         #
-        bull_url = 'formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s' % (formsemestre_id,etudid)
+        bull_url = 'formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s' % (formsemestre_id,etudid)
         if suppress:
             scolars.appreciations_delete( cnx, id )
             logdb(REQUEST, cnx, method='appreciation_suppress',
@@ -2634,11 +2634,11 @@
                 """ % (sem['titre_num'],sem['date_debut'],sem['date_fin'], etud['nomprenom'],existing),
                 OK = "Supprimer", 
                 dest_url="", REQUEST=REQUEST,
-                cancel_url="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s" % (formsemestre_id, etudid),
+                cancel_url="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s" % (formsemestre_id, etudid),
                 parameters={'etudid':etudid, 'formsemestre_id' : formsemestre_id})
         
         sco_formsemestre_validation.formsemestre_validation_suppress_etud(self, formsemestre_id, etudid)
-        return REQUEST.RESPONSE.redirect( self.ScoURL()+'/Notes/formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&head_message=Décision%%20supprimée' % (formsemestre_id,etudid))
+        return REQUEST.RESPONSE.redirect( self.ScoURL()+'/Notes/formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&head_message=Décision%%20supprimée' % (formsemestre_id,etudid))
     
     # ------------- PV de JURY et archives
     security.declareProtected(ScoView, 'formsemestre_pvjury')

Modified: branches/ScoDoc7/ZScoUsers.py
===================================================================
--- branches/ScoDoc7/ZScoUsers.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/ZScoUsers.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -453,7 +453,7 @@
              <li><a class="stdlink" href="form_change_password?user_name=%(user_name)s">changer le mot de passe</a></li>""" % info[0])
             if authuser.has_permission(ScoUsersAdmin,self):
                 H.append("""
-             <li><a  class="stdlink" href="create_user_form?user_name=%(user_name)s&edit=1">modifier/déactiver ce compte</a></li>
+             <li><a  class="stdlink" href="create_user_form?user_name=%(user_name)s&edit=1">modifier/déactiver ce compte</a></li>
              <li><a  class="stdlink" href="delete_user_form?user_name=%(user_name)s">supprimer cet utilisateur</a> <em>(à n'utiliser qu'en cas d'erreur !)</em></li>
              """ % info[0])
                 

Modified: branches/ScoDoc7/ZScolar.py
===================================================================
--- branches/ScoDoc7/ZScolar.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/ZScolar.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -734,7 +734,7 @@
                 FA.append('<option value="%s">%s</option>' % (date, jour) )
                 date = date.next()
             FA.append('</select>')
-            FA.append('<a href="Absences/EtatAbsencesGr?group_ids=%%(group_id)s&debut=%(date_debut)s&fin=%(date_fin)s">état</a>' % sem )
+            FA.append('<a href="Absences/EtatAbsencesGr?group_ids=%%(group_id)s&debut=%(date_debut)s&fin=%(date_fin)s">état</a>' % sem )
             FA.append('</form></td>')
             FormAbs = '\n'.join(FA)
         else:
@@ -761,8 +761,8 @@
                     H.append("""<td>
                         <a href="%(url)s/groups_view?group_ids=%(group_id)s">%(label)s</a>
                         </td><td>
-                        (<a href="%(url)s/groups_view?&group_ids=%(group_id)s&format=xls">format tableur</a>)
-                        <a href="%(url)s/groups_view?curtab=tab-photos&group_ids=%(group_id)s&etat=I">Photos</a>
+                        (<a href="%(url)s/groups_view?group_ids=%(group_id)s&format=xls">format tableur</a>)
+                        <a href="%(url)s/groups_view?curtab=tab-photos&group_ids=%(group_id)s&etat=I">Photos</a>
                         </td>""" % group )
                     H.append('<td>(%d étudiants)</td>' % n_members )
 
@@ -862,7 +862,7 @@
                 v = REQUEST.form.get(key,False)
                 if v:
                     q.append( '%s=%s' % (key,v) )
-        query_string = '&'.join(q)
+        query_string = '&'.join(q)
         
         no_side_bar = True
         H = []
@@ -874,7 +874,7 @@
             etuds = []
         if len(etuds) == 1:
             # va directement a la destination
-            return REQUEST.RESPONSE.redirect( dest_url + '?etudid=%s&' % etuds[0]['etudid'] + query_string )
+            return REQUEST.RESPONSE.redirect( dest_url + '?etudid=%s&' % etuds[0]['etudid'] + query_string )
 
         if len(etuds) > 0:
             # Choix dans la liste des résultats:
@@ -883,7 +883,7 @@
                                           parameters=parameters, parameters_keys=parameters_keys, REQUEST=REQUEST, title="Autre recherche"))
 
             for e in etuds:
-                target = dest_url + '?etudid=%s&' % e['etudid'] + query_string
+                target = dest_url + '?etudid=%s&' % e['etudid'] + query_string
                 e['_nomprenom_target'] = target
                 e['inscription_target'] = target
                 e['_nomprenom_td_attrs'] = 'id="%s" class="etudinfo"' % (e['etudid'])
@@ -1201,7 +1201,7 @@
         logdb(REQUEST,cnx,method='SuppressAnnotation', etudid=etudid )
         scolars.etud_annotations_delete(cnx, annotation_id)
         
-        REQUEST.RESPONSE.redirect('ficheEtud?etudid=%s&head_message=Annotation%%20supprimée'%(etudid))
+        REQUEST.RESPONSE.redirect('ficheEtud?etudid=%s&head_message=Annotation%%20supprimée'%(etudid))
     
     security.declareProtected(ScoEtudChangeAdr, 'formChangeCoordonnees')
     def formChangeCoordonnees(self,etudid,REQUEST):
@@ -2349,7 +2349,7 @@
           '<h2>Erreur !</h2>',
           '<p>', msg, '</p>' ]
     if DeptId:
-        H.append('<p><a href="delete_dept?DeptId=%s&force=1">Supprimer le dossier %s</a>(très recommandé !)</p>'
+        H.append('<p><a href="delete_dept?DeptId=%s&force=1">Supprimer le dossier %s</a>(très recommandé !)</p>'
                  % (DeptId,DeptId) )
     H.append(context.standard_html_footer(context))
     return '\n'.join(H)

Modified: branches/ScoDoc7/gen_tables.py
===================================================================
--- branches/ScoDoc7/gen_tables.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/gen_tables.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -366,11 +366,11 @@
                 H.append(caption)
             if self.base_url:
                 if self.xls_link:
-                    H.append(' <a href="%s&format=xls">%s</a>'%(self.base_url,ICON_XLS))
+                    H.append(' <a href="%s&format=xls">%s</a>'%(self.base_url,ICON_XLS))
                 if self.xls_link and self.pdf_link:
                     H.append('  ')
                 if self.pdf_link:
-                    H.append(' <a href="%s&format=pdf">%s</a>'%(self.base_url,ICON_PDF))
+                    H.append(' <a href="%s&format=pdf">%s</a>'%(self.base_url,ICON_PDF))
             H.append('</p>')
             
         H.append(self.html_next_section)

Modified: branches/ScoDoc7/sco_abs_views.py
===================================================================
--- branches/ScoDoc7/sco_abs_views.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_abs_views.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -513,8 +513,8 @@
         etudid, datedebut, with_evals=with_evals, format=format )
 
     if REQUEST:
-        base_url_nj =  '%s?etudid=%s&absjust_only=0' % (REQUEST.URL0, etudid)
-        base_url_j = '%s?etudid=%s&absjust_only=1' % (REQUEST.URL0, etudid)
+        base_url_nj =  '%s?etudid=%s&absjust_only=0' % (REQUEST.URL0, etudid)
+        base_url_j = '%s?etudid=%s&absjust_only=1' % (REQUEST.URL0, etudid)
     else:
         base_url_nj = base_url_j = ''
     tab_absnonjust = GenTable( titles=titles, columns_ids=columns_ids, rows = absnonjust,

Modified: branches/ScoDoc7/sco_archives.py
===================================================================
--- branches/ScoDoc7/sco_archives.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_archives.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -339,7 +339,7 @@
         msg = 'Nouvelle%20archive%20créée'
     
     # submitted or cancelled:
-    return REQUEST.RESPONSE.redirect( "formsemestre_list_archives?formsemestre_id=%s&head_message=%s" %(formsemestre_id, msg))
+    return REQUEST.RESPONSE.redirect( "formsemestre_list_archives?formsemestre_id=%s&head_message=%s" %(formsemestre_id, msg))
 
 def formsemestre_list_archives(context, REQUEST, formsemestre_id):
     """Page listing archives
@@ -360,9 +360,9 @@
         H.append('<ul>')
         for a in L:
             archive_name = PVArchive.get_archive_name(a['archive_id'])
-            H.append('<li>%s : <em>%s</em> (<a href="formsemestre_delete_archive?formsemestre_id=%s&archive_name=%s">supprimer</a>)<ul>' % (a['date'].strftime('%d/%m/%Y %H:%M'), a['description'], formsemestre_id, archive_name))
+            H.append('<li>%s : <em>%s</em> (<a href="formsemestre_delete_archive?formsemestre_id=%s&archive_name=%s">supprimer</a>)<ul>' % (a['date'].strftime('%d/%m/%Y %H:%M'), a['description'], formsemestre_id, archive_name))
             for filename in a['content']:
-                H.append('<li><a href="formsemestre_get_archived_file?formsemestre_id=%s&archive_name=%s&filename=%s">%s</a></li>' % (formsemestre_id, archive_name, filename, filename))
+                H.append('<li><a href="formsemestre_get_archived_file?formsemestre_id=%s&archive_name=%s&filename=%s">%s</a></li>' % (formsemestre_id, archive_name, filename, filename))
             if not a['content']:
                 H.append('<li><em>aucun fichier !</em></li>')
             H.append('</ul></li>')
@@ -392,4 +392,4 @@
             parameters={'formsemestre_id' : formsemestre_id, 'archive_name' : archive_name })
     
     PVArchive.delete_archive(archive_id)
-    return REQUEST.RESPONSE.redirect(dest_url+'&head_message=Archive%20supprimée')
+    return REQUEST.RESPONSE.redirect(dest_url+'&head_message=Archive%20supprimée')

Modified: branches/ScoDoc7/sco_archives_etud.py
===================================================================
--- branches/ScoDoc7/sco_archives_etud.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_archives_etud.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -67,12 +67,12 @@
         H.append("""<li><span class ="etudarchive_descr" title="%s">%s</span>"""
                  % (a['date'].strftime('%d/%m/%Y %H:%M'), a['description']))
         for filename in a['content']:
-            H.append("""<a class="stdlink etudarchive_link" href="etud_get_archived_file?etudid=%s&archive_name=%s&filename=%s">%s</a>"""
+            H.append("""<a class="stdlink etudarchive_link" href="etud_get_archived_file?etudid=%s&archive_name=%s&filename=%s">%s</a>"""
                      % (etudid, archive_name, filename, filename))
         if not a['content']:
             H.append('<em>aucun fichier !</em>')
         if can_edit:
-            H.append('<span class="deletudarchive"><a class="smallbutton" href="etud_delete_archive?etudid=%s&archive_name=%s">%s</a></span>'
+            H.append('<span class="deletudarchive"><a class="smallbutton" href="etud_delete_archive?etudid=%s&archive_name=%s">%s</a></span>'
                      % (etudid, archive_name, delete_icon))
         else:
             H.append('<span class="deletudarchive">' + delete_disabled_icon + '</span>')
@@ -156,7 +156,7 @@
             parameters={'etudid' : etudid, 'archive_name' : archive_name })
     
     EtudsArchive.delete_archive(archive_id)
-    return REQUEST.RESPONSE.redirect(dest_url+'&head_message=Archive%20supprimée')
+    return REQUEST.RESPONSE.redirect(dest_url+'&head_message=Archive%20supprimée')
 
 def etud_get_archived_file(context, REQUEST, etudid, archive_name, filename):
     """Send file to client.

Modified: branches/ScoDoc7/sco_bulletins.py
===================================================================
--- branches/ScoDoc7/sco_bulletins.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_bulletins.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -228,7 +228,7 @@
         if ue_status['is_capitalized']:
             sem_origin = context.get_formsemestre(ue_status['formsemestre_id'])
             u['ue_descr_txt'] =  'Capitalisée le %s' % DateISOtoDMY(ue_status['event_date'])
-            u['ue_descr_html'] = '<a href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s" class="bull_link">%s</a>' % (sem_origin['formsemestre_id'], etudid, sem_origin['titreannee'], u['ue_descr_txt'])
+            u['ue_descr_html'] = '<a href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s" class="bull_link">%s</a>' % (sem_origin['formsemestre_id'], etudid, sem_origin['titreannee'], u['ue_descr_txt'])
             # log('cap details   %s' % ue_status['moy'])
             if ue_status['moy'] != 'NA' and ue_status['formsemestre_id']:
                 # detail des modules de l'UE capitalisee
@@ -340,7 +340,7 @@
                 mod['evaluations'].append(e)
                 if e['visibulletin'] == '1' or version == 'long':
                     e['name'] = e['description'] or 'le %s' % e['jour']
-                e['target_html'] = 'evaluation_listenotes?evaluation_id=%s&format=html&tf-submitted=1' % e['evaluation_id']
+                e['target_html'] = 'evaluation_listenotes?evaluation_id=%s&format=html&tf-submitted=1' % e['evaluation_id']
                 e['name_html'] = '<a class="bull_link" href="%s">%s</a>' % (e['target_html'], e['name'])
                 val = e['notes'].get(etudid, {'value':'NP'})['value'] # NA si etud demissionnaire
                 if val == 'NP':
@@ -366,7 +366,7 @@
                         e = e.copy()                        
                         mod['evaluations_incompletes'].append(e)
                         e['name'] = (e['description'] or '') + ' (%s)' % e['jour']
-                        e['target_html'] = 'evaluation_listenotes?evaluation_id=%s&format=html&tf-submitted=1' % e['evaluation_id']
+                        e['target_html'] = 'evaluation_listenotes?evaluation_id=%s&format=html&tf-submitted=1' % e['evaluation_id']
                         e['name_html'] = '<a class="bull_link" href="%s">%s</a>' % (e['target_html'], e['name'])
                         e['note_txt'] = e['note_html'] = ''
                         e['coef_txt'] = fmt_coef(e['coefficient'])
@@ -749,34 +749,34 @@
     
     menuBul = [
         { 'title' : 'Réglages bulletins',
-          'url' : 'formsemestre_edit_options?formsemestre_id=%s&target_url=%s' % (formsemestre_id, qurl),
+          'url' : 'formsemestre_edit_options?formsemestre_id=%s&target_url=%s' % (formsemestre_id, qurl),
           'enabled' : (uid == sem['responsable_id']) or authuser.has_permission(ScoImplement, context),
           },
         { 'title' : 'Version papier (pdf, format "%s")' % sco_bulletins_generator.bulletin_get_class_name_displayed(context, formsemestre_id),
-          'url' : url + '?formsemestre_id=%s&etudid=%s&format=pdf&version=%s' % (formsemestre_id,etudid,version),
+          'url' : url + '?formsemestre_id=%s&etudid=%s&format=pdf&version=%s' % (formsemestre_id,etudid,version),
           },
         { 'title' : "Envoi par mail à l'étudiant",
-          'url' : url + '?formsemestre_id=%s&etudid=%s&format=pdfmail&version=%s' % (formsemestre_id,etudid,version),
+          'url' : url + '?formsemestre_id=%s&etudid=%s&format=pdfmail&version=%s' % (formsemestre_id,etudid,version),
           'enabled' : etud['email'] and can_send_bulletin_by_mail(context, formsemestre_id, REQUEST) # possible slt si on a un mail...
           },
         { 'title' : 'Version XML',
-          'url' : url + '?formsemestre_id=%s&etudid=%s&format=xml&version=%s' % (formsemestre_id,etudid,version),
+          'url' : url + '?formsemestre_id=%s&etudid=%s&format=xml&version=%s' % (formsemestre_id,etudid,version),
           },
         { 'title' : 'Ajouter une appréciation',
-          'url' : 'appreciation_add_form?etudid=%s&formsemestre_id=%s' % (etudid, formsemestre_id),
+          'url' : 'appreciation_add_form?etudid=%s&formsemestre_id=%s' % (etudid, formsemestre_id),
           'enabled' : ((authuser == sem['responsable_id'])
                        or (authuser.has_permission(ScoEtudInscrit,context)))
           },
         { 'title' : "Enregistrer une validation d'UE antérieure",
-          'url' : 'formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s' % (etudid, formsemestre_id),
+          'url' : 'formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s' % (etudid, formsemestre_id),
           'enabled' : context.can_validate_sem(REQUEST, formsemestre_id)
           },
         { 'title' : 'Entrer décisions jury',
-          'url' : 'formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s'%(formsemestre_id,etudid),
+          'url' : 'formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s'%(formsemestre_id,etudid),
           'enabled' : context.can_validate_sem(REQUEST, formsemestre_id)
         },
         { 'title' : 'Editer PV jury',
-          'url' : 'formsemestre_pvjury_pdf?formsemestre_id=%s&etudid=%s' % (formsemestre_id,etudid),
+          'url' : 'formsemestre_pvjury_pdf?formsemestre_id=%s&etudid=%s' % (formsemestre_id,etudid),
           'enabled' : True
           }
         ]
@@ -784,7 +784,7 @@
     H.append("""<td class="bulletin_menubar"><div class="bulletin_menubar">""")
     H.append( sco_formsemestre_status.makeMenu( 'Autres opérations', menuBul, alone=True) )
     H.append("""</div></td>""")
-    H.append('<td> <a href="%s">%s</a></td>'%(url + '?formsemestre_id=%s&etudid=%s&format=pdf&version=%s'% (formsemestre_id,etudid,version),ICON_PDF))
+    H.append('<td> <a href="%s">%s</a></td>'%(url + '?formsemestre_id=%s&etudid=%s&format=pdf&version=%s'% (formsemestre_id,etudid,version),ICON_PDF))
     H.append("""</tr></table>""")
     #
     H.append("""</form></span></td><td class="bull_photo">

Modified: branches/ScoDoc7/sco_bulletins_legacy.py
===================================================================
--- branches/ScoDoc7/sco_bulletins_legacy.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_bulletins_legacy.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -243,13 +243,13 @@
             H.append('<p><b>Appréciations</b></p>')
         for app in I['appreciations_list']:
             if can_edit_app:
-                mlink = '<a class="stdlink" href="appreciation_add_form?id=%s">modifier</a> <a class="stdlink" href="appreciation_add_form?id=%s&suppress=1">supprimer</a>'%(app['id'],app['id'])
+                mlink = '<a class="stdlink" href="appreciation_add_form?id=%s">modifier</a> <a class="stdlink" href="appreciation_add_form?id=%s&suppress=1">supprimer</a>'%(app['id'],app['id'])
             else:
                 mlink = ''
             H.append('<p><span class="bull_appreciations_date">%s</span>%s<span class="bull_appreciations_link">%s</span></p>'
                          % (app['date'], app['comment'], mlink ) )
         if can_edit_app:
-            H.append('<p><a class="stdlink" href="appreciation_add_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s">Ajouter une appréciation</a></p>' % self.infos)
+            H.append('<p><a class="stdlink" href="appreciation_add_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s">Ajouter une appréciation</a></p>' % self.infos)
         H.append('</div>')
         # ---------------
         return '\n'.join(H)

Modified: branches/ScoDoc7/sco_bulletins_standard.py
===================================================================
--- branches/ScoDoc7/sco_bulletins_standard.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_bulletins_standard.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -124,13 +124,13 @@
         H.append('<div class="bull_appreciations">')
         for app in self.infos['appreciations_list']:
             if can_edit_app:
-                mlink = '<a class="stdlink" href="appreciation_add_form?id=%s">modifier</a> <a class="stdlink" href="appreciation_add_form?id=%s&suppress=1">supprimer</a>'%(app['id'],app['id'])
+                mlink = '<a class="stdlink" href="appreciation_add_form?id=%s">modifier</a> <a class="stdlink" href="appreciation_add_form?id=%s&suppress=1">supprimer</a>'%(app['id'],app['id'])
             else:
                 mlink = ''
             H.append('<p><span class="bull_appreciations_date">%s</span>%s<span class="bull_appreciations_link">%s</span></p>'
                      % (app['date'], app['comment'], mlink ) )
         if can_edit_app:
-            H.append('<p><a class="stdlink" href="appreciation_add_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s">Ajouter une appréciation</a></p>' % self.infos)
+            H.append('<p><a class="stdlink" href="appreciation_add_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s">Ajouter une appréciation</a></p>' % self.infos)
         H.append('</div>')
         # Appreciations sur PDF:
         if self.infos.get('appreciations_list', False):

Modified: branches/ScoDoc7/sco_cost_formation.py
===================================================================
--- branches/ScoDoc7/sco_cost_formation.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_cost_formation.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -151,7 +151,7 @@
         % (REQUEST.URL0, formsemestre_id, n_group_td, n_group_tp, coef_tp)    
         )
     tab.html_before_table = h
-    tab.base_url = '%s?formsemestre_id=%s&n_group_td=%s&n_group_tp=%s&coef_tp=%s' % (
+    tab.base_url = '%s?formsemestre_id=%s&n_group_td=%s&n_group_tp=%s&coef_tp=%s' % (
         REQUEST.URL0, formsemestre_id, n_group_td, n_group_tp, coef_tp)
     
     return tab.make_page(context, format=format, REQUEST=REQUEST)

Modified: branches/ScoDoc7/sco_edit_ue.py
===================================================================
--- branches/ScoDoc7/sco_edit_ue.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_edit_ue.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -219,11 +219,11 @@
                 Mod['nb_moduleimpls'] = context.module_count_moduleimpls(Mod['module_id'])
                 H.append('<li class="notes_module_list">')
                 if im != 0 and editable:
-                    H.append('<a href="module_move?module_id=%s&after=0" class="aud">%s</a>' % (Mod['module_id'], arrow_up))
+                    H.append('<a href="module_move?module_id=%s&after=0" class="aud">%s</a>' % (Mod['module_id'], arrow_up))
                 else:
                     H.append(arrow_none)
                 if im < len(Modlist) - 1 and editable:
-                    H.append('<a href="module_move?module_id=%s&after=1" class="aud">%s</a>' % (Mod['module_id'], arrow_down))
+                    H.append('<a href="module_move?module_id=%s&after=1" class="aud">%s</a>' % (Mod['module_id'], arrow_down))
                 else:
                     H.append(arrow_none)
                 im += 1
@@ -272,7 +272,10 @@
     H.append("""
 <li><a class="stdlink" href="formation_table_recap?formation_id=%(formation_id)s">Table récapitulative de la formation</a></li>
     
-<li><a class="stdlink" href="formation_export?formation_id=%(formation_id)s&format=xml">Export XML de la formation</a> (permet de la sauvegarder pour l'échanger avec un autre site)</li>
+<li><a class="stdlink" href="formation_export?formation_id=%(formation_id)s&format=xml">Export XML de la formation</a> (permet de la sauvegarder pour l'échanger avec un autre site)</li>
+
+<li><a class="stdlink" href="formation_export?formation_id=%(formation_id)s&format=json">Export JSON de la formation</a></li>
+
 <li><a class="stdlink" href="module_list?formation_id=%(formation_id)s">Liste détaillée des modules de la formation</a> (debug) </li>
 </ul>
 </p>""" % F )
@@ -285,13 +288,13 @@
             if sem['etat'] != '1':
                 H.append(' [verrouillé]')
             else:
-                H.append(' <a class="stdlink" href="formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s">Modifier</a>' % sem )
+                H.append(' <a class="stdlink" href="formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s">Modifier</a>' % sem )
             H.append('</li>')
         H.append('</ul>')
     
     if authuser.has_permission(ScoImplement,context):
         H.append("""<ul>
-        <li><a class="stdlink" href="formsemestre_createwithmodules?formation_id=%(formation_id)s&semestre_id=1">Mettre en place un nouveau semestre de formation %(acronyme)s</a>
+        <li><a class="stdlink" href="formsemestre_createwithmodules?formation_id=%(formation_id)s&semestre_id=1">Mettre en place un nouveau semestre de formation %(acronyme)s</a>
  </li>
 
 </ul>""" % F)

Modified: branches/ScoDoc7/sco_formsemestre_edit.py
===================================================================
--- branches/ScoDoc7/sco_formsemestre_edit.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_formsemestre_edit.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -456,7 +456,7 @@
                             'responsable_id' :  tf[2][module_id]
                             }
                 mid = context.do_moduleimpl_create(modargs)
-            return REQUEST.RESPONSE.redirect('formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé' % formsemestre_id )
+            return REQUEST.RESPONSE.redirect('formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé' % formsemestre_id )
         else:
             # modification du semestre:
             # on doit creer les modules nouvellement selectionnés
@@ -518,7 +518,7 @@
                 msg_html += '<a href="formsemestre_status?formsemestre_id=%s">retour au tableau de bord</a>' %  formsemestre_id
                 return msg_html            
             else:
-                return REQUEST.RESPONSE.redirect( 'formsemestre_status?formsemestre_id=%s&head_message=Semestre modifié' %  formsemestre_id)
+                return REQUEST.RESPONSE.redirect( 'formsemestre_status?formsemestre_id=%s&head_message=Semestre modifié' %  formsemestre_id)
 
 
 def formsemestre_delete_moduleimpls(context, formsemestre_id, module_ids_to_del):
@@ -624,7 +624,7 @@
             clone_evaluations=tf[2]['clone_evaluations'],
             clone_partitions=tf[2]['clone_partitions'],
             REQUEST=REQUEST)
-        return REQUEST.RESPONSE.redirect('formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé' % new_formsemestre_id )    
+        return REQUEST.RESPONSE.redirect('formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé' % new_formsemestre_id )    
 
 
 def do_formsemestre_clone(context, orig_formsemestre_id, 
@@ -758,7 +758,7 @@
                 parameters={'formsemestre_id' : formsemestre_id})
     else:
         do_formsemestres_associate_new_version(context, [formsemestre_id] + other_formsemestre_ids, REQUEST=REQUEST)
-        return REQUEST.RESPONSE.redirect('formsemestre_status?formsemestre_id=%s&head_message=Formation%%20dupliquée' % formsemestre_id )
+        return REQUEST.RESPONSE.redirect('formsemestre_status?formsemestre_id=%s&head_message=Formation%%20dupliquée' % formsemestre_id )
 
 
 def do_formsemestres_associate_new_version(context, formsemestre_ids, REQUEST=None):

Modified: branches/ScoDoc7/sco_formsemestre_inscriptions.py
===================================================================
--- branches/ScoDoc7/sco_formsemestre_inscriptions.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_formsemestre_inscriptions.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -105,7 +105,7 @@
                 if i['formsemestre_id'] == sem['formsemestre_id']:
                     inscrit = True
             if not inscrit:
-                H.append('<li><a href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s">%s</a>' %
+                H.append('<li><a href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s">%s</a>' %
                          (etudid,sem['formsemestre_id'],sem['titremois']))
         H.append('</ul>')
     else:
@@ -153,9 +153,9 @@
                  % (etud['nomprenom'], ', '.join(l)))
         H.append('<ul>')
         for s in others:
-            H.append('<li><a href="formsemestre_desinscription?formsemestre_id=%s&etudid=%s">déinscrire de %s</li>' % (s['formsemestre_id'],etudid,s['titreannee']))
+            H.append('<li><a href="formsemestre_desinscription?formsemestre_id=%s&etudid=%s">déinscrire de %s</li>' % (s['formsemestre_id'],etudid,s['titreannee']))
         H.append('</ul>')
-        H.append("""<p><a href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s&multiple_ok=1&%s">Continuer quand même l'inscription</a></p>""" % (etudid, formsemestre_id, sco_groups.make_query_groups(group_ids)))
+        H.append("""<p><a href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s&multiple_ok=1&%s">Continuer quand même l'inscription</a></p>""" % (etudid, formsemestre_id, sco_groups.make_query_groups(group_ids)))
         return '\n'.join(H) + F
     #
     if group_ids is not None:
@@ -240,7 +240,7 @@
         ue_status = nt.get_etud_ue_status(etudid, ue_id)
         if ue_status['is_capitalized']:
             sem_origin = context.do_formsemestre_list(args={ 'formsemestre_id' : ue_status['formsemestre_id'] } )[0]
-            ue_descr += ' <a class="discretelink" href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s">(capitalisée le %s)' % (sem_origin['formsemestre_id'], 
+            ue_descr += ' <a class="discretelink" href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s">(capitalisée le %s)' % (sem_origin['formsemestre_id'], 
 etudid, sem_origin['titreannee'], DateISOtoDMY(ue_status['event_date']))
         descr.append( 
             ('sec_%s' % ue_id, 

Modified: branches/ScoDoc7/sco_formsemestre_status.py
===================================================================
--- branches/ScoDoc7/sco_formsemestre_status.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_formsemestre_status.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -169,7 +169,7 @@
           'helpmsg' : 'Tableau de bord du semestre'
           },
         { 'title' : 'Modifier le semestre',
-          'url' : 'formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s' % sem,
+          'url' : 'formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s' % sem,
           'enabled' : (authuser.has_permission(ScoImplement, context) or (sem['responsable_id'] == str(REQUEST.AUTHENTICATED_USER) and sem['resp_can_edit'])) and (sem['etat'] == '1'),
           'helpmsg' : 'Modifie le contenu du semestre (modules)'
           },
@@ -256,7 +256,7 @@
           },
 
         { 'title' : 'Exporter table des étudiants',
-          'url' : 'groups_view?format=allxls&group_ids='+ sco_groups.get_default_group(context, formsemestre_id),
+          'url' : 'groups_view?format=allxls&group_ids='+ sco_groups.get_default_group(context, formsemestre_id),
           },
         { 'title' : 'Vérifier inscriptions multiples',
           'url' : 'formsemestre_inscrits_ailleurs?formsemestre_id=' + formsemestre_id,
@@ -327,7 +327,7 @@
           'url' : 'feuille_preparation_jury?formsemestre_id=' + formsemestre_id,
           },
         { 'title' : 'Saisie des décisions du jury',
-          'url' : 'formsemestre_recapcomplet?modejury=1&hidemodules=1&formsemestre_id=' + formsemestre_id,
+          'url' : 'formsemestre_recapcomplet?modejury=1&hidemodules=1&formsemestre_id=' + formsemestre_id,
           'enabled' : context.can_validate_sem(REQUEST, formsemestre_id)
           },
         { 'title' : 'Editer les PV et archiver les résultats',
@@ -547,7 +547,7 @@
         caption = title,
         html_caption = title,
         html_class='gt_table table_leftalign formsemestre_description',
-        base_url = '%s?formsemestre_id=%s&with_evals=%s' % (REQUEST.URL0, formsemestre_id, with_evals),
+        base_url = '%s?formsemestre_id=%s&with_evals=%s' % (REQUEST.URL0, formsemestre_id, with_evals),
         page_title = title,
         html_title = context.html_sem_header(REQUEST, 'Description du semestre', sem, with_page_header=False), 
         pdf_title = title,
@@ -692,7 +692,7 @@
             expr = sco_compute_moy.get_ue_expression(formsemestre_id, M['ue']['ue_id'], cnx, html_quote=True)
 
             if can_edit:
-                H.append(' <a href="edit_ue_expr?formsemestre_id=%s&ue_id=%s">' % (formsemestre_id, M['ue']['ue_id']))
+                H.append(' <a href="edit_ue_expr?formsemestre_id=%s&ue_id=%s">' % (formsemestre_id, M['ue']['ue_id']))
             H.append(icontag('formula', title="Mode calcul moyenne d'UE", style="vertical-align:middle"))
             if can_edit:
                 H.append('</a>')

Modified: branches/ScoDoc7/sco_formsemestre_validation.py
===================================================================
--- branches/ScoDoc7/sco_formsemestre_validation.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_formsemestre_validation.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -93,10 +93,10 @@
     # Navigation suivant/precedent
     if etud_index_prev != None:
         etud_p = context.getEtudInfo(etudid=T[etud_index_prev][-1], filled=True)[0]
-        Footer.append('<span><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etud_index=%s">Etud. précédent (%s)</a></span>' % (formsemestre_id,etud_index_prev, etud_p['nomprenom']) )
+        Footer.append('<span><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etud_index=%s">Etud. précédent (%s)</a></span>' % (formsemestre_id,etud_index_prev, etud_p['nomprenom']) )
     if etud_index_next != None:
         etud_n = context.getEtudInfo(etudid=T[etud_index_next][-1], filled=True)[0]
-        Footer.append('<span style="padding-left: 50px;"><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etud_index=%s">Etud. suivant (%s)</a></span>' % (formsemestre_id,etud_index_next, etud_n['nomprenom']) )
+        Footer.append('<span style="padding-left: 50px;"><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etud_index=%s">Etud. suivant (%s)</a></span>' % (formsemestre_id,etud_index_next, etud_n['nomprenom']) )
     Footer.append('</p>')
     Footer.append(context.sco_footer(REQUEST))
 
@@ -123,9 +123,9 @@
     H.append( formsemestre_recap_parcours_table(context, Se, etudid, with_links=(check and not readonly)) )
     if check:
         if not desturl:
-            desturl = 'formsemestre_recapcomplet?modejury=1&hidemodules=1&formsemestre_id='+formsemestre_id
+            desturl = 'formsemestre_recapcomplet?modejury=1&hidemodules=1&formsemestre_id='+formsemestre_id
             if sortcol:
-                desturl += '&sortcol=' + sortcol # pour refaire tri sorttable du tableau de notes
+                desturl += '&sortcol=' + sortcol # pour refaire tri sorttable du tableau de notes
             desturl += '#etudid%s' % etudid # va a la bonne ligne
         H.append('<ul><li><a href="%s">Continuer</a></li></ul>' % desturl)
         
@@ -146,9 +146,9 @@
             H.append('<p>Pas de semestre précédent !</p>')
     else:
         if not Se.prev_decision:
-            H.append(tf_error_message("""Le jury n\'a pas statué sur le semestre précédent ! (<a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">le faire maintenant</a>)""" % (Se.prev['formsemestre_id'], etudid)))
+            H.append(tf_error_message("""Le jury n\'a pas statué sur le semestre précédent ! (<a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">le faire maintenant</a>)""" % (Se.prev['formsemestre_id'], etudid)))
             if decision_jury:
-                H.append('<a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s" class="stdlink">Supprimer décision existante</a>'% (etudid, formsemestre_id))
+                H.append('<a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s" class="stdlink">Supprimer décision existante</a>'% (etudid, formsemestre_id))
             H.append(context.sco_footer(REQUEST))
             return '\n'.join(H)
 
@@ -182,7 +182,7 @@
         <input type="submit" value="Statuer sur le semestre précédent"/>
         <input type="hidden" name="formsemestre_id" value="%s"/>
         <input type="hidden" name="etudid" value="%s"/>
-        <input type="hidden" name="desturl" value="formsemestre_validation_etud_form?etudid=%s&formsemestre_id=%s"/>
+        <input type="hidden" name="desturl" value="formsemestre_validation_etud_form?etudid=%s&formsemestre_id=%s"/>
         """ % (Se.prev['formsemestre_id'], etudid, etudid, formsemestre_id))
         if sortcol:
             H.append('<input type="hidden" name="sortcol" value="%s"/>' % sortcol)
@@ -233,7 +233,7 @@
 
     H.append( form_decision_manuelle(context, Se, formsemestre_id, etudid) )
 
-    H.append( """<div class="link_defaillance">Ou <a class="stdlink" href="formDef?etudid=%s&formsemestre_id=%s">déclarer l'étudiant comme défaillant dans ce semestre</a></div>""" % (etudid, formsemestre_id) )
+    H.append( """<div class="link_defaillance">Ou <a class="stdlink" href="formDef?etudid=%s&formsemestre_id=%s">déclarer l'étudiant comme défaillant dans ce semestre</a></div>""" % (etudid, formsemestre_id) )
 
     H.append('<p style="font-size: 50%;">Formation ' )
     if Se.sem['gestion_semestrielle'] == '1':
@@ -304,19 +304,19 @@
 
 
 def _redirect_valid_choice(formsemestre_id, etudid, Se, choice, desturl, sortcol, REQUEST):
-    adr = 'formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1' % (formsemestre_id, etudid)
+    adr = 'formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1' % (formsemestre_id, etudid)
     if sortcol:
-        adr += '&sortcol=' + sortcol
+        adr += '&sortcol=' + sortcol
     if desturl:
-        desturl += '&desturl=' + desturl
+        desturl += '&desturl=' + desturl
     REQUEST.RESPONSE.redirect(adr)
     # Si le precedent a été modifié, demande relecture du parcours.
     # sinon  renvoie au listing general,
 #     if choice.new_code_prev:
-#         REQUEST.RESPONSE.redirect( 'formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1&desturl=%s' % (formsemestre_id, etudid, desturl) )
+#         REQUEST.RESPONSE.redirect( 'formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1&desturl=%s' % (formsemestre_id, etudid, desturl) )
 #     else:
 #         if not desturl:
-#             desturl = 'formsemestre_recapcomplet?modejury=1&hidemodules=1&formsemestre_id=' + formsemestre_id          
+#             desturl = 'formsemestre_recapcomplet?modejury=1&hidemodules=1&formsemestre_id=' + formsemestre_id          
 #         REQUEST.RESPONSE.redirect(desturl)
 
 
@@ -429,7 +429,7 @@
         H.append('<td class="rcp_type_sem" style="background-color:%s;">%s%s</td>'
                  % (bgcolor, num_sem, pm) )
         H.append('<td class="datedebut">%(mois_debut)s</td>' % sem )
-        H.append('<td><a class="formsemestre_status_link" href="%sformsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="Bulletin de notes">%s</a></td>' % (a_url,sem['formsemestre_id'], etudid,sem['titreannee']))
+        H.append('<td><a class="formsemestre_status_link" href="%sformsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="Bulletin de notes">%s</a></td>' % (a_url,sem['formsemestre_id'], etudid,sem['titreannee']))
         if decision_sem:
             H.append('<td class="rcp_dec">%s</td>' % decision_sem['code'])
         else:
@@ -493,7 +493,7 @@
         
         H.append('<td></td>')
         if with_links:
-            H.append('<td><a href="%sformsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">modifier</a></td>' % (a_url,sem['formsemestre_id'],etudid))
+            H.append('<td><a href="%sformsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">modifier</a></td>' % (a_url,sem['formsemestre_id'],etudid))
 
         H.append('</tr>')
     H.append('</table>')
@@ -593,7 +593,7 @@
     
     H.append("""</table>
     <input type="submit" name="formvalidmanu_submit" value="Valider décision manuelle"/>
-    <span style="padding-left: 5em;"><a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s" class="stdlink">Supprimer décision existante</a></span>
+    <span style="padding-left: 5em;"><a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s" class="stdlink">Supprimer décision existante</a></span>
     </form>
     """ % (etudid, formsemestre_id))
     return '\n'.join(H)
@@ -672,10 +672,10 @@
         H.append("""<p><b>Attention:</b> %d étudiants non modifiés car décisions différentes
         déja saisies :<ul>""" % len(conflicts))
         for etud in conflicts:
-            H.append('<li><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1">%s</li>'
+            H.append('<li><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1">%s</li>'
                      % (formsemestre_id, etud['etudid'], etud['nomprenom']) )
         H.append('</ul>')
-    H.append('<a href="formsemestre_recapcomplet?formsemestre_id=%s&modejury=1&hidemodules=1">continuer</a>'
+    H.append('<a href="formsemestre_recapcomplet?formsemestre_id=%s&modejury=1&hidemodules=1">continuer</a>'
              % formsemestre_id)
     H.append(context.sco_footer(REQUEST))
     return '\n'.join(H)
@@ -844,7 +844,7 @@
                                              tf[2]['ue_id'], tf[2]['moy_ue'], tf[2]['date'],
                                              semestre_id=semestre_id,
                                              REQUEST=REQUEST)
-        return REQUEST.RESPONSE.redirect( context.ScoURL()+"/Notes/formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s&head_message=Validation%%20d'UE%%20enregistree" % (formsemestre_id, etudid))
+        return REQUEST.RESPONSE.redirect( context.ScoURL()+"/Notes/formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s&head_message=Validation%%20d'UE%%20enregistree" % (formsemestre_id, etudid))
 
 def do_formsemestre_validate_previous_ue(context, formsemestre_id, etudid, ue_id, moy_ue, date,
                                          semestre_id=None,
@@ -896,7 +896,7 @@
         if valid['semestre_id']:
             valid['s'] += ' (<b>S%d</b>)' % valid['semestre_id']
         valid['ds'] = formsemestre_id
-        H.append('<li>%(code)s%(m)s%(s)s, le %(event_date)s  <a class="stdlink" href="etud_ue_suppress_validation?etudid=%(etudid)s&ue_id=%(ue_id)s&formsemestre_id=%(ds)s" title="supprime cette validation">effacer</a></li>' % valid )
+        H.append('<li>%(code)s%(m)s%(s)s, le %(event_date)s  <a class="stdlink" href="etud_ue_suppress_validation?etudid=%(etudid)s&ue_id=%(ue_id)s&formsemestre_id=%(ds)s" title="supprime cette validation">effacer</a></li>' % valid )
     H.append('</ul></div>')
     return '\n'.join(H)
 
@@ -911,7 +911,7 @@
     sem = context.get_formsemestre(formsemestre_id)
     _invalidate_etud_formation_caches(context, etudid, sem['formation_id'])
     
-    return REQUEST.RESPONSE.redirect( context.ScoURL()+"/Notes/formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s" % (etudid, formsemestre_id))
+    return REQUEST.RESPONSE.redirect( context.ScoURL()+"/Notes/formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s" % (etudid, formsemestre_id))
 
 def check_formation_ues(context, formation_id):
     """Verifie que les UE d'une formation sont chacune utilisée dans un seul semestre_id

Modified: branches/ScoDoc7/sco_groups.py
===================================================================
--- branches/ScoDoc7/sco_groups.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_groups.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -596,10 +596,10 @@
         if p['partition_name'] is not None:
             H.append('<tr><td class="epnav"><a class="stdlink" href="partition_delete?partition_id=%s">%s</a> </td><td class="epnav">' % (p['partition_id'], suppricon))
             if i != 0:
-                H.append('<a href="partition_move?partition_id=%s&after=0">%s</a>' % (p['partition_id'], arrow_up))
+                H.append('<a href="partition_move?partition_id=%s&after=0">%s</a>' % (p['partition_id'], arrow_up))
             H.append('</td><td class="epnav">')
             if i < len(partitions) - 2:
-                H.append('<a href="partition_move?partition_id=%s&after=1">%s</a>' % (p['partition_id'], arrow_down))
+                H.append('<a href="partition_move?partition_id=%s&after=1">%s</a>' % (p['partition_id'], arrow_down))
             i += 1
             H.append('</td>')
             pname = p['partition_name'] or ''
@@ -1024,7 +1024,7 @@
 
 def make_query_groups(group_ids):
     if group_ids:
-        return '&'.join( [ 'group_ids%3Alist=' + group_id for group_id in group_ids ] )
+        return '&'.join( [ 'group_ids%3Alist=' + group_id for group_id in group_ids ] )
     else:
         return ''
 

Modified: branches/ScoDoc7/sco_groups_view.py
===================================================================
--- branches/ScoDoc7/sco_groups_view.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_groups_view.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -247,7 +247,7 @@
         gq = []
         for group_id in group_ids:
             gq.append('group_ids=' + group_id)
-        self.groups_query_args = '&'.join(gq)
+        self.groups_query_args = '&'.join(gq)
         self.base_url = REQUEST.URL0 + '?' + self.groups_query_args
         self.group_ids = group_ids
         self.groups = []
@@ -337,8 +337,8 @@
     with_archives= int(with_archives)
     with_annotations = int(with_annotations)
     
-    base_url_np = groups_infos.base_url + '&with_codes=%s' % with_codes
-    base_url = base_url_np + '&with_paiement=%s&with_archives=%s&with_annotations=%s' % (with_paiement, with_archives, with_annotations)
+    base_url_np = groups_infos.base_url + '&with_codes=%s' % with_codes
+    base_url = base_url_np + '&with_paiement=%s&with_archives=%s&with_annotations=%s' % (with_paiement, with_archives, with_annotations)
     #
     columns_ids=['nom_disp', 'prenom' ] # colonnes a inclure
     titles = { 'nom_disp' : 'Nom',
@@ -537,22 +537,22 @@
           '<h3>Absences</h3>',
           '<ul class="ul_abs">',
           '<li>', form_choix_jour_saisie_hebdo(context, groups_infos, REQUEST=REQUEST), '</li>',          
-          """<li><a class="stdlink" href="Absences/EtatAbsencesGr?%s&debut=%s&fin=%s">Etat des absences du groupe</a></li>"""
+          """<li><a class="stdlink" href="Absences/EtatAbsencesGr?%s&debut=%s&fin=%s">Etat des absences du groupe</a></li>"""
           % (groups_infos.groups_query_args, groups_infos.formsemestre['date_debut'], groups_infos.formsemestre['date_fin']),
           '</ul>',
           
           '<h3>Feuilles</h3>',
           '<ul class="ul_feuilles">',
 
-          """<li><a class="stdlink" href="%s&format=xls">Feuille d'émargement %s (Excel)</a></li>""" 
+          """<li><a class="stdlink" href="%s&format=xls">Feuille d'émargement %s (Excel)</a></li>""" 
           % (groups_infos.base_url, groups_infos.groups_titles),
-          """<li><a class="stdlink" href="trombino?%s&format=pdf">Trombinoscope en PDF</a></li>"""
+          """<li><a class="stdlink" href="trombino?%s&format=pdf">Trombinoscope en PDF</a></li>"""
           % groups_infos.groups_query_args,
-          """<li><a class="stdlink" href="pdf_trombino_tours?%s&format=pdf">Trombinoscope en PDF (format "IUT de Tours", beta)</a></li>"""
+          """<li><a class="stdlink" href="pdf_trombino_tours?%s&format=pdf">Trombinoscope en PDF (format "IUT de Tours", beta)</a></li>"""
           % groups_infos.groups_query_args,
-          """<li><a class="stdlink" href="pdf_feuille_releve_absences?%s&format=pdf">Feuille relevé absences hebdomadaire (beta)</a></li>"""
+          """<li><a class="stdlink" href="pdf_feuille_releve_absences?%s&format=pdf">Feuille relevé absences hebdomadaire (beta)</a></li>"""
           % groups_infos.groups_query_args,
-          """<li><a class="stdlink" href="trombino?%s&format=pdflist">Liste d'appel avec photos</a></li>"""
+          """<li><a class="stdlink" href="trombino?%s&format=pdflist">Liste d'appel avec photos</a></li>"""
           % groups_infos.groups_query_args,
           '</ul>'
     ] )
@@ -562,7 +562,7 @@
     # (pour tous les etudiants du semestre)
     group_id = sco_groups.get_default_group(context, groups_infos.formsemestre_id)
     if authuser.has_permission(ScoEtudInscrit,context):
-        H.append('<li><a class="stdlink" href="check_group_apogee?group_id=%s&etat=%s">Vérifier codes Apogée</a> (de tous les groupes)</li>'
+        H.append('<li><a class="stdlink" href="check_group_apogee?group_id=%s&etat=%s">Vérifier codes Apogée</a> (de tous les groupes)</li>'
                  % (group_id,etat or ''))
     # Lien pour ajout fichiers étudiants
     if authuser.has_permission(ScoEtudAddAnnotations,context):

Modified: branches/ScoDoc7/sco_inscr_passage.py
===================================================================
--- branches/ScoDoc7/sco_inscr_passage.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_inscr_passage.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -455,7 +455,7 @@
             if with_checkbox or sel_inscrits:
                 H.append(')')
             if base_url and etuds:
-                H.append('<a href="%s&export_cat_xls=%s">%s</a> ' % (base_url, src_cat, ICON_XLS))
+                H.append('<a href="%s&export_cat_xls=%s">%s</a> ' % (base_url, src_cat, ICON_XLS))
             H.append('</div>' )
             for etud in etuds:
                 if etud.get('inscrit', False):

Modified: branches/ScoDoc7/sco_liste_notes.py
===================================================================
--- branches/ScoDoc7/sco_liste_notes.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_liste_notes.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -214,7 +214,7 @@
                        '_code_td_attrs' : 'style="padding-left: 1em; padding-right: 2em;"',
                        'etudid' : etudid,
                        'nom' : strupper(etud['nom']),
-                       '_nomprenom_target' : 'formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s' % (M['formsemestre_id'], etudid),
+                       '_nomprenom_target' : 'formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s' % (M['formsemestre_id'], etudid),
                        'prenom' : strcapitalize(strlower(etud['prenom'])),
                        'nomprenom' : etud['nomprenom'],
                        'group' : grc,
@@ -271,11 +271,11 @@
             columns_ids.append( 'comment' ) 
     
     # titres divers:
-    gl = ''.join([ '&group_ids%3Alist=' + g for g in group_ids ])
+    gl = ''.join([ '&group_ids%3Alist=' + g for g in group_ids ])
     if note_sur_20:
-        gl = '&note_sur_20%3Alist=yes' + gl
+        gl = '&note_sur_20%3Alist=yes' + gl
     if anonymous_listing:
-        gl = '&anonymous_listing%3Alist=yes' + gl
+        gl = '&anonymous_listing%3Alist=yes' + gl
 
     if len(evals) == 1:
         evalname = '%s-%s' % (Mod['code'],DateDMYtoISO(E['jour']))
@@ -579,7 +579,7 @@
             etud = context.getEtudInfo(etudid=etudid,filled=True)[0]
             H.append('<li><a class="discretelink" href="ficheEtud?etudid=%(etudid)s">%(nomprenom)s</a>' % etud )
             if linkabs:
-                H.append('<a class="stdlink" href="Absences/doSignaleAbsence?etudid=%s&datedebut=%s&datefin=%s&demijournee=%s&moduleimpl_id=%s">signaler cette absence</a>'
+                H.append('<a class="stdlink" href="Absences/doSignaleAbsence?etudid=%s&datedebut=%s&datefin=%s&demijournee=%s&moduleimpl_id=%s">signaler cette absence</a>'
                          % (etud['etudid'],urllib.quote(E['jour']), urllib.quote(E['jour']), demijournee, E['moduleimpl_id']) )
             H.append('</li>')
         H.append('</ul>')

Modified: branches/ScoDoc7/sco_lycee.py
===================================================================
--- branches/ScoDoc7/sco_lycee.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_lycee.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -145,9 +145,9 @@
     tab, etuds_by_lycee = formsemestre_table_etuds_lycees(context, formsemestre_id, only_primo=only_primo, group_lycees=not no_grouping)
     tab.base_url = '%s?formsemestre_id=%s' % (REQUEST.URL0, formsemestre_id)
     if only_primo:
-        tab.base_url += '&only_primo=1'
+        tab.base_url += '&only_primo=1'
     if no_grouping:
-        tab.base_url += '&no_grouping=1'
+        tab.base_url += '&no_grouping=1'
     t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
     if format != 'html':
         return t

Modified: branches/ScoDoc7/sco_moduleimpl_inscriptions.py
===================================================================
--- branches/ScoDoc7/sco_moduleimpl_inscriptions.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_moduleimpl_inscriptions.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -268,11 +268,11 @@
                     else:
                         H.append("""<div><em style="font-size: 70%">UE actuelle meilleure que l'UE capitalisée</em></div>""")
                     if can_change:
-                        H.append('<div><a class="stdlink" href="etud_desinscrit_ue?etudid=%s&formsemestre_id=%s&ue_id=%s">désinscrire des modules de cette UE</a></div>' % (etud['etudid'], formsemestre_id, ue['ue_id']))
+                        H.append('<div><a class="stdlink" href="etud_desinscrit_ue?etudid=%s&formsemestre_id=%s&ue_id=%s">désinscrire des modules de cette UE</a></div>' % (etud['etudid'], formsemestre_id, ue['ue_id']))
                 else:
                     H.append('(non réinscrit dans cette UE)')
                     if can_change:
-                        H.append('<div><a class="stdlink" href="etud_inscrit_ue?etudid=%s&formsemestre_id=%s&ue_id=%s">inscrire à tous les modules de cette UE</a></div>' % (etud['etudid'], formsemestre_id, ue['ue_id']))
+                        H.append('<div><a class="stdlink" href="etud_inscrit_ue?etudid=%s&formsemestre_id=%s&ue_id=%s">inscrire à tous les modules de cette UE</a></div>' % (etud['etudid'], formsemestre_id, ue['ue_id']))
                 H.append( '</li>' )
             H.append( '</ul></li>' )
         H.append('</ul>')

Modified: branches/ScoDoc7/sco_moduleimpl_status.py
===================================================================
--- branches/ScoDoc7/sco_moduleimpl_status.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_moduleimpl_status.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -83,7 +83,7 @@
           'enabled' : nbnotes > 0
           },            
         { 'title' : 'Absences ce jour',
-          'url' : 'Absences/EtatAbsencesDate?date=%s&group_ids=%s'
+          'url' : 'Absences/EtatAbsencesDate?date=%s&group_ids=%s'
           % (urllib.quote(E['jour'],safe=''), group_id),
           'enabled' : E['jour']
           },
@@ -199,7 +199,7 @@
     top_table_links = ''
     if sem['etat'] == '1': # non verrouillé
         top_table_links = """<a class="stdlink" href="evaluation_create?moduleimpl_id=%(moduleimpl_id)s">Créer nouvelle évaluation</a>
-        <a class="stdlink" style="margin-left:2em;" href="module_evaluation_renumber?moduleimpl_id=%(moduleimpl_id)s&redirect=1">Trier par date</a>
+        <a class="stdlink" style="margin-left:2em;" href="module_evaluation_renumber?moduleimpl_id=%(moduleimpl_id)s&redirect=1">Trier par date</a>
         """ % M
     if ModEvals:
         H.append( '<div class="moduleimpl_evaluations_top_links">' + top_table_links + '</div>')
@@ -235,11 +235,11 @@
         # Fleches:
         H.append('<span class="eval_arrows_chld">')
         if eval_index != (len(ModEvals) - 1) and caneditevals:
-            H.append('<a href="module_evaluation_move?evaluation_id=%s&after=0" class="aud">%s</a>' % (eval['evaluation_id'], arrow_up))
+            H.append('<a href="module_evaluation_move?evaluation_id=%s&after=0" class="aud">%s</a>' % (eval['evaluation_id'], arrow_up))
         else:
             H.append(arrow_none)
         if eval_index > 0 and caneditevals:
-            H.append('<a href="module_evaluation_move?evaluation_id=%s&after=1" class="aud">%s</a>' % (eval['evaluation_id'], arrow_down))
+            H.append('<a href="module_evaluation_move?evaluation_id=%s&after=1" class="aud">%s</a>' % (eval['evaluation_id'], arrow_down))
         else:
             H.append(arrow_none)
         H.append('</span></span>')
@@ -322,7 +322,7 @@
                 H.append("""<td colspan="5" class="mievr_grtit">%s  </td><td>""" % name )
                 if gr_moyenne['gr_nb_notes'] > 0:
                     H.append( '%(gr_moy)s' %  gr_moyenne )
-                    H.append("""  (<a href="evaluation_listenotes?tf-submitted=1&evaluation_id=%s&group_ids%%3Alist=%s">%s</a> notes"""
+                    H.append("""  (<a href="evaluation_listenotes?tf-submitted=1&evaluation_id=%s&group_ids%%3Alist=%s">%s</a> notes"""
                              % (eval['evaluation_id'], gr_moyenne['group_id'], gr_moyenne['gr_nb_notes']))
                     if gr_moyenne['gr_nb_att'] > 0:
                         H.append(""", <span class="redboldtext">%s en attente</span>""" % gr_moyenne['gr_nb_att'])
@@ -330,13 +330,13 @@
                     if gr_moyenne['group_id'] in etat['gr_incomplets']:
                         H.append("""[<font color="red">""")
                         if caneditnotes:
-                            H.append("""<a class="redlink" href="notes_eval_selectetuds?evaluation_id=%s&group_ids:list=%s">incomplet</a></font>]""" % (eval['evaluation_id'], gr_moyenne['group_id']))
+                            H.append("""<a class="redlink" href="notes_eval_selectetuds?evaluation_id=%s&group_ids:list=%s">incomplet</a></font>]""" % (eval['evaluation_id'], gr_moyenne['group_id']))
                         else:
                             H.append("""incomplet</font>]""")
                 else:
                     H.append("""<span class="redboldtext">  """)
                     if caneditnotes:
-                        H.append("""<a class="redlink" href="notes_eval_selectetuds?evaluation_id=%s&group_ids:list=%s">""" % (eval['evaluation_id'], gr_moyenne['group_id']))
+                        H.append("""<a class="redlink" href="notes_eval_selectetuds?evaluation_id=%s&group_ids:list=%s">""" % (eval['evaluation_id'], gr_moyenne['group_id']))
                     H.append('pas de notes')
                     if caneditnotes:
                         H.append("""</a>""")

Modified: branches/ScoDoc7/sco_page_etud.py
===================================================================
--- branches/ScoDoc7/sco_page_etud.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_page_etud.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -61,22 +61,22 @@
 
     if ins['etat'] != 'D':
         dem_title = 'Démission'
-        dem_url = 'formDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s' % args
+        dem_url = 'formDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s' % args
     else:
         dem_title = 'Annuler la démission'
-        dem_url = 'doCancelDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s' % args
+        dem_url = 'doCancelDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s' % args
 
     # Note: seul un etudiant inscrit (I) peut devenir défaillant.
     if ins['etat'] != 'DEF':
         def_title = 'Déclarer défaillance'
-        def_url = 'formDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s' % args
+        def_url = 'formDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s' % args
     elif ins['etat'] == 'DEF':
         def_title = 'Annuler la défaillance'
-        def_url = 'doCancelDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s' % args
+        def_url = 'doCancelDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s' % args
     def_enabled = (ins['etat'] != 'D') and authuser.has_permission(ScoEtudInscrit,context) and not locked
     items = [
 #        { 'title' : 'Changer de groupe',
-#          'url' : 'formChangeGroup?etudid=%s&formsemestre_id=%s' % (etudid,ins['formsemestre_id']),
+#          'url' : 'formChangeGroup?etudid=%s&formsemestre_id=%s' % (etudid,ins['formsemestre_id']),
 #          'enabled' : authuser.has_permission(ScoEtudChangeGroups,context) and not locked,
 #        },
         { 'title' : dem_title,
@@ -84,7 +84,7 @@
           'enabled' : authuser.has_permission(ScoEtudInscrit,context) and not locked
         },
         { 'title' : "Validation du semestre (jury)",
-          'url' : "Notes/formsemestre_validation_etud_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args,
+          'url' : "Notes/formsemestre_validation_etud_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args,
           'enabled' : authuser.has_permission(ScoEtudInscrit,context) and not locked
         },
         { 'title' : def_title,
@@ -92,11 +92,11 @@
           'enabled' : def_enabled
         },
         { 'title' : "Inscrire à un module optionnel (ou au sport)",
-          'url' : "Notes/formsemestre_inscription_option?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s" % args,
+          'url' : "Notes/formsemestre_inscription_option?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s" % args,
           'enabled' : authuser.has_permission(ScoEtudInscrit,context) and not locked
         },
         { 'title' : "Désinscrire (en cas d'erreur)",
-          'url' : "Notes/formsemestre_desinscription?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s" % args,
+          'url' : "Notes/formsemestre_desinscription?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s" % args,
           'enabled' : authuser.has_permission(ScoEtudInscrit,context) and not locked
         },
 
@@ -199,7 +199,7 @@
         if not context.canSuppressAnnotation(a['id'], REQUEST):
             a['dellink'] = ''
         else:
-            a['dellink'] = '<td bgcolor="%s" class="annodel"><a href="doSuppressAnnotation?etudid=%s&annotation_id=%s">%s</a></td>' % (a['bgcolor'], etudid, a['id'], icontag('delete_img', border="0", alt="suppress", title="Supprimer cette annotation"))
+            a['dellink'] = '<td bgcolor="%s" class="annodel"><a href="doSuppressAnnotation?etudid=%s&annotation_id=%s">%s</a></td>' % (a['bgcolor'], etudid, a['id'], icontag('delete_img', border="0", alt="suppress", title="Supprimer cette annotation"))
         alist.append('<tr><td bgcolor="%(bgcolor)s">Le %(date)s par <b>%(author)s</b> (%(zope_authenticated_user)s) :<br/>%(comment)s</td>%(dellink)s</tr>' % a )
     info['liste_annotations'] = '\n'.join(alist)
     # fiche admission
@@ -249,7 +249,7 @@
         info['tit_anno'] = ''
     # Inscriptions
     if info['sems']:
-        rcl = """(<a href="%(ScoURL)s/Notes/formsemestre_validation_etud_form?check=1&etudid=%(etudid)s&formsemestre_id=%(last_formsemestre_id)s&desturl=ficheEtud?etudid=%(etudid)s">récapitulatif parcours</a>)""" % info
+        rcl = """(<a href="%(ScoURL)s/Notes/formsemestre_validation_etud_form?check=1&etudid=%(etudid)s&formsemestre_id=%(last_formsemestre_id)s&desturl=ficheEtud?etudid=%(etudid)s">récapitulatif parcours</a>)""" % info
     else:
         rcl = ''
     info['inscriptions_mkup'] = """<div class="ficheinscriptions" id="ficheinscriptions">

Modified: branches/ScoDoc7/sco_preferences.py
===================================================================
--- branches/ScoDoc7/sco_preferences.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_preferences.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -1255,7 +1255,7 @@
             # done: change prefs and redirect to semestre status
             destination = tf[2]['destination']
             if destination == 'done' or destination == '':
-                return REQUEST.RESPONSE.redirect( REQUEST.URL1 + '/formsemestre_status?head_message=Préférences modifiées&formsemestre_id=' + self.formsemestre_id ) 
+                return REQUEST.RESPONSE.redirect( REQUEST.URL1 + '/formsemestre_status?head_message=Préférences modifiées&formsemestre_id=' + self.formsemestre_id ) 
             elif destination == 'again':
                 return REQUEST.RESPONSE.redirect( REQUEST.URL0 + '?formsemestre_id=' + self.formsemestre_id )
             elif destination == 'global':

Modified: branches/ScoDoc7/sco_recapcomplet.py
===================================================================
--- branches/ScoDoc7/sco_recapcomplet.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_recapcomplet.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -107,7 +107,7 @@
 <span style="font-size: 75%%;">(corrige incohérences éventuelles introduites avant juin 2008)<span>
 </p>""" % (formsemestre_id, formsemestre_id))
             else:
-                H.append("""<a class="stdlink" href="formsemestre_recapcomplet?formsemestre_id=%s&modejury=1&hidemodules=1">Saisie des décisions du jury</a>""" % formsemestre_id)
+                H.append("""<a class="stdlink" href="formsemestre_recapcomplet?formsemestre_id=%s&modejury=1&hidemodules=1">Saisie des décisions du jury</a>""" % formsemestre_id)
             H.append('</p>')
         H.append(context.sco_footer(REQUEST))
     return ''.join(H) # HTML or binary data...
@@ -361,9 +361,9 @@
         H = [ """
         <script type="text/javascript">
         function va_saisir(formsemestre_id, etudid) {
-        loc = 'formsemestre_validation_etud_form?formsemestre_id='+formsemestre_id+'&etudid='+etudid;
+        loc = 'formsemestre_validation_etud_form?formsemestre_id='+formsemestre_id+'&etudid='+etudid;
         if (SORT_COLUMN_INDEX) {
-           loc += '&sortcol=' + SORT_COLUMN_INDEX;
+           loc += '&sortcol=' + SORT_COLUMN_INDEX;
         }
         loc += '#etudid' + etudid;   
         document.location=loc;
@@ -418,7 +418,7 @@
         if disable_etudlink:
             etudlink = '%(name)s'
         else:
-            etudlink='<a href="formsemestre_bulletinetud?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s&version=selectedevals" id="%(etudid)s" class="etudinfo">%(name)s</a>'
+            etudlink='<a href="formsemestre_bulletinetud?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s&version=selectedevals" id="%(etudid)s" class="etudinfo">%(name)s</a>'
         ir = 0
         nblines = len(F)-1
         for l in F[1:]:
@@ -486,7 +486,7 @@
                     act = 'saisir'
                 cells += '<td class="decision">%s' % code
                 if act:
-                    #cells += ' <a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">%s</a>' % (formsemestre_id, etudid, act)
+                    #cells += ' <a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">%s</a>' % (formsemestre_id, etudid, act)
                     cells += ''' <a href="#" onclick="va_saisir('%s', '%s')">%s</a>''' % (formsemestre_id, etudid, act)
                 cells += '</td>'
             H.append( cells + '</tr>' )

Modified: branches/ScoDoc7/sco_report.py
===================================================================
--- branches/ScoDoc7/sco_report.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_report.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -173,7 +173,7 @@
     tab.html_caption = "Répartition des résultats par %s." % category_name
     tab.base_url = '%s?formsemestre_id=%s' % (REQUEST.URL0, formsemestre_id)
     if only_primo:
-        tab.base_url += '&only_primo=on'
+        tab.base_url += '&only_primo=on'
     return tab
 
 
@@ -525,20 +525,20 @@
     tab, expl, bacs, bacspecialites, sexes, statuts = table_suivi_cohorte(
         context, formsemestre_id, percent=percent,
         bac=bac, bacspecialite=bacspecialite, sexe=sexe, statut=statut, only_primo=only_primo)
-    tab.base_url = '%s?formsemestre_id=%s&percent=%s&bac=%s&bacspecialite=%s&sexe=%s' % (REQUEST.URL0, formsemestre_id, percent, bac, bacspecialite, sexe)
+    tab.base_url = '%s?formsemestre_id=%s&percent=%s&bac=%s&bacspecialite=%s&sexe=%s' % (REQUEST.URL0, formsemestre_id, percent, bac, bacspecialite, sexe)
     if only_primo:
-        tab.base_url += '&only_primo=on'
+        tab.base_url += '&only_primo=on'
     t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
     if format != 'html':
         return t
 
     base_url = REQUEST.URL0
-    burl = '%s?formsemestre_id=%s&bac=%s&bacspecialite=%s&sexe=%s&statut=%s' % (
+    burl = '%s?formsemestre_id=%s&bac=%s&bacspecialite=%s&sexe=%s&statut=%s' % (
         base_url, formsemestre_id, bac, bacspecialite, sexe, statut)
     if percent:
-        pplink = '<p><a href="%s&percent=0">Afficher les résultats bruts</a></p>' % burl
+        pplink = '<p><a href="%s&percent=0">Afficher les résultats bruts</a></p>' % burl
     else:
-        pplink = '<p><a href="%s&percent=1">Afficher les résultats en pourcentages</a></p>' % burl
+        pplink = '<p><a href="%s&percent=1">Afficher les résultats en pourcentages</a></p>' % burl
     help = pplink + """    
     <p class="help">Nombre d'étudiants dans chaque semestre. Les dates indiquées sont les dates approximatives de <b>début</b> des semestres (les semestres commençant à des dates proches sont groupés). Le nombre de diplômés est celui à la <b>fin</b> du semestre correspondant. Lorsqu'il y a moins de 10 étudiants dans une case, vous pouvez afficher leurs noms en passant le curseur sur le chiffre.</p>
 <p class="help">Les menus permettent de n'étudier que certaines catégories d'étudiants (titulaires d'un type de bac, garçons ou filles). La case "restreindre aux primo-entrants" permet de ne considérer que les étudiants qui n'ont jamais été inscrits dans ScoDoc avant le semestre considéré.</p>
@@ -849,9 +849,9 @@
     tab = table_suivi_parcours(context, formsemestre_id, only_primo=only_primo, grouped_parcours=not no_grouping)
     tab.base_url = '%s?formsemestre_id=%s' % (REQUEST.URL0, formsemestre_id)
     if only_primo:
-        tab.base_url += '&only_primo=1'
+        tab.base_url += '&only_primo=1'
     if no_grouping:
-        tab.base_url += '&no_grouping=1'
+        tab.base_url += '&no_grouping=1'
     t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
     if format != 'html':
         return t
@@ -1058,7 +1058,7 @@
         REQUEST.RESPONSE.setHeader('content-type', 'image/png' )
         return doc
     elif format == 'html':
-        url = urllib.quote("formsemestre_graph_parcours?formsemestre_id=%(formsemestre_id)s&format="%sem)
+        url = urllib.quote("formsemestre_graph_parcours?formsemestre_id=%(formsemestre_id)s&format="%sem)
  
         doc, bacs, bacspecialites, sexes, statuts = graph_parcours(context, formsemestre_id, only_primo=only_primo, 
                                                                    bac=bac, bacspecialite=bacspecialite, sexe=sexe, statut=statut)

Modified: branches/ScoDoc7/sco_saisie_notes.py
===================================================================
--- branches/ScoDoc7/sco_saisie_notes.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_saisie_notes.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -126,7 +126,7 @@
         if note_method in ('form', 'xls'):
             # return notes_evaluation_formnotes( REQUEST )
             gs = [('group_ids%3Alist=' + urllib.quote_plus(x)) for x in group_ids ]
-            query = 'evaluation_id=%s&note_method=%s&' % (evaluation_id,note_method) + '&'.join(gs)
+            query = 'evaluation_id=%s&note_method=%s&' % (evaluation_id,note_method) + '&'.join(gs)
             REQUEST.RESPONSE.redirect( REQUEST.URL1 + '/notes_evaluation_formnotes?' + query )
         else:
             raise ValueError, "invalid note_method (%s)" % tf[2]['note_method'] 

Modified: branches/ScoDoc7/sco_synchro_etuds.py
===================================================================
--- branches/ScoDoc7/sco_synchro_etuds.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_synchro_etuds.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -90,13 +90,13 @@
         raise ScoValueError('opération impossible: semestre verrouille')
     if not sem['etape_apo'] and not sem['etape_apo2'] and not sem['etape_apo3'] and not sem['etape_apo4']:
         raise ScoValueError("""opération impossible: ce semestre n'a pas de code étape
-        (voir "<a href="formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s">Modifier ce semestre</a>")
+        (voir "<a href="formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s">Modifier ce semestre</a>")
         """ % sem )
     header = context.sco_header(REQUEST, page_title='Synchronisation étudiants')
     footer = context.sco_footer(REQUEST)
     base_url = '%s?formsemestre_id=%s' % (REQUEST.URL0, formsemestre_id)
     if anneeapogee:
-        base_url += '&anneeapogee=%s' % anneeapogee
+        base_url += '&anneeapogee=%s' % anneeapogee
     
     if anneeapogee == None: # année d'inscription par défaut
         anneeapogee = str(annee_scolaire_debut(sem['annee_debut'], sem['mois_debut_ord']))
@@ -243,7 +243,7 @@
         <form method="post" action="formsemestre_synchro_etuds">
         """ % sem,
         """
-        Année Apogée: <select id="anneeapogee" name="anneeapogee" onchange="document.location='formsemestre_synchro_etuds?formsemestre_id=%s&anneeapogee='+document.getElementById('anneeapogee').value">""" % (sem['formsemestre_id']),
+        Année Apogée: <select id="anneeapogee" name="anneeapogee" onchange="document.location='formsemestre_synchro_etuds?formsemestre_id=%s&anneeapogee='+document.getElementById('anneeapogee').value">""" % (sem['formsemestre_id']),
         '\n'.join(options),
         """
         </select>

Modified: branches/ScoDoc7/sco_trombino.py
===================================================================
--- branches/ScoDoc7/sco_trombino.py	2014-03-27 14:24:11 UTC (rev 1366)
+++ branches/ScoDoc7/sco_trombino.py	2014-04-01 20:28:04 UTC (rev 1367)
@@ -88,7 +88,7 @@
           'url' : 'photos_import_files_form?%s' % args,
           },
         { 'title' : 'Obtenir archive Zip des photos',
-          'url' : 'trombino?%s&format=zip' % args,
+          'url' : 'trombino?%s&format=zip' % args,
           },
         { 'title' : 'Recopier les photos depuis le portail',
           'url' : 'trombino_copy_photos?%s' % args,
@@ -121,7 +121,7 @@
         i += 1
 
     H.append('</div>')
-    H.append('<div style="margin-bottom:15px;"><a class="stdlink" href="trombino?format=pdf&%s">Version PDF</a></div>' % args)
+    H.append('<div style="margin-bottom:15px;"><a class="stdlink" href="trombino?format=pdf&%s">Version PDF</a></div>' % args)
     return  '\n'.join(H)
     
 
@@ -140,10 +140,10 @@
     if nb_missing > 0:
         parameters = { 'group_ids' : groups_infos.group_ids, 'format' : format }
         return False, context.confirmDialog(
-            """<p>Attention: %d photos ne sont pas disponibles et ne peuvent pas être exportées.</p><p>Vous pouvez <a class="stdlink" href="%s">exporter seulement les photos existantes</a>""" % (nb_missing, groups_infos.base_url + '&dialog_confirmed=1&format=%s' % format ),
+            """<p>Attention: %d photos ne sont pas disponibles et ne peuvent pas être exportées.</p><p>Vous pouvez <a class="stdlink" href="%s">exporter seulement les photos existantes</a>""" % (nb_missing, groups_infos.base_url + '&dialog_confirmed=1&format=%s' % format ),
             dest_url = 'trombino',
             OK = 'Exporter seulement les photos existantes',
-            cancel_url='groups_view?curtab=tab-photos&' + groups_infos.groups_query_args,
+            cancel_url='groups_view?curtab=tab-photos&' + groups_infos.groups_query_args,
             REQUEST=REQUEST, parameters=parameters )
     else:
         return True, ''
@@ -181,7 +181,7 @@
 def trombino_copy_photos(context, group_ids=[], REQUEST=None, dialog_confirmed=False):
     "Copy photos from portal to ScoDoc (overwriting local copy)"
     groups_infos = sco_groups_view.DisplayedGroupsInfos(context, group_ids, REQUEST=REQUEST)
-    back_url = 'groups_view?%s&curtab=tab-photos' % groups_infos.groups_query_args
+    back_url = 'groups_view?%s&curtab=tab-photos' % groups_infos.groups_query_args
     
     portal_url = sco_portal_apogee.get_portal_url(context)
     header = context.sco_header(REQUEST, page_title='Chargement des photos') 
@@ -405,7 +405,7 @@
     """Formulaire pour importation photos
     """
     groups_infos = sco_groups_view.DisplayedGroupsInfos(context, group_ids, REQUEST=REQUEST)
-    back_url = 'groups_view?%s&curtab=tab-photos' % groups_infos.groups_query_args
+    back_url = 'groups_view?%s&curtab=tab-photos' % groups_infos.groups_query_args
     
     H = [context.sco_header(REQUEST, page_title='Import des photos des étudiants'),
          """<h2 class="formsemestre">Téléchargement des photos des étudiants</h2>
@@ -454,7 +454,7 @@
         sco_photos.store_photo(context, etud, data, REQUEST)
     r = zip_excel_import_files(context, xlsfile, zipfile,
                                REQUEST, callback, filename_title, page_title)
-    return REQUEST.RESPONSE.redirect(back_url + '&head_message=photos%20 importees')
+    return REQUEST.RESPONSE.redirect(back_url + '&head_message=photos%20 importees')
 
 def zip_excel_import_files(context, xlsfile=None, zipfile=None,
                            REQUEST=None,


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