/**
  * Détermine si un fichier est une image.
  * Se base sur le mime type du fichier
  *
  * @return bool True s'il s'agit d'une image / false sinon
  */
 public function estUneImage()
 {
     $mimeType = CopixMIMETypes::getFromExtension($this->type);
     if (in_array($mimeType, $this->imgTypes)) {
         return true;
     }
     return false;
 }
 public function testSeveralExt()
 {
     $types = array('jpg', 'pdf', 'doc', 'rtf', 'latex', 'aif', 'wav', 'gif', 'zip', 'gz', 'txt', 'htm', 'ogg', 'xhtml', 'xml', 'ppt', 'pps', 'chm', 'js', 'exe', 'bat', 'mp3', 'wma');
     foreach ($types as $name) {
         if (CopixMIMETypes::getFromExtension('.' . $name) == 'application/octet-stream') {
             $this->fail($name);
         }
     }
 }
 /**
  * Fonction appelée lorsque l'on clique sur le bouton 'import'
  * Appel la méthode privée _validFromFormImportParams
  * vérifie les infos saisies dans le formulaire
  * stock l'objet en session
  * @author Audrey Vassal <*****@*****.**>
  */
 public function doExport()
 {
     $serviceAuth = new AgendaAuth();
     $serviceExport = new ExportService();
     $agendaService = new AgendaService();
     $dateService = new DateService();
     //demande de mettre l'objet à jour en fonction des valeurs saisies dans le formulaire
     if (!($exportParams = $this->_getSessionExport())) {
         return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('agenda.error.cannotFindSession'), 'back' => CopixUrl::get('agenda|agenda|vueSemaine')));
     }
     //on vérifie les droits des utilisateurs sur la liste des agendas sélectionnés
     foreach ((array) $this->getRequest('agenda') as $id_agenda) {
         //on vérifie si l'utilisateur a les droits d'écriture sur un des agendas affiché
         if ($serviceAuth->getCapability($id_agenda) < $serviceAuth->getRead()) {
             return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('agenda.error.enableToWrite'), 'back' => CopixUrl::get('agenda|agenda|vueSemaine')));
         }
     }
     $this->_validFromFormExportParams($exportParams);
     $errors = $this->_checkExport($exportParams);
     if (count($errors) > 0) {
         $this->_setSessionExport($exportParams);
         return CopixActionGroup::process('agenda|ImportExport::getPrepareExport', array('e' => 1, 'errors' => $errors));
     } else {
         //var_dump($exportParams);
         //die();
         //on récupère tous les évènements des agendas cochés dans la période demandée
         foreach ((array) _request('agenda') as $idAgenda) {
             $arEventsPeriode[$idAgenda] = $agendaService->checkEventOfAgendaInBdd($idAgenda, CopixDateTime::dateToYYYYMMDD($exportParams->datedeb_export), CopixDateTime::dateToYYYYMMDD($exportParams->datefin_export));
         }
         //on classe ces évènements par jour
         $arEventByDay = $agendaService->getEventsByDay($arEventsPeriode, CopixDateTime::dateToYYYYMMDD($exportParams->datedeb_export), CopixDateTime::dateToYYYYMMDD($exportParams->datefin_export));
         //on ordonne les évènements par ordre croissant d'heure de début d'évènement dans la journée
         //var_dump($arEventByDay);
         $arEventByDay = $agendaService->getEventsInOrderByDay($arEventByDay);
         $content = $serviceExport->getFileICal($arEventByDay, CopixDateTime::dateToTimestamp($exportParams->datedeb_export), CopixDateTime::dateToTimestamp($exportParams->datefin_export));
     }
     //on vide la session
     $this->_setSessionExport(null);
     return _arContent($content, array('filename' => 'agenda.ics', 'content-disposition' => 'attachement', 'content-type' => CopixMIMETypes::getFromExtension('.ics')));
 }
 /**
  * Recupère la ressource
  *
  * @throws CopixResourceForbiddenException si l'accès à la ressource est interdit,
  *         CopixResourceNotFoundException si la ressource n'a pas été trouvée.
  */
 public function fetch()
 {
     // Vérifie qu'on ait pas de "backward"
     $unescapedPath = utf8_decode($this->_path);
     // Pas de blague avec l'UTF8
     if (preg_match('@\\.\\.[/\\\\]@', $unescapedPath)) {
         throw new CopixResourceForbiddenException($this->_path);
     }
     // Vérifie l'existence du theme
     if (!$this->_theme || !is_dir('themes/' . $this->_theme)) {
         throw new CopixResourceNotFoundException($this->_theme);
     }
     $arModules = $this->_getArModules();
     // Si on a bien un module
     if ($this->_module) {
         // Vérifie l'existence du module
         if (isset($arModules[$this->_module])) {
             $this->_modulePath = $arModules[$this->_module] . $this->_module . '/';
         } else {
             throw new CopixResourceNotFoundException($this->_module);
         }
         // Vérifie l'existence du chemin 'www' du module
         if (!is_dir($this->_modulePath . "www")) {
             throw new CopixResourceNotFoundException($this->_module);
         }
     }
     // Récupère la config
     $config = $this->_getCopixConfig();
     // Recherche le fichier
     if (!($filePath = CopixResource::findResourcePath($this->_path, $this->_module, $this->_modulePath, $this->_theme, $config->i18n_path_enabled, $this->_lang, $this->_country))) {
         throw new CopixResourceNotFoundException($this->_path);
     }
     // Récupère le type MIME
     $mimeType = CopixMIMETypes::getFromFileName($filePath);
     // La substitution ne touche que les fichiers des modules
     if ($this->_modulePath && substr($filePath, 0, strlen($this->_modulePath)) == $this->_modulePath) {
         $filePath = $this->_processModuleFile($filePath, $mimeType);
     }
     // Mode DEBUG ?
     if (isset($_REQUEST['DEBUG'])) {
         _dump(array('this' => $this, 'filePath' => $filePath, 'mimeType' => $mimeType, 'included_files' => get_included_files()));
         exit;
     }
     // Envoie le fichier
     $this->_sendFile($filePath, $mimeType);
 }
 /**
  * Lancement d'une requête
  *
  * @param CopixHTTPClientRequest $pRequest
  * @return unknown
  */
 private function _launchRequest(CopixHTTPClientRequest $pRequest)
 {
     if (CopixConfig::get('default|proxyEnabled')) {
         //proxy_host, proxy_port, proxy_login  et proxy_password
         curl_setopt($this->_curl, CURLOPT_HTTPPROXYTUNNEL, true);
         if (CopixConfig::get('default|proxyHost') != null) {
             curl_setopt($this->_curl, CURLOPT_PROXY, str_replace('http://', '', CopixConfig::get('default|proxyHost')));
         }
         if (CopixConfig::get('default|proxyPort') != null) {
             curl_setopt($this->_curl, CURLOPT_PROXYPORT, intval(CopixConfig::get('default|proxyPort')));
         }
         if (CopixConfig::get('default|proxyUser') != null) {
             $proxyUserPass = CopixConfig::get('default|proxyUser');
             if (CopixConfig::get('default|proxyPass') != null) {
                 $proxyUserPass .= ':' . CopixConfig::get('default|proxyPass');
             }
             curl_setopt($this->_curl, CURLOPT_PROXYUSERPWD, $proxyUserPass);
         }
     }
     curl_setopt($this->_curl, CURLOPT_TIMEOUT, $pRequest->getTimeout());
     // Choix de l'interface à utiliser
     $interfaceUsed = $pRequest->getInterface();
     // Si pas d'interface on récupère celle en configuration
     if ($interfaceUsed !== '') {
         $interfaceUsed = CopixConfig::get('default|webservicesInterface');
     }
     // Mise en place de l'interface
     if (isset($interfaceUsed)) {
         curl_setopt($this->_curl, CURLOPT_INTERFACE, $interfaceUsed);
     }
     if ($pRequest->getIgnoreCertificate()) {
         curl_setopt($this->_curl, CURLOPT_SSL_VERIFYPEER, false);
         curl_setopt($this->_curl, CURLOPT_SSL_VERIFYHOST, false);
     }
     curl_setopt($this->_curl, CURLOPT_URL, $pRequest->getUrl());
     curl_setopt($this->_curl, CURLOPT_VERBOSE, 1);
     if ($pRequest->getHeader()) {
         curl_setopt($this->_curl, CURLOPT_HTTPHEADER, $pRequest->getHeader());
     }
     if ($pRequest->getCookie()) {
         curl_setopt($this->_curl, CURLOPT_COOKIE, $pRequest->getCookie());
     }
     if (count($pRequest->getPost())) {
         if ($pRequest->getFile()) {
             $boundary = uniqid('------------------');
             $MPboundary = '--' . $boundary;
             $endMPboundary = $MPboundary . '--';
             $postBody = 'Content-type: multipart/form-data, boundary=' . $boundary . "\r\n\r\n";
             foreach ($pRequest->getPost() as $name => $content) {
                 $postBody .= $MPboundary . "\r\n";
                 $postBody .= 'content-disposition: form-data; name="' . $name . '"' . "\r\n\r\n";
                 $postBody .= $content . "\r\n";
             }
             $file = $pRequest->getFile();
             $fileContent = file_get_contents($file);
             $postBody .= $MPboundary . "\r\n";
             $postBody .= 'Content-Disposition: form-data; name="file"; filename="' . basename($file) . '"' . "\r\n";
             $postBody .= 'Content-Type: ' . CopixMIMETypes::getFromFileName($file) . "\r\n";
             $postBody .= 'Content-Transfer-Encoding: binary' . "\r\n\r\n";
             $postBody .= $fileContent;
             $postBody .= "\r\n" . $endMPboundary;
             curl_setopt($this->_curl, CURLOPT_POST, true);
             curl_setopt($this->_curl, CURLOPT_POSTFIELDS, $postBody);
             curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array("Content-Type: multipart/form-data; boundary={$boundary}"));
             curl_setopt($this->_curl, CURLOPT_RETURNTRANSFER, true);
         } else {
             curl_setopt($this->_curl, CURLOPT_POST, true);
             curl_setopt($this->_curl, CURLOPT_POSTFIELDS, CopixUrl::valueToUrl(null, $pRequest->getPost()));
         }
     }
     if ($pRequest->getFollowRedirect()) {
         curl_setopt($this->_curl, CURLOPT_FOLLOWLOCATION, 1);
     } else {
         curl_setopt($this->_curl, CURLOPT_FOLLOWLOCATION, 0);
     }
     return new CopixHTTPRequestResult($pRequest, $this->_curl);
 }
 /**
  * getLoginResult
  *
  * Affiche le résultat de la création de comptes (login, passwd) dans différents formats (html, txt, csv, etc.).
  * @author	Frédéric Mossmann
  */
 public function getLoginResult()
 {
     $inSession = _sessionGet('modules|comptes|doLoginCreate|success');
     if (!$inSession || !is_array($inSession) || !sizeof($inSession)) {
         $urlReturn = CopixUrl::get('comptes||getNode');
         return new CopixActionReturn(COPIX_AR_REDIRECT, $urlReturn);
     }
     //print_r($inSession);
     $tpl = new CopixTpl();
     $tplLoginResult = new CopixTpl();
     $tpl->assign('TITLE_PAGE', CopixI18N::get('comptes.moduleDescription') . " &raquo; " . CopixI18N::get('comptes.title.getloginresult'));
     $menu = array();
     $menu[] = array('txt' => CopixI18N::get('comptes.menu.export_html'), 'url' => CopixUrl::get('comptes||getLoginResult', array('type' => _request('type'), 'id' => _request('id'), 'format' => 'html')));
     $menu[] = array('txt' => CopixI18N::get('comptes.menu.export_txt'), 'url' => CopixUrl::get('comptes||getLoginResult', array('type' => _request('type'), 'id' => _request('id'), 'format' => 'text')));
     $menu[] = array('txt' => CopixI18N::get('comptes.menu.export_cvs'), 'url' => CopixUrl::get('comptes||getLoginResult', array('type' => _request('type'), 'id' => _request('id'), 'format' => 'csv')));
     $menu[] = array('txt' => CopixI18N::get('comptes.menu.export_xml'), 'url' => CopixUrl::get('comptes||getLoginResult', array('type' => _request('type'), 'id' => _request('id'), 'format' => 'xml')));
     // $menu[] = array( 'txt' => CopixI18N::get ('comptes.menu.export_pdf'), 'url' => CopixUrl::get ('comptes||getLoginResult', array('type'=>_request('type'),'id'=>_request('id'),'format'=>'pdf')) );
     $menu[] = array('txt' => CopixI18N::get('comptes.menu.export_purge'), 'url' => CopixUrl::get('comptes||getPurgeResult', array('type' => _request('type'), 'id' => _request('id'))), 'color' => 'red');
     // $menu[] = array( 'txt' => CopixI18N::get ('comptes.menu.export_return'), 'url' => CopixUrl::get ('comptes||getNode', array('type'=>_request('type'),'id'=>_request('id'))) );
     $tplLoginResult->assign('MENU', $menu);
     $logins = $inSession;
     if (!_request('format') || trim(_request('format')) == '') {
         $format = "default";
     } else {
         $format = _request('format');
     }
     $tplLoginResult->assign('logins', $logins);
     switch ($format) {
         case 'default':
             $main = $tplLoginResult->fetch('loginresult.tpl');
             break;
         case 'html':
             $main = $tplLoginResult->fetch('loginresult-html.tpl');
             return _arContent($main, array('filename' => 'Logins-' . date('YmdHi') . '.html', 'content-disposition' => 'attachement', 'content-type' => CopixMIMETypes::getFromExtension('.html')));
             break;
         case 'text':
             $main = $tplLoginResult->fetch('loginresult-text.tpl');
             return _arContent($main, array('filename' => 'Logins-' . date('YmdHi') . '.txt', 'content-disposition' => 'attachement', 'content-type' => CopixMIMETypes::getFromExtension('.txt')));
             break;
         case 'csv':
             $main = $tplLoginResult->fetch('loginresult-csv.tpl');
             return _arContent($main, array('filename' => 'Logins-' . date('YmdHi') . '.csv', 'content-disposition' => 'attachement', 'content-type' => CopixMIMETypes::getFromExtension('.csv')));
             break;
         case 'xml':
             $main = $tplLoginResult->fetch('loginresult-xml.tpl');
             return _arContent($main, array('filename' => 'Logins-' . date('YmdHi') . '.xml', 'content-disposition' => 'attachement', 'content-type' => CopixMIMETypes::getFromExtension('.xml')));
             break;
             /*
             case 'pdf':
                 break;
             */
         /*
         case 'pdf':
             break;
         */
         case 'session':
             // DEBUG
             $main = '<pre>' . print_r($inSession, true) . '</pre>';
             break;
         default:
             break;
     }
     $tpl->assign('MAIN', $main);
     $tpl->assign('MENU', $this->menu);
     return new CopixActionReturn(COPIX_AR_DISPLAY, $tpl);
 }
 /**
  * Affichage du flux RSS d'un blog (flux sortant)
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2006/11/28
  * @param string $blog Url_blog du blog
  */
 public function getBlogRss()
 {
     $blog = $this->getRequest('blog', null);
     if ($blog != null) {
         $blogDAO =& CopixDAOFactory::create('blog|blog');
         if ($blog = $blogDAO->getBlogByName($blog)) {
             $rss = CopixZone::process('ListArticleRss', array('blog' => $blog));
             return _arContent($rss, array('content-type' => CopixMIMETypes::getFromExtension('xml')));
         }
     }
     return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('blog.error.unableToFindBlog'), 'back' => CopixUrl::get('')));
 }
 public function processShowMultipleAccountsListing()
 {
     $ppo = new CopixPPO();
     // Récupération des informations des comptes créés
     $ppo->accounts = _sessionGet('gestionautonome|addMultipleStudents|success');
     // Récupérations des informations des modifications apportées
     $accountsInSession = _sessionGet('modules|gestionautonome|passwordsList');
     if (!is_array($accountsInSession)) {
         $accountsInSession = array();
     } else {
         $toDisplay = array();
         foreach ($accountsInSession as $lines) {
             foreach ($lines as $data) {
                 $toDisplay[] = $data;
             }
         }
         $ppo->accountsInSession = $toDisplay;
     }
     // Récupération du format de sortie demandé
     if (!_request('format') || trim(_request('format')) == '') {
         $format = "default";
     } else {
         $format = _request('format');
     }
     // 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, ' &raquo; ');
     $ppo->TITLE_PAGE = CopixConfig::get('gestionautonome|moduleTitle');
     $ppo->title = 'Importer ' . CopixCustomI18N::get('gestionautonome|gestionautonome.message.%%structure_element_persons%%', array('catalog' => $ppo->vocabularyCatalog->id_vc));
     $ppo->msgSuccess = CopixCustomI18N::get('gestionautonome|gestionautonome.message.%%structure_element_Persons%%', array('catalog' => $ppo->vocabularyCatalog->id_vc)) . ' ajoutés !';
     $ppo->subTitle = 'Liste ' . CopixCustomI18N::get('gestionautonome|gestionautonome.message.%%indefinite__structure_element_persons%%', array('catalog' => $ppo->vocabularyCatalog->id_vc)) . ' ajoutés';
     // Sortie suivant le format demandé
     $tplResult = new CopixTpl();
     $tplResult->assign('accounts', $ppo->accounts);
     switch ($format) {
         case 'default':
             return _arPPO($ppo, 'account_listing.tpl');
         case 'html':
             $result = $tplResult->fetch('account_listing_html.tpl');
             return _arContent($result, array('filename' => 'Logins-' . date('YmdHi') . '.html', 'content-disposition' => 'inline', 'content-type' => CopixMIMETypes::getFromExtension('.html')));
             break;
         case 'csv':
             $result = $tplResult->fetch('account_listing_csv.tpl');
             return _arContent($result, array('filename' => 'Logins-' . date('YmdHi') . '.csv', 'content-disposition' => 'attachement', 'content-type' => CopixMIMETypes::getFromExtension('.csv')));
             break;
     }
 }
 /**
  * A partir d'un nom de fichier, renvoie son type MIME
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2010/09/24
  * @param string $iFilename Nom (ou chemin) du fichier
  * @return
  */
 public function getMimeType($iFilename)
 {
     $point = strrpos($iFilename, ".");
     if ($point !== false) {
         $ext = substr($iFilename, $point + 1);
         $ext = strtolower($ext);
     } else {
         $ext = $iFilename;
     }
     $oMimeType = CopixMIMETypes::getFromExtension($ext);
     // On regarde si on veut pas ecraser le type mime
     if ($oMimeType == 'application/octet-stream') {
         $tmp = MalleService::getTypeInfos($ext);
         if ($tmp && isset($tmp['type_mime'])) {
             $oMimeType = $tmp['type_mime'];
         }
     }
     return $oMimeType;
 }
 private function doExportAlbum($destfolder, $data)
 {
     foreach ($data->files as $file) {
         $file_from = $this->path_old . "/album/" . $file->album_id . "_" . $file->album_cle . "/" . $file->photo_id . "_" . $file->photo_cle . "." . $file->photo_ext;
         $destfile = _record('malle|malle_files', $this->connection_name_new);
         $destfile->malle = $destfolder->malle;
         $destfile->malle_cle = $destfolder->malle_cle;
         $destfile->folder = $destfolder->id;
         $destfile->nom = $file->photo_nom;
         $destfile->fichier = "archive_album_" . $file->photo_id . "_" . $file->photo_cle . "." . $file->photo_ext;
         $destfile->taille = filesize($file_from);
         $destfile->type = CopixMIMETypes::getFromExtension($file->photo_ext);
         $destfile->cle = substr(md5(microtime()), 0, 10);
         $destfile->date_upload = $destfolder->date_creation;
         _dao('malle|malle_files', $this->connection_name_new)->insert($destfile);
         $file_dest = $this->path_new . "/malle/" . $destfolder->malle . "_" . $destfolder->malle_cle . "/" . $destfile->id . "_archive_album_" . $file->photo_id . "_" . $file->photo_cle . "." . $file->photo_ext;
         copy($file_from, $file_dest);
     }
     foreach ($data->folders as $folder) {
         $destsubfolders = _record('malle|malle_folders', $this->connection_name_new);
         $destsubfolders->malle = $destfolder->malle;
         $destsubfolders->malle_cle = $destfolder->malle_cle;
         $destsubfolders->parent = $destfolder->id;
         $destsubfolders->nb_folders = 0;
         $destsubfolders->nb_files = 0;
         $destsubfolders->taille = 0;
         $destsubfolders->date_creation = date("Y-m-d H:i:s");
         $destsubfolders->nom = $folder->dossier_nom;
         _dao('malle|malle_folders', $this->connection_name_new)->insert($destsubfolders);
         $this->doExportAlbum($destsubfolders, $folder);
     }
 }
 /**
  * Renvoie le type MIME d'un fichier
  *
  * @param  string $filename Nom du fichier
  *
  * @return string
  */
 public static function getMimeType($filename)
 {
     $point = strrpos($filename, '.');
     if ($point !== false) {
         $ext = substr($filename, $point + 1);
         $ext = strtolower($ext);
     } else {
         $ext = $filename;
     }
     return CopixMIMETypes::getFromExtension($ext);
 }
 /**
  * Flux RSS des blogs de tout Iconito
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2007/11/27
  */
 public function processRss()
 {
     $rss = CopixZone::process('Rss');
     //echo "rss=$rss<p></p>";
     return _arContent($rss, array('content-type' => CopixMIMETypes::getFromExtension('xml')));
 }
 /**
  * Réalise les derniers traitements (généralement d'affichage ou de redirection).
  *
  * En fonction du code retour de l'action CopixActionReturn::CONST, Copix réalise
  * un certain nombre de traitements pour terminer la requête en cours.
  *
  * @param	CopixActionReturn      $pToProcess   Ce qui a été retourné par CopixActionGroup::process ()
  * @see CopixActionGroup
  */
 protected function _processResult($toProcess)
 {
     $config = CopixConfig::instance();
     //appel les plugins de post-processing.
     foreach (CopixPluginRegistry::getRegistered() as $name => $plugin) {
         $plugin->afterProcess($toProcess);
     }
     //Analyse du résultat du process
     switch ($toProcess->code) {
         case CopixActionReturn::ERROR:
             //erreur
             header("Content-Type: text/html");
             $tpl = new CopixTpl();
             if (($assignedTitlePage = $tpl->getAssigned('TITLE_PAGE')) !== null) {
                 $tpl->assign('TITLE_PAGE', '[' . _i18n('copix:common.messages.error') . ']' . $assignedTitlePage);
             } else {
                 $tpl->assign('TITLE_PAGE', '[' . _i18n('copix:common.messages.error') . ']');
             }
             $this->_processStandard($tpl);
             $tpl->assign('HTML_HEAD', '<$HTML_HEAD />');
             $tpl->assign('MAIN', $toProcess->data);
             $content = $tpl->fetch('|error.tpl');
             CopixContext::clear();
             $this->_beforeDisplay($content);
             echo $content;
             break;
         case CopixActionReturn::DISPLAY:
             $charset = CopixI18N::getCharset();
             header("Content-Type: text/html;charset=" . $charset);
             $this->_processStandard($toProcess->data);
             //appel de la méthode de préparation de la page standard.
             $toProcess->data->assign('HTML_HEAD', '<$HTML_HEAD />');
             //Par ex, bandeaux de pub, menus dynamiques, ... (propres aux projets.)
             CopixContext::clear();
             $content = $toProcess->data->fetch($config->mainTemplate);
             $this->_beforeDisplay($content);
             echo $content;
             break;
         case CopixActionReturn::DISPLAY_IN:
             $charset = CopixI18N::getCharset();
             header("Content-Type: text/html;charset=" . $charset);
             $this->_processStandard($toProcess->data);
             //appel de la méthode de préparation de la page standard.
             $toProcess->data->assign('HTML_HEAD', '<$HTML_HEAD />');
             //Par ex, bandeaux de pub, menus dynamiques, ... (propres aux projets.)
             $content = $toProcess->data->fetch($toProcess->more);
             $this->_beforeDisplay($content);
             echo $content;
             break;
         case CopixActionReturn::FILE:
         case CopixActionReturn::CONTENT:
             $contentDisposition = 'inline';
             $contentTransfertEnconding = 'binary';
             $contentType = null;
             $fileNameOnly = null;
             if ($toProcess->code == CopixActionReturn::FILE) {
                 $fileName = $toProcess->data;
                 $fileNameOnly = explode('/', str_replace('\\', '/', $fileName));
                 $fileNameOnly = $fileNameOnly[count($fileNameOnly) - 1];
             }
             if (is_array($toProcess->more)) {
                 if (isset($toProcess->more['content-disposition'])) {
                     $contentDisposition = $toProcess->more['content-disposition'];
                 }
                 if (isset($toProcess->more['filename'])) {
                     $fileNameOnly = $toProcess->more['filename'];
                 }
                 if (isset($toProcess->more['content-type'])) {
                     $contentType = $toProcess->more['content-type'];
                 }
                 if (isset($toProcess->more['content-transfer-encoding'])) {
                     $contentTransfertEnconding = $toProcess->more['content-transfer-encoding'];
                 }
             } elseif (strlen(trim($toProcess->more))) {
                 $contentType = $toProcess->more;
             }
             if ($contentType === null) {
                 $contentType = CopixMIMETypes::getFromFileName($fileNameOnly);
             }
             header("Pragma: public");
             header("Expires: 0");
             header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
             header("Cache-Control: protected", false);
             header("Content-Type: " . $contentType);
             header("Content-Disposition: " . $contentDisposition . "; filename=\"" . $fileNameOnly . "\";");
             header("Content-Transfer-Encoding: " . $contentTransfertEnconding);
             header("Content-Length: " . ($toProcess->code == CopixActionReturn::FILE ? filesize($fileName) : strlen($toProcess->data)));
             if ($toProcess->code == CopixActionReturn::FILE) {
                 readfile($fileName);
             } else {
                 echo $toProcess->data;
             }
             flush();
             break;
         case CopixActionReturn::PPO:
             $contentType = 'text/html';
             $cacheControl = false;
             $mainTemplate = $config->mainTemplate;
             $charset = CopixI18N::getCharset();
             if (is_array($toProcess->more)) {
                 $template = $toProcess->more['template'];
                 if (isset($toProcess->more['content-type'])) {
                     $contentType = $toProcess->more['content-type'];
                 }
                 if (array_key_exists('mainTemplate', $toProcess->more)) {
                     $mainTemplate = $toProcess->more['mainTemplate'];
                 }
                 if (isset($toProcess->more['charset'])) {
                     $charset = $toProcess->more['charset'];
                 }
                 if (isset($toProcess->more['cache-control'])) {
                     $cacheControl = $toProcess->more['cache-control'];
                 }
             } else {
                 $template = $toProcess->more;
             }
             $tplContent = new CopixTpl();
             $tplContent->assign('ppo', $toProcess->data);
             header("Content-Type: " . $contentType . ";charset=" . $charset);
             if ($cacheControl !== false) {
                 header('Cache-Control: ' . $cacheControl);
             }
             if ($mainTemplate !== null) {
                 $tplMain = new CopixTpl();
                 $tplMain->assign('TITLE_PAGE', isset($toProcess->data->TITLE_PAGE) ? $toProcess->data->TITLE_PAGE : null);
                 $tplMain->assign('TITLE_BAR', isset($toProcess->data->TITLE_BAR) ? $toProcess->data->TITLE_BAR : null);
                 $tplMain->assign('POPUP', isset($toProcess->data->POPUP) ? $toProcess->data->POPUP : null);
                 $tplMain->assign('MENU', isset($toProcess->data->MENU) ? $toProcess->data->MENU : null);
                 $tplMain->assign('CAN_CLOSE', isset($toProcess->data->CAN_CLOSE) ? $toProcess->data->CAN_CLOSE : null);
                 $tplMain->assign('BODY_ON_LOAD', isset($toProcess->data->BODY_ON_LOAD) ? $toProcess->data->BODY_ON_LOAD : null);
                 $tplMain->assign('BODY_ON_UNLOAD', isset($toProcess->data->BODY_ON_UNLOAD) ? $toProcess->data->BODY_ON_UNLOAD : null);
                 $tplMain->assign('MAIN', $tplContent->fetch($template));
                 $tplContent = null;
                 //on libère la mémoire
                 $tplMain->assign('ppo', $toProcess->data);
                 $this->_processStandard($tplMain);
                 $tplMain->assign('HTML_HEAD', '<$HTML_HEAD />');
                 $content = $tplMain->fetch($mainTemplate);
             } else {
                 $tplContent->assign('TITLE_PAGE', isset($toProcess->data->TITLE_PAGE) ? $toProcess->data->TITLE_PAGE : null);
                 $tplContent->assign('TITLE_BAR', isset($toProcess->data->TITLE_BAR) ? $toProcess->data->TITLE_BAR : null);
                 $tplContent->assign('BODY_ON_LOAD', isset($toProcess->data->BODY_ON_LOAD) ? $toProcess->data->BODY_ON_LOAD : null);
                 $tplContent->assign('BODY_ON_UNLOAD', isset($toProcess->data->BODY_ON_UNLOAD) ? $toProcess->data->BODY_ON_UNLOAD : null);
                 $this->_processStandard($tplContent);
                 $tplContent->assign('HTML_HEAD', '<$HTML_HEAD />');
                 $content = $tplContent->fetch($template);
             }
             CopixContext::clear();
             $this->_beforeDisplay($content);
             echo $content;
             break;
         case CopixActionReturn::REDIRECT:
             //redirection standard, message http.
             header('location: ' . $toProcess->data);
             break;
         case CopixActionReturn::HTTPCODE:
             foreach ($toProcess->data as $code) {
                 header($code);
             }
             echo $toProcess->more;
             break;
         case CopixActionReturn::NONE:
             break;
     }
     //Appel des méthodes afterDisplay des plugins
     foreach (CopixPluginRegistry::getRegistered() as $name => $plugin) {
         $plugin->afterDisplay();
     }
     session_write_close();
 }