/** * FICHIER - Edition de favoris */ public function processEditerFavori() { $classeurDAO = _ioDAO('classeur|classeur'); if (is_null($ppo->classeur = $classeurDAO->get(_request('classeurId', null)))) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get(''))); } elseif (Kernel::getLevel('MOD_CLASSEUR', $ppo->classeur->id) < PROFILE_CCV_MEMBER) { return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.noRights'), 'back' => CopixUrl::get('classeur||voirContenu', array('classeurId' => $ppo->classeur->id)))); } // Récupération du dossier pour définition du path $dossierDAO = _ioDAO('classeur|classeurdossier'); if (!is_null($ppo->dossierId = _request('dossierId', null)) && $ppo->dossierId != 0) { $ppo->dossier = $dossierDAO->get($ppo->dossierId); // Ajout d'un favori dans un casier non autorisé if ($ppo->dossier->casier) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get(''))); } $ppo->path = $ppo->dossier->getPath(); } else { $ppo->path = '/' . $ppo->classeur->titre . '/'; } // Récupération de l'identifiant du favori (si modification) $favoriId = _request('favoriId', null); if (!is_null($favoriId)) { $fichierDAO = _ioDAO('classeur|classeurfichier'); $ppo->favori = $fichierDAO->get($favoriId); // Contrôle d'accès if (Kernel::getLevel('MOD_CLASSEUR', $ppo->classeur->id) < PROFILE_CCV_MEMBER && ($ppo->favori->user_type != _currentUser()->getExtra('type') || $ppo->favori->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->classeur->id)))); } // Récupération de l'url du favori _classInclude('classeur|classeurservice'); $ppo->lien = $ppo->favori->getLienFavori(); } if (CopixRequest::isMethod('post')) { _classInclude('classeur|classeurservice'); $fichierDAO = _ioDAO('classeur|classeurfichier'); $ppo->lien = _request('favori_adresse', null); if (is_null($favoriId = _request('favoriId', null))) { $ppo->favori = _record('classeur|classeurfichier'); } else { $ppo->favori = $fichierDAO->get($favoriId); } $ppo->favori->classeur_id = $ppo->classeur->id; $ppo->favori->dossier_id = !is_null($dossierId = _request('dossierId', null)) ? $dossierId : 0; $ppo->favori->titre = _request('favori_titre', null); $ppo->favori->commentaire = null; $ppo->favori->fichier = Kernel::simpleName($ppo->favori->titre) . '.web'; $ppo->favori->taille = 0; $ppo->favori->type = 'Favori'; $ppo->favori->cle = classeurService::createKey(); $ppo->favori->date_upload = date('Y-m-d H:i:s'); $ppo->favori->user_type = _currentUser()->getExtra('type'); $ppo->favori->user_id = _currentUser()->getExtra('id'); // Traitement des erreurs $ppo->erreurs = array(); if (_request('favori_titre', null) == '') { $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.noTitle'); } if (_request('favori_adresse', null) == '' || _request('favori_adresse', null) == 'http://') { $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.noAddress'); } if (!empty($ppo->erreurs)) { $modParentInfo = Kernel::getModParentInfo('MOD_CLASSEUR', $ppo->classeur->id); $ppo->TITLE_PAGE = $modParentInfo['nom']; return _arPPO($ppo, array('template' => 'editer_favori.tpl')); } if (is_null($ppo->favori->id)) { $fichierDAO->insert($ppo->favori); $confirmMessage = CopixI18N::get('classeur|classeur.message.confirmCreation'); } else { $fichierDAO->update($ppo->favori); $confirmMessage = CopixI18N::get('classeur|classeur.message.confirmUpdate'); } // Création du fichier $contenu = classeurService::generateWebFile($ppo->lien); $extension = strtolower(strrchr($ppo->favori->fichier, '.')); $nomFichier = $ppo->favori->id . '-' . $ppo->favori->cle . $extension; $pathFichier = realpath('./static/classeur') . '/' . $ppo->classeur->id . '-' . $ppo->classeur->cle . '/' . $nomFichier; if ($handler = fopen($pathFichier, 'w+')) { if (fwrite($handler, $contenu)) { $ppo->favori->taille = filesize($pathFichier); $fichierDAO->update($ppo->favori); } fclose($handler); } if ($ppo->favori->dossier_id != 0) { $dossierDAO = _ioDAO('classeur|classeurdossier'); $dossier = $dossierDAO->get($ppo->favori->dossier_id); classeurService::updateFolderInfos($dossier); } return _arRedirect(CopixUrl::get('classeur||voirContenu', array('classeurId' => $ppo->classeur->id, 'dossierId' => $ppo->favori->dossier_id, 'confirmMessage' => $confirmMessage))); } $modParentInfo = Kernel::getModParentInfo('MOD_CLASSEUR', $ppo->classeur->id); $ppo->TITLE_PAGE = $modParentInfo['nom']; return _arPPO($ppo, array('template' => 'editer_favori.tpl')); }
/** * createLogin * * Propose un login en fonction des information de l'utilisateur (nom, prénom, rôle, etc.) * * @author Frédéric Mossmann <*****@*****.**> * @param array $user_infos Tableau des informations de l'utilisateur. * @param array $excluded Identifiants à exclure lors de la génération (import massif) * @return string Login composé des information disponibles. */ public function createLogin($user_infos, $excluded = array()) { // Caractères pouvant être dans un nom/prenom. $interdits = array(" ", "'", "-"); $nom = $user_infos['nom']; $prenom = $user_infos['prenom']; $nom_init = $prenom_init = ''; // Recherche des initiales : la première lettre de chaque entité dans un nom/prenom. $separateur_init = implode('', $interdits); $tok = strtok($nom, $separateur_init); while ($tok !== false) { $nom_init .= $tok[0]; $tok = strtok($separateur_init); } $tok = strtok($prenom, $separateur_init); while ($tok !== false) { $prenom_init .= $tok[0]; $tok = strtok($separateur_init); } // Retrait des caractères spéciaux des noms/prénoms. $nom = str_replace($interdits, "", $nom); $prenom = str_replace($interdits, "", $prenom); // Simplification (accents, majuscules, etc.) $nom = Kernel::simpleName($nom); $nom_init = Kernel::simpleName($nom_init); $prenom = Kernel::simpleName($prenom); $prenom_init = Kernel::simpleName($prenom_init); $login_parts = array(); switch ($user_infos['type']) { // case 'USER_ELE': // Elèves : Prénom et initiale du nom // if( trim($prenom) != '' ) $login_parts[] = $prenom; // // if( trim($nom_init) != '' ) $login_parts[] = $nom_init; // $login = implode( '', $login_parts ); // break; case 'USER_VIL': // Officiels : prénom et nom séparés par un point if (trim($prenom) != '') { $login_parts[] = $prenom; } if (trim($nom) != '') { $login_parts[] = $nom; } $login = implode('.', $login_parts); break; default: // Par défaut : initiale du prénom et nom if (trim($prenom_init) != '') { $login_parts[] = $prenom_init; } if (trim($nom) != '') { $login_parts[] = $nom; } $login = implode('', $login_parts); break; } $ext = ''; $fusible = 1000; // Fusible pour éviter les boucles sans fin. $get = _dao('kernel|kernel_copixuser')->getByLogin($login . $ext); while ((count($get) || in_array($login . $ext, $excluded)) && $fusible--) { if ($ext == '') { $ext = 1; } else { $ext++; } $get = _dao('kernel|kernel_copixuser')->getByLogin($login . $ext); } return $login . $ext; }
/** * Soumission du formulaire d'ajout d'un favori * * @author Christophe Beyer <*****@*****.**> * @since 2010/09/16 * @param integer $id Id de la malle * @param integer $folder Id du répertoire destination */ public function processDoAddWeb() { $kernelService =& CopixClassesFactory::Create('kernel|kernel'); $malleService =& CopixClassesFactory::Create('malle|malleService'); $daoMalles = CopixDAOFactory::create("malle|malle_malles"); $daoFolders = CopixDAOFactory::create("malle|malle_folders"); $daoFiles = CopixDAOFactory::create("malle|malle_files"); $id = $this->getRequest('id', null); $folder = $this->getRequest('folder', 0); $field = $this->getRequest('field', null); $format = $this->getRequest('format', null); $iNom = CopixRequest::get('nom'); $iUrl = CopixRequest::get('url'); $criticErrors = $errors = array(); if ($folder) { $rFolder = $daoFolders->get($folder); if (!$rFolder) { $criticErrors[] = CopixI18N::get('malle|malle.error.noFolder'); } elseif ($rFolder->malle != $id) { $criticErrors[] = CopixI18N::get('malle|malle.error.noFolder'); } $malle_cle = $rFolder->malle_cle; } else { $rMalle = $daoMalles->get($id); if (!$rMalle) { $criticErrors[] = CopixI18N::get('malle|malle.error.noMalle'); } else { $malle_cle = $rMalle->cle; } } if (!$criticErrors) { $mondroit = $kernelService->getLevel("MOD_MALLE", $id); //print_r($mondroit); if (!$malleService->canMakeInMalle("FILE_UPLOAD", $mondroit)) { $criticErrors[] = CopixI18N::get('kernel|kernel.error.noRights'); } else { $parent = $kernelService->getModParentInfo("MOD_MALLE", $id); } } if ($criticErrors) { return CopixActionGroup::process('genericTools|Messages::getError', array('message' => implode('<br/>', $criticErrors), 'back' => CopixUrl::get('malle||getMalle', array('id' => $id, 'folder' => $folder)))); } $urlReturn = $field && $format ? CopixUrl::get('malle||getMallePopup', array('id' => $id, 'folder' => $folder, 'field' => $field, 'format' => $format)) : CopixUrl::get('malle||getMalle', array('id' => $id, 'folder' => $folder)); $processReturn = $field ? 'malle|malle::getMallePopup' : 'malle|malle::getMalle'; // On insere d'abord dans la base $new = CopixDAOFactory::createRecord("malle|malle_files"); $new->malle = $id; $new->folder = $folder; $new->nom = $iNom; $new->fichier = Kernel::simpleName($iNom) . '.web'; $new->taille = 0; $new->type = 'application/octet-stream'; $new->cle = $malleService->createKey(); $new->date_upload = date("Y-m-d H:i:s"); $daoFiles->insert($new); //kernel::myDebug($new); if ($new->id) { $content = $malleService->generateWebFile($iNom, $iUrl); $fichier = $new->id . '_' . $new->fichier; $fullFile = realpath('./static/malle') . '/' . $id . '_' . $malle_cle . '/' . $fichier; if ($handler = @fopen($fullFile, 'w+')) { if (fwrite($handler, $content)) { $new->taille = filesize($fullFile); $daoFiles->update($new); } else { $errors[] = CopixI18N::get('malle|malle.error.web.fopen'); } fclose($handler); } else { $errors[] = CopixI18N::get('malle|malle.error.web.fwrite'); } if (!$errors) { $malleService->update_infos_for_folder($id, $folder); } else { $daoFiles->delete($new->id); $errors[] = CopixI18N::get('malle|malle.error.uploadFile'); } } else { // Prob d'insertion dans la base $errors[] = CopixI18N::get('malle|malle.error.uploadFileDB'); } if ($errors) { return CopixActionGroup::process($processReturn, array('id' => $id, 'folder' => $folder, 'errors' => $errors, 'field' => $field)); } return new CopixActionReturn(COPIX_AR_REDIRECT, $urlReturn); }