public function processValidateMultipleStudentsListing() { $ppo = new CopixPPO(); // Récupération des paramètres $ppo->nodeId = _request('id_node', null); $ppo->nodeType = _request('type_node', null); $nodeInfos = Kernel::getNodeInfo($ppo->nodeType, $ppo->nodeId, true); if (is_null($ppo->nodeId) || is_null($ppo->nodeType)) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => "Une erreur est survenue.", 'back' => CopixUrl::get('gestionautonome||showTree'))); } $classroomDAO = _ioDAO('kernel|kernel_bu_ecole_classe'); if (!$classroomDAO->get($ppo->nodeId)) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => "Une erreur est survenue.", 'back' => CopixUrl::get('gestionautonome||showTree'))); } _currentUser()->assertCredential('module:classroom|' . $ppo->nodeId . '|student|create@gestionautonome'); // Récupération des informations du formulaire $keys = _request('keys', array()); // Elèves de la liste à créer (checkbox de confirmation) $logins = _request('logins', array()); // Logins des élèves (possibilité de changer le login généré) $passwords = _request('passwords', array()); // Passwords des élèves (possibilité de changer le mot de passe généré) $levels = _request('levels', array()); // Niveau des élèves dans la classe // Récupération des élèves déjà créés en session if (!($ppo->studentsSuccess = _sessionGet('gestionautonome|addMultipleStudents|success'))) { $ppo->studentsSuccess = array(); } // RAZ des créations en erreur _sessionSet('gestionautonome|addMultipleStudents|error', array()); // DAO $studentDAO = _ioDAO('kernel_bu_eleve'); $studentRegistrationDAO = _ioDAO('kernel|kernel_bu_eleve_inscription'); $studentAdmissionDAO = _ioDAO('kernel|kernel_bu_eleve_admission'); $studentAssignmentDAO = _ioDAO('kernel_bu_eleve_affectation'); $dbuserDAO = _ioDAO('kernel|kernel_copixuser'); $dbLinkDAO = _ioDAO('kernel_link_bu2user'); $classDAO = _ioDAO('kernel|kernel_bu_ecole_classe'); $personDAO = _ioDAO('kernel_bu_responsable'); $personLinkDAO = _ioDAO('kernel_bu_responsables'); $schoolClassLevelDAO = _ioDAO('kernel|kernel_bu_ecole_classe_niveau'); $node_infos = Kernel::getNodeInfo($ppo->nodeType, $ppo->nodeId, false); // Récupération des élèves en création $studentsInSession = _sessionGet('gestionautonome|addMultipleStudents'); // Récupération des données nécessaires à l'ajout des enregistrements inscription / adhésion / admission $class = $classDAO->get($ppo->nodeId); $schoolClassLevels = $schoolClassLevelDAO->getByClass($ppo->nodeId); $classType = $schoolClassLevels[0]->type; $schoolId = $class->ecole; // Récupération de l'année scolaire if (is_null($grade = _sessionGet('grade'))) { $grade = Kernel::getAnneeScolaireCourante()->id_as; } // Boucle sur les élèves de la liste à créer $students = array(); foreach ($keys as $key) { // La création n'est possible que si le login est disponible if (!is_null($logins[$key]) && !is_null($passwords[$key]) && Kernel::isLoginAvailable($logins[$key])) { $students[$key] = $studentsInSession[$key]; $students[$key]['login'] = $logins[$key]; // Récupération des logins pour les élèves en création $students[$key]['password'] = $passwords[$key]; // Récupération des passwords pour les élèves en création $students[$key]['level'] = $levels[$key]; // Récupération des niveaux pour les élèves en création $students[$key]['type_nom'] = Kernel::Code2Name('USER_ELE'); $students[$key]['node_nom'] = Kernel::Code2Name($ppo->nodeType) . " " . $node_infos['nom']; // Création de l'élève $ppo->student = _record('kernel_bu_eleve'); $ppo->student->numero = ''; $ppo->student->nom = $students[$key]['lastname']; $ppo->student->prenom1 = $students[$key]['firstname']; $ppo->student->id_sexe = $students[$key]['gender']; $ppo->student->date_nais = isset($students[$key]['birthdate']) ? CopixDateTime::dateToYYYYMMDD(strip_tags(trim($students[$key]['birthdate']))) : ''; $ppo->student->flag = 0; $ppo->student->ele_last_update = CopixDateTime::timestampToYYYYMMDDHHIISS(time()); $studentDAO->insert($ppo->student); $students[$key]['id'] = $ppo->student->idEleve; // Création du compte dbuser $dbuser = _record('kernel|kernel_copixuser'); $dbuser->login_dbuser = $students[$key]['login']; $dbuser->password_dbuser = md5($students[$key]['password']); $dbuser->email_dbuser = ''; $dbuser->enabled_dbuser = 1; $dbuserDAO->insert($dbuser); // Création du link bu2user $dbLink = _record('kernel_link_bu2user'); $dbLink->user_id = $dbuser->id_dbuser; $dbLink->bu_type = 'USER_ELE'; $dbLink->bu_id = $ppo->student->idEleve; $dbLinkDAO->insert($dbLink); // Inscription de l'élève dans l'école $studentRegistration = _record('kernel|kernel_bu_eleve_inscription'); $studentRegistration->eleve = $ppo->student->idEleve; $studentRegistration->annee_scol = $grade; $studentRegistration->date_preinscript = CopixDateTime::timestampToYYYYMMDD(time()); $studentRegistration->date_effet_preinscript = CopixDateTime::timestampToYYYYMMDD(time()); $studentRegistration->date_inscript = CopixDateTime::timestampToYYYYMMDD(time()); $studentRegistration->date_effet_inscript = CopixDateTime::timestampToYYYYMMDD(time()); $studentRegistration->etablissement = $schoolId; $studentRegistration->etablissement_refus = 0; $studentRegistration->id_niveau = $students[$key]['level']; $studentRegistration->id_typ_cla = $classType; $studentRegistration->vaccins_aj = 0; $studentRegistration->attente = 0; $studentRegistration->derogation_dem = 0; $studentRegistration->temporaire = 0; $studentRegistration->current_inscr = 1; $studentRegistrationDAO->insert($studentRegistration); // Admission de l'élève dans l'école $studentAdmission = _record('kernel|kernel_bu_eleve_admission'); $studentAdmission->admission_eleve = $ppo->student->idEleve; $studentAdmission->admission_etablissement = $schoolId; $studentAdmission->admission_annee_scol = $grade; $studentAdmission->admission_id_niveau = $students[$key]['level']; $studentAdmission->admission_etat_eleve = 1; $studentAdmission->admission_date = CopixDateTime::timestampToYYYYMMDD(time()); $studentAdmission->admission_date_effet = CopixDateTime::timestampToYYYYMMDD(time()); $studentAdmission->admission_code_radiation = 0; $studentAdmission->admission_previsionnel = 0; $studentAdmissionDAO->insert($studentAdmission); // Affectation de l'élève dans les classes $studentAssignment = _record('kernel_bu_eleve_affectation'); $studentAssignment->eleve = $ppo->student->idEleve; $studentAssignment->annee_scol = $grade; $studentAssignment->classe = $ppo->nodeId; $studentAssignment->niveau = $students[$key]['level']; $studentAssignment->dateDebut = CopixDateTime::timestampToYYYYMMDD(time()); $studentAssignment->current = 1; $studentAssignment->previsionnel_cl = 0; $studentAssignmentDAO->insert($studentAssignment); // Récupération des responsables sélectionnés pour l'élève $personsKeys = _request('person-keys' . $key, array()); $personsLogins = _request('logins' . $key, array()); // Récupération des logins des responsables de l'élève $personsPasswords = _request('passwords' . $key, array()); // Récupération des passwords des responsables de l'élève $students[$key]['person'] = array(); foreach ($personsKeys as $personKey) { // La création du responsable n'est possible que si le login est disponible if (!is_null($personsLogins[$personKey]) && !is_null($personsPasswords[$personKey]) && Kernel::isLoginAvailable($personsLogins[$personKey])) { $students[$key]['person'][$personKey] = $studentsInSession[$key]['person'][$personKey]; $students[$key]['person'][$personKey]['login'] = $personsLogins[$personKey]; $students[$key]['person'][$personKey]['password'] = $personsPasswords[$personKey]; $students[$key]['person'][$personKey]['type_nom'] = Kernel::Code2Name('USER_RES'); $students[$key]['person'][$personKey]['node_nom'] = Kernel::Code2Name($ppo->nodeType) . " " . $node_infos['nom']; // Création du responsable $ppo->person = _record('kernel_bu_responsable'); $ppo->person->nom = $students[$key]['person'][$personKey]['lastname']; $ppo->person->prenom1 = $students[$key]['person'][$personKey]['firstname']; $ppo->person->id_sexe = $students[$key]['person'][$personKey]['gender']; $personDAO->insert($ppo->person); $students[$key]['person'][$personKey]['id'] = $ppo->person->numero; // Création du compte dbuser $dbuser = _record('kernel|kernel_copixuser'); $dbuser->login_dbuser = $students[$key]['person'][$personKey]['login']; $dbuser->password_dbuser = md5($students[$key]['person'][$personKey]['password']); $dbuser->email_dbuser = ''; $dbuser->enabled_dbuser = 1; $dbuserDAO->insert($dbuser); // Création du link bu2user $dbLink = _record('kernel_link_bu2user'); $dbLink->user_id = $dbuser->id_dbuser; $dbLink->bu_type = 'USER_RES'; $dbLink->bu_id = $ppo->person->numero; $dbLinkDAO->insert($dbLink); // Création de l'association personne->rôle $newPersonLink = _record('kernel_bu_responsables'); $newPersonLink->id_beneficiaire = $ppo->student->idEleve; $newPersonLink->type_beneficiaire = 'eleve'; $newPersonLink->id_responsable = $ppo->person->numero; $newPersonLink->type = 'responsable'; $newPersonLink->auth_parentale = '0'; $newPersonLink->id_par = $students[$key]['person'][$personKey]['id_par']; $personLinkDAO->insert($newPersonLink); } } // Récupération de l'élève (et de ses responsables) dans le tableau des élèves créés avec succès $ppo->studentsSuccess[] = $students[$key]; } else { // Ajout de l'élève (et de ses responsables) dans le tableau des créations en erreur $ppo->studentsError[] = $students[$key]; } } // Si des créations ont bien eu lieu, les mettre en session pour affichage de confirmation if (!empty($ppo->studentsSuccess)) { _sessionSet('gestionautonome|addMultipleStudents|success', $ppo->studentsSuccess); } // Si des créations sont en erreur, les mettre en session pour possibilité de recréation après correction des erreurs if (!empty($ppo->studentsError)) { _sessionSet('gestionautonome|addMultipleStudents|error', $ppo->studentsError); $ppo->students = $ppo->studentsError; _sessionSet('gestionautonome|addMultipleStudents', $ppo->studentsError); // Récupération des niveaux de la classe $classSchoolLevelDAO = _ioDAO('kernel|kernel_bu_ecole_classe_niveau'); $classLevelDAO = _ioDAO('kernel|kernel_bu_classe_niveau'); $classSchoolLevels = $classSchoolLevelDAO->getByClass($ppo->nodeId); $ppo->levelNames = array(); $ppo->levelIds = array(); foreach ($classSchoolLevels as $classSchoolLevel) { $level = $classLevelDAO->get($classSchoolLevel->niveau); $ppo->levelNames[] = $level->niveau_court; $ppo->levelIds[] = $level->id_n; } // Flag pour affichage du message d'erreur $ppo->error = 1; // Get vocabulary catalog to use $nodeVocabularyCatalogDAO = _ioDAO('kernel|kernel_i18n_node_vocabularycatalog'); $ppo->vocabularyCatalog = $nodeVocabularyCatalogDAO->getCatalogForNode($ppo->nodeType, $ppo->nodeId); // Breadcrumbs $breadcrumbs = Kernel::generateBreadcrumbs($nodeInfos); $breadcrumbs[] = array('txt' => CopixCustomI18N::get('gestionautonome|gestionautonome.message.add%%structure_element_persons%%list', array('catalog' => $ppo->vocabularyCatalog->id_vc))); $ppo->breadcrumbs = Kernel::PetitPoucet($breadcrumbs, ' » '); $ppo->TITLE_PAGE = CopixConfig::get('gestionautonome|moduleTitle'); // Get vocabulary catalog to use $nodeVocabularyCatalogDAO = _ioDAO('kernel|kernel_i18n_node_vocabularycatalog'); $ppo->vocabularyCatalog = $nodeVocabularyCatalogDAO->getCatalogForNode($ppo->nodeType, $ppo->nodeId); return _arPPO($ppo, 'add_multiple_students_listing.tpl'); } // Mise en session des comptes créés $passwordsList = _sessionGet('modules|gestionautonome|passwordsList'); if (!is_array($passwordsList)) { $passwordsList = array(); } foreach ($ppo->studentsSuccess as $student) { $studentAr = array('lastname' => $student['lastname'], 'firstname' => $student['firstname'], 'login' => $student['login'], 'password' => $student['password'], 'bu_type' => 'USER_ELE', 'bu_id' => $student['id'], 'type_nom' => Kernel::Code2Name('USER_ELE'), 'node_nom' => Kernel::Code2Name('BU_CLASSE') . ' ' . $nodeInfos['nom'], 'gender' => $student['gender']); $passwordsList['USER_ELE'][$student['id']] = $studentAr; // Enregistrement des personnes if (!empty($student['person'])) { foreach ($student['person'] as $person) { $personAr = array('lastname' => $person['lastname'], 'firstname' => $person['firstname'], 'login' => $person['login'], 'password' => $person['password'], 'bu_type' => 'USER_RES', 'bu_id' => $person['id'], 'type_nom' => Kernel::Code2Name('USER_RES'), 'node_nom' => Kernel::Code2Name('BU_CLASSE') . ' ' . $nodeInfos['nom'], 'gender' => $person['gender']); $passwordsList['USER_RES'][$person['id']] = $personAr; } } } $passwordsList = _sessionSet('modules|gestionautonome|passwordsList', $passwordsList); return _arRedirect(CopixUrl::get('gestionautonome||showMultipleAccountsListing')); }