TODO 1.6

De Wikipfc2i.

V 1.6

dev


Sommaire

Utilisation du nouveau thème graphique de c2i.education.fr [FAIT]

Suppression de la gestion d'un double référentiel [FAIT]

compatibilite W3C stricte

Travail encours à partir de la révision 1.5 970

  • vérifier les alt pour toutes les images
  • gros travail a faire sur les écrans Accès et Configuration


  • pour info :
 si on met  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd> en début des ebtêtes

toutes les directives illégales sont ignorés par firefox, comme par exemple une clause style:width:100; dans un select! (ici j'avais oublié le px après 100)


  • tester avec le validateur W3C : nécessitera un mode "ouvert" de la plateforme pour un rappel de n'importe quelle page par ce validateur...

Détection automatique du type de C2I [FAIT]

En version 1.5, l'installateur (qui produisait le zip sur la plate-forme nationale) devrait copier les logos et fichiers de langues spécifiques au type de C2I dans des fichiers nommés langues/plateforme.php, images/logo01.gif , images/logo02.gif ...).

Comme il est prévu désormais une diffusion du code des plate-formes sous github, cette stratégie de personnalisation doit être abandonnée.

En version 1.6, tous les fichiers de personnalisation sont disponibles dans langues et themes/v15/images/logos/ (avec des noms de la forme xxxx_c2i1, xxxx_c2i2mead...) et sont automatiquement utilisés en fonction du type de plateforme (variable de configuration CFG->c2i). Ceci permettra une diffusion du code complet de toutes les plate-formes sous git, sans passer par un installateur sur une nationale, et d'ajouter des nouveaux C2I simplement en ajoutant les fichiers de langues et images convenablement nommés.

PORTABILTE WINDOWS LINUX MAC important

virer tous les "/" en dur en les remplacer par les constantes PHP

ex:

// makes inclusions of the Zend Engine more reliable
   ini_set('include_path', $CFG->dirroot.DIRECTORY_SEPARATOR.'search'.PATH_SEPARATOR.ini_get('include_path'));


$path = realpath(dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'js').DIRECTORY_SEPARATOR;


idem pour les .. a changer avec dirname(dirname(....))

  $INSTALL['dataroot']        = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'moodledata';

virer les scripts MM_swapImages et les remplacer par des CSS [FAIT]

déjà fait en V1.5 avec les fonctions print_icones et une classe CSS par type d'action (consulter,modifier, dupliquer ...)

Implementé partout avec suppression du test $CFG->utiliser_mm_swapimage et de tous les templates contenant des références au script MM_swapimages.js


Transferts des écrans License, Crédits, Prérequis ... sur un serveur national [FAIT]

En version <1.6, chaque plateforme locale avait une copie locale de ces écrans, personnalisées pour le type de C2I et pas nécessairement à jour. Il importait donc à l'installateur de tranferer vers les locales ces pages HTML adaptées au type de C2i.

A partir de la version 1.6, ces écrans sont hébergés sur c2i.education.fr et sont appelés par les plateformes dans un paramètre nommé quoi qui corresponds à l'URL visé, automatiquement adapté au type de C2i.

Par exemple pour le C2i1 l'appel se fait par

 http://votrepf.fr/commun/legende.php?ou=aide&quoi=http://c2i.education.fr/pf/credits_c2i1.html

et l'affichage à lieu dans un iFrame.

idem pour les deux écrans Méthodologie de rédaction des questions et Contrat d'usage qui ont été déportés sur http://c2i.education.fr/pf/question_methodologie.html et http://c2i.education.fr/pf/contrat_usage.html

virer les popups

  • les remplacer par des "div bloquants" a la Wordpress avec la bibliothéque Thickbox (nécessiterait jQuery) ou une autre qui serait basée sur prototype qui nous utilisons déja. Il y a en effet des problèmes pour faire cohabiter jQuery et prototype (voir http://docs.jquery.com/Using_jQuery_with_Other_Libraries)

saupoudrer un peu plus d'Ajax

  • trop d'actions nécessitent encore un rechargement de la page alors que recharger un "div" via Ajax suffirait


remplacer la bibliothèque CAS [FAIT]

Fait. Passage a la version 1.1.3 plus le patch proposé pour Moodle 2.X

// hack by Patrick Pollet when using this under php 5.3 with strict error checking enabled
// see https://issues.jasig.org/browse/PHPCAS-46
// turn off E_STRICT in error reporting for all pages using this library

Ajouter authentification Shibooleth

Mettre en place un cron à la Moodle [FAIT a documenter]

Ceci permettrait de faire tourner sur le serveur des taches de maintenance comme :

  • la désinscription automatique de comptes anciens
  • la mise à jour automatique sur la nationale de la version à proposer au téléchargement
  • des synchronisations diverses via des appels Web Services (vers Moodle par exemple)
  • l'envoi automatique de mails suite a des évènements particuliers
  • la notification aux tuteurs pédagogiques pour les examens de type FLQ

Documenter la notion d'évenements pour personnaliser sa PF locale [FAIT]

utiliser systématiquement les capacités à la Moodle

une version simplifiée du système Moodle devrait suffire

  • chaque objet (compte,exam, question, notions , parcours a un contexte (son id automatique en BD)
  • on énumérer dans une table c2icapacites les autorisation sous la forme (id, catégorie,permission)
  • on a une table c2capacites_affectes avec l'id de la capacité et celui de l'utilisateur (login ou id unique )
  • et c'est tout
  • il faudra un écran d'affectation des capacités à chaque entité (bien que la plupart d'entre elles peuvent être déduites

des profils actuels ou affectées de facon interne des que l'on affecte une profil ); bien sur le créateur a automatiquement touts les capacités sur un objet


on pourrait ainsi donner les droits à 1 prof sur 1 examen particulier ou une question ...

pour inscrire quelqu'un a un examen il suffit de lui donner la capacité "examen":"passer"

ceci permettra de simplifier considérable le codage actuel de recherche des droits comme cleui-ci que l'on retrouve de partout :


 if ($ligne->modifiable || $CFG->peut_modifier_notion_nationale) {
	if (($row_admin->est_superadmin == 'O') || ($row_admin->est_admin_univ == 'O' && $ligne->id_etab == $USER->id_etab-perso) || ($row_droits->qd == 1 && $ligne->id_etab == $USER->id_etab-perso)) { 
....


et de gérer les sous établissements très simplement ... On ne créera pas focement de comptes en double chez eux, mais simplement des capacités pour les personnels existants déjà dans la père qui doivent aussi y intervenir ...

La PF Nationale aura simplement toutes les universités comme composantes ...


algorithme de base de la fonction a_capacite


function a _capacite ($categorie, $permission, $idobjet,$iduser="") {
    global $USER;
      if ($iduser=='') $iduser=$USER->id;  // appel pour moi ou pour un autre 
      if (is_admin($iduser)) return true;
     if ($USER->id == $id_user) {   //en cache 
         if (isset($USER->capacite[$categorie][$permission]) 
                  return ($USER->capacite[$categorie],[$permission]) ;
            
    }
    if ( $res =get_capacite ($categorie, $permission)) {            
              if (count_record ("capacites_affectes","id_capa=$res->id and id_user=$iduser and id_objet=$idobjet") {
                     if ($USER->id == $id_user) {   //mise en cache 
                          $USER->capacite[$categorie][$permission]=true ;
                     }
              } else return false;
    } else erreur_fatale ("err_dev_capacite_inconnu", $categorie."/".$permission); 
}

il faudra simplement modifier le schéma de la bd pour avoir pour chaque table un index unique (id à la Moodle) et on généra le cas des anciennes clés primaires multiples (ex c2iexamens...) par l'attribut UNIQUE de MySQL


Acceleration des pages

  • prévoir une version c2i_mini_params pour ajax en particulier
  • mettre en place un système de cache pour les infos fréquemment demandées en bd (ex referentiels, mon etablissement ...) ; reprendre mon système lib_cache de la V2


Structure d la BD

  • avoir systématiquement un champ "autonum" id en premier
  • remplacer les clés primaires multicolonnes actuelles par des index uniques ...
  • suppression des champs obsolètes (date heure en français, prérequis...) [FAIT]

problème des champs ayant un défaut à null dans la Bd [FAIT]

Ces champs ne renvoient pas d'attributs dans les objets renvoyés par get_record, donc l'affectation automatique par $tpl->assignObjet échoue et on voit apparaitre une balise entre crochets en mode "debug templates" si on oublie de les initialiser a "blanc"

probléme de accents dans la BD [FAIT]

certains champs ont des accents dans les valeurs (aléatoire, refusée ...) et la valeur de ce champ est récupérée direct du formulaire par input type =checkbox value ="aléatoire"

si pas malheur on édit un script sur un Linux avec l'UTF8 actif, on casse tout !

Pour l'instant il faut sous Linux utiliser Eclipse et bien le configurer en ISO-8859-1 !!!!

j'ai bien envie dans la mise à jour auto en v1.5 de virer ces accents ou de changer les types de champs (plus de enum chaines mais un simple entier ....

Preparer le passage de la BD en UTF8 [FAIT]

  • virer les champs d'état dont les valeurs contiennent des accents (validée, non examinée, aléatoire ...)
  • virer les champs "nommés" (positionnement, certification) dont la valeur correspond à une variable php
  • simplifier les tables c2iexamens et c2iquestions avec un champ binaire etat ou une série de champs booleens
  • virer tous les champs "date en francais" ou en "anglais", juste les timestamp de la 1.5

gestion des listes

  • fusionner chercheuse, trieuse et iconeuse dans une classe "flexitable" a la Moodle


Depréciation en php 5.3 [FAIT]

les fonctions suivantes seront dépréciées en php 5.3


from http://php.net/manual/en/migration53.deprecated.php

Deprecated functions:

    * call_user_method() (use call_user_func() instead)                   PAS UTILISEE
    * call_user_method_array() (use call_user_func_array() instead)       PAS UTILISEE
    * define_syslog_variables()                                           PAS UTILISEE
    * dl()                                                                PAS UTILISEE
    * ereg() (use preg_match() instead)                                   VOIR DISCUSSION DE CET ARTICLE
    * ereg_replace() (use preg_replace() instead)                          VOIR DISCUSSION DE CET ARTICLE
  
    * eregi() (use preg_match() with the 'i' modifier instead)              VOIR DISCUSSION DE CET ARTICLE
    * eregi_replace() (use preg_replace() with the 'i' modifier instead)      VOIR DISCUSSION DE CET ARTICLE
    * set_magic_quotes_runtime() and its alias, magic_quotes_runtime()         PAS UTILISEE
    * session_register() (use the $_SESSION superglobal instead)                FAIT
    * session_unregister() (use the $_SESSION superglobal instead)              FAIT 
    * session_is_registered() (use the $_SESSION superglobal instead)           PAS UTILISEE
    * set_socket_blocking() (use stream_set_blocking() instead)                 PAS UTILISEE
    * split() (use preg_split() instead)                                         VOIR DISCUSSION DE CET ARTICLE
    * spliti() (use preg_split() with the 'i' modifier instead)                    VOIR DISCUSSION DE CET ARTICLE
    * sql_regcase()                                                             PAS UTILISEE
    * mysql_db_query() (use mysql_select_db() and mysql_query() instead)         PAS UTILISEE
    * mysql_escape_string() (use mysql_real_escape_string() instead)              PAS UTILISEE
    * Passing locale category names as strings is now deprecated.    Use the LC_* family of constants instead.

    * The is_dst parameter to mktime(). Use the new timezone   handling functions instead.


Deprecated features:

    * Assigning the return value of new by reference is now deprecated.
    * Call-time pass-by-reference is now deprecated.
    * The use of {} to access string offsets is deprecated. Use [] instead.

import de questions

pb de conversion utf8 si on sauve le fichier sur un Linux/mac avant de le reimporter !!!!

sur la nationale autorisé aux admins des locales ?


validation des mots de passe

renseigne OK l'attribut title a partir de CFG, mais pas l'attribut {minlength} du validateur tpl remplace {l_mdp} par l_mdp  !! car ca doit etre dans un CDATA !

mot de passe d'un examen

visible par toute personne pouvant consulter sa fiche ....


revoir le code de récupération des lecteurs optiques FormAssistant

Pour FormAssistant, modifier fortement le code pour qu'il lise un dossier complet contenant de nombreux fichiers XML (il y en a un par candidat). La version actuelle ne lit qu'un XML à la fois qu'il faut sélectionner avec le bouton 'parcourir ...' (fastidieux et gros risque d'oubli)

Pb: ce dossier est sur le client, pas sur le serveur donc :

  - il va falloir envoyer un zip  au serveur 
  - le dezipper qq part (ressources/tmp)
  - balayer le dossier décompressé dans ressources/tmp a la recherche des fichier xxx.xml ....
  -de plus FormAssistant générè un tiff par feuille réponse, donc le zip va être monstrueux avec 1000-2000 candidats

et va exploser les limites des uploads vers le serveur. argh

plan B: fournir aux universités un programme écrit en ??? (exécutable tout client ! java ?) qui va fabriquer UN fichier dans un format ???? à partir de tous les résultats du dossier de FormAssistant et ensuite LE faire importer sur la PF pour traitement ....



problemes spécifiques windows

ie 6,7 ou 8: la page n'est pas centrée mais à gauche


iis : pb avec le chemin des ressources d:\c2i\ressources .... les slashes sont virés ... la solution actuelle est de les saisir à la UNIX dans la premiere page de l'installeur


convocations par mail

- message pas très bien formaté en mode HTML (pas de saut de ligne)

- donne une rubrique d'échec vide ...

-- pb des accents dans le sujet


fiche en general

devrait proposer un bouton modifier direct si on a le droit pb du retour ensuite avec rafraichissement de la liste en dessous (plus d'opener)

En cours de résolution via une variable de session comme celle utilisée pour rafraichir les examens lorsque l'on fait des inscriptions ou des génération de pools...

problèmes spécifiques à la nationale

le droit nouvelle question est attribué aux admins des locales ? Est-ce bien raisonnable ?

la fonction de recherche d'un compte par numéro d'étudiant ne considére pas l'établissement concerné. Donc si deux établissements utilisent la même 'numérotation' la recherche renvoie le 1er trouvé qui n'est peut être pas nécessairement le bon !

cela concerne :

 - les inscriptions massives par fichier plat  CSV   (sans LDAP)

 - la récupération de résultats des lecteurs optiques (AMC, QCMDirect)  
 - le web service cree_personnel, cree_candidat (en principe non dispos sur la nationale) 

ppollet@prope:/var/www/c2i/V1.5_pf/plate-forme$ grep -Rin get_compte_byidnumber * |grep -v svn 

commun/lib_import_export.php:713:            if ($cpt=get_compte_byidnumber($numetudiant,false)) {  //connu ? pas d'EF !
commun/lib_import_export.php:798:                       if ($cpt=get_compte_byidnumber($numetudiant,false)) {  //connu ? pas d'EF !
commun/lib_import_export.php:812:                                       if (!$cpt=ldap_get_compte_byidnumber($numetudiant))  { //erreur fatale si LDAP HS, null si pas trouv�
commun/lib_import_export.php:1030:                      if (!$cpt=get_compte_byidnumber($numero,false)){   //connu ? pas d'EF !
commun/lib_import_export.php:1100:            if (!$cpt=get_compte_byidnumber($numero,false)){   //connu ? pas d'EF !
commun/lib_import_export.php:1238:            if (!$cpt=get_compte_byidnumber($numero,false)){   //connu ? pas d'EF !
commun/lib_import_export.php:1362:            if (!$cpt=get_compte_byidnumber($numero,false)){   //connu ? pas d'EF !

ws/server.class.php:1096:           if ($cpt=get_compte_byidnumber($candidat->numetudiant,false)) {
ws/server.class.php:1153:           if ($cpt=get_compte_byidnumber($personnel->numetudiant,false)) {

CORRIGE EN REVISION 1.5 969 du 3 février 2010


positionnement anonyme

Question : comment fait-on pour modifier le texte de ce courriel (genre Université de xxxx) ?

QCM de positionnement avec tirage lors du passage

doit-on enregistrer les scores ???

en 1.4 les candidats étaient autorisés à le passer plusieurs fois (mias on n'enregistrait pas les scores) ! donc la réponse serait non ?

en 1.5 le code reste bizarre :

   -dans la liste des qcm on semble permettre de la passer plusieurs fois (reste du 1.4) mais il disparait dès le 1er passage .... 
   - on peut envisager de l'autoriser puisqu'on écrase les notes éventuellement présentes à chaque fois . 

décision : on n'enregistre pas donc il peut le passer plusieurs fois ... conséquence : pas de parcours enregistré dans ce cas, juste un "statique"

a tester



mail envoyé aux nouveaux inscrits

un peu sec ;-)

Vous avez été rajouté sur la plateforme C2i niveau 1 http://zzzzzzzz.fr/c2i/V1.5 avec login: xxxx et mot de passe: xxxxx

Outils personnels