/** * Retourne le path complet du dossier * sous la forme : /Classeur/Dossier1/Dossier2/... * * @param bool $withStripText StripText du path * * @return string */ public function getPath($withStripText = true) { $paths = array(); $classeurDAO = _ioDAO('classeur|classeur'); $dossierDAO = _ioDAO('classeur|classeurdossier'); $paths[] = $withStripText ? Kernel::stripText($this->nom) : $this->nom; $dossier = $this; while ($dossier->parent_id != 0) { $dossier = $dossierDAO->get($dossier->parent_id); $paths[] = $withStripText ? Kernel::stripText($dossier->nom) : $dossier->nom; } $classeur = $classeurDAO->get($dossier->classeur_id); $paths[] = $withStripText ? Kernel::stripText($classeur->titre) : $classeur->titre; return '/' . implode('/', array_reverse($paths)) . '/'; }
public function processValidateMultipleStudentsAdd() { $ppo = new CopixPPO(); $ppo->nodeId = _request('id_parent', null); $ppo->nodeType = _request('type_parent', null); 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'); $liste = _request('liste', null); $logins = array(); if (!is_null($liste)) { $lines = explode("\n", nl2br($liste)); $ppo->students = array(); foreach ($lines as $key => $line) { $datas = explode(',', $line); // Données de l'élève : nom - prénom - sexe - DDN if (isset($datas[0])) { $ppo->students[$key]['lastname'] = trim($datas[0]); } if (isset($datas[1])) { $ppo->students[$key]['firstname'] = trim($datas[1]); } if (isset($datas[2])) { if (strpos($datas[2], 'M') === false) { $ppo->students[$key]['gender'] = 2; } else { $ppo->students[$key]['gender'] = 1; } } if (isset($datas[3])) { $ppo->students[$key]['birthdate'] = $datas[3]; } // Données des responsables : nom - prénom - sexe - relation $continue = true; $keyPerson = 0; $cpt = 4; while ($continue) { if (isset($datas[$cpt]) && !empty($datas[$cpt])) { switch ($cpt - 4 * ($keyPerson + 1)) { case 0: $ppo->students[$key]['person'][$keyPerson]['lastname'] = trim($datas[$cpt]); break; case 1: $ppo->students[$key]['person'][$keyPerson]['firstname'] = trim($datas[$cpt]); break; case 2: if (substr(trim($datas[$cpt]), 0, 1) == 'M') { $ppo->students[$key]['person'][$keyPerson]['gender'] = 1; } else { $ppo->students[$key]['person'][$keyPerson]['gender'] = 2; } break; case 3: $ppo->students[$key]['person'][$keyPerson]['nom_pa'] = strip_tags(trim($datas[$cpt])); $parentalLinks = _ioDAO('kernel_bu_lien_parental')->findAll(); foreach ($parentalLinks as $parentalLink) { $formatedParentalLinks[strtoupper(Kernel::stripText($parentalLink->parente))] = $parentalLink->id_pa; } $ppo->students[$key]['person'][$keyPerson]['id_par'] = isset($formatedParentalLinks[strip_tags(trim($datas[$cpt]))]) ? $formatedParentalLinks[strip_tags(trim($datas[$cpt]))] : $formatedParentalLinks['INCONNU']; break; } } else { $continue = false; } if (($cpt + 1) % 4 == 0) { // Génération des logins avec exclusion des logins déjà générés pour cet import $ppo->students[$key]['person'][$keyPerson]['login'] = Kernel::createLogin(array('nom' => $ppo->students[$key]['person'][$keyPerson]['lastname'], 'prenom' => $ppo->students[$key]['person'][$keyPerson]['firstname'], 'type' => 'USER_RES'), $logins); $ppo->students[$key]['person'][$keyPerson]['password'] = Kernel::createPasswd(); // On stocke le login pour ne pas proposer de doublon lors de la génération des logins $logins[] = $ppo->students[$key]['person'][$keyPerson]['login']; $keyPerson++; } $cpt++; } // Génération des logins avec exclusion des logins déjà générés pour cet import $ppo->students[$key]['login'] = Kernel::createLogin(array('nom' => $ppo->students[$key]['lastname'], 'prenom' => $ppo->students[$key]['firstname'], 'type' => 'USER_ELE'), $logins); $ppo->students[$key]['password'] = Kernel::createPasswd(); // On stocke le login pour ne pas proposer de doublon lors de la génération des logins $logins[] = $ppo->students[$key]['login']; } // Mise en session des informations récupérées _sessionSet('gestionautonome|addMultipleStudents', $ppo->students); // 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; } } // Breadcrumbs $nodeInfos = Kernel::getNodeInfo($ppo->nodeType, $ppo->nodeId, true); // Get vocabulary catalog to use $nodeVocabularyCatalogDAO = _ioDAO('kernel|kernel_i18n_node_vocabularycatalog'); $ppo->vocabularyCatalog = $nodeVocabularyCatalogDAO->getCatalogForNode($ppo->nodeType, $ppo->nodeId); $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'); }
/** * FICHIER - Edition de fichiers */ public function processEditerFichiers() { _classInclude('sysutils|StatsServices'); $confirmMessage = ''; CopixHTMLHeader::addJSLink(_resource('js/uploadify/jquery.uploadify.v2.1.4.min.js')); CopixHTMLHeader::addJSLink(_resource('js/uploadify/swfobject.js')); $ppo = new CopixPPO(); $ppo->conf = new CopixPPO(); $ppo->conf->max_file_size = StatsServices::human2octets(ini_get('upload_max_filesize')); if (is_null($ppo->classeurId = _request('classeurId'))) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get(''))); } // Récupération du dossier courant $dossierDAO = _ioDAO('classeur|classeurdossier'); $ppo->dossier = null; if (!is_null($ppo->dossierId = _request('dossierId', null)) && $ppo->dossierId != 0) { if (!($ppo->dossier = $dossierDAO->get($ppo->dossierId))) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get(''))); } } // Contrôle des droits d'accès if (Kernel::getLevel('MOD_CLASSEUR', $ppo->classeurId) < PROFILE_CCV_MEMBER && $ppo->dossier->casier && $ppo->dossier->parent_id != 0 || Kernel::getLevel('MOD_CLASSEUR', $ppo->classeurId) < PROFILE_CCV_MEMBER && !$ppo->dossier->casier) { return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.noRights'), 'back' => CopixUrl::get('classeur||voirContenu', array('classeurId' => $ppo->classeurId)))); } // Récupération de l'identifiant du fichier (si modification) $fichierId = _request('fichierId', null); if (!is_null($fichierId)) { $fichierDAO = _ioDAO('classeur|classeurfichier'); $ppo->fichier = $fichierDAO->get($fichierId); // Contrôle d'accès if (Kernel::getLevel('MOD_CLASSEUR', $ppo->classeurId) < PROFILE_CCV_MEMBER && ($ppo->fichier->user_type != _currentUser()->getExtra('type') || $ppo->fichier->user_id != _currentUser()->getExtra('id'))) { return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.noRights'), 'back' => CopixUrl::get('classeur||voirContenu', array('classeurId' => $ppo->classeurId)))); } } // Récupération du classeur $classeurDAO = _ioDAO('classeur|classeur'); $classeur = $classeurDAO->get($ppo->classeurId); // Récupération du path if (!is_null($ppo->dossier)) { $ppo->path = $ppo->dossier->getPath(); } else { $ppo->path = '/' . $classeur->titre . '/'; } // Dossier temporaire pour l'upload des fichiers _classInclude('classeur|classeurService'); $dossierTmp = classeurService::getTmpFolder(); $ppo->dossierTmp = $dossierTmp . classeurService::createKey(); $ppo->maxSizeLimit = Kernel::return_bytes(ini_get('upload_max_filesize')); // Soumission du formulaire if (CopixRequest::isMethod('post')) { $fichierDAO = _ioDAO('classeur|classeurfichier'); // S'il s'agit d'une modification de fichier if (!is_null(_request('fichierId', null))) { $ppo->fichier->titre = _request('fichier_titre', null); $ppo->fichier->commentaire = _request('fichier_commentaire', null); // Contrôle upload du fichier if (!is_null($_FILES['fichier']['tmp_name']) && is_uploaded_file($_FILES['fichier']['tmp_name'])) { $dir = realpath('./static/classeur') . '/' . $classeur->id . '-' . $classeur->cle . '/'; $oldExtension = strtolower(strrchr($ppo->fichier->fichier, '.')); $fichierPhysique = $dir . $ppo->fichier->id . '-' . $ppo->fichier->cle . $oldExtension; // Suppression de l'ancien fichier if (file_exists($fichierPhysique)) { unlink($fichierPhysique); } $extension = strtolower(strrchr($_FILES['fichier']['name'], '.')); // Nom particulier dans le cas d'un casier (nom de l'élève présent dans le nom du fichier) if (isset($ppo->dossier) && $ppo->dossier->casier) { $user = Kernel::getUserInfo($ppo->fichier->user_type, $ppo->fichier->user_id); $ppo->fichier->fichier = $ppo->fichier->titre . '_' . $user['prenom'] . '_' . $user['nom'] . $extension; } else { $ppo->fichier->fichier = $_FILES['fichier']['name']; } $ppo->fichier->taille = filesize($_FILES['fichier']['tmp_name']); $ppo->fichier->type = strtoupper(substr(strrchr($_FILES['fichier']['name'], '.'), 1)); $fichierPhysique = $dir . $ppo->fichier->id . '-' . $ppo->fichier->cle . $extension; move_uploaded_file($_FILES['fichier']['tmp_name'], $fichierPhysique); } else { // Nom particulier dans le cas d'un casier (nom de l'élève présent dans le nom du fichier) if (isset($ppo->dossier) && $ppo->dossier->casier) { $dir = realpath('./static/classeur') . '/' . $classeur->id . '-' . $classeur->cle . '/'; $extension = strtolower(strrchr($ppo->fichier->fichier, '.')); $user = Kernel::getUserInfo($ppo->fichier->user_type, $ppo->fichier->user_id); $ppo->fichier->fichier = $ppo->fichier->titre . '_' . $user['prenom'] . '_' . $user['nom'] . $extension; } } // Mise à jour de l'enregistrement fichier $fichierDAO->update($ppo->fichier); $confirmMessage = CopixI18N::get('classeur|classeur.message.confirmUpdate'); } else { // Récupération du dossier temporaire $ppo->dossierTmp = _request('dossierTmp', null); // Traitement des erreurs $ppo->erreurs = array(); // Récupération des fichiers uploadés via uploadify $uploadedFiles = array(); $uploadedFiles = ClasseurService::getFilesInTmpFolder($uploadedFiles, $ppo->dossierTmp); if (!is_uploaded_file($_FILES['fichier']['tmp_name']) && empty($uploadedFiles)) { $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.noFiles'); } if (!is_null(_request('fichier_titre', null)) && strlen(_request('fichier_titre')) > 64) { $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.titleTooLong', array('size' => 64)); } if (!empty($ppo->erreurs)) { $modParentInfo = Kernel::getModParentInfo('MOD_CLASSEUR', $ppo->classeurId); $ppo->TITLE_PAGE = $modParentInfo['nom']; return _arPPO($ppo, array('template' => 'editer_fichiers.tpl')); } // Création du répertoire $dir = realpath('./static/classeur') . '/' . $classeur->id . '-' . $classeur->cle . '/'; if (!file_exists($dir)) { mkdir($dir, 0755, true); } // Traitement de l'upload multiple (prédomine sur l'upload simple) if (!empty($uploadedFiles)) { foreach ($uploadedFiles as $folder) { foreach ($folder['files'] as $file) { ClasseurService::uploadFile($ppo->dossierTmp . '/' . $file, $file, $classeur, $ppo->dossier); } } } else { // S'il s'agit d'une archive ZIP if (strtolower(strrchr($_FILES['fichier']['name'], '.')) == '.zip' && _request('with_decompress', false)) { $zip = new ZipArchive(); if ($zip->open($_FILES['fichier']['tmp_name']) === true) { // Décompression de l'archive dans le dossier temporaire $zip->extractTo($ppo->dossierTmp); $zip->close(); // Copie des fichiers provenant de l'archive ZIP $correspondanceDossiers = array(); $datas = array(); $datas = classeurService::getFilesInTmpFolder($datas, $ppo->dossierTmp); foreach ($datas as $dossierParent => $data) { if (!empty($data['folders'])) { foreach ($data['folders'] as $folder) { $dossier = _record('classeur|classeurdossier'); $dossier->nb_dossiers = 0; $dossier->nb_fichiers = 0; $dossier->taille = 0; $dossier->classeur_id = $classeur->id; $dossier->parent_id = $dossierParent == $ppo->dossierTmp ? $ppo->dossierId : $correspondanceDossiers[$dossierParent]->id; $dossier->nom = $folder; $dossier->cle = classeurService::createKey(); $dossier->date_creation = date('Y-m-d H:i:s'); $dossier->user_type = _currentUser()->getExtra('type'); $dossier->user_id = _currentUser()->getExtra('id'); $dossier->casier = 0; $dossierDAO->insert($dossier); classeurService::updateFolderInfos($dossier); $correspondanceDossiers[$dossierParent . '/' . $folder] = $dossier; } } if (!empty($data['files'])) { foreach ($data['files'] as $file) { $fichier = _record('classeur|classeurfichier'); $extension = strtolower(strrchr($file, '.')); $filename = substr($file, 0, strrpos($file, '.')); $title = Kernel::stripText($filename) . $extension; $fichier->classeur_id = $classeur->id; $fichier->dossier_id = $dossierParent == $ppo->dossierTmp ? $ppo->dossierId : $correspondanceDossiers[$dossierParent]->id; $fichier->titre = substr($title, 0, 63); $fichier->commentaire = ''; $fichier->fichier = $title; $fichier->taille = file_exists($dossierParent . '/' . $file) ? filesize($dossierParent . '/' . $file) : 0; $fichier->type = strtoupper(substr(strrchr($file, '.'), 1)); $fichier->cle = classeurService::createKey(); $fichier->date_upload = date('Y-m-d H:i:s'); $fichier->user_type = _currentUser()->getExtra('type'); $fichier->user_id = _currentUser()->getExtra('id'); $fichierDAO->insert($fichier); if (isset($correspondanceDossiers[$dossierParent])) { classeurService::updateFolderInfos($correspondanceDossiers[$dossierParent]); } $nomClasseur = $classeur->id . '-' . $classeur->cle; $nomFichier = $fichier->id . '-' . $fichier->cle; // Déplacement du fichier temporaire dans le classeur copy($dossierParent . '/' . $file, $dir . $fichier->id . '-' . $fichier->cle . $extension); ClasseurService::doAutoRotateJpegByOrientation($dir . $fichier->id . '-' . $fichier->cle . $extension, $extension); // Suppression du fichier temporaire unlink($dossierParent . '/' . $file); } } } } } else { $fichier = ClasseurService::uploadFile($_FILES['fichier']['tmp_name'], $_FILES['fichier']['name'], $classeur, $ppo->dossier); if (null !== $ppo->dossier && $ppo->dossier->casier) { // Minimail de confirmation dans le cas de l'upload d'un fichier dans un casier classeurService::sendLockerUploadConfirmation($fichier->fichier); $confirmMessage = CopixI18N::get('classeur|classeur.message.confirmUploadLockerMessage', array($fichier->fichier)); } } } } // Message de confirmation générique si non déjà défini if ('' == $confirmMessage) { $confirmMessage = CopixI18N::get('classeur|classeur.message.success'); } // Mise à jour des informations du dossier parent if (null !== $ppo->dossier) { classeurService::updateFolderInfos($ppo->dossier); } // Suppression du dossier TMP classeurService::rmdir_recursive($ppo->dossierTmp); return _arRedirect(CopixUrl::get('classeur||voirContenu', array('classeurId' => $ppo->classeurId, 'dossierId' => $ppo->dossierId, 'confirmMessage' => $confirmMessage))); } $modParentInfo = Kernel::getModParentInfo('MOD_CLASSEUR', $ppo->classeurId); $ppo->TITLE_PAGE = $modParentInfo['nom']; return _arPPO($ppo, array('template' => 'editer_fichiers.tpl')); }