public function afterDisplay()
 {
     if (CopixTpl::getTheme() != CopixConfig::get('admin|defaultThemeId')) {
         CopixAJAX::getSession()->set('currentTheme', CopixTpl::getTheme());
     }
 }
 public function processSessionPing()
 {
     CopixAJAX::getSession();
     $ppo = new CopixPPO();
     $ppo->MAIN = "";
     return _arDirectPPO($ppo, 'blanknohead.tpl');
 }
 public function process($pParams, $pContent = null)
 {
     // Récupère les paramètres
     $src = $this->requireParam('src');
     $attributes = array();
     $attributes['quality'] = $quality = $this->getParam('quality', 'high');
     $attributes['width'] = $width = $this->getParam('width');
     $attributes['height'] = $height = $this->getParam('height');
     $attributes['bgcolor'] = $bgcolor = $this->getParam('bgcolor');
     $attributes['style'] = $style = $this->getParam('style');
     $id = $this->getParam('id', uniqid('swf'));
     $name = $this->getParam('name', $id);
     $attributes = array_filter($attributes);
     $version = $this->getParam('version', '8');
     @(list($major, $minor, $rev) = explode('.', $version));
     $version = sprintf('%d.%d.%d', $major, $minor, $rev);
     //$doExpressInstall = $this->getParam('doExpressInstall');
     $params = $this->getParam('params', array());
     $vars = $this->getParam('vars', array());
     $extra = $this->getExtraParams();
     $this->validateParams();
     // Intègre les paramètres de la forme params_X et vars_X dans les bons tableaux
     foreach ($extra as $key => $value) {
         if (substr($key, 0, 7) == 'params_') {
             $params[substr($key, 7)] = $value;
             unset($extra[$key]);
         } elseif (substr($key, 0, 5) == 'vars_') {
             $vars[substr($key, 5)] = $value;
             unset($extra[$key]);
         }
     }
     // Calcule la chaîne de variables
     $flashVars = count($vars) > 0 ? http_build_query($vars) : '';
     $toReturn = array();
     // Génère le tag Object (pour IE et compat HTML 4)
     $toReturn[] = '<object';
     $toReturn[] = ' id="' . $id . '"';
     $toReturn[] = ' classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"';
     $toReturn[] = ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' . str_replace('.', ',', $version) . ',0" ';
     foreach (array_merge($attributes, $extra) as $key => $value) {
         if ($value === true) {
             $toReturn[] = ' ' . $key;
         } elseif ($vale !== false) {
             $toReturn[] = sprintf(' %s="%s"', $key, htmlspecialchars($value));
         }
     }
     $toReturn[] = '>';
     $toReturn[] = '<param name="movie" value="' . $src . '" />';
     if ($flashVars) {
         $toReturn[] = '<param name="flashvars" value="' . $flashVars . '" />';
     }
     foreach ($params as $key => $value) {
         $toReturn[] = sprintf('<param name="%s" value="%s" />', $key, htmlspecialchars($value));
     }
     // Génère le tag Embed (pour FF/Moz)
     $toReturn[] = '<embed ';
     $toReturn[] = ' id="' . $id . '"';
     $toReturn[] = ' src="' . $src . '"';
     foreach (array_merge($attributes, $extra, $params) as $key => $value) {
         if ($value === true) {
             $toReturn[] = ' ' . $key;
         } elseif ($vale !== false) {
             $toReturn[] = sprintf(' %s="%s"', $key, htmlspecialchars($value));
         }
     }
     if ($flashVars) {
         $toReturn[] = ' flashvars="' . $flashVars . '"';
     }
     $toReturn[] = ' name="' . htmlspecialchars($name) . '"';
     $toReturn[] = ' type="application/x-shockwave-flash"';
     $toReturn[] = ' pluginspage="http://www.macromedia.com/go/getflashplayer"';
     $toReturn[] = ' />';
     // Fin du tag Object
     $toReturn[] = '</object>';
     // IE a besoin d'un coup de pouce (ça ne fait pas de mal aux navigateurs qui prétendraient être IE).
     if (strpos($_SERVER['HTTP_USER_AGENT'], ' MSIE ') !== false) {
         CopixHTMLHeader::addJSLink(_resource('js/taglib/swfobject.js'), array('id' => 'tag_swfobject_js', 'defer' => true));
         // Si on est en AJAX, force un appelle à processSWFObjects
         if (CopixAJAX::isAJAXRequest()) {
             CopixHTMLHeader::addJSDOMReadyCode('processSWFObjects();', 'tag_swfobject_processSWFObjects');
         }
     }
     return implode("", $toReturn);
 }
 /**
  * Demande le chargement de Mootools.
  *
  * @param array $pPlugins Liste de plugins à charger.
  */
 public static function addJSFramework($pPlugins = null)
 {
     // Charge le noyau
     if (!isset(self::$_JSFrameworkAdded['*core*'])) {
         self::$_JSFrameworkAdded['*core*'] = true;
         // Initialise Mootools et l'identifiant de session
         if (!CopixAJAX::isAJAXRequest()) {
             // Ajoute MooTools et FirebugLite
             if (CopixConfig::instance()->getMode() == CopixConfig::DEVEL) {
                 // MooTools non compressé et FirebugLite normal
                 self::addJSLink(_resource('js/firebuglite/firebug.js'), array('id' => 'firebug_js'));
                 self::addJSLink(_resource('js/mootools/mootools-devel.js'), array('id' => 'mootools_core_js'));
             } else {
                 // MooTools compressé et FirebugLite qui ne fait rien.
                 self::addJSLink(_resource('js/firebuglite/firebugx.js'), array('id' => 'firebug_js'));
                 self::addJSLink(_resource('js/mootools/mootools.js'), array('id' => 'mootools_core_js'));
             }
             // Ajoute le framework JS spécifique de Copix
             self::addJSLink(_resource('js/copix.js'), array('id' => 'copix_js', 'charset' => 'UTF-8'));
             // Ajoute le code d'initialisation
             $urlBase = CopixUrl::get();
             self::addJSCode(sprintf('Copix = new CopixClass(%s);', CopixJSON::encode(array('ajaxSessionId' => CopixAJAX::getSessionId(), 'module' => CopixContext::get(), 'urlBase' => $urlBase, 'resourceUrlBase' => CopixResource::getResourceBaseUrl($urlBase, CopixTpl::getTheme(), CopixI18N::getLang(), CopixI18N::getCountry())))), 'copixajax_init', CopixHTMLHeader::DOMREADY_ALWAYS);
         }
     }
     // Charge les plugins
     if (is_array($pPlugins)) {
         foreach ($pPlugins as $pluginName) {
             if (!isset(self::$_JSFrameworkAdded[$pluginName])) {
                 self::$_JSFrameworkAdded[$pluginName] = true;
                 $pluginId = 'mootools_plugin_' . $pluginName;
                 $scriptId = $pluginId . '_js';
                 $stylesheetId = $pluginId . '_css';
                 if (file_exists(CopixUrl::getResourcePath($path = 'js/mootools/plugins/' . $pluginName . '.js'))) {
                     self::addJSLink(_resource($path), array("id" => $scriptId));
                 } elseif (file_exists(CopixUrl::getResourcePath($path = 'js/mootools/plugins/' . $pluginName . '.js.php'))) {
                     self::addJSLink(_resource($path), array("id" => $scriptId));
                 } else {
                     throw new CopixException('[Mootools] Plugin ' . $pluginName . ' not found in ' . $pluginPath);
                 }
                 if (file_exists(CopixUrl::getResourcePath($path = 'js/mootools/css/' . $pluginName . '.css'))) {
                     self::addCssLink(_resource($path), array("id" => $stylesheetId));
                 }
             }
         }
     }
 }
 public function process($pParams, $pContent = null)
 {
     // Récupère les paramètres
     $zone = $this->requireParam('process');
     $required = $this->getParam('required');
     $ajax = $this->getParam('ajax', false);
     $id = $this->getParam('id');
     $idClick = $this->getParam('idClick');
     $text = $this->getParam('text', '');
     $extra = $this->getParam('extra', '');
     $handlers = array_filter($this->getParam(array('onDisplay', 'onHide', 'onComplete'), null, 'string'));
     $auto = $this->getParam('auto', false);
     $zoneParams = array_merge($this->getParam('zoneParams', array()), $this->getExtraParams());
     // Valide les paramètres
     $this->validateParams();
     // Supprime le préfixe "zoneParams_" des paramètres de la zone
     // Cela peut servir à passer des paramètres supplémentaires au niveau du tag
     // qui rentrent en conflit avec les noms des paramètres standard.
     foreach ($zoneParams as $key => $value) {
         if (preg_match('/^zoneParams_(.+)$/i', $key, $parts)) {
             unset($zoneParams[$key]);
             $zoneParams[$parts[1]] = $value;
         }
     }
     // Vérifie l'existence du module
     $fileInfo = new CopixModuleFileSelector($zone);
     if (!CopixModule::isEnabled($fileInfo->module) && $required === false) {
         return "";
     }
     // Génère un identifiant si nécessaire
     $idProvided = $id !== null;
     if (!$idProvided) {
         $id = uniqid('copixzone');
     }
     $toReturn = array();
     // On a spécifié un texte : on l'ajoute comme trigger
     if ($text) {
         if ($idClick === null) {
             $idClick = $id . '_trigger';
         }
         $toReturn[] = '<span id="' . $idClick . '">' . $text . '</span>';
     }
     // Zone javascript si on a un clicker, de l'AJAX ou des gestionnaires d'événéments
     if ($idProvided || $ajax || count($handlers) || $idClick) {
         // Initialise le Javascript
         CopixHTMLHeader::addJSFramework();
         CopixHTMLHeader::addJSLink(_resource('js/taglib/copixzone.js'), array('id' => 'taglib_copixzone_js'));
         $js = new CopixJSWidget();
         // Options de la zone
         $options = array('zoneId' => $id);
         // Met en session AJAX les paramètres de la zone
         if ($ajax) {
             $options['instanceId'] = $instanceId = uniqid();
             CopixAJAX::getSession()->set($instanceId, array($zone, $zoneParams));
         }
         if ($auto) {
             $options['auto'] = true;
         }
         // Ajoute les handlers
         foreach ($handlers as $name => $code) {
             $options[$name] = $js->function_(null, "div,trigger", $code);
         }
         // Identifiant du trigger
         if ($idClick) {
             $options['triggerId'] = $idClick;
         }
         // Initialise la zone
         $js->Copix->registerZone($options);
         // Ajoute le code
         CopixHTMLHeader::addJSDOMReadyCode($js, "tag_copixzone_" . $id);
     }
     // Contenu de la zone
     if ($ajax) {
         $zoneContent = '';
         $style = 'style="display:none;" ';
     } else {
         $zoneContent = CopixZone::process($zone, $zoneParams);
         $style = '';
     }
     if ($idProvided || $style || $extra || $ajax || count($handlers) || $idClick) {
         $toReturn[] = '<div id="' . $id . '" ' . trim($style . $extra) . '>' . $zoneContent . '</div>';
     } else {
         $toReturn[] = $zoneContent;
     }
     return join('', $toReturn);
 }