/**
  * 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);
 }