/** * Edition d'un mémo - * Enseignant * */ public function processEditerMemo() { $ppo = new CopixPPO(); if (is_null($ppo->cahierId = _request('cahierId', null))) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get(''))); } elseif (Kernel::getLevel('MOD_CAHIERDETEXTES', $ppo->cahierId) < PROFILE_CCV_PUBLISH) { return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.noRights'), 'back' => CopixUrl::get(''))); } // Récupération des paramètres $ppo->jour = _request('jour', date('d')); $ppo->mois = _request('mois', date('m')); $ppo->annee = _request('annee', date('Y')); $ppo->msgSuccess = _request('msgSuccess', false); $ppo->dateSelectionnee = mktime(0, 0, 0, $ppo->mois, $ppo->jour, $ppo->annee); $ppo->format = CopixConfig::get('cahierdetextes|format_par_defaut'); $cahierInfos = Kernel::getModParent('MOD_CAHIERDETEXTES', $ppo->cahierId); $ppo->nodeInfos = array('type' => $cahierInfos[0]->module_type, 'id' => $cahierInfos[0]->module_id); if (is_null($memoId = _request('memoId', null))) { $ppo->memo = _record('cahierdetextes|cahierdetextesmemo'); } else { $memoDAO = _ioDAO('cahierdetextes|cahierdetextesmemo'); $ppo->memo = $memoDAO->get($memoId); $ppo->memo->date_creation = CopixDateTime::yyyymmddToDate($ppo->memo->date_creation); $ppo->memo->date_validite = CopixDateTime::yyyymmddToDate($ppo->memo->date_validite); $ppo->memo->date_max_signature = CopixDateTime::yyyymmddToDate($ppo->memo->date_max_signature); // Récupération des élèves liés au mémo $memo2eleveDAO = _ioDAO('cahierdetextes|cahierdetextesmemo2eleve'); $ppo->elevesSelectionnes = $memo2eleveDAO->findElevesParMemo($ppo->memo->id); // Récupération des fichiers liés au mémo $fichierMalleDAO = _ioDAO('malle|malle_files'); $fichierClasseurDAO = _ioDAO('classeur|classeurfichier'); $memo2fichiersDAO = _ioDAO('cahierdetextes|cahierdetextesmemo2files'); $memo2fichiers = $memo2fichiersDAO->retrieveByMemo($ppo->memo->id); $ppo->fichiers = array(); $fichiers = array(); foreach ($memo2fichiers as $memo2fichier) { if ($memo2fichier->module_file == 'MOD_MALLE') { if ($fichier = $fichierMalleDAO->get($memo2fichier->file_id)) { $ppo->fichiers[] = array('type' => $memo2fichier->module_file, 'id' => $memo2fichier->file_id, 'nom' => $fichier->nom); } } elseif ($memo2fichier->module_file == 'MOD_CLASSEUR') { if ($fichier = $fichierClasseurDAO->get($memo2fichier->file_id)) { $ppo->fichiers[] = array('type' => $memo2fichier->module_file, 'id' => $memo2fichier->file_id, 'nom' => $fichier); } } } } if (CopixRequest::isMethod('post')) { $cahierInfos = Kernel::getModParent('MOD_CAHIERDETEXTES', $ppo->cahierId); $ppo->memo->classe_id = $cahierInfos[0]->node_id; $ppo->memo->date_creation = CopixDateTime::dateToyyyymmdd(_request('memo_date_creation', null)); $ppo->memo->date_validite = CopixDateTime::dateToyyyymmdd(_request('memo_date_validite', null)); $ppo->memo->message = _request('memo_message', null); $ppo->memo->avec_signature = _request('memo_avec_signature', 0); $ppo->memo->date_max_signature = CopixDateTime::dateToyyyymmdd(_request('memo_date_max_signature', null)); $ppo->memo->supprime = 0; $ppo->elevesSelectionnes = _request('eleves', array()); $ppo->fichiers = _request('memo_fichiers', array()); // Traitement des erreurs $ppo->erreurs = array(); if ($ppo->memo->date_creation == '') { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.noCreationDate'); } if ($ppo->memo->date_validite == '') { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.noValidityDate'); } if (!is_null($ppo->memo->date_validite) && $ppo->memo->date_validite < $ppo->memo->date_creation) { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.wrongValidityDate'); } if ($ppo->memo->message == '') { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.noContent'); } if ($ppo->memo->avec_signature && $ppo->memo->date_max_signature == '') { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.noSignatureDate'); } if (!is_null($ppo->memo->date_max_signature) && !is_null($ppo->memo->date_validite) && ($ppo->memo->date_max_signature > $ppo->memo->date_validite || $ppo->memo->date_max_signature < $ppo->memo->date_creation)) { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.wrongMaxSignatureDate'); } if (empty($ppo->elevesSelectionnes)) { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.noStudents'); } if (!empty($ppo->fichiers)) { $ppo->fichiers = array_unique($ppo->fichiers); // Récupération de l'identifiant de la malle du node $mods = Kernel::getModEnabled($cahierInfos[0]->node_type, $cahierInfos[0]->node_id); if ($malle = Kernel::filterModuleList($mods, 'MOD_MALLE')) { $malleId = $malle[0]->module_id; } // Récupération des identifiants de classeur $classeurIds = array(); // Classeur du node $mods = Kernel::getModEnabled($cahierInfos[0]->node_type, $cahierInfos[0]->node_id); if ($classeur = Kernel::filterModuleList($mods, 'MOD_CLASSEUR')) { $classeurIds[] = $classeur[0]->module_id; } // Classeur personnel $mods = Kernel::getModEnabled(_currentUser()->getExtra('type'), _currentUser()->getExtra('id')); if ($classeur = Kernel::filterModuleList($mods, 'MOD_CLASSEUR')) { $classeurIds[] = $classeur[0]->module_id; } // On détermine s'il s'agit de documents de la malle ou du classeur foreach ($ppo->fichiers as $fichierInfos) { $fichierInfos = explode('-', $fichierInfos); if ($fichierInfos[0] == 'MOD_MALLE') { // Erreur : le fichier n'appartient pas à la malle du node if (!$fichierMalleDAO->isFileOfMalle($fichierInfos[1], $malleId)) { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.invalidFile'); break; } else { $fichier = $fichierMalleDAO->get($fichierInfos[1]); $fichiers[] = array('type' => $fichierInfos[0], 'id' => $fichierInfos[1], 'nom' => $fichier->nom); } } elseif ($fichierInfos[0] == 'MOD_CLASSEUR') { $fichier = $fichierClasseurDAO->get($fichierInfos[1]); // Erreur : le fichier n'appartient pas aux classeurs disponible à l'utilisateur if (!in_array($fichier->classeur_id, $classeurIds)) { $ppo->erreurs[] = CopixI18N::get('cahierdetextes|cahierdetextes.error.invalidFile'); break; } else { $fichiers[] = array('type' => $fichierInfos[0], 'id' => $fichierInfos[1], 'nom' => $fichier); } } } } if (!empty($ppo->erreurs)) { $ppo->memo->date_creation = _request('memo_date_creation', null); $ppo->memo->date_validite = _request('memo_date_validite', null); $ppo->memo->date_max_signature = _request('memo_date_max_signature', null); if (isset($fichiers)) { $ppo->fichiers = $fichiers; } $modParentInfo = Kernel::getModParentInfo('MOD_CAHIERDETEXTES', $ppo->cahierId); $ppo->TITLE_PAGE = $modParentInfo['nom']; return _arPPO($ppo, 'editer_memo.tpl'); } $memoDAO = _ioDAO('cahierdetextes|cahierdetextesmemo'); $memo2eleveDAO = _ioDAO('cahierdetextes|cahierdetextesmemo2eleve'); $memo2fichierDAO = _ioDAO('cahierdetextes|cahierdetextesmemo2files'); // Création if ($ppo->memo->id == '') { // Insertion de l'enregistrement "memo" $memoDAO->insert($ppo->memo); } else { // Mise à jour de l'enregistrement "memo" $memoDAO->update($ppo->memo); // Suppression des relations memo - eleves existantes $memo2eleveDAO->deleteByMemo($ppo->memo->id); // Suppression des relations memo - fichiers existantes $memo2fichierDAO->deleteByMemo($ppo->memo->id); } // Insertion des nouveaux liens memo > eleve foreach ($ppo->elevesSelectionnes as $eleveId) { $memo2eleve = _record('cahierdetextes|cahierdetextesmemo2eleve'); $memo2eleve->memo_id = $ppo->memo->id; $memo2eleve->eleve_id = $eleveId; $memo2eleveDAO->insert($memo2eleve); } // Insertion des liens "mémo > fichiers" if (!empty($fichiers)) { foreach ($fichiers as $fichier) { $memo2fichier = _record('cahierdetextes|cahierdetextesmemo2files'); $memo2fichier->memo_id = $ppo->memo->id; $memo2fichier->module_file = $fichier['type']; $memo2fichier->file_id = $fichier['id']; $memo2fichierDAO->insert($memo2fichier); } } return _arRedirect(CopixUrl::get('cahierdetextes||voirMemos', array('cahierId' => $ppo->cahierId, 'msgSuccess' => CopixI18N::get('cahierdetextes|cahierdetextes.message.success')))); } $modParentInfo = Kernel::getModParentInfo('MOD_CAHIERDETEXTES', $ppo->cahierId); $ppo->TITLE_PAGE = $modParentInfo['nom']; return _arPPO($ppo, 'editer_memo.tpl'); }
/** * Ré-génération des mots de passe d'une classe */ public function processResetClassroomPasswords() { $ppo = new CopixPPO(); $ppo->nodeId = _request('nodeId', null); // Récupération des paramètres if (is_null($ppo->nodeId)) { 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 (!($classroom = $classroomDAO->get($ppo->nodeId))) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => "Une erreur est survenue.", 'back' => CopixUrl::get('gestionautonome||showTree'))); } // Contrôle des droits $ppo->hasCredentialTeacherUpdate = _currentUser()->testCredential('module:classroom|' . $ppo->nodeId . '|teacher|update@gestionautonome'); $ppo->hasCredentialStudentUpdate = _currentUser()->testCredential('module:classroom|' . $ppo->nodeId . '|student|update@gestionautonome'); $ppo->hasCredentialPersonInChargeUpdate = _currentUser()->testCredential('module:classroom|' . $ppo->nodeId . '|person_in_charge|update@gestionautonome'); if (!$ppo->hasCredentialPersonInChargeUpdate && !$ppo->hasCredentialStudentUpdate && !$ppo->hasCredentialPersonInChargeUpdate) { throw new CopixCredentialException(); } // Infos du noeud $nodeInfos = Kernel::getNodeInfo('BU_CLASSE', $ppo->nodeId); // Compteur max $counters = array(); // Récupération des enseignants de la classe $ppo->teachers = array(); if ($ppo->hasCredentialTeacherUpdate) { $personnelDAO = _ioDAO('kernel|kernel_bu_personnel'); $ppo->teachers = $personnelDAO->findTeachersByClassroomId($ppo->nodeId); $counters[] = count($ppo->teachers); } // Récupération des élèves de la classe $ppo->students = array(); if ($ppo->hasCredentialStudentUpdate) { $studentDAO = _ioDAO('kernel|kernel_bu_ele'); $ppo->students = $studentDAO->getStudentsByClass($ppo->nodeId); $counters[] = count($ppo->students); } // Récupération des parents de la classe $ppo->personsInCharge = array(); if ($ppo->hasCredentialPersonInChargeUpdate) { $responsableDAO = _ioDAO('kernel|kernel_bu_res'); $ppo->personsInCharge = $responsableDAO->getParentsInClasse($ppo->nodeId); $counters[] = count($ppo->personsInCharge); } // Compteur MAX $ppo->counter = max($counters); // Breadcrumbs & titre $breadcrumbs = Kernel::generateBreadcrumbs($nodeInfos); $breadcrumbs[] = array('txt' => 'Re-génération des mots de passe'); $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); // Traitement du formulaire if (CopixRequest::isMethod('post')) { $studentsIds = _request('students', array()); $teachersIds = _request('teachers', array()); $personsInChargeIds = _request('personsInCharge', array()); $dbuserDAO = _ioDAO('kernel|kernel_copixuser'); // Mise en session globale des mots de passe $passwordsList = _sessionGet('modules|gestionautonome|passwordsList'); if (!is_array($passwordsList)) { $passwordsList = array(); } $ppo->accounts = array(); foreach ($ppo->students as $student) { if (in_array($student->idEleve, $studentsIds)) { if ($account = $dbuserDAO->getUserByBuIdAndBuType($student->idEleve, 'USER_ELE')) { $password = Kernel::createPasswd(); $account->password_dbuser = md5($password); $dbuserDAO->update($account); // Mise en session de l'élève pour l'export des infos $studentAr = array('lastname' => $student->nom, 'firstname' => $student->prenom1, 'login' => $account->login_dbuser, 'password' => $password, 'bu_type' => 'USER_ELE', 'bu_id' => $student->idEleve, 'type_nom' => Kernel::Code2Name('USER_ELE'), 'node_nom' => Kernel::Code2Name('BU_CLASSE') . ' ' . $nodeInfos['nom'], 'gender' => $student->id_sexe); $passwordsList['USER_ELE'][$student->idEleve] = $studentAr; $ppo->accounts[] = $studentAr; } } } foreach ($ppo->personsInCharge as $personInCharge) { if (in_array($personInCharge->id, $personsInChargeIds)) { if ($account = $dbuserDAO->getUserByBuIdAndBuType($personInCharge->id, 'USER_RES')) { $password = Kernel::createPasswd(); $account->password_dbuser = md5($password); $dbuserDAO->update($account); // Mise en session de la personne responsable pour l'export des infos $personAr = array('lastname' => $personInCharge->nom, 'firstname' => $personInCharge->prenom, 'login' => $account->login_dbuser, 'password' => $password, 'bu_type' => 'USER_RES', 'bu_id' => $personInCharge->id, 'type_nom' => Kernel::Code2Name('USER_RES'), 'node_nom' => Kernel::Code2Name('BU_CLASSE') . ' ' . $nodeInfos['nom'], 'gender' => $personInCharge->sexe); $passwordsList['USER_RES'][$personInCharge->id] = $personAr; $ppo->accounts[] = $personAr; } } } foreach ($ppo->teachers as $teacher) { if (in_array($teacher->numero, $teachersIds)) { if ($account = $dbuserDAO->getUserByBuIdAndBuType($teacher->numero, 'USER_ENS')) { $password = Kernel::createPasswd(); $account->password_dbuser = md5($password); $dbuserDAO->update($account); // Mise en session de l'enseignant pour l'export des infos $teacherAr = array('lastname' => $teacher->nom, 'firstname' => $teacher->prenom1, 'login' => $account->login_dbuser, 'password' => $password, 'bu_type' => 'USER_ENS', 'bu_id' => $teacher->numero, 'type_nom' => Kernel::Code2Name('USER_ENS'), 'node_nom' => Kernel::Code2Name('BU_CLASSE') . ' ' . $nodeInfos['nom'], 'gender' => $personInCharge->id_sexe); $passwordsList['USER_ENS'][$teacher->numero] = $teacherAr; $ppo->accounts[] = $teacherAr; } } } if (!empty($ppo->accounts)) { _sessionSet('modules|gestionautonome|createAccount', $ppo->accounts); _sessionSet('modules|gestionautonome|passwordsList', $passwordsList); return _arRedirect(CopixUrl::get('gestionautonome||showNewClassroomPasswords', array('nodeId' => $ppo->nodeId))); } else { $ppo->error = 1; } } return _arPPO($ppo, 'reset_classroom_passwords.tpl'); }
/** * ACTION DE MASSE - Copie d'un ou de plusieurs fichiers / dossiers */ public function processCopierContenu() { $classeurDAO = _ioDAO('classeur|classeur'); $dossierDAO = _ioDAO('classeur|classeurdossier'); $fichierDAO = _ioDAO('classeur|classeurfichier'); if (is_null($ppo->classeur = $classeurDAO->get(_request('classeurId', null))) || is_null($ppo->dossier = $dossierDAO->get(_request('dossierId', null)))) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get(''))); } $nomsContenus = array(); // Récupération des identifiants de dossier à copier $dossierIds = _request('dossiers', array()); if (!is_null($dossierIds)) { // Si copie d'un seul dossier, on vérifie s'il s'agit d'un casier et que l'utilisateur à la permission de le copier if (count($dossierIds) == 1) { $dossier = $dossierDAO->get($dossierIds[0]); // Seul l'enseignant peut copier un casier if ($dossier->casier && Kernel::getLevel('MOD_CLASSEUR', $ppo->classeur->id) < PROFILE_CCV_PUBLISH) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('classeur|classeur.error.copyLocker'), 'back' => CopixUrl::get('classeur||voirContenu', array('classeurId' => $ppo->classeur->id)))); } else { $nomsContenus[] = $dossier->nom; } } else { $ppo->dossierIds = implode($dossierIds, ','); foreach ($dossierIds as $dossierId) { $dossier = $dossierDAO->get($dossierId); if (!$dossier->casier) { $nomsContenus[] = $dossier->nom; } else { unset($ppo->dossiers[$dossierId]); } } } } // Récupération des identifiants de fichier à déplacer $fichierIds = _request('fichiers', array()); if (!is_null($fichierIds)) { if (is_array($fichierIds)) { $ppo->fichierIds = implode($fichierIds, ','); } else { $ppo->fichierIds = $fichierIds; $fichierIds = explode($ppo->fichierIds, ','); } foreach ($fichierIds as $fichierId) { $fichier = $fichierDAO->get($fichierId); if ($fichier) { $nomsContenus[] = $fichier->fichier; } } } if (!empty($nomsContenus)) { $ppo->nomsContenus = implode($nomsContenus, ', '); } else { $ppo->nomsContenus = _request('fichiersSelectionnes', null); } if (CopixRequest::isMethod('post')) { _classInclude('classeur|classeurservice'); $arFichierIds = !is_null(_request('fichiers', null)) ? explode(',', _request('fichiers')) : array(); $arDossierIds = !is_null(_request('dossiers', null)) ? explode(',', _request('dossiers')) : array(); if (!is_null($destination = _request('destination', null))) { list($destinationType, $destinationId) = explode('-', $destination); if ($destinationType == 'dossier') { $dossierDestination = $dossierDAO->get($destinationId); } } // Traitement des erreurs $ppo->erreurs = array(); if (!isset($destinationType) || !isset($destinationId) || is_null($destinationType) || is_null($destinationId)) { $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.noDestination'); } elseif ($destinationType == 'dossier' && in_array($destinationId, $arDossierIds)) { $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.destinationUnauthorized'); } if (empty($arFichierIds) && empty($arDossierIds)) { $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.noContentSelected'); } if (!empty($ppo->erreurs)) { $modParentInfo = Kernel::getModParentInfo('MOD_CLASSEUR', $ppo->classeur->id); $ppo->TITLE_PAGE = $modParentInfo['nom']; return _arPPO($ppo, array('template' => 'copier_contenu.tpl')); } // Copie des dossiers if (!empty($arDossierIds)) { $dossiers = array(); foreach ($arDossierIds as $arDossierId) { $dossier = $dossierDAO->get($arDossierId); if ($destinationType == 'dossier' && !classeurService::isDescendantOf($dossierDestination, $dossier) || $destinationType == 'classeur') { // On ne copie que les dossiers pouvant l'être if ($dossier = $dossierDAO->get($arDossierId) && !$dossier->casier) { // En cas de copie, le copieur devient le propriétaire de la copie $dossier->user_type = _currentUser()->getExtra('type'); $dossier->user_id = _currentUser()->getExtra('id'); classeurService::copyFolder($dossier, $destinationType, $destinationId); } } } } // Copie des fichiers if (!empty($arFichierIds)) { foreach ($arFichierIds as $arFichierId) { $fichier = $fichierDAO->get($arFichierId); // En cas de copie, le copieur devient le propriétaire de la copie $fichier->user_type = _currentUser()->getExtra('type'); $fichier->user_id = _currentUser()->getExtra('id'); classeurService::copyFile($fichier, $destinationType, $destinationId); } } // Redirection $confirmMessage = CopixI18N::get('classeur|classeur.message.confirmCopy'); if ($destinationType == 'dossier') { classeurService::updateFolderInfos($dossierDestination); return _arRedirect(CopixUrl::get('classeur||voirContenu', array('classeurId' => $dossierDestination->classeur_id, 'dossierId' => $destinationId, 'confirmMessage' => $confirmMessage))); } else { return _arRedirect(CopixUrl::get('classeur||voirContenu', array('classeurId' => $destinationId, 'confirmMessage' => $confirmMessage))); } } $modParentInfo = Kernel::getModParentInfo('MOD_CLASSEUR', $ppo->classeur->id); $ppo->TITLE_PAGE = $modParentInfo['nom']; return _arPPO($ppo, array('template' => 'copier_contenu.tpl')); }