diff --git a/actions/Import.php b/actions/Import.php
index c2034b03..8bc36b49 100644
--- a/actions/Import.php
+++ b/actions/Import.php
@@ -23,9 +23,11 @@
use common_report_Report;
use core_kernel_classes_Resource;
+use oat\generis\Helper\UserHashForEncryption;
use oat\generis\model\GenerisRdf;
use oat\taoTestTaker\models\CsvImporter;
use oat\taoTestTaker\models\events\TestTakerImportedEvent;
+use oat\taoTestTaker\models\TestTakerSavePasswordInMemory;
use tao_helpers_form_FormFactory;
/**
@@ -66,6 +68,7 @@ protected function getValidators(){
/**
* @param common_report_Report $report
+ * @throws \core_kernel_persistence_Exception
*/
protected function onAfterImport(common_report_Report $report)
{
@@ -73,8 +76,33 @@ protected function onAfterImport(common_report_Report $report)
foreach ($report->getSuccesses() as $success) {
$resource = $success->getData();
if ($resource instanceof core_kernel_classes_Resource) {
- $this->getEventManager()->trigger(new TestTakerImportedEvent($resource->getUri()));
+ $this->getEventManager()->trigger(new TestTakerImportedEvent($resource->getUri(), $this->getProperties($resource)));
}
}
}
+
+ /**
+ * @param core_kernel_classes_Resource $resource
+ * @return array
+ * @throws \core_kernel_persistence_Exception
+ * @throws \common_ext_ExtensionException
+ */
+ protected function getProperties($resource)
+ {
+ /** @var \common_ext_ExtensionsManager $extManager */
+ $extManager = $this->getServiceLocator()->get(\common_ext_ExtensionsManager::SERVICE_ID);
+ $taoTestTaker = $extManager->getExtensionById('taoTestTaker');
+ $config = $taoTestTaker->getConfig('csvImporterCallbacks');
+
+ if ((bool)$config['use_properties_for_event']){
+ return [
+ 'hashForKey' => UserHashForEncryption::hash(TestTakerSavePasswordInMemory::getPassword()),
+ GenerisRdf::PROPERTY_USER_PASSWORD => $resource->getOnePropertyValue(
+ new \core_kernel_classes_Property(GenerisRdf::PROPERTY_USER_PASSWORD)
+ )->literal
+ ];
+ }
+
+ return [];
+ }
}
diff --git a/actions/TestTaker.php b/actions/TestTaker.php
index 16190629..e852c765 100644
--- a/actions/TestTaker.php
+++ b/actions/TestTaker.php
@@ -22,6 +22,7 @@
namespace oat\taoTestTaker\actions;
use core_kernel_classes_Class;
+use oat\generis\Helper\UserHashForEncryption;
use oat\generis\model\GenerisRdf;
use oat\oatbox\event\EventManagerAwareTrait;
use oat\tao\model\resources\ResourceWatcher;
@@ -112,11 +113,13 @@ public function editSubject()
$values = $myForm->getValues();
if ($addMode) {
+ $plainPassword = $values['password1'];
$values[GenerisRdf::PROPERTY_USER_PASSWORD] = \core_kernel_users_Service::getPasswordHash()->encrypt($values['password1']);
unset($values['password1']);
unset($values['password2']);
} else {
if (! empty($values['password2'])) {
+ $plainPassword = $values['password2'];
$values[GenerisRdf::PROPERTY_USER_PASSWORD] = \core_kernel_users_Service::getPasswordHash()->encrypt($values['password2']);
}
unset($values['password2']);
@@ -126,7 +129,14 @@ public function editSubject()
$binder = new \tao_models_classes_dataBinding_GenerisFormDataBinder($subject);
$subject = $binder->bind($values);
- $this->getEventManager()->trigger(new TestTakerUpdatedEvent($subject->getUri(), $values));
+ $data = [];
+ if (isset($plainPassword)){
+ $data = ['hashForKey' => UserHashForEncryption::hash($plainPassword)];
+ }
+
+ $this->getEventManager()->trigger(new TestTakerUpdatedEvent($subject->getUri(),
+ array_merge($values, $data)
+ ));
if ($addMode) {
// force default subject roles to be the Delivery Role:
diff --git a/config/default/csvImporterCallbacks.php b/config/default/csvImporterCallbacks.php
new file mode 100644
index 00000000..3c372b57
--- /dev/null
+++ b/config/default/csvImporterCallbacks.php
@@ -0,0 +1,13 @@
+ array(
+ 'callbacks' => array(
+ '*' => array('trim'),
+ GenerisRdf::PROPERTY_USER_PASSWORD => array('oat\taoTestTaker\models\CsvImporter::taoSubjectsPasswordEncode')
+ ),
+ 'use_properties_for_event' => false
+ )
+));
diff --git a/locales/fr-CA/messages.lang.php b/locales/fr-CA/messages.lang.php
new file mode 100644
index 00000000..f1fda38f
--- /dev/null
+++ b/locales/fr-CA/messages.lang.php
@@ -0,0 +1,324 @@
+Filters"]="Filtres";
+$GLOBALS['__l10n']["Options"]="Options";
+$GLOBALS['__l10n']["> Extension %s succesfully installed."]="> Extension %s installée avec succès.";
+$GLOBALS['__l10n']["> Installation done."]="> Installation terminée.";
+$GLOBALS['__l10n']["A fatal error occured during the installation process."]="Une erreur fatale s'est produite pendant l'installation.";
+$GLOBALS['__l10n']["A message with further instructions has been sent to your email address: %s"]="Un message avec des instructions a été envoyée vers votre adresse courriel: %s";
+$GLOBALS['__l10n']["Access Denied"]="Accès refusé";
+$GLOBALS['__l10n']["Access denied. Please renew your authentication!"]="Accès refusé. Veuillez renouveler votre authentification !";
+$GLOBALS['__l10n']["Actions"]="Actions";
+$GLOBALS['__l10n']["Add"]="Ajouter";
+$GLOBALS['__l10n']["Add a CSV file"]="Ajouter un fichier CSV";
+$GLOBALS['__l10n']["Add a user"]="Ajouter un utilisateur";
+$GLOBALS['__l10n']["Add an RDF/XML file"]="Ajouter un fichier RDF/XML";
+$GLOBALS['__l10n']["Add file(s)"]="Ajouter un ou des fichier(s)";
+$GLOBALS['__l10n']["Add property"]="Ajouter une propriété";
+$GLOBALS['__l10n']["Advanced Mode"]="Mode avancé";
+$GLOBALS['__l10n']["all"]="tout";
+$GLOBALS['__l10n']["All data will be removed in %s"]="Toutes les données vont être supprimées dans %s";
+$GLOBALS['__l10n']["All fields are required"]="Tous les champs sont requis";
+$GLOBALS['__l10n']["All rights reserved."]="Tous droits réservés.";
+$GLOBALS['__l10n']["Alpha version"]="Version alpha";
+$GLOBALS['__l10n']["An email has been sent"]="Un courriel vous a été envoyé";
+$GLOBALS['__l10n']["Are you sure to delete the versioned resource?\nThe history will be lost as well."]="Êtes-vous sûr de vouloir supprimer la ressource versionnée ?\nL'historique sera également perdu.";
+$GLOBALS['__l10n']["Are you sure you want to delete it?"]="Êtes-vous sûr(e) de vouloir le supprimer ?";
+$GLOBALS['__l10n']["Assign User to role"]="Assigner l'utilisateur à un rôle";
+$GLOBALS['__l10n']["Assign Users"]="Assigner les utilisateurs";
+$GLOBALS['__l10n']["Author"]="Auteur";
+$GLOBALS['__l10n']["Author Item"]="Créer l'item";
+$GLOBALS['__l10n']["Authoring"]="Éditeur";
+$GLOBALS['__l10n']["Available Extensions"]="Extensions disponibles";
+$GLOBALS['__l10n']["Back to listing"]="Retour au référencement";
+$GLOBALS['__l10n']["Beta version"]="Version bêta";
+$GLOBALS['__l10n']["Browse folders:"]="Parcourir les dossiers:";
+$GLOBALS['__l10n']["Browse..."]="Naviguer...";
+$GLOBALS['__l10n']["Calendar"]="Calendrier";
+$GLOBALS['__l10n']["Cancel"]="Annuler";
+$GLOBALS['__l10n']["Cannot be edited"]="Ne peut être modifié";
+$GLOBALS['__l10n']["Change password"]="Changer le mot de passe";
+$GLOBALS['__l10n']["Change the password"]="Modifier le mot de passe";
+$GLOBALS['__l10n']["Check all"]="Cocher tout";
+$GLOBALS['__l10n']["Check All"]="Cocher Tout";
+$GLOBALS['__l10n']["Choose export format"]="Format d'export";
+$GLOBALS['__l10n']["Choose import format"]="Format d'import";
+$GLOBALS['__l10n']["class selected"]="classe sélectionnée";
+$GLOBALS['__l10n']["Column"]="Colonne";
+$GLOBALS['__l10n']["Combine a selection of items into tests."]="Combiner une sélection d'items en tests.";
+$GLOBALS['__l10n']["Confirm"]="Confirmer";
+$GLOBALS['__l10n']["Connect to the TAO platform"]="Connexion à la plate-forme TAO";
+$GLOBALS['__l10n']["Continue"]="Continuer";
+$GLOBALS['__l10n']["Create"]="Créer";
+$GLOBALS['__l10n']["Create and design items and exercises."]="Concevoir des items et exercices.";
+$GLOBALS['__l10n']["Create instance of "]="Créer une instance de ";
+$GLOBALS['__l10n']["CSV"]="CSV";
+$GLOBALS['__l10n']["CSV Options"]="Options CSV";
+$GLOBALS['__l10n']["Current language"]="Langue courante";
+$GLOBALS['__l10n']["Data imported"]="Importation des données";
+$GLOBALS['__l10n']["Data imported successfully"]="Données importées avec succès.";
+$GLOBALS['__l10n']["Data Language"]="Langue des données";
+$GLOBALS['__l10n']["Data language"]="Langue des données";
+$GLOBALS['__l10n']["Date"]="Date";
+$GLOBALS['__l10n']["Define the default values"]="Définir les valeurs par défaut";
+$GLOBALS['__l10n']["Delete"]="Supprimer";
+$GLOBALS['__l10n']["Deliveries"]="Passations";
+$GLOBALS['__l10n']["Deliveries library"]="Bibliothèque de passations";
+$GLOBALS['__l10n']["Demo Sandbox"]="Démonstration";
+$GLOBALS['__l10n']["Do you wish to install the following extension(s):\n%s?"]="Souhaitez-vous installer le(s) extension(s) suivante(s) :\n%s ?";
+$GLOBALS['__l10n']["does not match"]="Ne correspond pas";
+$GLOBALS['__l10n']["Don't set"]="Ne pas insérer";
+$GLOBALS['__l10n']["Download"]="Télécharger";
+$GLOBALS['__l10n']["Download this file"]="Télécharger ce fichier";
+$GLOBALS['__l10n']["Drag file here"]="Glisser le fichier ici";
+$GLOBALS['__l10n']["Drag files here"]="Glisser le fichier ici";
+$GLOBALS['__l10n']["Drop the files to upload"]="Choisissez des fichiers à envoyer";
+$GLOBALS['__l10n']["Duplicate"]="Dupliquer";
+$GLOBALS['__l10n']["Edit"]="Éditer";
+$GLOBALS['__l10n']["Edit a user"]="Éditer un utilisateur";
+$GLOBALS['__l10n']["Edit Instance"]="Modifier Instance";
+$GLOBALS['__l10n']["Edit subject"]="Modifier le participant";
+$GLOBALS['__l10n']["Element"]="Élément";
+$GLOBALS['__l10n']["Element deleted."]="Élément supprimé.";
+$GLOBALS['__l10n']["Email"]="Email";
+$GLOBALS['__l10n']["Enter"]="Entrée";
+$GLOBALS['__l10n']["Error"]="Erreur";
+$GLOBALS['__l10n']["Error during file import"]="Erreur pendant l'import du fichier";
+$GLOBALS['__l10n']["Exclusive (OR)"]="Exclusif (OU)";
+$GLOBALS['__l10n']["Export"]="Exporter";
+$GLOBALS['__l10n']["Export "]="Export";
+$GLOBALS['__l10n']["Export Metadata as RDF/XML file"]="Expoter les métadonnées comme un fichier RDF/XML";
+$GLOBALS['__l10n']["Extension "]="L'extension ";
+$GLOBALS['__l10n']["Extensions manager"]="Gestionnaire d'extensions";
+$GLOBALS['__l10n']["Field delimiter"]="Séparateur de champ";
+$GLOBALS['__l10n']["Field encloser"]="Clôture de champ";
+$GLOBALS['__l10n']["File"]="Fichier";
+$GLOBALS['__l10n']["File name"]="Nom de fichier";
+$GLOBALS['__l10n']["File Properties"]="Propriétés du fichier";
+$GLOBALS['__l10n']["file selected"]="Sélectionner le fichier";
+$GLOBALS['__l10n']["File Uploader"]="Téléchargeur de fichier";
+$GLOBALS['__l10n']["files selected"]="fichiers sélectionnés";
+$GLOBALS['__l10n']["Filter"]="Filtre";
+$GLOBALS['__l10n']["Filtering mode"]="Mode de filtrage";
+$GLOBALS['__l10n']["First Name"]="Prénom";
+$GLOBALS['__l10n']["First row column names"]="Noms de colonne en première ligne";
+$GLOBALS['__l10n']["Force Release"]="Forcer la publication";
+$GLOBALS['__l10n']["Go Back"]="Revenir";
+$GLOBALS['__l10n']["Height"]="Hauteur";
+$GLOBALS['__l10n']["Hide detailed report"]="Cacher le rapport détaillé";
+$GLOBALS['__l10n']["hours"]="heures";
+$GLOBALS['__l10n']["Import"]="Importer";
+$GLOBALS['__l10n']["Import "]="Import";
+$GLOBALS['__l10n']["Import Metadata from CSV file"]="Importer des méta-données à partir d'un fichier CSV";
+$GLOBALS['__l10n']["Import Metadata from RDF file"]="Importer des méta-données à partir d'un fichier RDF";
+$GLOBALS['__l10n']["Inclusive (AND)"]="Inclusif (ET)";
+$GLOBALS['__l10n']["Install"]="Installer";
+$GLOBALS['__l10n']["Installation done."]="Installation terminée.";
+$GLOBALS['__l10n']["Installation..."]="Installation...";
+$GLOBALS['__l10n']["Installed Extensions"]="Extensions installées";
+$GLOBALS['__l10n']["Installing extension %s..."]="Installation de l'extension %s...";
+$GLOBALS['__l10n']["Instance saved"]="Instance enregistrée";
+$GLOBALS['__l10n']["Interface Language"]="Langue de l'interface";
+$GLOBALS['__l10n']["Interface language"]="Langue de l'interface";
+$GLOBALS['__l10n']["Invalid field length"]="La longueur du champ est invalide";
+$GLOBALS['__l10n']["Invalid file type!"]="Type de fichier invalide";
+$GLOBALS['__l10n']["Invalid login or password. Please try again."]="Identifiant ou mot de passe invalide. Veuillez réessayer.";
+$GLOBALS['__l10n']["invalid regular expression"]="Expression régulière non valide";
+$GLOBALS['__l10n']["Items"]="Items";
+$GLOBALS['__l10n']["Items library"]="Banque d'items";
+$GLOBALS['__l10n']["Label"]="Libellé";
+$GLOBALS['__l10n']["Language"]="Langue";
+$GLOBALS['__l10n']["Last Name"]="Nom";
+$GLOBALS['__l10n']["less than a minute"]="Moins d'une minute";
+$GLOBALS['__l10n']["List"]="Liste";
+$GLOBALS['__l10n']["List - Multiple choice - Check box"]="Liste - Choix multiple - Case à cocher";
+$GLOBALS['__l10n']["List - Single choice - Drop down"]="Liste - Choix unique - Liste déroulante";
+$GLOBALS['__l10n']["List - Single choice - Radio button"]="Liste - Choix multiple - Bouton radio";
+$GLOBALS['__l10n']["Loaded"]="Chargé";
+$GLOBALS['__l10n']["Loaded at Startup"]="Chargé au Démarrage";
+$GLOBALS['__l10n']["Log in"]="Se connecter";
+$GLOBALS['__l10n']["Log Out"]="Se déconnecter";
+$GLOBALS['__l10n']["Login"]="Identifiant";
+$GLOBALS['__l10n']["Login available"]="Identifiant disponible";
+$GLOBALS['__l10n']["Manage data list"]="Gestion des listes";
+$GLOBALS['__l10n']["Manage items"]="Gestion des items";
+$GLOBALS['__l10n']["Manage roles"]="Gérer les rôles";
+$GLOBALS['__l10n']["Manage Roles and apply them to users."]="Gère des Rôles et les applique aux utilisateurs.";
+$GLOBALS['__l10n']["Manage test takers"]="Gestion des participants";
+$GLOBALS['__l10n']["Manage tests"]="Gestion des tests";
+$GLOBALS['__l10n']["Manage users"]="Gérer les utilisateurs";
+$GLOBALS['__l10n']["Manage Versioned File"]="Gérer les fichiers versionnés";
+$GLOBALS['__l10n']["Map the properties to the CSV columns"]="Choisissez les propriétés relatives aux colonnes CSV";
+$GLOBALS['__l10n']["minutes"]="minutes";
+$GLOBALS['__l10n']["More"]="Plus";
+$GLOBALS['__l10n']["Move"]="Déplacer";
+$GLOBALS['__l10n']["Move to"]="Déplacer vers";
+$GLOBALS['__l10n']["Moving this element will replace the properties of the previous class by those of the destination class :"]="En bougeant cet élément, les propriétés de la classe précédente seront remplacées par ceux de la classe de destination :";
+$GLOBALS['__l10n']["Moving this element will replace the properties of the previous class by those of the destination class:"]="En bougeant cet élément, les propriétés de la classe précédente seront remplacées par celles de la classe de destination :";
+$GLOBALS['__l10n']["Multiple values delimiter"]="Délimiteur de valeurs multiples";
+$GLOBALS['__l10n']["must be numeric"]="Doit être numérique";
+$GLOBALS['__l10n']["My settings"]="Mes paramètres";
+$GLOBALS['__l10n']["My settings (%s)"]="Mes paramètres (%s)";
+$GLOBALS['__l10n']["Name"]="Nom";
+$GLOBALS['__l10n']["New class"]="Nouvelle classe";
+$GLOBALS['__l10n']["New delivery"]="Nouvelle passation";
+$GLOBALS['__l10n']["New password"]="Nouveau mot de passe";
+$GLOBALS['__l10n']["New role"]="Nouveau rôle";
+$GLOBALS['__l10n']["New test"]="Créer test";
+$GLOBALS['__l10n']["New test-taker"]="Créer participant";
+$GLOBALS['__l10n']["Next"]="Suivant";
+$GLOBALS['__l10n']["No"]="Non";
+$GLOBALS['__l10n']["No extensions available."]="Pas d'extension disponible.";
+$GLOBALS['__l10n']["no file not found in this location"]="pas de fichier trouvé à cette endroit";
+$GLOBALS['__l10n']["No file selected"]="Pas de fichier sélectionné";
+$GLOBALS['__l10n']["No files"]="Aucun fichier";
+$GLOBALS['__l10n']["no label"]="sans étiquette";
+$GLOBALS['__l10n']["No Preview available"]="Aucun aperçu disponible";
+$GLOBALS['__l10n']["No preview available"]="Aucun aperçu disponible";
+$GLOBALS['__l10n']["No results found"]="Aucun résultat trouvé";
+$GLOBALS['__l10n']["Nothing imported"]="Aucune donnée n'a été importée";
+$GLOBALS['__l10n']["Nothing to install !"]="Rien à installer !";
+$GLOBALS['__l10n']["Number of elements"]="Nombre d'éléments";
+$GLOBALS['__l10n']["of"]="de";
+$GLOBALS['__l10n']["Ok"]="Ok";
+$GLOBALS['__l10n']["OK"]="Ok";
+$GLOBALS['__l10n']["Old Password"]="Ancien mot de passe";
+$GLOBALS['__l10n']["or"]="ou";
+$GLOBALS['__l10n']["Page"]="Page";
+$GLOBALS['__l10n']["Password"]="Mot de passe";
+$GLOBALS['__l10n']["Password changed"]="Mot de passé modifié";
+$GLOBALS['__l10n']["Passwords are not matching"]="Les mots de passe ne correspondent pas";
+$GLOBALS['__l10n']["Please confirm deletion"]="Veuillez confirmer la suppression.";
+$GLOBALS['__l10n']["Please confirm property deletion!"]="Veuillez confirmer la suppression de la propriété";
+$GLOBALS['__l10n']["Please confirm this operation."]="Veuillez confirmer cette opération.";
+$GLOBALS['__l10n']["Please confirm user deletion"]="Veuillez confirmer la suppression de l'utilisateur.";
+$GLOBALS['__l10n']["Post install processing"]="Traitement après installation";
+$GLOBALS['__l10n']["Prepare, publish deliveries sessions."]="Préparer, publier des sessions de passations.";
+$GLOBALS['__l10n']["Preparing installation..."]="Préparation de l'installation...";
+$GLOBALS['__l10n']["Preview"]="Aperçu ";
+$GLOBALS['__l10n']["Previous"]="Précédent";
+$GLOBALS['__l10n']["Properties"]="Propriétés";
+$GLOBALS['__l10n']["RDF"]="RDF";
+$GLOBALS['__l10n']["Record and manage test takers."]="Enregistrer et gérer les participants.";
+$GLOBALS['__l10n']["Release"]="Publication";
+$GLOBALS['__l10n']["Remove"]="Supprimer";
+$GLOBALS['__l10n']["Remove Message"]="Enlever ce message";
+$GLOBALS['__l10n']["Remove this file"]="Supprimer ce fichier";
+$GLOBALS['__l10n']["Rename"]="Renommer";
+$GLOBALS['__l10n']["Repeat new password"]="Répétition du nouveau mot de passe";
+$GLOBALS['__l10n']["required length"]="taille requise";
+$GLOBALS['__l10n']["Requires"]="Nécessite";
+$GLOBALS['__l10n']["Reset"]="Réinitialiser";
+$GLOBALS['__l10n']["Resource"]="Ressource";
+$GLOBALS['__l10n']["Resource not imported due to multiple super classes"]="La ressource n'a pas pu être importer a cause de la présence de plusieurs super-classes";
+$GLOBALS['__l10n']["Resource not imported due to multiple types"]="La ressource n'a pas pu être importer a cause de la présence de plusieurs types";
+$GLOBALS['__l10n']["Resource saved"]="Ressource enregistrée";
+$GLOBALS['__l10n']["Responsive mode"]="Mode réactif";
+$GLOBALS['__l10n']["Right click the tree to manage your lists"]="Utilisez le clic droit pour gérer vos listes";
+$GLOBALS['__l10n']["Role saved"]="Rôle enregistré";
+$GLOBALS['__l10n']["Roles"]="Rôles";
+$GLOBALS['__l10n']["Roles library"]="Bibliothèque de rôles";
+$GLOBALS['__l10n']["Save"]="Enregistrer";
+$GLOBALS['__l10n']["Scope"]="Etendue";
+$GLOBALS['__l10n']["Search"]="Rechercher";
+$GLOBALS['__l10n']["Search sub-classes"]="Chercher des sous-classes";
+$GLOBALS['__l10n']["seconds"]="secondes";
+$GLOBALS['__l10n']["Select"]="Choisir";
+$GLOBALS['__l10n']["select"]="choisir";
+$GLOBALS['__l10n']["Select a language"]="Sélectionner un langage";
+$GLOBALS['__l10n']["Select the element destination"]="Choisir l'élément de destination";
+$GLOBALS['__l10n']["Select this file"]="Sélectionner le fichier";
+$GLOBALS['__l10n']["selected"]="sélectionné";
+$GLOBALS['__l10n']["Selected file:"]="Fichier sélectionné :";
+$GLOBALS['__l10n']["Selection saved successfully"]="Sélection enregistrée avec succès";
+$GLOBALS['__l10n']["Settings"]="Réglages";
+$GLOBALS['__l10n']["Settings updated"]="Réglages mis à jour";
+$GLOBALS['__l10n']["Show detailed report"]="Montrer le détail du rapport";
+$GLOBALS['__l10n']["Simple Mode"]="Mode simple";
+$GLOBALS['__l10n']["Size"]="Taille";
+$GLOBALS['__l10n']["Success"]="Succès";
+$GLOBALS['__l10n']["Supported export formats"]="Formats d'export supportés";
+$GLOBALS['__l10n']["TAO Home"]="Menu principal TAO";
+$GLOBALS['__l10n']["TAO Login"]="Connexion à TAO";
+$GLOBALS['__l10n']["Test taker saved"]="Participant enregistré";
+$GLOBALS['__l10n']["Test takers"]="Participants";
+$GLOBALS['__l10n']["Test takers library"]="Participants";
+$GLOBALS['__l10n']["Test takers may be assigned to sets according to the relevant assessment context (Human resources management, education, edumetric monitoring, etc.)."]="Les participants peuvent être assignés à des ensembles selon le contexte d’évaluation (gestion des ressources humaines, éducation, contrôle d'édumétrie, etc.).";
+$GLOBALS['__l10n']["Test-takers"]="Participants";
+$GLOBALS['__l10n']["Tests"]="Tests";
+$GLOBALS['__l10n']["Tests library"]="Tests";
+$GLOBALS['__l10n']["Text - Long - Box"]="Texte - Long - Boîte";
+$GLOBALS['__l10n']["Text - Long - HTML editor"]="Texte - Long - Éditeur HTML";
+$GLOBALS['__l10n']["Text - Short - Field"]="Texte - Long - Champ";
+$GLOBALS['__l10n']["The column "]="La colonne ";
+$GLOBALS['__l10n']["The lock has been released"]="Le verrou a été supprimé";
+$GLOBALS['__l10n']["The Test takers module allows to record and manage test takers."]="Le module Participants vous permet d'ajouter et de gérer les sujets des tests.";
+$GLOBALS['__l10n']["The value of this field must be a valide date format, e.g. YYYY-MM-DD"]="La valeur de ce champs doit être formatée telle une date valide, ex. AAAA-MM-JJ";
+$GLOBALS['__l10n']["The value of this field must be an integer"]="La valeur de ce champ doit être un nombre entier.";
+$GLOBALS['__l10n']["The value of this field must be numeric"]="La valeur de ce champ doit être numérique";
+$GLOBALS['__l10n']["This field is required"]="Ce champ est requis.";
+$GLOBALS['__l10n']["This field is too long"]="Ce champ est trop long.";
+$GLOBALS['__l10n']["This field is too short"]="Ce champ est trop court.";
+$GLOBALS['__l10n']["this is required"]="ceci est obligatoire";
+$GLOBALS['__l10n']["This Login is already in use"]="Cet identifiant est déjà utilisé";
+$GLOBALS['__l10n']["This resource is locked"]="La ressource est verrouillée";
+$GLOBALS['__l10n']["This role is still given to one or more users. Please remove the role to these users first."]="Ce rôle est encore affecté à un ou plusieurs utilisateurs. Veuillez d'abord retirer le rôle pour ce(s) utilisateur(s).";
+$GLOBALS['__l10n']["Time zone"]="Fuseau horaire";
+$GLOBALS['__l10n']["to translate"]="Non traduite";
+$GLOBALS['__l10n']["Translate"]="Traduire";
+$GLOBALS['__l10n']["Translate to"]="Traduire en";
+$GLOBALS['__l10n']["Translation parameters"]="Paramètres de la traductions";
+$GLOBALS['__l10n']["Translation saved"]="Traduction enregistrée";
+$GLOBALS['__l10n']["Type"]="Type";
+$GLOBALS['__l10n']["Unable to change passwords in demo mode"]="Impossible de changer les mots de passe en mode démonstration";
+$GLOBALS['__l10n']["Unable to delete the selected resource"]="Autoriser la suppression de la ressource sélectionnée";
+$GLOBALS['__l10n']["Unable to release the lock"]="Autoriser la publication de la serrure";
+$GLOBALS['__l10n']["Unable to upload file"]="Autoriser le téléchargement du fichier";
+$GLOBALS['__l10n']["Uncheck all"]="Décocher tout";
+$GLOBALS['__l10n']["Uncheck All"]="Décocher tout";
+$GLOBALS['__l10n']["Undo"]="Annuler une action";
+$GLOBALS['__l10n']["unknown"]="inconnu";
+$GLOBALS['__l10n']["Unknown Error"]="Erreur Inconnue";
+$GLOBALS['__l10n']["Upload"]="Téléverser";
+$GLOBALS['__l10n']["Upload into:"]="Envoyer vers :";
+$GLOBALS['__l10n']["Use default value"]="Utiliser la valeur par défaut";
+$GLOBALS['__l10n']["User"]="Utilisateur";
+$GLOBALS['__l10n']["User added"]="Utilisateur ajouté";
+$GLOBALS['__l10n']["User deleted successfully"]="Utilisateur supprimé avec succès.";
+$GLOBALS['__l10n']["User saved"]="Utilisateur enregistré";
+$GLOBALS['__l10n']["User Settings"]="Paramètres Utilisateur";
+$GLOBALS['__l10n']["Users"]="Utilisateurs";
+$GLOBALS['__l10n']["Version"]="Version";
+$GLOBALS['__l10n']["Width"]="Largeur";
+$GLOBALS['__l10n']["Yes"]="Oui";
+$GLOBALS['__l10n']["You are not authorised to remove this lock"]="Vous n'êtes pas autorisé à supprimer cette fermeture";
+$GLOBALS['__l10n']["You cannot delete the root node"]="Vous ne pouvez pas supprimer le noeud de la racine";
+$GLOBALS['__l10n']["You currently have no access to the platform"]="Vous n'avez actuellement pas accès à la plate-forme";
+$GLOBALS['__l10n']["You must activate JavaScript in your browser to run this application."]="JavaScript doit être activé dans votre navigateur pour lancer cette applcation";
+
+?>
\ No newline at end of file
diff --git a/locales/fr-CA/messages.po b/locales/fr-CA/messages.po
new file mode 100644
index 00000000..09739fa9
--- /dev/null
+++ b/locales/fr-CA/messages.po
@@ -0,0 +1,81 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: TAO 3.3.0-sprint72-½\n"
+"PO-Revision-Date: 2018-03-21T13:56:57\n"
+"Last-Translator: TAO Translation Team \n"
+"MIME-Version: 1.0\n"
+"Language: fr-CA\n"
+"sourceLanguage: en-US\n"
+"targetLanguage: fr-CA\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: ../../\n"
+"X-Poedit-KeywordsList: __\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#, tao-public
+msgid "Delete"
+msgstr "Supprimer"
+
+msgid "Edit subject"
+msgstr "Modifier le participant"
+
+#, tao-public
+msgid "Export"
+msgstr "Exporter"
+
+#, tao-public
+msgid "Import"
+msgstr "Importer"
+
+msgid "Last updated on %2s"
+msgstr ""
+
+#, tao-public
+msgid "Manage Schema"
+msgstr ""
+
+#, tao-public
+msgid "Manage test takers"
+msgstr "Gestion des participants"
+
+#, tao-public
+msgid "Move"
+msgstr "Déplacer"
+
+#, tao-public
+msgid "New class"
+msgstr "Nouvelle classe"
+
+#, tao-public
+msgid "New test-taker"
+msgstr "Créer participant"
+
+#, tao-public
+msgid "Properties"
+msgstr "Propriétés"
+
+#, tao-public
+msgid "Record and manage test takers."
+msgstr "Enregistrer et gérer les participants."
+
+msgid "Test taker saved"
+msgstr "Participant enregistré"
+
+msgid "Test takers"
+msgstr "Participants"
+
+#, tao-public
+msgid "Test takers library"
+msgstr "Participants"
+
+msgid "Test takers may be assigned to sets according to the relevant assessment context (Human resources management, education, edumetric monitoring, etc.)."
+msgstr "Les participants peuvent être assignés à des ensembles selon le contexte d’évaluation (gestion des ressources humaines, éducation, contrôle d'édumétrie, etc.)."
+
+#, tao-public
+msgid "Test-takers"
+msgstr "Participants"
+
+msgid "The Test takers module allows to record and manage test takers."
+msgstr "Le module Participants vous permet d'ajouter et de gérer les sujets des tests."
+
diff --git a/locales/fr-CA/messages_po.js b/locales/fr-CA/messages_po.js
new file mode 100644
index 00000000..d8836d4f
--- /dev/null
+++ b/locales/fr-CA/messages_po.js
@@ -0,0 +1 @@
+{" and ":" et "," has been deleted successfully":" a \u00e9t\u00e9 supprim\u00e9 avec succ\u00e8s."," has been installed":" a \u00e9t\u00e9 install\u00e9e."," next":" suivant"," requires a subgrid adapter":" requiert un adaptateur de sous-grille","%d day":"%d jour","%d days":"%d jours","%h hour":"%h heure","%h hours":"%h heures","%i minute":"%i minute(s)","%i minutes":"%i\u00a0minute(s)","%m month":"%m mois","%m months":"%m mois","%s (%s kb)":"%s (%s kb)","%s Class saved":"%s Classe sauvegard\u00e9e","%s could not be released":"%s n\u0027a pu \u00eatre lib\u00e9r\u00e9","%s extension(s) to install.":"%s extension(s) \u00e0 installer.","%s has been deleted":"%s a \u00e9t\u00e9 supprim\u00e9","%s has been released":"%s a \u00e9t\u00e9 lib\u00e9r\u00e9","%s is of a type that cannot be published":"%s est dans un format qui n\u0027a pas pu \u00eatre publi\u00e9","%s Locked":"%s verrouill\u00e9","%s\u0022 is not a valid index identifier. It must start with a letter and contain letters, numbers or underscores only":"%s n\u0027est pas un identifiant d\u0027index valide. Celui-ci devrait d\u00e9buter par un caract\u00e8re alphab\u00e9tique et contenir soit des caract\u00e8res, des nombres ou des barre de soulign\u00e9 uniquement. ","%y year":"%y ann\u00e9e","%y years":"%y ann\u00e9es","(empty)":"(vide)","... reloading page.":"... rechargement de la page.","Filters<\/del>":"Filtres<\/del>","Options<\/del>":"Options<\/del>","> Extension %s succesfully installed.":"> Extension %s install\u00e9e avec succ\u00e8s.","> Installation done.":"> Installation termin\u00e9e.","A fatal error occured during the installation process.":"Une erreur fatale s\u0027est produite pendant l\u0027installation.","A message with further instructions has been sent to your email address: %s":"Un message avec des instructions a \u00e9t\u00e9 envoy\u00e9e vers votre adresse courriel: %s","Access Denied":"Acc\u00e8s refus\u00e9","Access denied. Please renew your authentication!":"Acc\u00e8s refus\u00e9. Veuillez renouveler votre authentification !","Actions":"Actions","Add":"Ajouter","Add a CSV file":"Ajouter un fichier CSV","Add a user":"Ajouter un utilisateur","Add an RDF\/XML file":"Ajouter un fichier RDF\/XML","Add file(s)":"Ajouter un ou des fichier(s)","Add property":"Ajouter une propri\u00e9t\u00e9","Advanced Mode":"Mode avanc\u00e9","all":"tout","All data will be removed in %s":"Toutes les donn\u00e9es vont \u00eatre supprim\u00e9es dans %s","All fields are required":"Tous les champs sont requis","All rights reserved.":"Tous droits r\u00e9serv\u00e9s.","Alpha version":"Version alpha","An email has been sent":"Un courriel vous a \u00e9t\u00e9 envoy\u00e9","Are you sure to delete the versioned resource?\nThe history will be lost as well.":"\u00cates-vous s\u00fbr de vouloir supprimer la ressource versionn\u00e9e ?\nL\u0027historique sera \u00e9galement perdu.","Are you sure you want to delete it?":"\u00cates-vous s\u00fbr(e) de vouloir le supprimer ?","Assign User to role":"Assigner l\u0027utilisateur \u00e0 un r\u00f4le","Assign Users":"Assigner les utilisateurs","Author":"Auteur","Author Item":"Cr\u00e9er l\u0027item","Authoring":"\u00c9diteur","Available Extensions":"Extensions disponibles","Back to listing":"Retour au r\u00e9f\u00e9rencement","Beta version":"Version b\u00eata","Browse folders:":"Parcourir les dossiers:","Browse...":"Naviguer...","Calendar":"Calendrier","Cancel":"Annuler","Cannot be edited":"Ne peut \u00eatre modifi\u00e9","Change password":"Changer le mot de passe","Change the password":"Modifier le mot de passe","Check all":"Cocher tout","Check All":"Cocher Tout","Choose export format":"Format d\u0027export","Choose import format":"Format d\u0027import","class selected":"classe s\u00e9lectionn\u00e9e","Column":"Colonne","Combine a selection of items into tests.":"Combiner une s\u00e9lection d\u0027items en tests.","Confirm":"Confirmer","Connect to the TAO platform":"Connexion \u00e0 la plate-forme TAO","Continue":"Continuer","Create":"Cr\u00e9er","Create and design items and exercises.":"Concevoir des items et exercices.","Create instance of ":"Cr\u00e9er une instance de ","CSV":"CSV","CSV Options":"Options CSV","Current language":"Langue courante","Data imported":"Importation des donn\u00e9es","Data imported successfully":"Donn\u00e9es import\u00e9es avec succ\u00e8s.","Data Language":"Langue des donn\u00e9es","Data language":"Langue des donn\u00e9es","Date":"Date","Define the default values":"D\u00e9finir les valeurs par d\u00e9faut","Delete":"Supprimer","Deliveries":"Passations","Deliveries library":"Biblioth\u00e8que de passations","Demo Sandbox":"D\u00e9monstration","Do you wish to install the following extension(s):\n%s?":"Souhaitez-vous installer le(s) extension(s) suivante(s) :\n%s ?","does not match":"Ne correspond pas","Don\u0027t set":"Ne pas ins\u00e9rer","Download":"T\u00e9l\u00e9charger","Download this file":"T\u00e9l\u00e9charger ce fichier","Drag file here":"Glisser le fichier ici","Drag files here":"Glisser le fichier ici","Drop the files to upload":"Choisissez des fichiers \u00e0 envoyer","Duplicate":"Dupliquer","Edit":"\u00c9diter","Edit a user":"\u00c9diter un utilisateur","Edit Instance":"Modifier Instance","Edit subject":"Modifier le participant","Element":"\u00c9l\u00e9ment","Element deleted.":"\u00c9l\u00e9ment supprim\u00e9.","Email":"Email","Enter":"Entr\u00e9e","Error":"Erreur","Error during file import":"Erreur pendant l\u0027import du fichier","Exclusive (OR)":"Exclusif (OU)","Export":"Exporter","Export ":"Export","Export Metadata as RDF\/XML file":"Expoter les m\u00e9tadonn\u00e9es comme un fichier RDF\/XML","Extension ":"L\u0027extension ","Extensions manager":"Gestionnaire d\u0027extensions","Field delimiter":"S\u00e9parateur de champ","Field encloser":"Cl\u00f4ture de champ","File":"Fichier","File name":"Nom de fichier","File Properties":"Propri\u00e9t\u00e9s du fichier","file selected":"S\u00e9lectionner le fichier","File Uploader":"T\u00e9l\u00e9chargeur de fichier","files selected":"fichiers s\u00e9lectionn\u00e9s","Filter":"Filtre","Filtering mode":"Mode de filtrage","First Name":"Pr\u00e9nom","First row column names":"Noms de colonne en premi\u00e8re ligne","Force Release":"Forcer la publication","Go Back":"Revenir","Height":"Hauteur","Hide detailed report":"Cacher le rapport d\u00e9taill\u00e9","hours":"heures","Import":"Importer","Import ":"Import","Import Metadata from CSV file":"Importer des m\u00e9ta-donn\u00e9es \u00e0 partir d\u0027un fichier CSV","Import Metadata from RDF file":"Importer des m\u00e9ta-donn\u00e9es \u00e0 partir d\u0027un fichier RDF","Inclusive (AND)":"Inclusif (ET)","Install":"Installer","Installation done.":"Installation termin\u00e9e.","Installation...":"Installation...","Installed Extensions":"Extensions install\u00e9es","Installing extension %s...":"Installation de l\u0027extension %s...","Instance saved":"Instance enregistr\u00e9e","Interface Language":"Langue de l\u0027interface","Interface language":"Langue de l\u0027interface","Invalid field length":"La longueur du champ est invalide","Invalid file type!":"Type de fichier invalide","Invalid login or password. Please try again.":"Identifiant ou mot de passe invalide. Veuillez r\u00e9essayer.","invalid regular expression":"Expression r\u00e9guli\u00e8re non valide","Items":"Items","Items library":"Banque d\u0027items","Label":"Libell\u00e9","Language":"Langue","Last Name":"Nom","less than a minute":"Moins d\u0027une minute","List":"Liste","List - Multiple choice - Check box":"Liste - Choix multiple - Case \u00e0 cocher","List - Single choice - Drop down":"Liste - Choix unique - Liste d\u00e9roulante","List - Single choice - Radio button":"Liste - Choix multiple - Bouton radio","Loaded":"Charg\u00e9","Loaded at Startup":"Charg\u00e9 au D\u00e9marrage","Log in":"Se connecter","Log Out":"Se d\u00e9connecter","Login":"Identifiant","Login available":"Identifiant disponible","Manage data list":"Gestion des listes","Manage items":"Gestion des items","Manage roles":"G\u00e9rer les r\u00f4les","Manage Roles and apply them to users.":"G\u00e8re des R\u00f4les et les applique aux utilisateurs.","Manage test takers":"Gestion des participants","Manage tests":"Gestion des tests","Manage users":"G\u00e9rer les utilisateurs","Manage Versioned File":"G\u00e9rer les fichiers versionn\u00e9s","Map the properties to the CSV columns":"Choisissez les propri\u00e9t\u00e9s relatives aux colonnes CSV","minutes":"minutes","More":"Plus","Move":"D\u00e9placer","Move to":"D\u00e9placer vers","Moving this element will replace the properties of the previous class by those of the destination class :":"En bougeant cet \u00e9l\u00e9ment, les propri\u00e9t\u00e9s de la classe pr\u00e9c\u00e9dente seront remplac\u00e9es par ceux de la classe de destination :","Moving this element will replace the properties of the previous class by those of the destination class:":"En bougeant cet \u00e9l\u00e9ment, les propri\u00e9t\u00e9s de la classe pr\u00e9c\u00e9dente seront remplac\u00e9es par celles de la classe de destination :","Multiple values delimiter":"D\u00e9limiteur de valeurs multiples","must be numeric":"Doit \u00eatre num\u00e9rique","My settings":"Mes param\u00e8tres","My settings (%s)":"Mes param\u00e8tres (%s)","Name":"Nom","New class":"Nouvelle classe","New delivery":"Nouvelle passation","New password":"Nouveau mot de passe","New role":"Nouveau r\u00f4le","New test":"Cr\u00e9er test","New test-taker":"Cr\u00e9er participant","Next":"Suivant","No":"Non","No extensions available.":"Pas d\u0027extension disponible.","no file not found in this location":"pas de fichier trouv\u00e9 \u00e0 cette endroit","No file selected":"Pas de fichier s\u00e9lectionn\u00e9","No files":"Aucun fichier","no label":"sans \u00e9tiquette","No Preview available":"Aucun aper\u00e7u disponible","No preview available":"Aucun aper\u00e7u disponible","No results found":"Aucun r\u00e9sultat trouv\u00e9","Nothing imported":"Aucune donn\u00e9e n\u0027a \u00e9t\u00e9 import\u00e9e","Nothing to install !":"Rien \u00e0 installer !","Number of elements":"Nombre d\u0027\u00e9l\u00e9ments","of":"de","Ok":"Ok","OK":"Ok","Old Password":"Ancien mot de passe","or":"ou","Page":"Page","Password":"Mot de passe","Password changed":"Mot de pass\u00e9 modifi\u00e9","Passwords are not matching":"Les mots de passe ne correspondent pas","Please confirm deletion":"Veuillez confirmer la suppression.","Please confirm property deletion!":"Veuillez confirmer la suppression de la propri\u00e9t\u00e9","Please confirm this operation.":"Veuillez confirmer cette op\u00e9ration.","Please confirm user deletion":"Veuillez confirmer la suppression de l\u0027utilisateur.","Post install processing":"Traitement apr\u00e8s installation","Prepare, publish deliveries sessions.":"Pr\u00e9parer, publier des sessions de passations.","Preparing installation...":"Pr\u00e9paration de l\u0027installation...","Preview":"Aper\u00e7u ","Previous":"Pr\u00e9c\u00e9dent","Properties":"Propri\u00e9t\u00e9s","RDF":"RDF","Record and manage test takers.":"Enregistrer et g\u00e9rer les participants.","Release":"Publication","Remove":"Supprimer","Remove Message":"Enlever ce message","Remove this file":"Supprimer ce fichier","Rename":"Renommer","Repeat new password":"R\u00e9p\u00e9tition du nouveau mot de passe","required length":"taille requise","Requires":"N\u00e9cessite","Reset":"R\u00e9initialiser","Resource":"Ressource","Resource not imported due to multiple super classes":"La ressource n\u0027a pas pu \u00eatre importer a cause de la pr\u00e9sence de plusieurs super-classes","Resource not imported due to multiple types":"La ressource n\u0027a pas pu \u00eatre importer a cause de la pr\u00e9sence de plusieurs types","Resource saved":"Ressource enregistr\u00e9e","Responsive mode":"Mode r\u00e9actif","Right click the tree to manage your lists":"Utilisez le clic droit pour g\u00e9rer vos listes","Role saved":"R\u00f4le enregistr\u00e9","Roles":"R\u00f4les","Roles library":"Biblioth\u00e8que de r\u00f4les","Save":"Enregistrer","Scope":"Etendue","Search":"Rechercher","Search sub-classes":"Chercher des sous-classes","seconds":"secondes","Select":"Choisir","select":"choisir","Select a language":"S\u00e9lectionner un langage","Select the element destination":"Choisir l\u0027\u00e9l\u00e9ment de destination","Select this file":"S\u00e9lectionner le fichier","selected":"s\u00e9lectionn\u00e9","Selected file:":"Fichier s\u00e9lectionn\u00e9 :","Selection saved successfully":"S\u00e9lection enregistr\u00e9e avec succ\u00e8s","Settings":"R\u00e9glages","Settings updated":"R\u00e9glages mis \u00e0 jour","Show detailed report":"Montrer le d\u00e9tail du rapport","Simple Mode":"Mode simple","Size":"Taille","Success":"Succ\u00e8s","Supported export formats":"Formats d\u0027export support\u00e9s","TAO Home":"Menu principal TAO","TAO Login":"Connexion \u00e0 TAO","Test taker saved":"Participant enregistr\u00e9","Test takers":"Participants","Test takers library":"Participants","Test takers may be assigned to sets according to the relevant assessment context (Human resources management, education, edumetric monitoring, etc.).":"Les participants peuvent \u00eatre assign\u00e9s \u00e0 des ensembles selon le contexte d\u2019\u00e9valuation (gestion des ressources humaines, \u00e9ducation, contr\u00f4le d\u0027\u00e9dum\u00e9trie, etc.).","Test-takers":"Participants","Tests":"Tests","Tests library":"Tests","Text - Long - Box":"Texte - Long - Bo\u00eete","Text - Long - HTML editor":"Texte - Long - \u00c9diteur HTML","Text - Short - Field":"Texte - Long - Champ","The column ":"La colonne ","The lock has been released":"Le verrou a \u00e9t\u00e9 supprim\u00e9","The Test takers module allows to record and manage test takers.":"Le module Participants<\/i> vous permet d\u0027ajouter et de g\u00e9rer les sujets des tests.","The value of this field must be a valide date format, e.g. YYYY-MM-DD":"La valeur de ce champs doit \u00eatre format\u00e9e telle une date valide, ex. AAAA-MM-JJ","The value of this field must be an integer":"La valeur de ce champ doit \u00eatre un nombre entier.","The value of this field must be numeric":"La valeur de ce champ doit \u00eatre num\u00e9rique","This field is required":"Ce champ est requis.","This field is too long":"Ce champ est trop long.","This field is too short":"Ce champ est trop court.","this is required":"ceci est obligatoire","This Login is already in use":"Cet identifiant est d\u00e9j\u00e0 utilis\u00e9","This resource is locked":"La ressource est verrouill\u00e9e","This role is still given to one or more users. Please remove the role to these users first.":"Ce r\u00f4le est encore affect\u00e9 \u00e0 un ou plusieurs utilisateurs. Veuillez d\u0027abord retirer le r\u00f4le pour ce(s) utilisateur(s).","Time zone":"Fuseau horaire","to translate":"Non traduite","Translate":"Traduire","Translate to":"Traduire en","Translation parameters":"Param\u00e8tres de la traductions","Translation saved":"Traduction enregistr\u00e9e","Type":"Type","Unable to change passwords in demo mode":"Impossible de changer les mots de passe en mode d\u00e9monstration","Unable to delete the selected resource":"Autoriser la suppression de la ressource s\u00e9lectionn\u00e9e","Unable to release the lock":"Autoriser la publication de la serrure","Unable to upload file":"Autoriser le t\u00e9l\u00e9chargement du fichier","Uncheck all":"D\u00e9cocher tout","Uncheck All":"D\u00e9cocher tout","Undo":"Annuler une action","unknown":"inconnu","Unknown Error":"Erreur Inconnue","Upload":"T\u00e9l\u00e9verser","Upload into:":"Envoyer vers\u00a0:","Use default value":"Utiliser la valeur par d\u00e9faut","User":"Utilisateur","User added":"Utilisateur ajout\u00e9","User deleted successfully":"Utilisateur supprim\u00e9 avec succ\u00e8s.","User saved":"Utilisateur enregistr\u00e9","User Settings":"Param\u00e8tres Utilisateur","Users":"Utilisateurs","Version":"Version","Width":"Largeur","Yes":"Oui","You are not authorised to remove this lock":"Vous n\u0027\u00eates pas autoris\u00e9 \u00e0 supprimer cette fermeture","You cannot delete the root node":"Vous ne pouvez pas supprimer le noeud de la racine","You currently have no access to the platform":"Vous n\u0027avez actuellement pas acc\u00e8s \u00e0 la plate-forme","You must activate JavaScript in your browser to run this application.":"JavaScript doit \u00eatre activ\u00e9 dans votre navigateur pour lancer cette applcation"}
\ No newline at end of file
diff --git a/locales/fr-CA/taosubject.rdf b/locales/fr-CA/taosubject.rdf
new file mode 100644
index 00000000..7aeb23e6
--- /dev/null
+++ b/locales/fr-CA/taosubject.rdf
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locales/fr-CA/taosubject.rdf.po b/locales/fr-CA/taosubject.rdf.po
new file mode 100644
index 00000000..3d386c83
--- /dev/null
+++ b/locales/fr-CA/taosubject.rdf.po
@@ -0,0 +1,32 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: TAO 3.3.0-sprint72-½\n"
+"PO-Revision-Date: 2018-03-21T13:56:57\n"
+"Last-Translator: TAO Translation Team \n"
+"MIME-Version: 1.0\n"
+"Language: fr-CA\n"
+"sourceLanguage: en-US\n"
+"targetLanguage: fr-CA\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+# http://www.tao.lu/Ontologies/TAOSubject.rdf#Subject
+msgctxt "http://www.w3.org/2000/01/rdf-schema#label"
+msgid "Test-taker"
+msgstr "Participants"
+
+# http://www.tao.lu/Ontologies/TAOSubject.rdf#Subject
+msgctxt "http://www.w3.org/2000/01/rdf-schema#comment"
+msgid "The Test-taker class"
+msgstr "le groupe de participants"
+
+# http://www.tao.lu/Ontologies/TAOSubject.rdf#SubjectsManagerRole
+msgctxt "http://www.w3.org/2000/01/rdf-schema#label"
+msgid "Test Takers Manager"
+msgstr ""
+
+# http://www.tao.lu/Ontologies/TAOSubject.rdf#SubjectsManagerRole
+msgctxt "http://www.w3.org/2000/01/rdf-schema#comment"
+msgid "The Test Takers Manager Role"
+msgstr ""
+
diff --git a/manifest.php b/manifest.php
index 8fba3c50..0de2d306 100755
--- a/manifest.php
+++ b/manifest.php
@@ -33,7 +33,7 @@
'label' => 'Test-taker core extension',
'description' => 'TAO TestTaker extension',
'license' => 'GPL-2.0',
- 'version' => '3.4.0',
+ 'version' => '3.6.0',
'author' => 'Open Assessment Technologies, CRP Henri Tudor',
'requires' => array(
'taoBackOffice' => '>=1.3.0'
@@ -44,7 +44,11 @@
'install' => array(
'rdf' => array(
dirname(__FILE__). '/models/ontology/taosubject.rdf'
- )
+ ),
+ 'php' => [
+ \oat\taoTestTaker\scripts\install\SetupConfig::class,
+ ]
+
),
'update' => "oat\\taoTestTaker\\scripts\\update\\Updater",
'managementRole' => 'http://www.tao.lu/Ontologies/TAOSubject.rdf#SubjectsManagerRole',
diff --git a/models/CsvImporter.php b/models/CsvImporter.php
index ff1827ee..ab74323d 100644
--- a/models/CsvImporter.php
+++ b/models/CsvImporter.php
@@ -19,6 +19,7 @@
*
*/
namespace oat\taoTestTaker\models;
+use oat\oatbox\service\ServiceManager;
use oat\tao\model\TaoOntology;
use oat\generis\model\GenerisRdf;
@@ -58,22 +59,34 @@ protected function getStaticData()
return array(
GenerisRdf::PROPERTY_USER_DEFLG => $lang,
GenerisRdf::PROPERTY_USER_TIMEZONE => TIME_ZONE,
- GenerisRdf::PROPERTY_USER_ROLES => TaoOntology::PROPERTY_INSTANCE_ROLE_DELIVERY
+ GenerisRdf::PROPERTY_USER_ROLES => TaoOntology::PROPERTY_INSTANCE_ROLE_DELIVERY,
);
}
/**
* (non-PHPdoc)
* @see tao_models_classes_import_CsvImporter::getAdditionAdapterOptions()
+ * @throws \common_ext_ExtensionException
*/
protected function getAdditionAdapterOptions()
{
- $returnValue = array(
- 'callbacks' => array(
- '*' => array('trim'),
- GenerisRdf::PROPERTY_USER_PASSWORD => array('oat\taoTestTaker\models\CsvImporter::taoSubjectsPasswordEncode')
- )
- );
+ /** @var \common_ext_ExtensionsManager $extManager */
+ $extManager = ServiceManager::getServiceManager()->get(\common_ext_ExtensionsManager::SERVICE_ID);
+ $taoTestTaker = $extManager->getExtensionById('taoTestTaker');
+ $config = $taoTestTaker->getConfig('csvImporterCallbacks');
+
+ if (empty($config['callbacks'])){
+ $returnValue = array(
+ 'callbacks' => array(
+ '*' => array('trim'),
+ GenerisRdf::PROPERTY_USER_PASSWORD => array('oat\taoTestTaker\models\CsvImporter::taoSubjectsPasswordEncode')
+ )
+ );
+ } else {
+ $returnValue = array(
+ 'callbacks' => $config['callbacks']
+ );
+ }
return $returnValue;
}
diff --git a/models/TestTakerSavePasswordInMemory.php b/models/TestTakerSavePasswordInMemory.php
new file mode 100644
index 00000000..613d7a61
--- /dev/null
+++ b/models/TestTakerSavePasswordInMemory.php
@@ -0,0 +1,52 @@
+testTakerUri = $testTakerUri;
+
+ $this->properties = $properties;
}
/**
@@ -56,7 +62,15 @@ public function getName()
function jsonSerialize()
{
return [
- 'testTakerUri' => $this->testTakerUri
+ 'testTakerUri' => $this->testTakerUri,
];
}
+
+ /**
+ * @return array
+ */
+ public function getProperties()
+ {
+ return $this->properties;
+ }
}
diff --git a/models/events/TestTakerUpdatedEvent.php b/models/events/TestTakerUpdatedEvent.php
index f0d7757d..6d5dd4eb 100644
--- a/models/events/TestTakerUpdatedEvent.php
+++ b/models/events/TestTakerUpdatedEvent.php
@@ -27,7 +27,7 @@
*/
class TestTakerUpdatedEvent extends AbstractTestTakerEvent
{
- private $properties;
+ protected $properties;
/**
* TestTakerUpdatedEvent constructor.
diff --git a/scripts/install/SetupConfig.php b/scripts/install/SetupConfig.php
new file mode 100644
index 00000000..abec78a4
--- /dev/null
+++ b/scripts/install/SetupConfig.php
@@ -0,0 +1,48 @@
+getServiceLocator()->get(\common_ext_ExtensionsManager::SERVICE_ID);
+ $taoTestTaker = $extManager->getExtensionById('taoTestTaker');
+
+ $taoTestTaker->setConfig('csvImporterCallbacks', [
+ 'callbacks' => array(
+ '*' => array('trim'),
+ GenerisRdf::PROPERTY_USER_PASSWORD => array('oat\taoTestTaker\models\CsvImporter::taoSubjectsPasswordEncode')
+ ),
+ 'use_properties_for_event' => false
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/scripts/update/Updater.php b/scripts/update/Updater.php
index 5073722b..22b2fda7 100644
--- a/scripts/update/Updater.php
+++ b/scripts/update/Updater.php
@@ -21,6 +21,7 @@
namespace oat\taoTestTaker\scripts\update;
+use oat\generis\model\GenerisRdf;
use oat\tao\model\accessControl\func\AclProxy;
use oat\tao\model\accessControl\func\AccessRule;
use oat\tao\model\user\TaoRoles;
@@ -35,6 +36,7 @@ class Updater extends \common_ext_ExtensionUpdater
* @param $initialVersion
* @return string $versionUpdatedTo
* @internal param string $currentVersion
+ * @throws \common_ext_ExtensionException
*/
public function update($initialVersion)
{
@@ -45,5 +47,24 @@ public function update($initialVersion)
$this->setVersion('3.0.1');
}
$this->skip('3.0.1', '3.4.0');
+
+ if ($this->isVersion('3.4.0')) {
+
+ /** @var \common_ext_ExtensionsManager $extManager */
+ $extManager = $this->getServiceManager()->get(\common_ext_ExtensionsManager::SERVICE_ID);
+ $taoTestTaker = $extManager->getExtensionById('taoTestTaker');
+
+ $taoTestTaker->setConfig('csvImporterCallbacks', [
+ 'callbacks' => array(
+ '*' => array('trim'),
+ GenerisRdf::PROPERTY_USER_PASSWORD => array('oat\taoTestTaker\models\CsvImporter::taoSubjectsPasswordEncode')
+ ),
+ 'use_properties_for_event' => false
+ ]);
+
+ $this->setVersion('3.5.0');
+ }
+
+ $this->skip('3.5.0', '3.6.0');
}
}