1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-03 21:27:25 +02:00

moved some mysql functions from admin/language.php to mysql_class.php. Optimized some multi-language functions in mysql_class.php

This commit is contained in:
CaMer0n
2009-09-05 18:58:56 +00:00
parent f4213f077c
commit e2aa59c25e
2 changed files with 406 additions and 390 deletions

View File

@@ -9,78 +9,66 @@
* Administration Area - Languages * Administration Area - Languages
* *
* $Source: /cvs_backup/e107_0.8/e107_admin/language.php,v $ * $Source: /cvs_backup/e107_0.8/e107_admin/language.php,v $
* $Revision: 1.18 $ * $Revision: 1.19 $
* $Date: 2009-08-28 16:11:01 $ * $Date: 2009-09-05 18:58:56 $
* $Author: marj_nl_fr $ * $Author: e107coders $
* *
*/ */
require_once ("../class2.php");
require_once("../class2.php");
if (!getperms('0')) if (!getperms('0'))
{ {
header("location:".e_BASE."index.php"); header("location:".e_BASE."index.php");
exit; exit;
} }
include_lan(e_LANGUAGEDIR.e_LANGUAGE.'/admin/lan_'.e_PAGE); include_lan(e_LANGUAGEDIR.e_LANGUAGE.'/admin/lan_'.e_PAGE);
$e_sub_cat = 'language'; $e_sub_cat = 'language';
require_once ("auth.php");
require_once("auth.php"); require_once (e_HANDLER."form_handler.php");
require_once(e_HANDLER."form_handler.php"); require_once (e_HANDLER."message_handler.php");
require_once(e_HANDLER."message_handler.php");
$frm = new e_form(); $frm = new e_form();
$emessage = &eMessage::getInstance(); $emessage = &eMessage::getInstance();
$tabs = table_list(); // array("news","content","links"); $tabs = table_list(); // array("news","content","links");
$lanlist = explode(",",e_LANLIST); $lanlist = explode(",", e_LANLIST);
$message = ''; $message = '';
if (e_QUERY) if (e_QUERY)
{ {
$tmp = explode('.', e_QUERY); $tmp = explode('.', e_QUERY);
$action = $tmp[0]; $action = varset($tmp[0]);
$sub_action = $tmp[1]; $sub_action = varset($tmp[1]);
$id = $tmp[2]; $id = varset($tmp[2]);
unset($tmp); unset($tmp);
} }
if (isset($_POST['submit_prefs']) && isset($_POST['mainsitelanguage'])) if (isset($_POST['submit_prefs']) && isset($_POST['mainsitelanguage']))
{ {
unset($temp); unset($temp);
$changes = array(); $changes = array();
$temp['multilanguage'] = $_POST['multilanguage'];
$temp['multilanguage'] = $_POST['multilanguage']; $temp['multilanguage_subdomain'] = $_POST['multilanguage_subdomain'];
$temp['multilanguage_subdomain'] = $_POST['multilanguage_subdomain'];
$temp['sitelanguage'] = $_POST['mainsitelanguage']; $temp['sitelanguage'] = $_POST['mainsitelanguage'];
$temp['noLanguageSubs'] = $_POST['noLanguageSubs']; $temp['noLanguageSubs'] = $_POST['noLanguageSubs'];
if ($admin_log->logArrayDiffs($temp, $pref, 'LANG_01')) if ($admin_log->logArrayDiffs($temp, $pref, 'LANG_01'))
{ {
save_prefs(); // Only save if changes save_prefs(); // Only save if changes
$emessage->add(LAN_SETSAVED, E_MESSAGE_SUCCESS); $emessage->add(LAN_SETSAVED, E_MESSAGE_SUCCESS);
} }
else else
{ {
$emessage->add(LAN_NO_CHANGE); $emessage->add(LAN_NO_CHANGE);
} }
} }
// ----------------- delete tables --------------------------------------------- // ----------------- delete tables ---------------------------------------------
if (isset($_POST['del_existing']) && $_POST['lang_choices']) if (isset($_POST['del_existing']) && $_POST['lang_choices'])
{ {
$lang = strtolower($_POST['lang_choices']); $lang = strtolower($_POST['lang_choices']);
foreach ($tabs as $del_table) foreach ($tabs as $del_table)
{ {
if (db_Table_exists($lang."_".$del_table)) if ($sql->db_Table_exists($lang."_".$del_table,TRUE))
{ {
echo $del_table." exists<br />";
$qry = "DROP TABLE ".$mySQLprefix."lan_".$lang."_".$del_table; $qry = "DROP TABLE ".$mySQLprefix."lan_".$lang."_".$del_table;
if (mysql_query($qry)) if (mysql_query($qry))
{ {
$message .= sprintf(LANG_LAN_28, $_POST['lang_choices'].' '.$del_table).'[!br!]' ; $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); $emessage->add(sprintf(LANG_LAN_28, $_POST['lang_choices'].' '.$del_table), E_MESSAGE_SUCCESS);
} }
else else
@@ -91,32 +79,30 @@ if (isset($_POST['del_existing']) && $_POST['lang_choices'])
} }
} }
$admin_log->log_event('LANG_02', $message, E_LOG_INFORMATIVE, ''); $admin_log->log_event('LANG_02', $message, E_LOG_INFORMATIVE, '');
global $cachevar; $sql->db_ResetTableList();
unset($cachevar['table_list']);
if($action == 'modify') $action = 'db';//FIX - force db action when deleting all lan tables if ($action == 'modify')
$action = 'db';//FIX - force db action when deleting all lan tables
} }
// ----------create tables ----------------------------------------------------- // ----------create tables -----------------------------------------------------
if (isset($_POST['create_tables']) && $_POST['language']) if (isset($_POST['create_tables']) && $_POST['language'])
{ {
$table_to_copy = array(); $table_to_copy = array();
$lang_to_create = array(); $lang_to_create = array();
foreach ($tabs as $value) foreach ($tabs as $value)
{ {
$lang = strtolower($_POST['language']); $lang = strtolower($_POST['language']);
if (isset($_POST[$value])) if (isset($_POST[$value]))
{ {
$copdata = ($_POST['copydata_'.$value]) ? 1 : 0; $copdata = ($_POST['copydata_'.$value]) ? 1 : 0;
if (copy_table($value, "lan_".$lang."_".$value, $_POST['drop'],$copdata)) if ($sql->db_CopyTable($value, "lan_".$lang."_".$value, $_POST['drop'], $copdata))
{ {
$message .= sprintf(LANG_LAN_30, $_POST['language'].' '.$value).'[!br!]'; $message .= sprintf(LANG_LAN_30, $_POST['language'].' '.$value).'[!br!]';
$emessage->add(sprintf(LANG_LAN_30, $_POST['language'].' '.$value), E_MESSAGE_SUCCESS); $emessage->add(sprintf(LANG_LAN_30, $_POST['language'].' '.$value), E_MESSAGE_SUCCESS);
} }
else else
{ {
if(!$_POST['drop']) if (!$_POST['drop'])
{ {
$message .= sprintf(LANG_LAN_00, $_POST['language'].' '.$value).'[!br!]'; $message .= sprintf(LANG_LAN_00, $_POST['language'].' '.$value).'[!br!]';
$emessage->add(sprintf(LANG_LAN_00, $_POST['language'].' '.$value), E_MESSAGE_WARNING); $emessage->add(sprintf(LANG_LAN_00, $_POST['language'].' '.$value), E_MESSAGE_WARNING);
@@ -128,12 +114,12 @@ if (isset($_POST['create_tables']) && $_POST['language'])
} }
} }
} }
elseif (db_Table_exists($lang."_".$value)) elseif ($sql->db_Table_exists($value,$_POST['language']))
{ {
if ($_POST['remove']) if ($_POST['remove'])
{ {
// Remove table. // Remove table.
if(mysql_query("DROP TABLE ".$mySQLprefix."lan_".$lang."_".$value)) if (mysql_query("DROP TABLE ".$mySQLprefix."lan_".$lang."_".$value))
{ {
$message .= $_POST['language'].' '.$value.' '.LAN_DELETED.'[!br!]'; $message .= $_POST['language'].' '.$value.' '.LAN_DELETED.'[!br!]';
$emessage->add($_POST['language'].' '.$value.' '.LAN_DELETED, E_MESSAGE_SUCCESS); $emessage->add($_POST['language'].' '.$value.' '.LAN_DELETED, E_MESSAGE_SUCCESS);
@@ -153,52 +139,39 @@ if (isset($_POST['create_tables']) && $_POST['language'])
} }
} }
$admin_log->log_event('LANG_03', $message, E_LOG_INFORMATIVE, ''); $admin_log->log_event('LANG_03', $message, E_LOG_INFORMATIVE, '');
global $cachevar; $sql->db_ResetTableList();
unset($cachevar['table_list']);
} }
/* /*
if(isset($message) && $message) if(isset($message) && $message)
{ {
$ns->tablerender(LAN_OK, $message); $ns->tablerender(LAN_OK, $message);
} }
*/ */
unset($text); unset($text);
if (!e_QUERY || $action == 'main' && !$_POST['language'] && !$_POST['edit_existing']) if (!e_QUERY || $action == 'main' && !$_POST['language'] && !$_POST['edit_existing'])
{ {
multilang_prefs(); multilang_prefs();
} }
if (varset($action) == 'db')
if ($action == 'db')
{ {
multilang_db(); multilang_db();
} }
if (varset($_POST['ziplang']) && varset($_POST['language']))
if($_POST['ziplang'] && $_POST['language'])
{ {
$text = zip_up_lang($_POST['language']); $text = zip_up_lang($_POST['language']);
$admin_log->log_event('LANG_04', $_POST['language'], E_LOG_INFORMATIVE, ''); $admin_log->log_event('LANG_04', $_POST['language'], E_LOG_INFORMATIVE, '');
//$ns -> tablerender(LANG_LAN_25, $text); //$ns -> tablerender(LANG_LAN_25, $text);
$emessage->add(LANG_LAN_25.': '.$text); $emessage->add(LANG_LAN_25.': '.$text);
} }
if (varset($action) == "tools")
if($action == "tools")
{ {
show_tools(); show_tools();
} }
//FIX - create or edit check //FIX - create or edit check
if(isset($_POST['create_edit_existing'])) $_POST['edit_existing'] = true; if (isset($_POST['create_edit_existing']))
$_POST['edit_existing'] = true;
// Grab Language configuration. --- // Grab Language configuration. ---
if (isset($_POST['edit_existing'])) if (isset($_POST['edit_existing']))
{ {
@@ -214,10 +187,9 @@ if (isset($_POST['edit_existing']))
</colgroup> </colgroup>
<tbody> <tbody>
"; ";
foreach ($tabs as $table_name) foreach ($tabs as $table_name)
{ {
$installed = strtolower($_POST['lang_choices'])."_".$table_name; $installed = 'lan_'.strtolower($_POST['lang_choices'])."_".$table_name;
if (stristr($_POST['lang_choices'], $installed) === FALSE) if (stristr($_POST['lang_choices'], $installed) === FALSE)
{ {
$text .= " $text .= "
@@ -226,7 +198,7 @@ if (isset($_POST['edit_existing']))
<td class='control'> <td class='control'>
<div class='auto-toggle-area f-left e-pointer'> <div class='auto-toggle-area f-left e-pointer'>
"; ";
$selected = (db_Table_exists($installed)) ? " checked='checked'" : ""; $selected = ($sql->db_Table_exists($table_name,$_POST['lang_choices'])) ? " checked='checked'" : "";
$text .= " $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 = '';}\" /> <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>
@@ -242,11 +214,9 @@ if (isset($_POST['edit_existing']))
"; ";
} }
} }
// =========================================================================== // ===========================================================================
// Drop tables ? isset() // Drop tables ? isset()
if(varset($_POST['create_edit_existing'])) if (varset($_POST['create_edit_existing']))
{ {
$baction = 'create'; $baction = 'create';
$bcaption = LANG_LAN_06; $bcaption = LANG_LAN_06;
@@ -256,7 +226,6 @@ if (isset($_POST['edit_existing']))
$baction = 'update'; $baction = 'update';
$bcaption = LAN_UPDATE; $bcaption = LAN_UPDATE;
} }
$text .= " $text .= "
<tr> <tr>
<td class='label'><strong>".LANG_LAN_07."</strong></td> <td class='label'><strong>".LANG_LAN_07."</strong></td>
@@ -281,17 +250,15 @@ if (isset($_POST['edit_existing']))
</fieldset> </fieldset>
</form> </form>
"; ";
$ns->tablerender($_POST['lang_choices'], $emessage->render().$text); $ns->tablerender($_POST['lang_choices'], $emessage->render().$text);
} }
require_once (e_ADMIN."footer.php");
require_once(e_ADMIN."footer.php");
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
function multilang_prefs() function multilang_prefs()
{ {
global $e107, $pref, $lanlist, $emessage; global $pref,$lanlist,$emessage;
$text = " $text = "
<form method='post' action='".e_SELF."' id='linkform'> <form method='post' action='".e_SELF."' id='linkform'>
<fieldset id='core-language-settings'> <fieldset id='core-language-settings'>
@@ -305,38 +272,34 @@ function multilang_prefs()
<tr> <tr>
<td class='label'>".LANG_LAN_14.": </td> <td class='label'>".LANG_LAN_14.": </td>
<td class='control'> <td class='control'>
<select name='mainsitelanguage' class='box select'> <select name='mainsitelanguage' class='box select'>";
"; $sellan = preg_replace("/lan_*.php/i", "", $pref['sitelanguage']);
foreach ($lanlist as $lan)
$sellan = preg_replace("/lan_*.php/i", "", $pref['sitelanguage']); {
foreach($lanlist as $lan) $sel = ($lan == $sellan) ? " selected='selected'" : "";
{ $text .= "
$sel = ($lan == $sellan) ? " selected='selected'" : ""; <option value='{$lan}'{$sel}>".$lan."</option>
$text .= " ";
<option value='{$lan}'{$sel}>".$lan."</option> }
"; $text .= "</select>
}
$text .= " </select>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class='label'>".LANG_LAN_12.": </td> <td class='label'>".LANG_LAN_12.": </td>
<td class='control'> <td class='control'>
<div class='auto-toggle-area autocheck'> <div class='auto-toggle-area autocheck'>";
"; $checked = ($pref['multilanguage'] == 1) ? " checked='checked'" : "";
$checked = ($pref['multilanguage'] == 1) ? " checked='checked'" : ""; $text .= "
$text .= " <input class='checkbox' type='checkbox' name='multilanguage' value='1'{$checked} />
<input class='checkbox' type='checkbox' name='multilanguage' value='1'{$checked} />
</div> </div>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class='label'>".LANG_LAN_26.":</td> <td class='label'>".LANG_LAN_26.":</td>
<td class='control'> <td class='control'>
<div class='auto-toggle-area autocheck'> <div class='auto-toggle-area autocheck'>\n";
"; $checked = ($pref['noLanguageSubs'] == 1) ? " checked='checked'" : "";
$checked = ($pref['noLanguageSubs'] == 1) ? " checked='checked'" : ""; $text .= "
$text .= "
<input class='checkbox' type='checkbox' name='noLanguageSubs' value='1'{$checked} /> <input class='checkbox' type='checkbox' name='noLanguageSubs' value='1'{$checked} />
<div class='smalltext field-help'>".LANG_LAN_27."</div> <div class='smalltext field-help'>".LANG_LAN_27."</div>
</div> </div>
@@ -358,108 +321,58 @@ function multilang_prefs()
<button class='update' type='submit' name='submit_prefs' value='no-value'><span>".LAN_SAVE."</span></button> <button class='update' type='submit' name='submit_prefs' value='no-value'><span>".LAN_SAVE."</span></button>
</div> </div>
</fieldset> </fieldset>
</form> </form>\n";
";
e107::getRender()->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_13, $emessage->render().$text); // "Language Preferences";
$e107->ns->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_13, $emessage->render().$text); // "Language Preferences";
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
function db_Table_exists($table)
function table_list()
{ {
global $mySQLdefaultdb;
$tables = getcachedvars("table_list");
if(!$tables)
{
$tablist = mysql_list_tables($mySQLdefaultdb);
while($tmp = mysql_fetch_array($tablist))
{
$tables[] = $tmp[0];
}
cachevars("table_list", $tables);
}
return in_array(strtolower(MPREFIX."lan_".$table), $tables);
}
// ----------------------------------------------------------------------------
function copy_table($oldtable, $newtable, $drop = FALSE, $data = FALSE)
{
global $sql;
$old = MPREFIX.strtolower($oldtable);
$new = MPREFIX.strtolower($newtable);
if($drop)
{
$sql->db_Select_gen("DROP TABLE IF EXISTS {$new}");
}
//Get $old table structure
$sql->db_Select_gen('SET SQL_QUOTE_SHOW_CREATE = 1');
$qry = "SHOW CREATE TABLE {$old}";
if($sql->db_Select_gen($qry))
{
$row = $sql->db_Fetch();
$qry = $row[1];
// $qry = str_replace($old, $new, $qry);
$qry = preg_replace("#CREATE\sTABLE\s`{0,1}".$old."`{0,1}\s#", "CREATE TABLE `{$new}` ", $qry, 1); // More selective search
}
$result = mysql_query($qry);
if(!$result)
{
return FALSE;
}
if ($data) //We need to copy the data too
{
$qry = "INSERT INTO {$new} SELECT * FROM {$old}";
$sql->db_Select_gen($qry);
}
return TRUE;
}
// ----------------------------------------------------------------------------
function table_list() {
// grab default language lists. // grab default language lists.
global $mySQLdefaultdb;
$exclude = array();
$exclude[] = "banlist"; $exclude[] = "banner"; $exclude[] = "banlist";
$exclude[] = "cache"; $exclude[] = "core"; $exclude[] = "banner";
$exclude[] = "online"; $exclude[] = "parser"; $exclude[] = "cache";
$exclude[] = "plugin"; $exclude[] = "user"; $exclude[] = "core";
$exclude[] = "upload"; $exclude[] = "userclass_classes"; $exclude[] = "online";
$exclude[] = "rbinary"; $exclude[] = "session"; $exclude[] = "parser";
$exclude[] = "tmp"; $exclude[] = "flood"; $exclude[] = "plugin";
$exclude[] = "stat_info"; $exclude[] = "stat_last"; $exclude[] = "user";
$exclude[] = "submit_news"; $exclude[] = "rate"; $exclude[] = "upload";
$exclude[] = "stat_counter";$exclude[] = "user_extended"; $exclude[] = "userclass_classes";
$exclude[] = "user_extended_struc"; $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_messages";
$exclude[] = "pm_blocks"; $exclude[] = "pm_blocks";
$tables = e107::getDb()->db_TableList('nolan'); // db table list without language tables.
return array_diff($tables,$exclude);
$tables = mysql_list_tables($mySQLdefaultdb);
while (list($temp) = mysql_fetch_array($tables))
{
if ((MPREFIX=='') ||(strpos($temp, MPREFIX) === 0))
{
$e107tab = str_replace(MPREFIX, "", $temp);
if (!in_array($e107tab, $exclude) && stristr($e107tab, "lan_") === FALSE)
{
$tabs[] = $e107tab;
}
}
}
return $tabs;
} }
// ------------- render form --------------------------------------------------- // ------------- render form ---------------------------------------------------
function multilang_db(){
global $pref, $e107, $tp, $frm, $emessage, $lanlist, $tabs;
if(isset($pref['multilanguage']) && $pref['multilanguage']){
function multilang_db()
{
global $pref,$tp,$frm,$emessage,$lanlist,$tabs;
$sql = e107::getDb();
if (isset($pref['multilanguage']) && $pref['multilanguage'])
{
// Choose Language to Edit: // Choose Language to Edit:
$text = " $text = "
<fieldset id='core-language-list'> <fieldset id='core-language-list'>
@@ -480,79 +393,76 @@ function multilang_db(){
<tbody> <tbody>
"; ";
sort($lanlist); sort($lanlist);
for($i = 0; $i < count($lanlist); $i++)
foreach ($lanlist as $e_language)
{ {
$installed = 0; $installed = array();
$text .= " if(strtolower($e_language) == $pref['sitelanguage'])
<tr> {
<td>{$lanlist[$i]}</td> $e_language = "";
<td> }
"; $text .= "<tr><td>{$e_language}</td><td>";
foreach ($tabs as $tab_name) {
if (db_Table_exists(strtolower($lanlist[$i])."_".$tab_name)) { foreach ($tabs as $tab_name)
$text .= $tab_name.", "; {
$installed++; if ($e_language != $pref['sitelanguage'] && $sql->db_Table_exists($tab_name,$e_language))
{
$installed[] = $tab_name;
} }
} }
if($lanlist[$i] == $pref['sitelanguage']){
$text .= " $text .= implode(", ",$installed);
<span>".LANG_LAN_17."</span>
"; if ($e_language == $pref['sitelanguage'])
}else{ {
$text .= (!$installed)? "<span>".LANG_LAN_05."</span>" : ""; $text .= "<span>".LANG_LAN_17."</span>";
} }
$text .= " else
</td> {
<td> $text .= (!count($installed)) ? "<span>".LANG_LAN_05."</span>" : "";
<form id='core-language-form-".str_replace(" ", "-", $lanlist[$i])."' action='".e_SELF."?modify' method='post'> }
";
$text .= "</td>\n";
$text .= "<td>
<form id='core-language-form-".str_replace(" ", "-", $e_language)."' action='".e_SELF."?modify' method='post'>\n";
$text .= " $text .= "
<div> <div>
"; ";
if ($installed) 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, $lanlist[$i]).' '.LANG_LAN_09."'><span>".LAN_DELETE."</span></button>
";
}
elseif($lanlist[$i] != $pref['sitelanguage'])
{ {
$text .= " //FIXME sprintf
<button class='create' type='submit' name='create_edit_existing' value='no-value'><span>".LAN_CREATE."</span></button> $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).' '.LANG_LAN_09."'><span>".LAN_DELETE."</span></button>";
} }
$text .= " elseif ($e_language != $pref['sitelanguage'])
<input type='hidden' name='lang_choices' value='".$lanlist[$i]."' /> {
$text .= "<button class='create' type='submit' name='create_edit_existing' value='no-value'><span>".LAN_CREATE."</span></button>";
}
$text .= "<input type='hidden' name='lang_choices' value='".$e_language."' />
</div> </div>
</form> </form>
</td> </td>
</tr> </tr>
"; ";
} }
$text .= " $text .= "
</tbody> </tbody>
</table> </table>
</fieldset> </fieldset>
"; ";
$e107->ns->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_16, $emessage->render().$text); e107::getRender()->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_16, $emessage->render().$text);
} }
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
function show_tools() function show_tools()
{ {
global $e107, $emessage; global $emessage;
include_lan(e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_lancheck.php"); include_lan(e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_lancheck.php");
$text = "
$text .= "
<form id='core-language-lancheck-form' method='post' action='".e_ADMIN."lancheck.php'> <form id='core-language-lancheck-form' method='post' action='".e_ADMIN."lancheck.php'>
<fieldset id='core-language-lancheck'> <fieldset id='core-language-lancheck'>
<legend class='e-hideme'>".LAN_CHECK_1."</legend> <legend class='e-hideme'>".LAN_CHECK_1."</legend>
@@ -567,32 +477,27 @@ function show_tools()
<td class='control'> <td class='control'>
<select name='language' class='tbox select'> <select name='language' class='tbox select'>
<option value=''>".LAN_SELECT."</option>"; <option value=''>".LAN_SELECT."</option>";
$languages = explode(",", e_LANLIST);
$languages = explode(",",e_LANLIST); sort($languages);
sort($languages); foreach ($languages as $lang)
{
foreach($languages as $lang) if ($lang != "English")
{ {
if($lang != "English") $text .= "
{ <option value='{$lang}' >{$lang}</option>
$text .= " ";
<option value='{$lang}' >{$lang}</option> }
"; }
} $text .= "</select>
}
$text .= "
</select>
<button class='submit' type='submit' name='language_sel' value='no-value'><span>".LAN_CHECK_2."</span></button> <button class='submit' type='submit' name='language_sel' value='no-value'><span>".LAN_CHECK_2."</span></button>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</fieldset> </fieldset>
</form> </form>";
";
$text .= "
$text .= "
<form id='ziplang' method='post' action='".e_SELF."?tools'> <form id='ziplang' method='post' action='".e_SELF."?tools'>
<fieldset id='core-language-package'> <fieldset id='core-language-package'>
<legend class='e-hideme'>".LANG_LAN_23."</legend> <legend class='e-hideme'>".LANG_LAN_23."</legend>
@@ -607,21 +512,18 @@ function show_tools()
<td class='control'> <td class='control'>
<select name='language' class='tbox select'> <select name='language' class='tbox select'>
<option value=''>".LAN_SELECT."</option>"; <option value=''>".LAN_SELECT."</option>";
$languages = explode(",", e_LANLIST);
$languages = explode(",",e_LANLIST); sort($languages);
sort($languages); foreach ($languages as $lang)
{
foreach($languages as $lang) if ($lang != "English")
{ {
if($lang != "English") $text .= "
{ <option value='{$lang}' >{$lang}</option>
$text .= " ";
<option value='{$lang}' >{$lang}</option> }
"; }
} $text .= "
}
$text .= "
</select> </select>
<button class='submit' type='submit' name='ziplang' value='no-value'><span>".LANG_LAN_24."</span></button> <button class='submit' type='submit' name='ziplang' value='no-value'><span>".LANG_LAN_24."</span></button>
</td> </td>
@@ -631,13 +533,11 @@ function show_tools()
</fieldset> </fieldset>
</form> </form>
"; ";
e107::getRender()->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_21, $emessage->render().$text);
$e107->ns->tablerender(LANG_LAN_PAGE_TITLE.' - '.LANG_LAN_21, $emessage->render().$text);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
function language_adminmenu() function language_adminmenu()
{ {
global $action,$pref; global $action,$pref;
@@ -645,114 +545,103 @@ function language_adminmenu()
{ {
$action = "main"; $action = "main";
} }
if ($action == "modify")
if($action == "modify")
{ {
$action = "db"; $action = "db";
} }
$var['main']['text'] = LAN_PREFS; $var['main']['text'] = LAN_PREFS;
$var['main']['link'] = e_SELF; $var['main']['link'] = e_SELF;
if (isset($pref['multilanguage']) && $pref['multilanguage'])
if(isset($pref['multilanguage']) && $pref['multilanguage'])
{ {
$var['db']['text'] = LANG_LAN_03; $var['db']['text'] = LANG_LAN_03;
$var['db']['link'] = e_SELF."?db"; $var['db']['link'] = e_SELF."?db";
} }
$lcnt = explode(",", e_LANLIST);
$lcnt = explode(",",e_LANLIST); if (count($lcnt) > 1)
if(count($lcnt) > 1)
{ {
$var['tools']['text'] = ADLAN_CL_6; $var['tools']['text'] = ADLAN_CL_6;
$var['tools']['link'] = e_SELF."?tools"; $var['tools']['link'] = e_SELF."?tools";
} }
e_admin_menu(ADLAN_132, $action, $var); e_admin_menu(ADLAN_132, $action, $var);
} }
// Zip up the language pack. // Zip up the language pack.
// =================================================== // ===================================================
function zip_up_lang($language) function zip_up_lang($language)
{ {
if (is_readable(e_ADMIN."ver.php")) if (is_readable(e_ADMIN."ver.php"))
{ {
include(e_ADMIN."ver.php"); include (e_ADMIN."ver.php");
} }
/* /*
$core_plugins = array( $core_plugins = array(
"alt_auth","banner_menu","blogcalendar_menu","calendar_menu","chatbox_menu", "alt_auth","banner_menu","blogcalendar_menu","calendar_menu","chatbox_menu",
"clock_menu","comment_menu","content","featurebox","forum","gsitemap", "clock_menu","comment_menu","content","featurebox","forum","gsitemap",
"links_page","linkwords","list_new","log","login_menu", "links_page","linkwords","list_new","log","login_menu",
"newforumposts_main","newsfeed","newsletter","online", "newforumposts_main","newsfeed","newsletter","online",
"other_news_menu","pdf","pm","poll","rss_menu", "other_news_menu","pdf","pm","poll","rss_menu",
"search_menu","siteinfo_menu","trackback","tree_menu","user_menu","userlanguage_menu", "search_menu","siteinfo_menu","trackback","tree_menu","user_menu","userlanguage_menu",
"usertheme_menu" "usertheme_menu"
); );
$core_themes = array("crahan","e107v4a","human_condition","interfectus","jayya",
$core_themes = array("crahan","e107v4a","human_condition","interfectus","jayya", "khatru","kubrick","lamb","leaf","newsroom","reline","sebes","vekna_blue");
"khatru","kubrick","lamb","leaf","newsroom","reline","sebes","vekna_blue"); */
*/ require_once (e_HANDLER.'pclzip.lib.php');
list($ver, $tmp) = explode(" ", $e107info['e107_version']);
require_once(e_HANDLER.'pclzip.lib.php');
list($ver,$tmp) = explode(" ",$e107info['e107_version']);
$newfile = e_UPLOAD."e107_".$ver."_".$language."_utf8.zip"; $newfile = e_UPLOAD."e107_".$ver."_".$language."_utf8.zip";
$archive = new PclZip($newfile); $archive = new PclZip($newfile);
$core = grab_lans(e_LANGUAGEDIR.$language."/", $language);
$core = grab_lans(e_LANGUAGEDIR.$language."/",$language); $plugs = grab_lans(e_PLUGIN, $language);
$plugs = grab_lans(e_PLUGIN,$language); $theme = grab_lans(e_THEME, $language);
$theme = grab_lans(e_THEME,$language); $file = array_merge($core, $plugs, $theme);
$data = implode(",", $file);
$file = array_merge($core,$plugs,$theme); if ($archive->create($data) == 0)
$data = implode(",",$file);
if ($archive->create($data) == 0)
{ {
return $archive->errorInfo(true); return $archive->errorInfo(true);
} }
else else
{ {
return LANG_LAN_22." (".str_replace("../","",e_UPLOAD)."<a href='".$newfile."' >".basename($newfile)."</a>)."; return LANG_LAN_22." (".str_replace("../", "", e_UPLOAD)."<a href='".$newfile."' >".basename($newfile)."</a>).";
} }
} }
function grab_lans($path,$language,$filter = "")
function grab_lans($path, $language, $filter = "")
{ {
require_once(e_HANDLER."file_class.php"); $fl = e107::getFile();
$fl = new e_file;
if ($lanlist = $fl->get_files($path, "", "standard", 4))
if($lanlist = $fl->get_files($path,"", "standard",4)){ {
sort($lanlist); sort($lanlist);
}else{
return;
} }
else
$pzip = array(); {
foreach($lanlist as $p) return;
}
$pzip = array();
foreach ($lanlist as $p)
{ {
$fullpath = $p['path'].$p['fname']; $fullpath = $p['path'].$p['fname'];
if(strpos($fullpath,$language)!== FALSE) if (strpos($fullpath, $language) !== FALSE)
{ {
$pzip[] = $fullpath; $pzip[] = $fullpath;
} }
} }
return $pzip; return $pzip;
} }
/** /**
* Handle page DOM within the page header * Handle page DOM within the page header
* *
* @return string JS source * @return string JS source
*/ */
function headerjs() function headerjs()
{ {
require_once(e_HANDLER.'js_helper.php'); //FIXME breaking functionality.
return;
require_once (e_HANDLER.'js_helper.php');
$ret = " $ret = "
<script type='text/javascript' src='".e_FILE_ABS."jslib/core/admin.js'></script> <script type='text/javascript' src='".e_FILE_ABS."jslib/core/admin.js'></script>
<script type='text/javascript'> <script type='text/javascript'>
@@ -797,7 +686,6 @@ function headerjs()
}); });
</script> </script>
"; ";
return $ret; return $ret;
} }
?> ?>

View File

@@ -9,8 +9,8 @@
* mySQL Handler * mySQL Handler
* *
* $Source: /cvs_backup/e107_0.8/e107_handlers/mysql_class.php,v $ * $Source: /cvs_backup/e107_0.8/e107_handlers/mysql_class.php,v $
* $Revision: 1.45 $ * $Revision: 1.46 $
* $Date: 2009-09-05 12:48:28 $ * $Date: 2009-09-05 18:58:56 $
* $Author: e107coders $ * $Author: e107coders $
*/ */
@@ -61,7 +61,7 @@ $db_ConnectionID = NULL; // Stores ID for the first DB connection used - which s
* MySQL Abstraction class * MySQL Abstraction class
* *
* @package e107 * @package e107
* @version $Revision: 1.45 $ * @version $Revision: 1.46 $
* @author $Author: e107coders $ * @author $Author: e107coders $
*/ */
class db { class db {
@@ -81,7 +81,8 @@ class db {
var $mySQLlanguage; var $mySQLlanguage;
var $mySQLinfo; var $mySQLinfo;
var $tabset; var $tabset;
private $mySQLtableList = array(); private $mySQLtableList = array(); // list of all Db tables.
var $mySQLtableListLanguage = array(); // Db table list for the currently selected language
/** /**
* @public MySQL Charset * @public MySQL Charset
@@ -912,14 +913,15 @@ class db {
} }
/** /**
* @return unknown * Check for the existence of a matching language table when multi-language tables are active.
* @param unknown $table * @param string $table Name of table, without the prefix.
* @desc Enter description here...
* @access private * @access private
* @return name of the language table (eg. lan_french_news)
*/ */
function db_IsLang($table,$multiple=FALSE) function db_IsLang($table,$multiple=FALSE)
{ {
global $pref, $mySQLtablelist; global $pref;
if ((!$this->mySQLlanguage || !$pref['multilanguage']) && $multiple==FALSE) if ((!$this->mySQLlanguage || !$pref['multilanguage']) && $multiple==FALSE)
{ {
return $table; return $table;
@@ -930,28 +932,20 @@ class db {
global $db_ConnectionID; global $db_ConnectionID;
$this->mySQLaccess = $db_ConnectionID; $this->mySQLaccess = $db_ConnectionID;
} }
if (!$mySQLtablelist) if($multiple == FALSE)
{ {
$tablist = mysql_list_tables($this->mySQLdefaultdb,$this->mySQLaccess); $mltable = "lan_".strtolower($this->mySQLlanguage.'_'.$table);
while (list($temp) = mysql_fetch_array($tablist)) return ($this->db_Table_exists($table,$this->mySQLlanguage)) ? $mltable : $table;
{
$mySQLtablelist[] = $temp;
}
} }
else // return an array of all matching language tables. eg [french]->e107_lan_news
$mltable = "lan_".strtolower($this->mySQLlanguage.'_'.$table); {
// ---- Find all multi-language tables.
if($multiple == TRUE)
{ // return an array of all matching language tables. eg [french]->e107_lan_news
if(!is_array($table)) if(!is_array($table))
{ {
$table = array($table); $table = array($table);
} }
foreach($mySQLtablelist as $tab) foreach($this->mySQLtablelist as $tab)
{ {
if(stristr($tab, $this->mySQLPrefix."lan_") !== FALSE) if(stristr($tab, $this->mySQLPrefix."lan_") !== FALSE)
{ {
@@ -966,15 +960,12 @@ class db {
} }
} }
} }
return ($lanlist) ? $lanlist : FALSE; return ($lanlist) ? $lanlist : FALSE;
} }
// ------------------------- // -------------------------
if (in_array($this->mySQLPrefix.$mltable, $mySQLtablelist))
{
return $mltable;
}
return $table;
} }
/** /**
@@ -1151,33 +1142,170 @@ class db {
* Verify whether a table exists, without causing an error * Verify whether a table exists, without causing an error
* *
* @param string $table Table name without the prefix * @param string $table Table name without the prefix
* @return boolean TRUE if exists, FALSE if it doesn't * @param string $lanMode [optional] When set to TRUE, searches for multilanguage tables
* @return boolean TRUE if exists
* *
* NOTES: Slower (28ms) than "SELECT 1 FROM" (4-5ms), but doesn't produce MySQL errors. * NOTES: Slower (28ms) than "SELECT 1 FROM" (4-5ms), but doesn't produce MySQL errors.
* Multiple checks on a single page will only use 1 query. ie. faster on multiple calls. * Multiple checks on a single page will only use 1 query. ie. faster on multiple calls.
*/ */
function db_Table_exists($table) public function db_Table_exists($table,$language='')
{ {
if(!$this->mySQLtableList) global $pref;
$table = strtolower($table); // precaution for multilanguage
if($language && ($language != $pref['sitelanguage']))
{ {
$res = $this->db_Query("SHOW TABLES LIKE '".$this->mySQLPrefix."%' "); // error if not there if(!isset($this->mySQLtableListLanguage[$language]))
while($rows = $this->db_Fetch(MYSQL_BOTH))
{ {
$this->mySQLtableList[] = $rows[0]; $this->mySQLtableListLanguage = $this->db_mySQLtableList($language);
} }
} return in_array('lan_'.strtolower($language)."_".$table,$this->mySQLtableListLanguage[$language]);
if(!in_array($this->mySQLPrefix.$table,$this->mySQLtableList))
{
return FALSE;
} }
else else
{ {
return TRUE; if(!$this->mySQLtableList)
} {
$this->mySQLtableList = $this->db_mySQLtableList();
}
return in_array($table,$this->mySQLtableList);
}
} }
/**
* Populate $this->mySQLtableList;
* @return array
*/
private function db_mySQLtableList($language='')
{
if($language)
{
if(!isset($this->mySQLtableListLanguage[$language]))
{
$table = array();
if($res = $this->db_Query("SHOW TABLES LIKE '".$this->mySQLPrefix."lan_".strtolower($language)."%' "))
{
while($rows = $this->db_Fetch(MYSQL_NUM))
{
$table[] = str_replace($this->mySQLPrefix,"",$rows[0]);
}
}
$ret = array($language=>$table);
return $ret;
}
else
{
return $this->mySQLtableListLanguage[$language];
}
}
if(!$this->mySQLtableList)
{
$table = array();
if($res = $this->db_Query("SHOW TABLES LIKE '".$this->mySQLPrefix."%' "))
{
while($rows = $this->db_Fetch(MYSQL_NUM))
{
$table[] = str_replace($this->mySQLPrefix,"",$rows[0]);
}
}
return $table;
}
else
{
return $this->mySQLtableList;
}
}
public function db_ResetTableList()
{
$this->mySQLtableList = array();
$this->mySQLtableListLanguage = array();
}
/**
* Return a filtered list of DB tables.
* @param object $mode [optional] all|lan|nolan
* @return array
*/
public function db_TableList($mode='all')
{
if(!$this->mySQLtableList)
{
$this->mySQLtableList = $this->db_mySQLtableList();
}
if($mode == 'all')
{
return $this->mySQLtableList;
}
if($mode == 'lan' || $mode=='nolan')
{
$nolan = array();
$lan = array();
foreach($this->mySQLtableList as $tab)
{
if(substr($tab,0,4)!='lan_')
{
$nolan[] = $tab;
}
else
{
$lan[] = $tab;
}
}
return ($mode == 'lan') ? $lan : $nolan;
}
}
function db_CopyTable($oldtable, $newtable, $drop = FALSE, $data = FALSE)
{
$old = $this->mySQLPrefix.strtolower($oldtable);
$new = $this->mySQLPrefix.strtolower($newtable);
if ($drop)
{
$this->db_Select_gen("DROP TABLE IF EXISTS {$new}");
}
//Get $old table structure
$this->db_Select_gen('SET SQL_QUOTE_SHOW_CREATE = 1');
$qry = "SHOW CREATE TABLE {$old}";
if ($this->db_Select_gen($qry))
{
$row = $this->db_Fetch(MYSQL_NUM);
$qry = $row[1];
// $qry = str_replace($old, $new, $qry);
$qry = preg_replace("#CREATE\sTABLE\s`{0,1}".$old."`{0,1}\s#", "CREATE TABLE `{$new}` ", $qry, 1); // More selective search
}
else
{
return FALSE;
}
if(!$this->db_Table_exists($newtable))
{
$result = $this->db_Query($qry);
}
if ($data) //We need to copy the data too
{
$qry = "INSERT INTO {$new} SELECT * FROM {$old}";
$result = $this->db_Select_gen($qry);
}
return $result;
}
/** /**
* @return text string relating to error (empty string if no error) * @return text string relating to error (empty string if no error)
* @param unknown $from * @param unknown $from