langues = false; $this->base_thelia = realpath(dirname(__FILE__) . '/../../..'); } public function init() { $this->ajout_desc( "Traduction", "Plugin de traduction de votre site", "Ce plugin permet de traduire facilement votre site directement depuis le back-office de Thélia.", 1); $langdir = $this->base_thelia . self::LANGDIR; if (! is_dir($langdir)) { if (! @mkdir($langdir, 0777, true)) { die("Impossible de créer le répertoire $langdir. Créez le manuellement, en lui donnant les permissions nécessaires à la création de fichiers (777), puis rechargez cette page."); } @chmod($langdir, 0777); } if (! $fh = @fopen("$langdir/test.tmp", 'w')) { die("Impossible de créer un fichier le répertoire $langdir. Donnez lui les permissions nécessaires à la création de fichiers (777), puis rechargez cette page."); } else { fclose($fh); @unlink("$langdir/test.tmp"); } $this->importer(); $this->importer_15(); } public function destroy() { // Restaurer les anciens fichiers de langue 1.5 $langdir = realpath(dirname(__FILE__) . '/../../../template/lang'); if ($dh = @opendir($langdir)) { while ($file = readdir($dh)) { if (preg_match('/^([0-9])+\.php.ANCIEN/', $file, $matches)) { $langfile = $this->base_thelia . self::LANGDIR.'/'.$matches[1].'.php'; if (@rename("$langdir/$file", $langfile) === false) { die("Echec lors du renommage du fichier $langdir/$file. Autorisez les droits en écriture de ce fichier et du répertoire qui le contient."); } } } } } public function post() { global $res; if (preg_match_all('!'.self::MARQUE_DEBUT.'(.*?)'.self::MARQUE_FIN.'!is', $res, $matches)) { $this->charger_langues($source = 'session'); $transfile = $this->base_thelia . self::LANGDIR. '/traduction_'.$this->idlangue.'.php'; if (is_file($transfile)) { @include_once($transfile); } foreach($matches[1] as $match) { $hash = hash('md5', $match); if (isset($traduction[$hash])) { $res = str_replace(self::MARQUE_DEBUT.$match.self::MARQUE_FIN, $traduction[$hash], $res); } else { $res = str_replace(self::MARQUE_DEBUT.$match.self::MARQUE_FIN, $match, $res); } } } } public function boucle($texte, $args) { $exclure = lireTag($args, 'exclure'); $id = lireTag($args, 'id'); $this->charger_langues($source = 'session'); $res = ''; // Trouver l'url ré-écrite, si elle existe $reecriture = new Reecriture(); if (Variable::lire("rewrite") != 0) { $requrl = lireParam('url', 'string'); if ($requrl != '') $reecriture->charger($requrl); } $url = preg_replace('/[\&\?]*lang=[0-9]+/', '', $_SERVER['REQUEST_URI']); $url .= strstr($url, '?') == false ? '?' : '&'; $lng = new Lang(); $query = 'select id from ' . $lng->table . ' where 1 '; if ($id != '') $query .= ' and id in ( ' . $id . ')'; if ($exclure != '') $query .= ' and id not in ( ' . $exclure . ')'; $result = mysql_query($query); $lngredir = new Reecriture(); while ($result && $row = mysql_fetch_object($result)) { $lng->charger($row->id); if ($reecriture->actif && $lngredir->charger_param($reecriture->fond, $reecriture->param, $lng->id, 1)) { $lngurl = $lngredir->url; } else { $lngurl = htmlentities($url . 'lang='.$lng->id); } $tmp = str_replace('#ID', $lng->id, $texte); $tmp = str_replace('#DESCRIPTION', $lng->description, $tmp); $tmp = str_replace('#CODE', $lng->code, $tmp); $tmp = str_replace('#URL', $lngurl, $tmp); $res .= $tmp; } return $res; } protected function charger_langues($source = 'session') { if ($this->langues) return; $this->langues = array(); $lng = new Lang(); $query = 'select id from ' . $lng->table; $result = mysql_query($query); while ($result && $row = mysql_fetch_object($result)) { $lng = new Lang(); $lng->charger($row->id); $this->langues[] = $lng; } if ($source == 'session') { $this->idlangue = isset($_SESSION["navig"]->lang) && intval($_SESSION["navig"]->lang) != 0 ? intval($_SESSION["navig"]->lang) : 1; } else { $this->idlangue = isset($_REQUEST['lang']) && intval($_REQUEST['lang']) != 0 ? intval($_REQUEST['lang']) : 1; } } protected function importer() { // Importer les fichiers de FichierLang, si y'en a $langdir = realpath(dirname(__FILE__)) . '/../../../lang'; if ($dh = @opendir($langdir)) { while ($file = readdir($dh)) { if (preg_match('/lang([0-9])\.php/', $file, $matches)) { unset($GLOBALS['dictionnaire']); include_once("$langdir/$file"); $langfile = $this->base_thelia . self::LANGDIR.'/traduction_'.$matches[1].'.php'; // Ne pas écraser un fichier existant if (file_exists($langfile)) continue; if ($fp = fopen($langfile, 'w')) { fwrite($fp, '<' . '?php' . "\n"); fwrite($fp, '$traduction = array('."\n"); foreach($GLOBALS['dictionnaire'] as $key => $val) { $hash = hash('md5', $key); $val = str_replace("'", "\'", $val); fwrite($fp, "\t'$hash' => '".$val."',\n"); } fwrite($fp, ");\n"); fwrite($fp, '?' . ">\n"); fclose($fp); } else { die("Echec lors de l'écriture du fichier $langfile. Autorisez les droits en écriture de ce fichier et du répertoire qui le contient."); } } } } } protected function importer_15() { // Importer les fichiers de FichierLang, si y'en a $langdir = realpath(dirname(__FILE__) . '/../../../template/lang'); if ($dh = @opendir($langdir)) { while ($file = readdir($dh)) { if (preg_match('/^([0-9])+\.php/', $file, $matches)) { unset($GLOBALS['dicotpl']); include_once("$langdir/$file"); $langfile = $this->base_thelia . self::LANGDIR.'/traduction_'.$matches[1].'.php'; // Ne pas écraser un fichier existant if (file_exists($langfile)) continue; if ($fp = fopen($langfile, 'w')) { fwrite($fp, '<' . '?php' . "\n"); fwrite($fp, '$traduction = array('."\n"); foreach($GLOBALS['dicotpl'] as $key => $val) { $hash = hash('md5', $key); $val = str_replace("'", "\'", $val); fwrite($fp, "\t'$hash' => '".$val."',\n"); } fwrite($fp, ");\n"); fwrite($fp, '?' . ">\n"); fclose($fp); if (@rename("$langdir/$file", "$langdir/$file.ANCIEN") === false) { die("Echec lors du renommage du fichier $langdir/$file. Autorisez les droits en écriture de ce fichier et du répertoire qui le contient."); } } else { die("Echec lors de l'écriture du fichier $langfile. Autorisez les droits en écriture de ce fichier et du répertoire qui le contient."); } } } } } } ?>