add(DBLAN_53, E_MESSAGE_WARNING);
}
else
{
$_POST[$type] = true;
}
}
if(isset($_POST['exportXmlFile']))
{
if(exportXmlFile($_POST['xml_prefs'],$_POST['xml_tables'],$_POST['package_images']))
{
$mes = e107::getMessage();
$mes->add(LAN_SUCCESS, E_MESSAGE_SUCCESS);
}
}
if(e_AJAX_REQUEST )
{
session_write_close();
while (@ob_end_clean());
if(varset($_GET['mode']) == 'backup') //FIXME - not displaying progress until complete. Use e-progress?
{
echo "Starting file backup... ";
$data = array();
$data[] = e_MEDIA;
$data[] = e_LOG;
$data[] = e_IMPORT;
$data[] = e_TEMP;
$data[] = e_SYSTEM."filetypes.xml";
$data[] = e_THEME.e107::getPref('sitetheme');
$plugins = e107::getPlugin()->getOtherPlugins();
foreach($plugins as $dir)
{
$data[] = e_PLUGIN.$dir;
}
$newFile = eHelper::title2sef(SITENAME)."_".date("Y-m-d-H-i-s");
$zip = e107::getFile()->zip($data, e_BACKUP.$newFile.".zip");
echo DBLAN_60." (".$zip.") ";
echo DBLAN_61." ";
$dbfile = e107::getDb()->backup('*', $newFile.".sql", array('nologs'=>1, 'droptable'=>1));
echo DBLAN_62." (".$dbfile.") ";
e107::getAdminLog()->addSuccess($zip." ".$dbfile, false)->save(DBLAN_63);
}
exit;
}
require_once ("auth.php");
$st = new system_tools;
/* No longer needed after XML feature added.
if(isset($_POST['backup_core']) || $_GET['mode']=='backup_core')
{
backup_core();
//message_handler("MESSAGE", DBLAN_1);
$mes->add(DBLAN_1, E_MESSAGE_SUCCESS);
}
*/
require_once ("footer.php");
class system_tools
{
public $_options = array();
private $_utf8_exclude = array();
function __construct()
{
global $mySQLdefaultdb;
$this->_utf8_exclude = array(MPREFIX."core");
$this->_options = array(
"db_update" => array('diz'=>DBLAN_15, 'label'=>DBLAN_16),
"verify_sql" => array('diz'=>DBLAN_4, 'label'=>DBLAN_5),
'optimize_sql' => array('diz'=>DBLAN_6, 'label'=> DBLAN_7),
'plugin_scan' => array('diz'=>DBLAN_28, 'label'=> DBLAN_29),
'pref_editor' => array('diz'=>DBLAN_19, 'label'=> DBLAN_20),
// 'backup_core' => array('diz'=>DBLAN_8, 'label'=> DBLAN_9),
// 'verify_sql_record' => array('diz'=>DBLAN_35, 'label'=> DBLAN_36),
'importForm' => array('diz'=>DBLAN_59, 'label'=> DBLAN_59),
'exportForm' => array('diz'=>DBLAN_58, 'label'=> DBLAN_58),
'sc_override_scan' => array('diz'=>DBLAN_55, 'label'=> DBLAN_56),
'convert_to_utf8' => array('diz'=>DBLAN_64,'label'=>DBLAN_65),
'correct_perms' => array('diz'=>DBLAN_66,'label'=>DBLAN_67),
'backup' => array('diz'=>DBLAN_68,'label'=>DBLAN_69)
);
if(deftrue('e_DEVELOPER'))
{
$this->_options['multisite'] = array('diz'=>"Developer Mode Only ", 'label'=> 'Multi-Site' );
$this->_options['github'] = array('diz'=>"Developer Mode Only Overwrite local files with the latest from github.", 'label'=> 'Sync with Github' );
}
$this->_options = multiarray_sort($this->_options, 'label');
if(isset($_POST['delplug']))
{
$this->delete_plugin_entry($_POST['pref_type']);
}
if(isset($_POST['upload']))
{
$this->importXmlFile();
}
if(isset($_POST['delpref']) || (isset($_POST['delpref_checked']) && isset($_POST['delpref2'])))
{
$this->del_pref_val($_POST['pref_type']);
}
if(isset($_POST['verify_sql']) || varset($_GET['mode'])=='verify_sql')
{
require_once(e_HANDLER."db_verify_class.php");
$dbv = new db_verify;
$dbv->backUrl = e_SELF."?mode=verify_sql";
$dbv->verify();
return;
}
// ----------------- Processes ------------------
// if(isset($_POST['verify_sql_record']) || varset($_GET['mode'])=='verify_sql_record' || isset($_POST['check_verify_sql_record']) || isset($_POST['delete_verify_sql_record']))
// {
//$this->verify_sql_record(); // - currently performed in db_verify_class.php
// }
if(isset($_POST['importForm']) || $_GET['mode']=='importForm')
{
$this->importForm();
}
if(isset($_POST['db_update']) || varset($_GET['mode'])=='db_update') // Requires further testing.
{
// header("location: ".e_ADMIN."e107_update.php");
require_once(e_ADMIN."update_routines.php");
new e107Update($dbupdate);
return;
}
if(isset($_POST['convert_to_utf8']) || $_GET['mode']=='convert_to_utf8')
{
$this->convertUTF8Form();
}
if(isset($_POST['exportForm']) || $_GET['mode']=='exportForm')
{
$this->exportXmlForm();
}
if(isset($_POST['optimize_sql']) || $_GET['mode']=='optimize_sql')
{
$this->optimizesql($mySQLdefaultdb);
}
if(isset($_POST['pref_editor']) || $_GET['mode']=='pref_editor' || isset($_POST['delpref']) || isset($_POST['delpref_checked']))
{
$type = isset($_GET['type']) ? $_GET['type'] : "core";
$this->pref_editor($type);
}
if(isset($_POST['sc_override_scan']) || $_GET['mode']=='sc_override_scan')
{
$this->scan_override();
}
if(isset($_POST['plugin_scan']) || e_QUERY == "plugin" || isset($_POST['delplug']) || $_GET['mode']=='plugin_scan')
{
$this->plugin_viewscan('refresh');
}
if(!empty($_POST['create_multisite']))
{
$this->multiSiteProcess();
}
if(!empty($_POST['perform_utf8_convert']))
{
$this->perform_utf8_convert();
return;
}
if(!empty($_POST['githubSyncProcess']))
{
$this->githubSyncProcess();
return;
}
// --------------------- Modes --------------------------------.
if(varset($_GET['mode'])=='correct_perms')
{
$this->correct_perms();
return;
}
if(varset($_GET['mode'])=='multisite')
{
$this->multiSite();
return;
}
if(varset($_GET['mode']) == 'github')
{
$this->githubSync();
}
if(varset($_GET['mode']) == 'backup')
{
$this->backup();
return;
}
if(!vartrue($_GET['mode']) && !isset($_POST['db_execute']))
{
$this->render_options();
}
}
// Developer Mode ONly.. No LANS.
private function githubSync()
{
$frm = e107::getForm();
$mes = e107::getMessage();
// $message = DBLAN_70;
// $message .= "".LAN_CREATE." ";
$message = $frm->open('githubSync');
$message .= "
This will download the latest .zip file from github to ".e_SYSTEM."/temp and then unzip it, overwriting any existing files that it finds on your server. It will take into account any custom folders you may have set in e107_config.php.
";
$message .= $frm->button('githubSyncProcess',1,'delete', "Overwrite Files");
$message .= $frm->close();
$mes->addInfo($message);
// $text = "
";
e107::getRender()->tablerender(DBLAN_10.SEP."Sync with Github", $mes->render());
}
// Developer Mode ONly.. No LANS.
private function githubSyncProcess()
{
// Delete any existing file.
if(file_exists(e_TEMP."e107-master.zip"))
{
unlink(e_TEMP."e107-master.zip");
}
$result = e107::getFile()->getRemoteFile('https://codeload.github.com/e107inc/e107/zip/master', 'e107-master.zip', 'temp');
if($result == false)
{
e107::getMessage()->addError( "Couldn't download .zip file");
}
$localfile = 'e107-master.zip';
chmod(e_TEMP.$localfile, 0755);
require_once(e_HANDLER."pclzip.lib.php");
// $base = realpath(dirname(__FILE__));
$newFolders = array(
'e107-master/e107_admin/' => e_BASE.e107::getFolder('ADMIN'),
'e107-master/e107_core/' => e_BASE.e107::getFolder('CORE'),
'e107-master/e107_docs/' => e_BASE.e107::getFolder('DOCS'),
'e107-master/e107_handlers/' => e_BASE.e107::getFolder('HANDLERS'),
'e107-master/e107_images/' => e_BASE.e107::getFolder('IMAGES'),
'e107-master/e107_languages/' => e_BASE.e107::getFolder('LANGUAGES'),
'e107-master/e107_media/' => e_BASE.e107::getFolder('MEDIA'),
'e107-master/e107_plugins/' => e_BASE.e107::getFolder('PLUGINS'),
'e107-master/e107_system/' => e_BASE.e107::getFolder('SYSTEM'),
'e107-master/e107_themes/' => e_BASE.e107::getFolder('THEMES'),
'e107-master/e107_web/' => e_BASE.e107::getFolder('WEB'),
'e107-master/' => e_BASE
);
$srch = array_keys($newFolders);
$repl = array_values($newFolders);
$archive = new PclZip(e_TEMP.$localfile);
$unarc = ($fileList = $archive -> extract(PCLZIP_OPT_PATH, e_TEMP, PCLZIP_OPT_SET_CHMOD, 0755)); // Store in TEMP first.
$error = array();
$success = array();
$skipped = array();
// print_a($unarc);
$excludes = array('e107-master/','e107-master/install.php','e107-master/favicon.ico');
foreach($unarc as $k=>$v)
{
if(in_array($v['stored_filename'],$excludes))
{
continue;
}
$oldPath = $v['filename'];
$newPath = str_replace($srch,$repl, $v['stored_filename']);
$message = "Moving ".$oldPath." to ".$newPath;
if($v['folder'] ==1 && is_dir($newPath))
{
// $skipped[] = $newPath. " (already exists)";
continue;
}
if(!rename($oldPath,$newPath))
{
$error[] = $message;
}
else
{
$success[] = $message;
}
// echo $message." ";
}
if(!empty($success))
{
e107::getMessage()->addSuccess(print_a($success,true));
}
if(!empty($skipped))
{
e107::getMessage()->setTitle("Skipped",E_MESSAGE_INFO)->addInfo(print_a($skipped,true));
}
if(!empty($error))
{
e107::getMessage()->addError(print_a($error,true));
}
e107::getRender()->tablerender(DBLAN_10.SEP."Sync with Github", e107::getMessage()->render());
}
private function backup()
{
$mes = e107::getMessage();
$message = DBLAN_70;
$message .= "".LAN_CREATE." ";
$mes->addInfo($message);
$text = "
";
e107::getRender()->tablerender(DBLAN_10.SEP."Backup", $mes->render().$text);
}
/**
* Correct Folder and File permissions.
*/
function correct_perms()
{
$mes = e107::getMessage();
$fl = e107::getFile();
ob_start();
$fl->chmod(e_BASE);
$fl->chmod(e_BASE."cron.php",0755);
$errors = ob_get_clean();
if($errors !='')
{
$mes->addError($errors);
}
else
{
$mes->addSuccess(DBLAN_72);
}
e107::getRender()->tablerender(DBLAN_10.SEP.DBLAN_73, $mes->render());
}
private function multiSiteProcess()
{
$sql = e107::getDb('new');
$mes = e107::getMessage();
$user = $_POST['name'];
$pass = $_POST['password'];
$server = e107::getMySQLConfig('server'); // $_POST['server'];
$database = $_POST['db'];
$prefix = $_POST['prefix'];
if($connect = $sql->connect($server,$user, $pass, true))
{
$mes->addSuccess(DBLAN_74);
if(vartrue($_POST['createdb']))
{
if($sql->gen("CREATE DATABASE ".$database." CHARACTER SET `utf8`"))
{
$mes->addSuccess(DBLAN_75);
// $sql->gen("CREATE USER ".$user."@'".$server."' IDENTIFIED BY '".$pass."';");
$sql->gen("GRANT ALL ON `".$database."`.* TO ".$user."@'".$server."';");
$sql->gen("FLUSH PRIVILEGES;");
}
else
{
$mes->addError(DBLAN_75);
return;
}
}
if(!$sql->database($database))
{
$mes->addError(DBLAN_76);
}
$mes->addSuccess(DBLAN_76);
if($this->multiSiteCreateTables($sql, $prefix))
{
$coreConfig = e_CORE. "xml/default_install.xml";
$ret = e107::getXml()->e107Import($coreConfig, 'add', true, false, $sql); // Add core pref values
$mes->addInfo(print_a($ret,true));
}
}
else
{
$mes->addSuccess(DBLAN_74);
}
if($error = $sql->getLastErrorText())
{
$mes->addError($error);
}
// print_a($_POST);
}
private function multiSiteCreateTables($sql, $prefix)
{
$mes = e107::getMessage();
$sql_data = file_get_contents(e_CORE."sql/core_sql.php");
$sql_data = preg_replace("#\/\*.*?\*\/#mis", '', $sql_data); // Strip comments
if (!$sql_data)
{
$mes->addError(DBLAN_77);
}
preg_match_all("/create(.*?)(?:myisam|innodb);/si", $sql_data, $result );
$sql->gen('SET NAMES `utf8`');
foreach ($result[0] as $sql_table)
{
$sql_table = preg_replace("/create table\s/si", "CREATE TABLE ".$prefix, $sql_table);
if (!$sql->gen($sql_table))
{
$mes->addError($sql->getLastErrorText());
return false;
}
else
{
// $mes->addDebug($sql_table);
}
}
return true;
}
private function multiSite()
{
if(!deftrue('e_DEVELOPER'))
{
return false;
}
$mes = e107::getMessage();
$frm = e107::getForm();
e107::lan('core','installer');
e107::getMySQLConfig('user'); // prefix|server|user|password|
if(!isset($POST['create_multisite']))
{
$info = str_replace('[x]', e_DOMAIN, LANINS_133);
$mes->addInfo($info);
}
$text = $frm->open('multisite')."
".$frm->admin_button('create_multisite',1,'submit','Create New Site')."
\n";
$text .= $frm->close();
e107::getRender()->tablerender(DBLAN_10.SEP."Multi-Site".SEP.$config['mySQLdefaultdb'], $mes->render().$text);
}
private function convertUTF8Form()
{
$mes = e107::getMessage();
$frm = e107::getForm();
$config = e107::getMySQLConfig();
$sql = e107::getDb();
$sql->gen('SHOW TABLE STATUS WHERE Name LIKE "'.$config['mySQLprefix'].'%" ');
$text = "
".DBLAN_78."
".DBLAN_79."
".DBLAN_80."
".DBLAN_81."
";
$invalidCollations = false;
while($row = $sql->fetch())
{
if(in_array($row['Name'],$this->_utf8_exclude))
{
continue;
}
$text .= "
".$row['Name']."
".$row['Engine']."
".$row['Collation']."
".(($row['Collation'] == 'utf8_general_ci') ? ADMIN_TRUE_ICON : ADMIN_FALSE_ICON)."
";
// print_a($row);
if($row['Collation'] != 'utf8_general_ci')
{
$invalidCollations = true;
}
}
$text .= "
";
if($invalidCollations == true)
{
$message = str_replace('[database]', $config['mySQLdefaultdb'], DBLAN_82);
$message .= ' ';
$message .= DBLAN_83;
$message .= ' ';
$message .= ' ';
$message .= DBLAN_84;
$message .= '';
$message .= ''.DBLAN_85.' ';
$message .= ''.DBLAN_86.' ';
$message .= ''.DBLAN_87.' ';
$message .= ''.DBLAN_88.' ';
$message .= ' ';
$mes->add($message, E_MESSAGE_WARNING);
$text .= "
";
}
else
{
$mes->addSuccess(DBLAN_92);
}
e107::getRender()->tablerender(DBLAN_10.SEP."Check Charset".SEP.$config['mySQLdefaultdb'], $mes->render().$text);
}
private function perform_utf8_convert()
{
$config = e107::getMySQLConfig();
$dbtable = $config['mySQLdefaultdb'];
//TODO Add a check to be sure the database is not already utf-8.
// yep, needs more methods - possibly a class in e107_handler
$sql = e107::getDb('utf8-convert');
$mes = e107::getMessage();
$ERROR = FALSE;
// if(!$sql->gen("USE information_schema;"))
// {
// $mes->add("Couldn't read information_schema", E_MESSAGE_ERROR);
// return;
// }
$queries = array();
$queries[] = $this->getQueries("SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY ', column_name, ' ', REPLACE(column_type, 'char', 'binary'), ';') FROM information_schema.columns WHERE TABLE_SCHEMA = '".$dbtable."' AND TABLE_NAME LIKE '".$config['mySQLprefix']."%' AND COLLATION_NAME != 'utf8_general_ci' and data_type LIKE '%char%';");
$queries[] = $this->getQueries("SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY ', column_name, ' ', REPLACE(column_type, 'text', 'blob'), ';') FROM information_schema.columns WHERE TABLE_SCHEMA = '".$dbtable."' AND TABLE_NAME LIKE '".$config['mySQLprefix']."%' AND COLLATION_NAME != 'utf8_general_ci' and data_type LIKE '%text%';");
$queries2 = array();
$queries2[] = $this->getQueries("SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8;') FROM information_schema.columns WHERE TABLE_SCHEMA ='".$dbtable."' AND TABLE_NAME LIKE '".$config['mySQLprefix']."%' AND COLLATION_NAME != 'utf8_general_ci' and data_type LIKE '%char%';");
$queries2[] = $this->getQueries("SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8;') FROM information_schema.columns WHERE TABLE_SCHEMA = '".$dbtable."' AND TABLE_NAME LIKE '".$config['mySQLprefix']."%' AND COLLATION_NAME != 'utf8_general_ci' and data_type LIKE '%text%';");
// $sql->gen("USE ".$dbtable);
// print_a($queries2);
// echo $mes->render();
// return;
// Convert Text tables to Binary.
foreach($queries as $qry)
{
foreach($qry as $q)
{
if(!$sql->db_Query($q))
{
$mes->addError($q);
$ERROR = TRUE;
}
else
{
$mes->addDebug($q);
}
}
}
//------------
// Convert Table Fields to utf8
$sql2 = e107::getDb('sql2');
$sql->gen('SHOW TABLE STATUS WHERE Collation != "utf8_general_ci" ');
while ($row = $sql->fetch())
{
$table = $row['Name'];
if(in_array($row['Name'], $this->_utf8_exclude))
{
continue;
}
$tab_query = "ALTER TABLE ".$table." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ";
//echo "TABQRT= ".$tab_query;
if(!$sql2->db_Query($tab_query))
{
$mes->addError($tab_query);
$ERROR = TRUE;
}
else
{
$mes->addDebug($tab_query);
}
}
// ---------------
// Convert Table Fields back to Text/varchar etc.
foreach($queries2 as $qry)
{
foreach($qry as $q)
{
if(!$sql->db_Query($q))
{
$mes->addError($q);
$ERROR = TRUE;
}
else
{
$mes->addDebug($q);
}
}
}
//------------
$lastQry = "ALTER DATABASE `".$dbtable."` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
if(!$sql->db_Query($lastQry))
{
$mes->add($lastQry, E_MESSAGE_ERROR);
}
elseif($ERROR != TRUE)
{
$message = DBLAN_93;
//$message .= " Please now add the following line to your e107_config.php file:\$mySQLcharset = 'utf8'; ";
$mes->add($message, E_MESSAGE_SUCCESS);
$mes->addSuccess(DBLAN_94);
$mes->addSuccess('$mySQLcharset = "utf8";');
}
echo $mes->render();
}
function getQueries($query)
{
$mes = e107::getMessage();
$sql = e107::getDb('utf8-convert');
if($sql->gen($query))
{
while ($row = $sql->fetch(MYSQL_NUM))
{
$qry[] = $row[0];
}
}
else
{
$mes->addError($query);
}
return $qry;
/*
if(!$result = mysql_query($query))
{
$mes->addError("Query Failed: ".$query);
return;
}
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$qry[] = $row[0];
}
return $qry;
* */
}
/**
* Delete selected preferences.
* @return none
*/
private function del_pref_val($mode='core')
{
$mes = e107::getMessage();
$deleted_list = "";
$config = ($mode == 'core' || $mode=='') ? e107::getConfig('core') : e107::getPlugConfig($mode);
// Single Pref Deletion using button
if(varset($_POST['delpref']))
{
$delpref = key($_POST['delpref']);
if($config->remove($delpref))
{
$deleted_list .= "".$delpref." ";
}
}
// Multiple Pref deletion using checkboxes
if(varset($_POST['delpref2']))
{
foreach($_POST['delpref2'] as $k => $v)
{
if($config->remove($k))
{
$deleted_list .= "".$k." ";
}
}
}
if($deleted_list && $config->save())
{
$mes->add(LAN_DELETED."");
e107::getCache()->clear();
}
}
private function delete_plugin_entry()
{
$mes = e107::getMessage();
$sql = e107::getDb();
$del = array_keys($_POST['delplug']);
if($sql->db_Delete("plugin", "plugin_id='".intval($del[0])."'"))
{
$mes->add(LAN_DELETED, E_MESSAGE_SUCCESS);
}
else
{
$mes->add(LAN_DELETED_FAILED, E_MESSAGE_WARNING);
}
}
/**
* Render Options
* @return none
*/
private function render_options()
{
$frm = e107::getForm();
$mes = e107::getMessage();
$text = "
";
*/
e107::getRender()->tablerender(DBLAN_10, $mes->render().$text);
}
/**
* Import XML Form
* @return none
*/
private function importForm()
{
// Get largest allowable file upload
$frm = e107::getSingleton('e_form');
$mes = e107::getMessage();
require_once(e_HANDLER.'upload_handler.php');
$max_file_size = get_user_max_upload();
$text = "
\n";
e107::getRender()->tablerender(DBLAN_10.SEP.DBLAN_59, $mes->render().$text);
}
/**
* Export XML Dump
* @return none
*/
private function exportXmlForm()
{
$mes = e107::getMessage();
$frm = e107::getSingleton('e_form');
$text = " ";
e107::getRender()->tablerender(DBLAN_10.SEP.DBLAN_102,$mes->render(). $text);
}
/**
* Import XML Dump
* @return none
*/
private function importXmlFile()
{
$ret = e107::getSingleton('xmlClass')->e107Import($_FILES['file_userfile']['tmp_name'][0]);
foreach($ret['success'] as $table)
{
e107::getMessage()->addSuccess(DBLAN_103." $table");
}
foreach($ret['failed'] as $table)
{
e107::getMessage()->addError(DBLAN_104." $table");
}
}
/**
* Optimize SQL
* @return none
*/
private function optimizesql($mySQLdefaultdb) //FIXME Use mysql class.
{
// global $mes;
$result = mysql_list_tables($mySQLdefaultdb);
while($row = mysql_fetch_row($result))
{
mysql_query("OPTIMIZE TABLE ".$row[0]);
}
// $mes->add(DBLAN_11." $mySQLdefaultdb ".DBLAN_12, E_MESSAGE_SUCCESS);
e107::getRender()->tablerender(DBLAN_10.SEP.DBLAN_7, DBLAN_11." $mySQLdefaultdb ".DBLAN_12);
}
/**
* Preferences Editor
* @return string text for display
*/
private function pref_editor($type='core')
{
//TODO Add drop-down for editing personal perfs also. ie. user pref of self. (admin)
global $e107;
$frm = e107::getForm();
$mes = e107::getMessage();
$tp = e107::getParser();
$pref = e107::getPref();
$config = ($type == 'core' || $type == 'search' || $type == 'notify') ? e107::getConfig($type) : e107::getPlugConfig($type);
$spref = $config->getPref();
ksort($spref);
$text = "
\n\n";
e107::getRender()->tablerender(DBLAN_10.SEP.DBLAN_20.SEP.ucwords($type), $mes->render().$text);
return $text;
}
/**
* Preferences Editor
* @return none
*/
private function scan_override()
{
$pref = e107::getPref();
$mes = e107::getMessage();
$f = e107::getFile();
$config = e107::getConfig();
$scList = '';
$fList = $f->get_files(e_CORE.'override/shortcodes/single', '\.php$');
$scList = array();
if(count($fList))
{
foreach($fList as $file)
{
$scList[] = strtoupper(substr($file['fname'], 0, -4));
}
$scList = implode(',', $scList);
}
$config->set('sc_override', $scList)->save(false);
// core batch overrides
$fList = $f->get_files(e_CORE.'override/shortcodes/batch', '\.php$');
$scList = array();
if(count($fList))
{
foreach($fList as $file)
{
$scList[] = substr($file['fname'], 0, -4);
}
$scList = implode(',', $scList);
}
$config->set('sc_batch_override', $scList)->save(false);
//$pref['sc_override'] = $scList;
//save_prefs();
// $mes->add(DBLAN_57.': '.$pref['sc_override'], E_MESSAGE_SUCCESS);
e107::getRender()->tablerender(
''.DBLAN_56, DBLAN_57.': '
.($config->get('sc_override') ? ' '.$config->get('sc_override') : DBLAN_106)
.''.DBLAN_105.' '
.($config->get('sc_batch_override') ? ' '.$config->get('sc_batch_override') : DBLAN_106)
);
}
/**
* Plugin Folder Scanner
* @return none
*/
private function plugin_viewscan($mode = 'update')
{
$error_messages = array(0 => DBLAN_31, 1 => LAN_ERROR, 2 => DBLAN_33, 3 => DBLAN_34);
// $error_image = array("integrity_pass.png", "integrity_fail.png", "warning.png", "blank.png");
$error_glyph = array(ADMIN_TRUE_ICON,ADMIN_FALSE_ICON," "," ");
$error_type = array('warning'=>2, 'error'=>1);
global $e107;
$sql = e107::getDb();
$tp = e107::getParser();
$frm = e107::getForm();
$mes = e107::getMessage();
require_once (e_HANDLER."plugin_class.php");
$ep = new e107plugin();
$ep->update_plugins_table($mode); // scan for e_xxx changes and save to plugin table.
$ep->save_addon_prefs($mode); // generate global e_xxx_list prefs from plugin table.
/* we all are awaiting for PHP5 only support - method chaining...
$mes->add(DBLAN_22.' - '.DBLAN_23, E_MESSAGE_SUCCESS)
->add("".LAN_BACK." ", E_MESSAGE_SUCCESS)
->add(DBLAN_30);
*/
$mes->add(DBLAN_23, E_MESSAGE_SUCCESS);
$mes->add("".LAN_BACK." ", E_MESSAGE_SUCCESS);
$mes->add(DBLAN_30);
$text = "
";
e107::getRender()->tablerender(DBLAN_10.SEP.DBLAN_22, $mes->render().$text);
}
}
//XXX - what is this for (backup core)?
function db_adminmenu() //FIXME - has problems when navigation is on the LEFT instead of the right.
{
global $st;
foreach($st->_options as $key=>$val)
{
$var[$key]['text'] = $val['label'];
$var[$key]['link'] = e_SELF."?mode=".$key;
}
e107::getNav()->admin(DBLAN_10, $_GET['mode'], $var);
}
/**
* Export XML File and Copy Images.
* @param object $prefs
* @param object $tables
* @param object $debug [optional]
* @return none
*/
function exportXmlFile($prefs,$tables,$package=FALSE,$debug=FALSE)
{
$xml = e107::getSingleton('xmlClass');
$tp = e107::getParser();
$mes = e107::getMessage();
if(vartrue($package))
{
$xml->convertFilePaths = TRUE;
$xml->filePathDestination = EXPORT_PATH;
$xml->filePathPrepend = array(
'news_thumbnail' => "{e_IMAGE}newspost_images/"
);
$desinationFolder = $tp->replaceConstants($xml->filePathDestination);
if(!is_writable($desinationFolder))
{
$message = str_replace('[folder]', $desinationFolder, DBLAN_107);
$mes->add($message, E_MESSAGE_ERROR);
return ;
}
}
if($xml->e107Export($prefs,$tables,$debug))
{
$mes->add(DBLAN_108." ".$desinationFolder."install.xml", E_MESSAGE_SUCCESS);
if(varset($xml->fileConvertLog))
{
foreach($xml->fileConvertLog as $oldfile)
{
$file = basename($oldfile);
$newfile = $desinationFolder.$file;
if($oldfile == $newfile || (copy($oldfile,$newfile)))
{
$mes->add(DBLAN_109." ".$newfile, E_MESSAGE_SUCCESS);
}
else
{
$mes->add(DBLAN_110." ".$newfile, E_MESSAGE_ERROR);
}
}
}
}
}
function table_list()
{
// grab default language lists.
//TODO - a similar function is in db_verify.php. Should probably all be moved to mysql_class.php.
$exclude = array();
$exclude[] = "core";
$exclude[] = "rbinary";
$exclude[] = "parser";
$exclude[] = "tmp";
$exclude[] = "online";
$exclude[] = "upload";
$exclude[] = "user_extended_country";
$exclude[] = "plugin";
$coreTables = e107::getDb()->db_TableList('nolan');
$tables = array_diff($coreTables,$exclude);
foreach($tables as $e107tab)
{
$count = e107::getDb()->db_Select_gen("SELECT * FROM #".$e107tab);
if($count)
{
$tabs[$e107tab] = $count;
}
}
return $tabs;
}
/* Still needed?
function backup_core()
{
global $pref, $sql;
$tmp = base64_encode((serialize($pref)));
if(!$sql->db_Insert("core", "'pref_backup', '{$tmp}' "))
{
$sql->db_Update("core", "e107_value='{$tmp}' WHERE e107_name='pref_backup'");
}
}
*/
/*
function verify_sql_record() // deprecated by db_verify.php ( i think).
{
global $e107;
$sql = e107::getDb();
$sql2 = e107::getDb('sql2');
$sql3 = e107::getDb('sql3');
$frm = e107::getForm();
$tp = e107::getParser();
$mes = e107::getMessage();
$tables = array();
$tables[] = 'rate';
$tables[] = 'comments';
if(isset($_POST['delete_verify_sql_record']))
{
if(!varset($_POST['del_dbrec']))
{
$mes->add('Nothing to delete', E_MESSAGE_DEBUG);
}
else
{
$msg = "ok, so you want to delete some records? not a problem at all! ";
$msg .= "but, since this is still an experimental procedure, i won't actually delete anything ";
$msg .= "instead, i will show you the queries that would be performed ";
$text .= " ";
$mes->add($msg, E_MESSAGE_DEBUG);
foreach($_POST['del_dbrec'] as $k => $v)
{
if($k == 'rate')
{
$keys = implode(", ", array_keys($v));
$qry .= "DELETE * FROM rate WHERE rate_id IN (".$keys.") ";
}
elseif($k == 'comments')
{
$keys = implode(", ", array_keys($v));
$qry .= "DELETE * FROM comments WHERE comment_id IN (".$keys.") ";
}
}
$mes->add($qry, E_MESSAGE_DEBUG);
$mes->add("".LAN_BACK." ", E_MESSAGE_DEBUG);
}
}
//Nothing selected
if(isset($_POST['check_verify_sql_record']) && (!isset($_POST['table_rate']) && !isset($_POST['table_comments'])))
{
$_POST['check_verify_sql_record'] = '';
unset($_POST['check_verify_sql_record']);
$mes->add(DBLAN_53, E_MESSAGE_WARNING);
}
if(!isset($_POST['check_verify_sql_record']))
{
//select table to verify
$text = "
";
$ns->tablerender(DBLAN_10.SEP.DBLAN_39, $mes->render().$text);
}
else
{
//function to sort the results
function verify_sql_record_cmp($a, $b)
{
$orderby = array('type' => 'asc', 'itemid' => 'asc');
$result = 0;
foreach($orderby as $key => $value)
{
if($a[$key] == $b[$key])
continue;
$result = ($a[$key] < $b[$key]) ? - 1 : 1;
if($value == 'desc')
$result = - $result;
break;
}
return $result;
}
//function to display the results
//$err holds the error data
//$ctype holds the tablename
function verify_sql_record_displayresult($err, $ctype)
{
global $frm;
usort($err, 'verify_sql_record_cmp');
$text = "
".DBLAN_40." ".$ctype."
".DBLAN_41."
".LAN_ID."
".DBLAN_43."
".LAN_OPTIONS."
";
if(is_array($err) && !empty($err))
{
foreach($err as $k => $v)
{
$delkey = $v['sqlid'];
$text .= "
{$v['type']}
{$v['itemid']}
".($v['table_exist'] ? DBLAN_45 : DBLAN_46)."
".$frm->checkbox('del_dbrec['.$ctype.']['.$delkey.'][]', '1').$frm->label(LAN_DELETE, 'del_dbrec['.$ctype.']['.$delkey.'][]', '1')."
";
}
}
else
{
$text .= "
{$err}
";
}
$text .= "
";
return $text;
}
function verify_sql_record_gettables()
{
$sql2 = e107::getDb('sql2');
//array which will hold all db tables
$dbtables = array();
//get all tables in the db
$sql2->db_Select_gen("SHOW TABLES");
while($row2 = $sql2->db_Fetch())
{
$dbtables[] = $row2[0];
}
return $dbtables;
}
$text = "
";
$ns->tablerender(DBLAN_10.SEP.DBLAN_50, $mes->render().$text);
}
}
*/
?>