<?php /* * e107 website system * * Copyright (C) 2008-2009 e107 Inc (e107.org) * Released under the terms and conditions of the * GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * * Administration Area - Languages * * $Source: /cvs_backup/e107_0.8/e107_admin/language.php,v $ * $Revision$ * $Date$ * $Author$ * */ require_once ("../class2.php"); if (!getperms('0')) { header("location:".e_BASE."index.php"); exit; } //include_lan(e_LANGUAGEDIR.e_LANGUAGE.'/admin/lan_'.e_PAGE); e107::coreLan('language', true); $e_sub_cat = 'language'; require_once ("auth.php"); require_once (e_HANDLER."form_handler.php"); require_once (e_HANDLER."message_handler.php"); $frm = e107::getForm(); $emessage = e107::getMessage(); $tabs = table_list(); // array("news","content","links"); $lanlist = e107::getLanguage()->installed();// Bugfix - don't use e_LANLIST as it's cached (SESSION) $message = ''; if (e_QUERY) { $tmp = explode('.', e_QUERY); $action = varset($tmp[0]); $sub_action = varset($tmp[1]); $id = varset($tmp[2]); unset($tmp); } if (isset($_POST['submit_prefs']) && isset($_POST['mainsitelanguage'])) { unset($temp); $changes = array(); $temp['multilanguage'] = $_POST['multilanguage']; $temp['multilanguage_subdomain'] = $_POST['multilanguage_subdomain']; $temp['multilanguage_domain'] = $_POST['multilanguage_domain']; $temp['sitelanguage'] = $_POST['mainsitelanguage']; $temp['noLanguageSubs'] = $_POST['noLanguageSubs']; if ($admin_log->logArrayDiffs($temp, $pref, 'LANG_01')) { save_prefs(); // Only save if changes $emessage->add(LAN_SETSAVED, E_MESSAGE_SUCCESS); } else { $emessage->add(LAN_NO_CHANGE); } } // ----------------- delete tables --------------------------------------------- if (isset($_POST['del_existing']) && $_POST['lang_choices']) { $lang = strtolower($_POST['lang_choices']); foreach ($tabs as $del_table) { if ($sql->db_Table_exists($lang."_".$del_table,TRUE)) { echo $del_table." exists<br />"; $qry = "DROP TABLE ".$mySQLprefix."lan_".$lang."_".$del_table; if (mysql_query($qry)) { $message .= sprintf(LANG_LAN_28, $_POST['lang_choices'].' '.$del_table).'[!br!]'; $emessage->add(sprintf(LANG_LAN_28, $_POST['lang_choices'].' '.$del_table), E_MESSAGE_SUCCESS); } else { $message .= sprintf(LANG_LAN_29, $_POST['lang_choices'].' '.$del_table).'[!br!]'; $emessage->add(sprintf(LANG_LAN_29, $_POST['lang_choices'].' '.$del_table), E_MESSAGE_WARNING); } } } $admin_log->log_event('LANG_02', $message, E_LOG_INFORMATIVE, ''); $sql->db_ResetTableList(); if ($action == 'modify') $action = 'db';//FIX - force db action when deleting all lan tables } // ----------create tables ----------------------------------------------------- if (isset($_POST['create_tables']) && $_POST['language']) { $table_to_copy = array(); $lang_to_create = array(); foreach ($tabs as $value) { $lang = strtolower($_POST['language']); if (isset($_POST[$value])) { $copdata = ($_POST['copydata_'.$value]) ? 1 : 0; if ($sql->db_CopyTable($value, "lan_".$lang."_".$value, $_POST['drop'], $copdata)) { $message .= sprintf(LANG_LAN_30, $_POST['language'].' '.$value).'[!br!]'; $emessage->add(sprintf(LANG_LAN_30, $_POST['language'].' '.$value), E_MESSAGE_SUCCESS); } else { if (!$_POST['drop']) { $message .= sprintf(LANG_LAN_00, $_POST['language'].' '.$value).'[!br!]'; $emessage->add(sprintf(LANG_LAN_00, $_POST['language'].' '.$value), E_MESSAGE_WARNING); } else { $message .= sprintf(LANG_LAN_01, $_POST['language'].' '.$value).'[!br!]'; $emessage->add(sprintf(LANG_LAN_01, $_POST['language'].' '.$value), E_MESSAGE_WARNING); } } } elseif ($sql->db_Table_exists($value,$_POST['language'])) { if ($_POST['remove']) { // Remove table. if (mysql_query("DROP TABLE ".$mySQLprefix."lan_".$lang."_".$value)) { $message .= $_POST['language'].' '.$value.' '.LAN_DELETED.'[!br!]'; $emessage->add($_POST['language'].' '.$value.' '.LAN_DELETED, E_MESSAGE_SUCCESS); } else { $message .= sprintf(LANG_LAN_02, $_POST['language'].' '.$value).'[!br!]'; $emessage->add(sprintf(LANG_LAN_02, $_POST['language'].' '.$value), E_MESSAGE_WARNING); } } else { // leave table. LANG_LAN_32 $message .= sprintf(LANG_LAN_32, $_POST['language'].' '.$value).'[!br!]'; $emessage->add(sprintf(LANG_LAN_32, $_POST['language'].' '.$value)); } } } $admin_log->log_event('LANG_03', $message, E_LOG_INFORMATIVE, ''); $sql->db_ResetTableList(); } /* if(isset($message) && $message) { $ns->tablerender(LAN_OK, $message); } */ unset($text); if (!e_QUERY || $action == 'main' && !$_POST['language'] && !$_POST['edit_existing']) { multilang_prefs(); } if (varset($action) == 'db') { multilang_db(); } if (varset($_POST['ziplang']) && varset($_POST['language'])) { if(varset($pref['lancheck'][$_POST['language']]) == 1) { $text = zip_up_lang($_POST['language']); $admin_log->log_event('LANG_04', $_POST['language'], E_LOG_INFORMATIVE, ''); $emessage->add(LANG_LAN_25.': '.$text); } else { $emessage->add(LANG_LAN_36,E_MESSAGE_WARNING); } } if (varset($action) == "tools") { show_tools(); if($languagePacks = available_langpacks() ) { e107::getRender()->tablerender(LANG_LAN_34,$languagePacks ); } } function findIncludedFiles($script) { $data = file_get_contents($script); preg_match_all("/.*(include_lan|require_once|include|include_once) ?\((.*e_LANGUAGE.*?\.php)/i",$data,$match); $srch = array(" ",'e_PLUGIN.', 'e_LANGUAGEDIR', '.e_LANGUAGE.', "'", '"', "'."); $repl = array("", e_PLUGIN, e_LANGUAGEDIR, "English", "", "", ""); foreach($match[2] as $lanFile) { $arrt = str_replace($srch,$repl,$lanFile); if(strpos($arrt,'admin')) { return $arrt; } } return $arr[0]; } if(varset($_POST['searchDeprecated']) && varset($_POST['deprecatedLans'])) { $mes = e107::getMessage(); // $lanfile = $_POST['deprecatedLans']; $script = $_POST['deprecatedLans']; // $scriptname = str_replace("lan_","",basename($lanfile)); if(strpos($script,'admin')!=true) // Plugin { $lanfile = e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_".basename($script); } else // admin area. { $lanfile = findIncludedFiles($script); } if(!is_readable($script)) { $mes->addError("Not Readable: ".$script); // $script = $scriptname; // matching files. lan_xxxx.php and xxxx.php } $found = findIncludedFiles($script); // print_a($found); // Exceptions - same language loaded by several scripts. if($lanfile == e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_e107_update.php") { $script = e_ADMIN."update_routines.php,".e_ADMIN."e107_update.php"; } $mes->addDebug("LanFile: ".$lanfile); $mes->addDebug("Script: ".$script); if(is_readable($lanfile)) { $mes->addDebug("Reading LanFile... "); if($res = unused($lanfile,$script)) { $ns -> tablerender($res['caption'],$mes->render(). $res['text']); } } else { $mes->addDebug("Couldn't Read LanFile... "); $ns -> tablerender(vartrue($res['caption']), $mes->render(). vartrue($res['text'])); } } //FIX - create or edit check if (isset($_POST['create_edit_existing'])) $_POST['edit_existing'] = true; // Grab Language configuration. --- if (isset($_POST['edit_existing'])) { //XXX - JS ok with the current functionality? $text .= " <form method='post' action='".e_SELF."?db'> <fieldset id='core-language-edit'> <legend class='e-hideme'>".$_POST['lang_choices']."</legend> <table class='table adminlist'> <colgroup> <col class='col-label' /> <col class='col-control' /> </colgroup> <tbody> "; foreach ($tabs as $table_name) { $installed = 'lan_'.strtolower($_POST['lang_choices'])."_".$table_name; if (stristr($_POST['lang_choices'], $installed) === FALSE) { $text .= " <tr> <td>".ucfirst(str_replace("_", " ", $table_name))."</td> <td> <div class='auto-toggle-area f-left e-pointer'> "; $selected = ($sql->db_Table_exists($table_name,$_POST['lang_choices'])) ? " checked='checked'" : ""; $text .= " <input type='checkbox' class='checkbox' id='language-action-{$table_name}' name='{$table_name}' value='1'{$selected} onclick=\"if(document.getElementById('language-action-{$table_name}').checked){document.getElementById('language-datacopy-{$table_name}').style.display = '';}\" /> </div> <div class='f-left'> <span id='language-datacopy-{$table_name}' class='e-hideme e-pointer'> <input type='checkbox' class='checkbox' name='copydata_{$table_name}' id='copydata-{$table_name}' value='1' /> <label for='copydata-{$table_name}'>".LANG_LAN_15."</label> </span> </div> </td> </tr> "; } } // =========================================================================== // Drop tables ? isset() if (varset($_POST['create_edit_existing'])) { $baction = 'create'; $bcaption = LANG_LAN_06; } else { $baction = 'update'; $bcaption = LAN_UPDATE; } $text .= " <tr> <td><strong>".LANG_LAN_07."</strong></td> <td> ".$frm->checkbox('drop', 1)." <div class='smalltext field-help'>".$frm->label(LANG_LAN_08, 'drop', 1)."</div> </td> </tr> <tr> <td><strong>".LAN_CONFDELETE."</strong></td> <td> ".$frm->checkbox('remove', 1)." <div class='smalltext field-help'>".$frm->label(LANG_LAN_11, 'remove', 1)."</div> </td> </tr> </tbody> </table> <div class='buttons-bar center'> <input type='hidden' name='language' value='{$_POST['lang_choices']}' /> ".$frm->admin_button('create_tables','no-value',$baction,$bcaption)." <button class='{$baction}' type='submit' name='create_tables' value='no-value'><span>{$bcaption}</span></button> </div> </fieldset> </form> "; $ns->tablerender($_POST['lang_choices'], $emessage->render().$text); } require_once (e_ADMIN."footer.php"); // --------------------------------------------------------------------------- function multilang_prefs() { global $pref,$lanlist; $mes = e107::getMessage(); $frm = e107::getForm(); //XXX Remove later. // Enable only for developers - SetEnv E_ENVIRONMENT develop if(!isset($_SERVER['E_ENVIRONMENT']) || $_SERVER['E_ENVIRONMENT'] !== 'develop') { $lanlist = array('English'); $mes->addInfo("Alpha version currently supports only the English language. After most features are stable and English terms are optimized - translation will be possible."); } $text = " <form method='post' action='".e_SELF."' id='linkform'> <fieldset id='core-language-settings'> <legend class='e-hideme'>".LANG_LAN_13."</legend> <table class='table adminform'> <colgroup> <col class='col-label' /> <col class='col-control' /> </colgroup> <tbody> <tr> <td>".LANG_LAN_14.": </td> <td>"; $sellan = preg_replace("/lan_*.php/i", "", $pref['sitelanguage']); $text .= $frm->selectbox('mainsitelanguage',$lanlist,$sellan,"useValues=1"); $text .= " </td> </tr> <tr> <td>".LANG_LAN_12.": </td> <td> <div class='auto-toggle-area autocheck'>"; $checked = ($pref['multilanguage'] == 1) ? " checked='checked'" : ""; $text .= " <input class='checkbox' type='checkbox' name='multilanguage' value='1'{$checked} /> </div> </td> </tr> <tr> <td>".LANG_LAN_26.":</td> <td> <div class='auto-toggle-area autocheck'>\n"; $checked = ($pref['noLanguageSubs'] == 1) ? " checked='checked'" : ""; $text .= " <input class='checkbox' type='checkbox' name='noLanguageSubs' value='1'{$checked} /> <div class='smalltext field-help'>".LANG_LAN_27."</div> </div> </td> </tr> <tr> <td> ".LANG_LAN_18." <div class='label-note'>".LANG_LAN_19."</div> </td> <td> <textarea name='multilanguage_subdomain' rows='5' cols='15'>{$pref['multilanguage_subdomain']}</textarea> <div class='smalltext field-help'>".LANG_LAN_20."</div> </td> </tr>"; $opt = ""; $langs = explode(",",e_LANLIST); foreach($langs as $val) { if($val != $pref['sitelanguage']) { $opt .= "<tr><td class='middle' style='width:5%'>".$val."</td><td class='left'><input type='text' name='multilanguage_domain[".$val."]' value=\"".$pref['multilanguage_domain'][$val]."\" /></td></tr>"; } } if($opt) { //TODO LANs and class2.php check. $text .= " <tr> <td> Language by Domain Name <div class='label-note'>Domain determines the site's language. Enter domain without the 'www.'</div> </td> <td><table style='margin-left:0px;width:400px'>".$opt."</table></td> </tr>"; } $text .= " </tbody> </table> <div class='buttons-bar center'>". $frm->admin_button('submit_prefs','no-value','update',LAN_SAVE)." </div> </fieldset> </form>\n"; e107::getRender()->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_13, $mes->render().$text); // "Language Preferences"; } // ---------------------------------------------------------------------------- function table_list() { // grab default language lists. $exclude = array(); $exclude[] = "banlist"; $exclude[] = "banner"; $exclude[] = "cache"; $exclude[] = "core"; $exclude[] = "online"; $exclude[] = "parser"; $exclude[] = "plugin"; $exclude[] = "user"; $exclude[] = "upload"; $exclude[] = "userclass_classes"; $exclude[] = "rbinary"; $exclude[] = "session"; $exclude[] = "tmp"; $exclude[] = "flood"; $exclude[] = "stat_info"; $exclude[] = "stat_last"; $exclude[] = "submit_news"; $exclude[] = "rate"; $exclude[] = "stat_counter"; $exclude[] = "user_extended"; $exclude[] = "user_extended_struct"; $exclude[] = "pm_messages"; $exclude[] = "pm_blocks"; $tables = e107::getDb()->db_TableList('nolan'); // db table list without language tables. return array_diff($tables,$exclude); } // ------------- render form --------------------------------------------------- function multilang_db() { global $pref, $emessage, $lanlist, $tabs; $sql = e107::getDb(); $frm = e107::getForm(); $tp = e107::getParser(); if (isset($pref['multilanguage']) && $pref['multilanguage']) { // Choose Language to Edit: $text = " <fieldset id='core-language-list'> <legend class='e-hideme'>".LANG_LAN_16."</legend> <table class='table adminlist'> <colgroup> <col style='width:20%' /> <col style='width:60%' /> <col style='width:20%' /> </colgroup> <thead> <tr> <th>".ADLAN_132."</th> <th>".LANG_LAN_03."</th> <th class='last'>".LAN_OPTIONS."</th> </tr> </thead> <tbody> "; sort($lanlist); foreach ($lanlist as $e_language) { $installed = array(); if(strtolower($e_language) == $pref['sitelanguage']) { $e_language = ""; } $text .= "<tr><td>{$e_language}</td><td>"; foreach ($tabs as $tab_name) { if ($e_language != $pref['sitelanguage'] && $sql->db_Table_exists($tab_name,$e_language)) { $installed[] = $tab_name; } } $text .= implode(", ",$installed); if ($e_language == $pref['sitelanguage']) { $text .= "<span>".LANG_LAN_17."</span>"; } else { $text .= (!count($installed)) ? "<span>".LANG_LAN_05."</span>" : ""; } $text .= "</td>\n"; $text .= "<td> <form id='core-language-form-".str_replace(" ", "-", $e_language)."' action='".e_SELF."?modify' method='post'>\n"; $text .= " <div> "; if (count($installed)) { //FIXME sprintf $text .= "<button class='edit' type='submit' name='edit_existing' value='no-value'><span>".LAN_EDIT."</span></button> <button class='delete' type='submit' name='del_existing' value='no-value' title='".sprintf(LANG_LAN_33, $e_language).' '.LAN_JSCONFIRM."'><span>".LAN_DELETE."</span></button>"; } elseif ($e_language != $pref['sitelanguage']) { // $text .= "<button class='create' type='submit' name='create_edit_existing' value='no-value'><span>".LAN_CREATE."</span></button>"; $text .= $frm->admin_button('create_edit_existing','no-value','create',LAN_CREATE); } $text .= "<input type='hidden' name='lang_choices' value='".$e_language."' /> </div> </form> </td> </tr> "; } $text .= " </tbody> </table> </fieldset> "; e107::getRender()->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_16, $emessage->render().$text); } } // ---------------------------------------------------------------------------- function show_tools() { $frm = e107::getForm(); $mes = e107::getMessage(); include_lan(e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_lancheck.php"); $text = " <form id='core-language-lancheck-form' method='post' action='".e_ADMIN."lancheck.php'> <fieldset id='core-language-lancheck'> <legend class='e-hideme'>".LAN_CHECK_1."</legend> <table class='table adminform'> <colgroup> <col class='col-label' /> <col class='col-control' /> </colgroup> <tbody> <tr> <td>".LAN_CHECK_1."</td> <td> <select name='language' class='tbox select'> <option value=''>".LAN_SELECT."</option>"; $languages = explode(",", e_LANLIST); sort($languages); foreach ($languages as $lang) { if ($lang != "English") { $text .= " <option value='{$lang}' >{$lang}</option> "; } } $text .= "</select>". $frm->admin_button('language_sel','no-value','other',LAN_CHECK_2)." </td> </tr> </tbody> </table> </fieldset> </form>"; $text .= " <form id='ziplang' method='post' action='".e_SELF."?tools'> <fieldset id='core-language-package'> <legend class='e-hideme'>".LANG_LAN_23."</legend> <table class='table adminform'> <colgroup> <col class='col-label' /> <col class='col-control' /> </colgroup> <tbody> <tr> <td>".LANG_LAN_23."</td> <td> <select name='language' class='tbox select'> <option value=''>".LAN_SELECT."</option>"; $languages = explode(",", e_LANLIST); sort($languages); foreach ($languages as $lang) { if ($lang != "English") { $text .= " <option value='{$lang}' >{$lang}</option> "; } } $text .= " </select> ".$frm->admin_button('ziplang','no-value','other',LANG_LAN_24)." <input type='checkbox' name='contribute_pack' value='1' /> Check to share your language-pack with the e107 community. </td> </tr>"; $text .= " <tr> <td>Search for Deprecated Lans</td> <td> <select name='deprecatedLans' class='tbox select'> <option value=''>".LAN_SELECT."</option>"; $fl = e107::getFile(); $fl->mode = 'full'; $omit = array('languages','\.png','\.gif'); $lans = $fl->get_files(e_ADMIN,'.php','standard',0); $plugs = $fl->get_files(e_PLUGIN,'.*?/?admin.*?\.php',$omit,2); $exclude = array('lan_admin.php'); $srch = array(e_ADMIN,e_PLUGIN); $text .= "<optgroup label='Admin Area'>"; foreach($lans as $script=>$lan) { if(in_array(basename($lan),$exclude)) { continue; } $selected = ($lan == varset($_POST['deprecatedLans'])) ? "selected='selected'" : ""; $text .= "<option value='".$lan."' {$selected}>".str_replace($srch,"",$lan)."</option>\n"; } $text .= "</optgroup>"; $text .= "<optgroup label='Plugins'>"; foreach($plugs as $script=>$lan) { if(in_array(basename($lan),$exclude)) { continue; } $selected = ($lan == varset($_POST['deprecatedLans'])) ? "selected='selected'" : ""; $text .= "<option value='".$lan."' {$selected}>".str_replace($srch,"",$lan)."</option>\n"; } $text .= "</optgroup>"; $text .= " </select>".$frm->admin_button('searchDeprecated',"Check",'other')." <span class='field-help'>".(count($lans) + count($plugs))." files found</span> </td> </tr>"; $text .= " </tbody> </table> </fieldset> </form> "; e107::getRender()->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_21, $mes->render().$text); } // ---------------------------------------------------------------------------- function available_langpacks() { $xml = e107::getXml(); $feed = e107::getPref('xmlfeed_languagepacks'); if($rawData = $xml -> loadXMLfile($feed, TRUE)) { if(!varset($rawData['language'])) { return FALSE; } $text .= "<div class='block-text'>".LANG_LAN_35."</div>"; $text .= "<table class='table adminlist'>"; foreach($rawData['language'] as $val) { $att = $val['@attributes']; $name = $att['folder']; $languages[$name] = array( 'name' => $att['name'], 'author' => $att['author'], 'authorURL' => $att['authorURL'], 'folder' => $att['folder'], 'version' => $att['version'], 'date' => $att['date'], 'compatibility' => $att['compatibility'], 'url' => $att['url'] ); } ksort($languages); //TODO LANs $text .= "<thead> <tr> <th>Name</th> <th>Version</th> <th>Author</th> <th>Release-date</th> <th>Compatible</th> <th>Download</th> </tr> </thead> <tbody>"; foreach($languages as $value) { $text .= "<tr> <td>".$value['name']."</td> <td>".$value['version']."</td> <td><a href='".$value['authorURL']."'>".$value['author']."</a></td> <td>".$value['date']."</td> <td>".$value['compatibility']."</td> <td><a href='".$value['url']."'>Download Pack</a></td> </tr>"; } $text .= "</tbody></table>"; return $text; } } function language_adminmenu() { global $pref; $action = e_QUERY; if ($action == "") { $action = "main"; } if ($action == "modify") { $action = "db"; } $var['main']['text'] = LAN_PREFS; $var['main']['link'] = e_SELF; if (isset($pref['multilanguage']) && $pref['multilanguage']) { $var['db']['text'] = LANG_LAN_03; $var['db']['link'] = e_SELF."?db"; } // $lcnt = explode(",", e_LANLIST); // if (count($lcnt) > 1) // { $var['tools']['text'] = LANG_LAN_21; $var['tools']['link'] = e_SELF."?tools"; // } e107::getNav()->admin(ADLAN_132, $action, $var); } // Zip up the language pack. // =================================================== function zip_up_lang($language) { if (is_readable(e_ADMIN."ver.php")) { include (e_ADMIN."ver.php"); } $tp = e107::getParser(); /* $core_plugins = array( "alt_auth","banner_menu","blogcalendar_menu","calendar_menu","chatbox_menu", "clock_menu","comment_menu","content","featurebox","forum","gsitemap", "links_page","linkwords","list_new","log","login_menu", "newforumposts_main","newsfeed","newsletter","online", "other_news_menu","pdf","pm","poll","rss_menu", "search_menu","siteinfo","trackback","tree_menu","user_menu","userlanguage_menu", "usertheme_menu" ); $core_themes = array("crahan","e107v4a","human_condition","interfectus","jayya", "khatru","kubrick","lamb","leaf","newsroom","reline","sebes","vekna_blue"); */ require_once (e_HANDLER.'pclzip.lib.php'); list($ver, $tmp) = explode(" ", $e107info['e107_version']); $newfile = e_UPLOAD."e107_".$ver."_".$language."_utf8.zip"; $archive = new PclZip($newfile); $core = grab_lans(e_LANGUAGEDIR.$language."/", $language); $plugs = grab_lans(e_PLUGIN, $language); $theme = grab_lans(e_THEME, $language); $file = array_merge($core, $plugs, $theme); $data = implode(",", $file); if ($archive->create($data) == 0) { return $archive->errorInfo(true); } else { if($_POST['contribute_pack']) { $full_link = $tp->createConstants($newfile); $email_message = "Site: ".SITENAME." User: ".USERNAME."\n IP:".USERIP." ...would like to contribute the following language pack for e107 v".$e107info['e107_version'].". Please see attachment."; $subject = basename($newfile); //TODO - send email to languagepack@e107.org with attachment. } return LANG_LAN_22." (".str_replace("../", "", e_UPLOAD)."<a href='".$newfile."' >".basename($newfile)."</a>)."; } } function grab_lans($path, $language, $filter = "") { $fl = e107::getFile(); if ($lanlist = $fl->get_files($path, "", "standard", 4)) { sort($lanlist); } else { return; } $pzip = array(); foreach ($lanlist as $p) { $fullpath = $p['path'].$p['fname']; if (strpos($fullpath, $language) !== FALSE) { $pzip[] = $fullpath; } } return $pzip; } // ----------------------- /** * Compare Language File against script and find unused LANs * @param object $lanfile * @param object $script * @return string|boolean FALSE on error */ function unused($lanfile,$script) { $mes = e107::getMessage(); // $mes->addInfo("LAN=".$lanfile."<br />Script = ".$script); $lanDefines = file_get_contents($lanfile); $tmp = explode(",",$script); foreach($tmp as $scr) { $compare[$scr] = file_get_contents($scr); } $mes = e107::getMessage(); if(!$compare) { $mes = e107::getMessage(); $mes->add("Couldn't read ".$script, E_MESSAGE_ERROR); } if(!$lanDefines) { $mes = e107::getMessage(); $mes->add("Couldn't read ".$lanfile, E_MESSAGE_ERROR); } $srch = array("<?php","<?","?>"); $lanDefines = str_replace($srch,"",$lanDefines); $lanDefines = explode("\n", $lanDefines); if($lanDefines && $compare) { $text = "<table class='table adminlist'> <colgroup> <col style='width:40%' /> <col style='auto' /> </colgroup> <thead> <tr> <th>".$lanfile."</th>"; foreach($compare as $k=>$val) { $text .= "<th>".$k."</th>"; } $text .= " </tr> </thead> <tbody>"; // for ($i=0; $i<count($lanDefines); $i++) // { foreach($lanDefines as $line) { if(trim($line) !="") { $disabled = (preg_match("#^//#i",$line)) ? " (disabled)" : FALSE; if($match = getDefined($line)) { $text .= compareit($match['define'],$compare,$match['value'],$disabled); } } } $text .= "</tbody></table>"; $mes->addInfo("<b>Pink items are likely to be unused LANs.<br />Comment out and test thoroughly.</b>"); $ret['text'] = $mes->render().$text; $ret['caption'] = "Deprecated LAN Check (experimental!)"; return $ret; } else { return FALSE; } } function getDefined($line) { if(preg_match("#\"(.*?)\".*?\"(.*)\"#",$line,$match) || preg_match("#\'(.*?)\'.*?\"(.*)\"#",$line,$match) || preg_match("#\"(.*?)\".*?\'(.*)\'#",$line,$match) || preg_match("#\'(.*?)\'.*?\'(.*)\'#",$line,$match) || preg_match("#\((.*?)\,.*?\"(.*)\"#",$line,$match) || preg_match("#\((.*?)\,.*?\'(.*)\'#",$line,$match)) { return array('define'=>$match[1],'value'=>$match[2]); } } function compareit($needle,$haystack,$value='',$disabled=FALSE){ // return "Need=".$needle."<br />hack=".$haystack."<br />val=".$val; //TODO Move this into a separate function (use a class for this whole script) $commonPhrases = file_get_contents(e_LANGUAGEDIR."English/admin/lan_admin.php"); $commonLines = explode("\n",$commonPhrases); $foundSimilar = FALSE; $foundCommon = FALSE; foreach($commonLines as $line) { if($match = getDefined($line)) { $id = $match['define']; $ar[$id] = $match['value']; } } // Check if a common phrases was used. foreach($ar as $def=>$common) { similar_text($value, $common, $p); if(strtoupper(trim($value)) == strtoupper($common)) { //$text .= "<div style='color:yellow'><b>$common</b></div>"; $foundCommon = TRUE; break; } elseif($p > 55) { $foundSimilar = TRUE; break; } $p = 0 ; } foreach($haystack as $script) { $lines = explode("\n",$script); $text .= "<td>"; $count = 1; foreach($lines as $ln) { if(preg_match("/\b".$needle."\b/i",$ln)) { if($disabled) { $text .= ADMIN_WARNING_ICON; } $text .= " Line:<b>".$count."</b> "; // "' Found"; $found = TRUE; } $count++; } if(!$found) { $text .= "-"; } $text .= "</td>"; } $color = $found ? "" : "background-color:pink"; if($foundCommon && $found) { $color = "background-color:yellow"; $disabled .= "<br /><i>".$common."</i> is a common phrase.<br />(Use <b>".$def."</b> instead.)"; // return "<tr><td style='width:25%;'>".$needle .$disabled. "</td><td></td></tr>"; } elseif($foundSimilar && $found && substr($def,0,4) == "LAN_") { $color = "background-color:#E9EAF2"; $disabled .= " <a class='e-tip' href='#' title=\"".$value." :: ".$common."\">".round($p)."% like ".$def."</a> "; // $disabled .= " <a class='e-tip' href='#' title=\"".$common."\">" . $def."</a>"; // $common; } if($disabled == " (disabled)") { $color = "background-color:#DFFFDF"; } return "<tr><td style='width:25%;$color'>".$needle .$disabled. "</td>".$text."</tr>"; } /** * Handle page DOM within the page header * * @return string JS source */ function headerjs() { //FIXME breaking functionality. return; require_once (e_HANDLER.'js_helper.php'); $ret = " <script type='text/javascript' src='".e_JS."core/admin.js'></script> <script type='text/javascript'> //add required core lan - delete confirm message (".e_jshelper::toString(LAN_JSCONFIRM).").addModLan('core', 'delete_confirm'); //core object e107Admin.CoreLanguage = {}; //show Table Copy option e107Admin.CoreLanguage.dataCopy = function(table) { if($('language-datacopy-' + table)) { $('language-datacopy-' + table).show(); } } //registry - selected by default e107Admin.CoreLanguage._def_checked = {} //document observer document.observe('dom:loaded', function() { //find lan action checkboxes \$\$('input[type=checkbox][id^=language-action-]').each( function(element) { if(element.checked) e107Admin.CoreLanguage._def_checked[element.id] = true;// already checked, don't allow data copy var carea = element.up('div.auto-toggle-area'); //clickable container - autocheck + allow data copy if(carea) { carea.observe('click', function(e) { element.checked = !(element.checked); if(element.checked && !e107Admin.CoreLanguage._def_checked[element.id]) { e107Admin.CoreLanguage.dataCopy(element.id.replace(/language-action-/, '')); } }); } //checkbox observer element.observe('click', function(e) { if(e.element().checked && !e107Admin.CoreLanguage._def_checked[element.id]) e107Admin.CoreLanguage.dataCopy(e.element().id.replace(/language-action-/, '')); }); }); }); </script> "; return $ret; } ?>