From: sakamocchi
Date: Mon, 17 Sep 2012 11:10:23 +0000 (+0900)
Subject: Merge branch 'skinnable-master'
X-Git-Url: http://git.osdn.net/view?p=nucleus-jp%2Fnucleus-next.git;a=commitdiff_plain;h=c90b0980cfa3e79cd4bc7eed551a64a5e2b02a5c;hp=-c
Merge branch 'skinnable-master'
Conflicts:
action.php
index.php
install/index.php
nucleus/bookmarklet.php
nucleus/convert/functions.inc.php
nucleus/convert/wordpress.php
nucleus/index.php
nucleus/libs/ACTION.php
nucleus/libs/ACTIONLOG.php
nucleus/libs/ACTIONS.php
nucleus/libs/ADMIN.php
nucleus/libs/BAN.php
nucleus/libs/BLOG.php
nucleus/libs/BODYACTIONS.php
nucleus/libs/BaseActions.php
nucleus/libs/COMMENT.php
nucleus/libs/COMMENTACTIONS.php
nucleus/libs/COMMENTS.php
nucleus/libs/ITEM.php
nucleus/libs/ITEMACTIONS.php
nucleus/libs/KARMA.php
nucleus/libs/MANAGER.php
nucleus/libs/MEDIA.php
nucleus/libs/MEMBER.php
nucleus/libs/NOTIFICATION.php
nucleus/libs/PAGEFACTORY.php
nucleus/libs/PARSER.php
nucleus/libs/PLUGIN.php
nucleus/libs/PLUGINADMIN.php
nucleus/libs/SEARCH.php
nucleus/libs/SKIN.php
nucleus/libs/TEMPLATE.php
nucleus/libs/backup.php
nucleus/libs/globalfunctions.php
nucleus/libs/i18n.php
nucleus/libs/include/admin-add.template
nucleus/libs/include/admin-edit.template
nucleus/libs/include/bookmarklet-add.template
nucleus/libs/include/bookmarklet-edit.template
nucleus/libs/showlist.php
nucleus/libs/skinie.php
nucleus/libs/sql/DB.php
nucleus/libs/sql/MYSQLPDO.php
nucleus/libs/sql/sql.php
nucleus/locales/bg_Cyrl_BG.ISO-8859-5.php
nucleus/locales/bg_Cyrl_BG.UTF-8.php
nucleus/locales/ca_Latn_ES.ISO-8859-1.php
nucleus/locales/ca_Latn_ES.UTF-8.php
nucleus/locales/cs_Latn_CZ.UTF-8.php
nucleus/locales/cs_Latn_CZ.WINDOWS-1250.php
nucleus/locales/de_Latn_DE.ISO-8859-1.php
nucleus/locales/de_Latn_DE.UTF-8.php
nucleus/locales/en_Latn_US.ISO-8859-1.php
nucleus/locales/en_Latn_US.UTF-8.php
nucleus/locales/es_Latn_ES.ISO-8859-1.php
nucleus/locales/es_Latn_ES.UTF-8.php
nucleus/locales/fa_Arab_IR.UTF-8.php
nucleus/locales/fi_Latn_FI.ISO-8859-1.php
nucleus/locales/fi_Latn_FI.UTF-8.php
nucleus/locales/fr_Latn_FR.ISO-8859-15.php
nucleus/locales/fr_Latn_FR.UTF-8.php
nucleus/locales/gl_Latn_ES.ISO-8859-1.php
nucleus/locales/gl_Latn_ES.UTF-8.php
nucleus/locales/hr_Latn_HR.UTF-8.php
nucleus/locales/hr_Latn_HR.WINDOWS-1250.php
nucleus/locales/hu_Latn_HU.ISO-8859-2.php
nucleus/locales/hu_Latn_HU.UTF-8.php
nucleus/locales/id_Latn_ID.ISO-8859-1.php
nucleus/locales/id_Latn_ID.UTF-8.php
nucleus/locales/it_Latn_IT.ISO-8859-1.php
nucleus/locales/it_Latn_IT.UTF-8.php
nucleus/locales/ja_Jpan_JP.EUC-JP.php
nucleus/locales/ja_Jpan_JP.UTF-8.php
nucleus/locales/ko_Kore_KR.EUC-KR.php
nucleus/locales/ko_Kore_KR.UTF-8.php
nucleus/locales/ku_Arab_TR.UTF-8.php
nucleus/locales/lv_Latn_LV.ISO-8859-13.php
nucleus/locales/lv_Latn_LV.UTF-8.php
nucleus/locales/nl_Latn_NL.ISO-8859-15.php
nucleus/locales/nl_Latn_NL.UTF-8.php
nucleus/locales/pl_Latn_PL.UTF-8.php
nucleus/locales/pt_Latn_BR.ISO-8859-1.php
nucleus/locales/pt_Latn_BR.UTF-8.php
nucleus/locales/ro_Latn_RO.ISO-8859-1.php
nucleus/locales/ro_Latn_RO.UTF-8.php
nucleus/locales/ru_Cyrl_RU.UTF-8.php
nucleus/locales/ru_Cyrl_RU.WINDOWS-1251.php
nucleus/locales/sk_Latn_SK.ISO-8859-2.php
nucleus/locales/sk_Latn_SK.UTF-8.php
nucleus/locales/sr_Cyrl_RS.UTF-8.php
nucleus/locales/ur_Arab_PK.UTF-8.php
nucleus/locales/vi_Latn_VN.UTF-8.php
nucleus/locales/zh_Hans_CN.GB2312.php
nucleus/locales/zh_Hans_CN.UTF-8.php
nucleus/locales/zh_Hant_TW.UTF-8.php
nucleus/media.php
nucleus/plugins/NP_SecurityEnforcer.php
nucleus/plugins/NP_SkinFiles.php
nucleus/upgrades/upgrade.functions.php
nucleus/upgrades/upgrade4.0.php
nucleus/xmlrpc/server.php
skins/admin/bookmarklet/styles/addedit.css
skins/default/nicetitle.js
---
c90b0980cfa3e79cd4bc7eed551a64a5e2b02a5c
diff --combined .buildpath
index 0000000,0000000..8bcb4b5
new file mode 100644
--- /dev/null
+++ b/.buildpath
@@@ -1,0 -1,0 +1,5 @@@
++
++
++
++
++
diff --combined .project
index 0000000,0000000..7e1a46c
new file mode 100644
--- /dev/null
+++ b/.project
@@@ -1,0 -1,0 +1,22 @@@
++
++
++ nucleus-next
++
++
++
++
++
++ org.eclipse.wst.validation.validationbuilder
++
++
++
++
++ org.eclipse.dltk.core.scriptbuilder
++
++
++
++
++
++ org.eclipse.php.core.PHPNature
++
++
diff --combined .settings/org.eclipse.core.resources.prefs
index 0000000,0000000..730e5d2
new file mode 100644
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@@ -1,0 -1,0 +1,24 @@@
++eclipse.preferences.version=1
++encoding//nucleus/locales/bg_Cyrl_BG.ISO-8859-5.php=ISO-8859-5
++encoding//nucleus/locales/ca_Latn_ES.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/cs_Latn_CZ.WINDOWS-1250.php=WINDOWS-1250
++encoding//nucleus/locales/de_Latn_DE.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/el_Grek_GR.WINDOWS-1253.php=WINDOWS-1253
++encoding//nucleus/locales/en_Latn_US.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/es_Latn_ES.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/fi_Latn_FI.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/fr_Latn_FR.ISO-8859-15.php=ISO-8859-15
++encoding//nucleus/locales/gl_Latn_ES.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/hr_Latn_HR.WINDOWS-1250.php=WINDOWS-1250
++encoding//nucleus/locales/hu_Latn_HU.ISO-8859-2.php=ISO-8859-2
++encoding//nucleus/locales/id_Latn_ID.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/it_Latn_IT.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/ja_Jpan_JP.EUC-JP.php=EUC-JP
++encoding//nucleus/locales/ko_Kore_KR.EUC-KR.php=EUC-KR
++encoding//nucleus/locales/lv_Latn_LV.ISO-8859-13.php=ISO-8859-13
++encoding//nucleus/locales/nl_Latn_NL.ISO-8859-15.php=ISO-8859-15
++encoding//nucleus/locales/pt_Latn_BR.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/ro_Latn_RO.ISO-8859-1.php=ISO-8859-1
++encoding//nucleus/locales/ru_Cyrl_RU.WINDOWS-1251.php=WINDOWS-1251
++encoding//nucleus/locales/sk_Latn_SK.ISO-8859-2.php=ISO-8859-2
++encoding//nucleus/locales/zh_Hans_CN.GB2312.php=GB2312
diff --combined .settings/org.eclipse.php.core.prefs
index 0000000,0000000..5f7d896
new file mode 100644
--- /dev/null
+++ b/.settings/org.eclipse.php.core.prefs
@@@ -1,0 -1,0 +1,2 @@@
++eclipse.preferences.version=1
++include_path=
diff --combined action.php
index 6cf854a,56d18a8..33529ec
--- a/action.php
+++ b/action.php
@@@ -1,35 -1,35 +1,72 @@@
++<<<<<<< HEAD
+doAction($action);
+
+if ( $errorInfo )
+{
+ $skin = new SKIN($errorInfo['skinid']);
+ doError($errorInfo['message'], $skin);
+}
+
++=======
+ doAction($action);
+
+ if ( $errorInfo )
+ {
+ $skin =& $manager->getSkin($errorInfo['skinid']);
+ doError($errorInfo['message'], $skin);
+ }
+
++>>>>>>> skinnable-master
exit;
diff --combined index.php
index 3440faf,e824f67..17c1577
--- a/index.php
+++ b/index.php
@@@ -1,8 -1,9 +1,20 @@@
++<<<<<<< HEAD
+>>>>>> skinnable-master
diff --combined install/index.php
index 17fb9a3,04288ee..13fd7be
--- a/install/index.php
+++ b/install/index.php
@@@ -1,1726 -1,1817 +1,3546 @@@
++<<<<<<< HEAD
+ Nucleus requires at least PHP version ' . $minimum_php_version . '');
+}
+
+// make sure there's no unnecessary escaping: # set_magic_quotes_runtime(0);
+if ( version_compare(PHP_VERSION, '5.3.0', '<') )
+{
+ ini_set('magic_quotes_runtime', '0');
+}
+
+/* default installed plugins and skins */
+$aConfPlugsToInstall = array('NP_SecurityEnforcer', 'NP_SkinFiles');
+$aConfSkinsToImport = array('atom', 'rss2.0', 'rsd', 'default');
+
+// Check if some important files
+do_check_files();
+
+/* i18n class is needed for internationalization */
+include_once('../nucleus/libs/i18n.php');
+if ( !i18n::init('UTF-8', '../nucleus/locales') )
+{
+ exit(' Failed to initialize iconv or mbstring extension. Would you please contact the administrator of your PHP server?
');
+}
+
+// include core classes that are needed for login & plugin handling
+
+// added for 3.5 sql_* wrapper
+global $MYSQL_HANDLER;
+
+if ( !isset($MYSQL_HANDLER) )
+{
+ $MYSQL_HANDLER = array('mysql', '');
+
+ // check if mysql support is installed; this check may not make sense, as is, in a version past 3.5x
+ if ( !function_exists('mysql_query') && !function_exists('mysqli_query') )
+ {
+ exit(' Your PHP version does not have support for MySQL :(
');
+ }
+}
+include_once('../nucleus/libs/sql/sql.php');
+
+session_start();
+if ( count($_GET) == 0 && count($_POST) == 0 )
+{
+ unset($_SESSION['param_manager']);
+}
+
+// restore the $param from the session
+if ( array_key_exists('param_manager', $_SESSION) )
+{
+ $param = $_SESSION['param_manager'];
+}
+else
+{
+ $param = new ParamManager();
+}
+
+// include translation file
+if ( array_key_exists('locale', $_POST) ) $param->set_locale();
+i18n::set_current_locale($param->locale);
+$translation_file = './locales/' . i18n::get_current_locale() . '.' . i18n::get_current_charset() . '.php';
+if ( !file_exists($translation_file) )
+{
+ $translation_file = './locales/en_Latn_US.UTF-8.php';
+}
+include($translation_file);
+
+do_action();
+
+// $param is saved to the session
+if ( isset($param) )
+{
+ $_SESSION['param_manager'] = $param;
+}
+else
+{
+ unset($_SESSION['param_manager']);
+}
+exit;
+
+/**
+ * installer action
+ */
+function do_action()
+{
+ global $param;
+
+ if ( array_key_exists('action', $_POST) )
+ {
+ $isPostback = true;
+ }
+ else
+ {
+ $isPostback = false;
+ }
+
+ // mode change
+ if ( array_key_exists('mode', $_REQUEST) )
+ {
+ if ( $_REQUEST['mode'] == 'detail' )
+ {
+ $param->set_state('detail');
+ }
+ elseif ( $_REQUEST['mode'] == 'simple' )
+ {
+ $param->set_state('mysql');
+ }
+ }
+
+ // input parameter check
+ if ( $isPostback )
+ {
+ switch ( $param->state )
+ {
+ case 'locale':
+ $param->set_locale();
+ $param->set_state('mysql');
+ $isPostback = false;
+ break;
+ case 'mysql':
+ if ( count($param->check_mysql_parameters()) == 0 )
+ {
+ $param->set_state('weblog');
+ $isPostback = false;
+ }
+ break;
+ case 'weblog':
+ if ( count($param->check_user_parameters()) == 0
+ && count($param->check_weblog_parameters()) == 0 )
+ {
+ $param->set_state('install');
+ $isPostback = false;
+ }
+ break;
+ case 'detail':
+ if ( $param->check_all_parameters() )
+ {
+ $param->set_state('install');
+ $isPostback = false;
+ }
+ break;
+ }
+ }
+
+ // page render
+ show_header();
+ switch ( $param->state )
+ {
+ case 'locale':
+ show_select_locale_form();
+ break;
+ case 'mysql':
+ show_database_setting_form($isPostback);
+ break;
+ case 'weblog':
+ show_blog_setting_form($isPostback);
+ break;
+ case 'detail':
+ show_detail_setting_form($isPostback);
+ break;
+ case 'install':
+ show_install_complete_form();
+ break;
+ }
+ show_footer();
+}
+
+/**
+ * header tag of the installation screens
+ **/
+function show_header()
+{
+ global $param;
+
+ /* HTTP 1.1 application for no caching */
+ header("Cache-Control: no-cache, must-revalidate");
+ header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
+ header('Content-Type: text/html; charset=' . i18n::get_current_charset());
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select your locale:
+
+
+
+
+
+
+', $config_writable, '';
+ }
+ if ( $mysql_version == '0.0.0' )
+ {
+ echo '', _DBVERSION_UNKOWN, ' ';
+ }
+ elseif ( version_compare($mysql_version, $minimum_mysql_version, '<') )
+ {
+ echo '', sprintf(_DBVERSION_TOOLOW, $minimum_mysql_version), ' ';
+ }
+?>
+
+
+
+
+
+
+
+
+
+check_all_parameters() )
+ {
+ echo '', _VALID_ERROR, " \n";
+ }
+?>
+
+
+ PHP:
+ MySQL:
+', sprintf(_DBVERSION_TOOLOW, $minimum_mysql_version), '';
+ }
+?>
+
+
+
+
+
+
+ 0 )
+ {
+ echo _INST_ERROR;
+ foreach ( $errors as $error )
+ {
+ echo '', $error, " \n";
+ }
+ }
+ else
+ {
+ echo _INST_TEXT;
+ if ( array_key_exists('config_data', $_SESSION) )
+ {
+ echo '', _INST_TEXT4, ' ';
+?>
+
+', _INST_TEXT5, '';
+ }
+?>
+
+
+
+
+mysql_host;
+ $MYSQL_USER = $param->mysql_user;
+ $MYSQL_PASSWORD = $param->mysql_password;
+ $MYSQL_DATABASE = $param->mysql_database;
+ $MYSQL_PREFIX = $param->mysql_tablePrefix;
+
+ $DIR_NUCLEUS = $param->AdminPath;
+ $DIR_MEDIA = $param->MediaPath;
+ $DIR_SKINS = $param->SkinsPath;
+ $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';
+ $DIR_LOCALES = $DIR_NUCLEUS . 'locales/';
+ $DIR_LIBS = $DIR_NUCLEUS . 'libs/';
+
+ /*
+ * 2.open mySQL connection
+ */
+ $MYSQL_CONN = @DB::setConnectionInfo($MYSQL_HANDLER[1], $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD);
+ if ( $MYSQL_CONN == FALSE )
+ {
+ $errors[] = _DBCONNECT_ERROR;
+ return $errors;
+ }
+
+ /*
+ * 3. try to create database if needed
+ */
+ if ( DB::execute("CREATE DATABASE IF NOT EXISTS {$MYSQL_DATABASE}") === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR1 . ': ' . $errinfo[2];
+ }
+
+ /*
+ * 4. try to select database
+ */
+ $MYSQL_CONN = @DB::setConnectionInfo($MYSQL_HANDLER[1], $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE);
+ if ( !$MYSQL_CONN )
+ {
+ $errors[] = _INST_ERROR2;
+ }
+
+ if ( count($errors) > 0 )
+ {
+ return $errors;
+ }
+
+ /*
+ * 5. execute queries
+ */
+ $table_names = array(
+ 'nucleus_actionlog',
+ 'nucleus_ban',
+ 'nucleus_blog',
+ 'nucleus_category',
+ 'nucleus_comment',
+ 'nucleus_config',
+ 'nucleus_item',
+ 'nucleus_karma',
+ 'nucleus_member',
+ 'nucleus_plugin',
+ 'nucleus_skin',
+ 'nucleus_template',
+ 'nucleus_team',
+ 'nucleus_activation',
+ 'nucleus_tickets'
+ );
+
+ $prefixed_table_names = array();
+ foreach ( $table_names as $table_name )
+ {
+ $prefixed_table_names[] = $MYSQL_PREFIX . $table_name;
+ }
+
+ // table exists check
+ $result = DB::getResult('SHOW TABLES');
+ foreach ( $result as $row )
+ {
+ if ( in_array($row[0], $prefixed_table_names) )
+ {
+ $errors[] = _INST_ERROR3;
+ break;
+ }
+ }
+ if ( count($errors) > 0 )
+ {
+ return $errors;
+ }
+
+ $filename = 'install.sql';
+ $fd = fopen($filename, 'r');
+ $queries = fread($fd, filesize($filename));
+ fclose($fd);
+
+ $queries = preg_split('#(;\n|;\r)#', $queries);
+
+ foreach ( $queries as $query )
+ {
+ if ( preg_match('/\w+/', $query) )
+ {
+ if ( $MYSQL_PREFIX )
+ {
+ $query = str_replace($table_names, $prefixed_table_names, $query);
+ }
+
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR4 . ' (' . $query . ' ): ' . $errinfo[2];
+ }
+ }
+ }
+
+ /*
+ * 6. put needed records
+ */
+ /* push first post */
+ $query = "INSERT INTO %s VALUES (1, %s, %s, %s, 1, 1, %s, 0, 0, 0, 1, 0, 1)";
+ $query = sprintf($query,
+ tableName('nucleus_item'),
+ DB::quoteValue(_1ST_POST_TITLE),
+ DB::quoteValue(_1ST_POST),
+ DB::quoteValue(_1ST_POST2),
+ DB::formatDateTime()
+ );
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR4 . ' (' . $query . ' ): ' . $errinfo[2];
+ }
+
+ /* push configurations */
+ array_merge($errors, updateConfig('IndexURL', $param->IndexURL));
+ array_merge($errors, updateConfig('AdminURL', $param->AdminURL));
+ array_merge($errors, updateConfig('MediaURL', $param->MediaURL));
+ array_merge($errors, updateConfig('SkinsURL', $param->SkinsURL));
+ array_merge($errors, updateConfig('PluginURL', $param->PluginURL));
+ array_merge($errors, updateConfig('ActionURL', $param->ActionURL));
+ array_merge($errors, updateConfig('AdminEmail', $param->user_email));
+ array_merge($errors, updateConfig('SiteName', $param->blog_name));
+ array_merge($errors, updateConfig('Locale', i18n::get_current_locale()));
+
+ /* push super admin */
+ $query = "UPDATE %s SET mname = %s, mrealname = %s, mpassword = %s, memail = %s, murl = %s, madmin = 1, mcanlogin = 1 WHERE mnumber = 1";
+ $query = sprintf($query,
+ tableName('nucleus_member'),
+ DB::quoteValue($param->user_name),
+ DB::quoteValue($param->user_realname),
+ DB::quoteValue(md5($param->user_password)),
+ DB::quoteValue($param->user_email),
+ DB::quoteValue($param->IndexURL)
+ );
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR5 . ': ' . $errinfo[2];
+ }
+
+ /* push new weblog */
+ $query = "UPDATE %s SET bname = %s, bshortname = %s, burl = %s WHERE bnumber = 1";
+ $query = sprintf($query,
+ tableName('nucleus_blog'),
+ DB::quoteValue($param->blog_name),
+ DB::quoteValue($param->blog_shortname),
+ DB::quoteValue($param->IndexURL)
+ );
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR6 . ': ' . $errinfo[2];
+ }
+
+ /* push default category */
+ $query = "UPDATE %s SET cname = %s, cdesc = %s WHERE catid = 1";
+ $query = sprintf($query,
+ tableName('nucleus_category'),
+ DB::quoteValue(_GENERALCAT_NAME),
+ DB::quoteValue(_GENERALCAT_DESC)
+ );
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR6 . ': ' . $errinfo[2];
+ }
+
+ /*
+ * 7. install default plugins and skins
+ */
+ global $aConfPlugsToInstall, $aConfSkinsToImport;
+ $aSkinErrors = array();
+ $aPlugErrors = array();
+
+ if ( (count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) )
+ {
+ include_once($DIR_LIBS . 'globalfunctions.php');
+ global $manager;
+ if ( !isset($manager) )
+ {
+ $manager = new Manager();
+ }
+
+ include_once($DIR_LIBS . 'skinie.php');
+
+ $aSkinErrors = installCustomSkins();
+ if ( count($aSkinErrors) > 0 )
+ {
+ array_merge($errors, $aSkinErrors);
+ }
+
+ $query = "SELECT sdnumber FROM %s WHERE sdname='default'";
+ $query = sprintf($query, tableName('nucleus_skin_desc'));
+ $defSkinID = intval(DB::getValue($query));
+
+ $query = "UPDATE %s SET bdefskin=%d WHERE bnumber=1";
+ $query = sprintf($query, tableName('nucleus_blog'), $defSkinID);
+ DB::execute($query);
+
+ $query = "UPDATE %s SET value=%d WHERE name='BaseSkin'";
+ $query = sprintf($query, tableName('nucleus_config'), $defSkinID);
+ DB::execute($query);
+
+ $aPlugErrors = installCustomPlugs();
+ if ( count($aPlugErrors) > 0 )
+ {
+ array_merge($errors, $aPlugErrors);
+ }
+ }
+
+ /*
+ * 8. Write config file ourselves (if possible)
+ */
+ $config_data = '<' . '?php' . "\n";
+ $config_data .= "// mySQL connection information\n";
+ $config_data .= "\$MYSQL_HOST = '" . $MYSQL_HOST . "';\n";
+ $config_data .= "\$MYSQL_USER = '" . $MYSQL_USER . "';\n";
+ $config_data .= "\$MYSQL_PASSWORD = '" . $MYSQL_PASSWORD . "';\n";
+ $config_data .= "\$MYSQL_DATABASE = '" . $MYSQL_DATABASE . "';\n";
+ $config_data .= "\$MYSQL_PREFIX = '" . $MYSQL_PREFIX . "';\n";
+ $config_data .= "// new in 3.50. first element is db handler, the second is the db driver used by the handler\n";
+ $config_data .= "// default is \$MYSQL_HANDLER = array('mysql','mysql');\n";
+ $config_data .= "//\$MYSQL_HANDLER = array('mysql','mysql');\n";
+ $config_data .= "//\$MYSQL_HANDLER = array('pdo','mysql');\n";
+ $config_data .= "\$MYSQL_HANDLER = array('" . $MYSQL_HANDLER[0] . "','" . $MYSQL_HANDLER[1] . "');\n";
+ $config_data .= "\n";
+ $config_data .= "// main nucleus directory\n";
+ $config_data .= "\$DIR_NUCLEUS = '" . $DIR_NUCLEUS . "';\n";
+ $config_data .= "\n";
+ $config_data .= "// path to media dir\n";
+ $config_data .= "\$DIR_MEDIA = '" . $DIR_MEDIA . "';\n";
+ $config_data .= "\n";
+ $config_data .= "// extra skin files for imported skins\n";
+ $config_data .= "\$DIR_SKINS = '" . $DIR_SKINS . "';\n";
+ $config_data .= "\n";
+ $config_data .= "// these dirs are normally sub dirs of the nucleus dir, but \n";
+ $config_data .= "// you can redefine them if you wish\n";
+ $config_data .= "\$DIR_PLUGINS = \$DIR_NUCLEUS . 'plugins/';\n";
+ $config_data .= "\$DIR_LOCALES = \$DIR_NUCLEUS . 'locales/';\n";
+ $config_data .= "\$DIR_LIBS = \$DIR_NUCLEUS . 'libs/';\n";
+ $config_data .= "\n";
+ $config_data .= "// include libs\n";
+ $config_data .= "include(\$DIR_LIBS.'globalfunctions.php');\n";
+ $config_data .= "?" . ">";
+
+ $result = false;
+ if ( @!file_exists('../config.php') || is_writable('../config.php') )
+ {
+ if ( $fp = @fopen('../config.php', 'w') )
+ {
+ $result = @fwrite($fp, $config_data, i18n::strlen($config_data));
+ fclose($fp);
+ }
+ }
+
+ if ( $result )
+ {
+ // try to change the read-only permission.
+ if ( strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' )
+ {
+ @chmod('../config.php', 0444);
+ }
+ }
+ else
+ {
+ $_SESSION['config_data'] = $config_data;
+ }
+
+ return $errors;
+}
+
+/**
+ * Confirm that you can write to the configuration file
+ * @return string error message
+ */
+function canConfigFileWritable()
+{
+ if ( @file_exists('../config.php') && @!is_writable('../config.php') )
+ {
+ // try to change the read-write permission.
+ if ( strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' )
+ {
+ @chmod('../config.php', 0666);
+ }
+
+ if ( @!is_writable('../config.php') )
+ {
+ return _INST_ERROR8;
+ }
+ }
+ return '';
+}
+
+/**
+ * To obtain the version of MySQL
+ * @return string
+ */
+function getMySqlVersion()
+{
+ global $MYSQL_HANDLER, $minimum_mysql_version, $errors;
+ // Turn on output buffer
+ // Needed to repress the output of the sql function that are
+ // not part of php (in this case the @ operator doesn't work)
+ ob_start();
+
+ // note: this piece of code is taken from phpMyAdmin
+ $conn = @DB::setConnectionInfo($MYSQL_HANDLER[1], 'localhost', '', '');
+
+ if ( $conn )
+ {
+ $row = DB::getAttribute(PDO::ATTR_SERVER_VERSION);
+ $match = preg_split('#\.#', $row);
+ }
+ else
+ {
+ $row = @DB::getRow('SHOW VARIABLES LIKE \'version\'');
+
+ if ( $row )
+ {
+ $match = preg_split('#\.#', $row[1]);
+ }
+ else
+ {
+ $output = (function_exists('shell_exec')) ? @shell_exec('mysql -V') : '0.0.0';
+ preg_match('@[0-9]+\.[0-9]+\.[0-9]+@', $output, $version);
+ $match = preg_split('#\.#', $version[0]);
+
+ if ( $match[0] == '' )
+ {
+ $match = array('0', '0', '0');
+ }
+ }
+ }
+
+ @DB::disConnect();
+
+ //End and clean output buffer
+ ob_end_clean();
+
+ return implode($match, '.');
+}
+
+/**
+ * Add a table prefix if it is used
+ *
+ * @param string $input table name with prefix
+ * @return string
+ */
+function tableName($input)
+{
+ global $MYSQL_PREFIX;
+ if ( $MYSQL_PREFIX )
+ {
+ return $MYSQL_PREFIX . $input;
+ }
+ else
+ {
+ return $input;
+ }
+}
+
+/**
+ * Install custom plugins
+ */
+function installCustomPlugs()
+{
+ global $aConfPlugsToInstall, $DIR_LIBS, $manager;
+
+ $aErrors = array();
+ if ( count($aConfPlugsToInstall) == 0 )
+ {
+ return $aErrors;
+ }
+
+ $query = sprintf('SELECT * FROM %s', tableName('nucleus_plugin'));
+ $res = DB::getResult($query);
+ $numCurrent = $res->rowCount();
+
+ foreach ( $aConfPlugsToInstall as $plugName )
+ {
+ $query = sprintf('INSERT INTO %s (porder, pfile) VALUES (%d, %s)',
+ tableName('nucleus_plugin'),
+ (++$numCurrent),
+ DB::quoteValue($plugName));
+ DB::execute($query);
+
+ $manager->clearCachedInfo('installedPlugins');
+ $plugin =& $manager->getPlugin($plugName);
+ $plugin->setID($numCurrent);
+
+ if ( !$plugin )
+ {
+ $query = sprintf('DELETE FROM %s WHERE pfile = %s',
+ tableName('nucleus_plugin'),
+ DB::quoteValue($plugName));
+ DB::execute($query);
+ $numCurrent--;
+ array_push($aErrors, sprintf(_INST_ERROR9, $plugName));
+ continue;
+ }
+ $plugin->install();
+ }
+
+ $query = sprintf('DELETE FROM %s', tableName('nucleus_plugin_event'));
+ DB::execute($query);
+ $query = sprintf('SELECT pid, pfile FROM %s', tableName('nucleus_plugin'));
+ $res = DB::getResult($query);
+
+ foreach ( $res as $row )
+ {
+ $plug =& $manager->getPlugin($row['pfile']);
+
+ if ( $plug )
+ {
+ $eventList = $plug->getEventList();
+ foreach ( $eventList as $eventName )
+ {
+ $query = sprintf('INSERT INTO %s (pid, event) VALUES (%d, %s)',
+ tableName('nucleus_plugin_event'),
+ intval($row['pid']),
+ DB::quoteValue($eventName));
+ DB::execute($query);
+ }
+ }
+ }
+ return $aErrors;
+}
+
+/**
+ * Install custom skins
+ * Prepares the installation of custom skins
+ */
+function installCustomSkins()
+{
+ global $aConfSkinsToImport, $DIR_LIBS, $DIR_SKINS;
+
+ $aErrors = array();
+ if ( count($aConfSkinsToImport) == 0 )
+ {
+ return $aErrors;
+ }
+
+ $importer = new SkinImport();
+
+ foreach ( $aConfSkinsToImport as $skinName )
+ {
+ $importer->reset();
+ $skinFile = $DIR_SKINS . $skinName . '/skinbackup.xml';
+
+ if ( !@file_exists($skinFile) )
+ {
+ array_push($aErrors, sprintf(_INST_ERROR10, $skinFile));
+ continue;
+ }
+
+ $error = $importer->readFile($skinFile);
+
+ if ( $error )
+ {
+ array_push($aErrors, sprintf(_INST_ERROR11, $skinName) . ' : ' . $error);
+ continue;
+ }
+
+ $error = $importer->writeToDatabase(1);
+
+ if ( $error )
+ {
+ array_push($aErrors, sprintf(_INST_ERROR12, $skinName) . ' : ' . $error);
+ continue;
+ }
+ }
+ return $aErrors;
+}
+
+/**
+ * Check if some important files of the Nucleus CMS installation are available
+ * Give an error if one or more files are not accessible
+ */
+function do_check_files()
+{
+ $missingfiles = array();
+ $files = array(
+ './install.sql',
+ '../index.php',
+ '../action.php',
+ '../nucleus/index.php',
+ '../nucleus/media.php',
+ '../nucleus/libs/ACTION.php',
+ '../nucleus/libs/ACTIONLOG.php',
+ '../nucleus/libs/ACTIONS.php',
+ '../nucleus/libs/ADMIN.php',
+ '../nucleus/libs/BaseActions.php',
+ '../nucleus/libs/BLOG.php',
+ '../nucleus/libs/BODYACTIONS.php',
+ '../nucleus/libs/COMMENT.php',
+ '../nucleus/libs/COMMENTACTIONS.php',
+ '../nucleus/libs/COMMENTS.php',
+ '../nucleus/libs/ENCAPSULATE.php',
+ '../nucleus/libs/ENTITY.php',
+ '../nucleus/libs/globalfunctions.php',
+ '../nucleus/libs/i18n.php',
+ '../nucleus/libs/ITEM.php',
+ '../nucleus/libs/ITEMACTIONS.php',
+ '../nucleus/libs/LINK.php',
+ '../nucleus/libs/MANAGER.php',
+ '../nucleus/libs/MEDIA.php',
+ '../nucleus/libs/MEMBER.php',
+ '../nucleus/libs/NOTIFICATION.php',
+ '../nucleus/libs/PAGEFACTORY.php',
+ '../nucleus/libs/PARSER.php',
+ '../nucleus/libs/PLUGIN.php',
+ '../nucleus/libs/PLUGINADMIN.php',
+ '../nucleus/libs/SEARCH.php',
+ '../nucleus/libs/showlist.php',
+ '../nucleus/libs/SKIN.php',
+ '../nucleus/libs/TEMPLATE.php',
+ '../nucleus/libs/vars4.1.0.php',
+ '../nucleus/libs/xmlrpc.inc.php',
+ '../nucleus/libs/xmlrpcs.inc.php',
+ '../nucleus/libs/sql/DB.php',
+ '../nucleus/libs/sql/MYSQLPDO.php'
+ );
+
+ $count = count($files);
+ for ( $i = 0; $i < $count; $i++ )
+ {
+ if ( !is_readable($files[$i]) )
+ {
+ array_push($missingfiles, 'File ' . $files[$i] . ' is missing or not readable. ');
+ }
+ }
+
+ if ( count($missingfiles) > 0 )
+ {
+ exit(implode("\n", $missingfiles));
+ }
+}
+
+/**
+ * Updates the configuration in the database
+ *
+ * @param string $name name of the config var
+ * @param string $value new value of the config var
+ * @return array
+ */
+function updateConfig($name, $value)
+{
+ $errors = array();
+
+ $query = "UPDATE %s SET value = %s WHERE name = %s";
+ $query = sprintf($query, tableName('nucleus_config'), DB::quoteValue(trim($value)), DB::quoteValue($name));
+
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR4 . ': ' . $errinfo[2];
+ }
+ return $errors;
+}
+
+class ParamManager
+{
+ /* process parameter */
+ public $state;
+ public $locale;
+
+ /* mysql connection parameters */
+ public $mysql_host;
+ public $mysql_user;
+ public $mysql_password;
+ public $mysql_database;
+ public $mysql_tablePrefix;
+
+ /* weblog configuration parameters */
+ public $blog_name;
+ public $blog_shortname;
+
+ /* member configuration parameters */
+ public $user_name;
+ public $user_realname;
+ public $user_password;
+ private $user_password2;
+ public $user_email;
+
+ /* URI parameters */
+ private $root_url;
+ public $IndexURL;
+ public $AdminURL;
+ public $MediaURL;
+ public $SkinsURL;
+ public $PluginURL;
+ public $ActionURL;
+
+ /* path parameters */
+ private $root_path;
+ public $AdminPath;
+ public $MediaPath;
+ public $SkinsPath;
+
+ /**
+ * constructor
+ */
+ public function __construct()
+ {
+ $this->init();
+ }
+
+ public function init()
+ {
+ // set default values
+ $this->state = 'locale';
+ $this->install_mode = 'simple';
+ $this->locale = 'en_Latn_US';
+ $this->mysql_host = @ini_get('mysql.default_host');
+ $this->blog_name = 'My Nucleus CMS';
+ $this->blog_shortname = 'mynucleuscms';
+
+ /* root path */
+ $directory_separator = preg_quote(DIRECTORY_SEPARATOR, '|');
+ $this->root_path = implode('/', preg_split("|$directory_separator|", realpath(dirname(__FILE__) . '/..')));
+ if ( substr($this->root_path, -1, 1) !== '/' )
+ {
+ $this->root_path .= '/';
+ }
+ $base_path_pcre = preg_quote($this->root_path, '|');
+
+ /* current directry name */
+ $directory_name = preg_replace("#{$base_path_pcre}#", '', implode('/', preg_split("#{$directory_separator}#", realpath(dirname(__FILE__)))));
+ $directory_name_pcre = preg_quote($directory_name, '|');
+
+ /* root uri */
+ $root_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
+ $this->root_url = preg_replace("|$directory_name_pcre(.*)$|", '', $root_url);
+
+ $this->AdminPath = $this->root_path . 'nucleus/';
+ $this->MediaPath = $this->root_path . 'media/';
+ $this->SkinsPath = $this->root_path . 'skins/';
+
+ $this->IndexURL = $this->root_url;
+ $this->AdminURL = $this->root_url . 'nucleus/';
+ $this->MediaURL = $this->root_url . 'media/';
+ $this->SkinsURL = $this->root_url . 'skins/';
+ $this->PluginURL = $this->root_url . 'nucleus/plugins/';
+ $this->ActionURL = $this->root_url . 'action.php';
+ }
+
+ private function read_parameter($parameter)
+ {
+ foreach ( $parameter as $element )
+ {
+ if ( array_key_exists($element, $_POST) )
+ {
+ $this->$element = $_POST[$element];
+ }
+ }
+ }
+
+ public function set_state($state)
+ {
+ $states = array('locale', 'mysql', 'weblog', 'detail', 'install');
+ if ( in_array($state, $states) )
+ {
+ $this->state = $state;
+ }
+ }
+
+ public function set_locale()
+ {
+ $this->read_parameter(array('locale'));
+
+ if ( !in_array($this->locale, i18n::get_available_locale_list()) )
+ {
+ $this->locale = 'en_Latn_US';
+ }
+ }
+
+ public function check_mysql_parameters()
+ {
+ global $MYSQL_HANDLER;
+
+ $parameters = array('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database', 'mysql_tablePrefix');
+ $this->read_parameter($parameters);
+
+ $errors = array();
+ if ( $this->mysql_host == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD1);
+ }
+
+ if ( $this->mysql_user == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD2);
+ }
+
+ if ( $this->mysql_user != ''
+ && !preg_match('/^[a-z0-9_\-]+$/i', $this->mysql_user) )
+ {
+ $errors[] = sprintf(_VALID_ERROR2, _DB_FIELD2);
+ }
+
+ if ( $this->mysql_database == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD4);
+ }
+
+ if ( $this->mysql_database != ''
+ && !preg_match('/^[a-z0-9_\-]+$/i', $this->mysql_database) )
+ {
+ $errors[] = sprintf(_VALID_ERROR2, _DB_FIELD4);
+ }
+
+ if ( $this->mysql_tablePrefix != ''
+ && !preg_match('/^[a-z0-9_]+$/i', $this->mysql_tablePrefix) )
+ {
+ $errors[] = sprintf(_VALID_ERROR3, _DB_FIELD5);
+ }
+
+ if ( count($errors) == 0 )
+ {
+ $mysql_conn = @DB::setConnectionInfo($MYSQL_HANDLER[1], $this->mysql_host, $this->mysql_user, $this->mysql_password);
+ if ( $mysql_conn == false )
+ {
+ $errors[] = _DBCONNECT_ERROR;
+ }
+ else
+ {
+ @DB::disConnect();
+ }
+ }
+
+ return $errors;
+ }
+
+ public function check_user_parameters()
+ {
+ $parameters = array('user_name', 'user_realname', 'user_password', 'user_password2', 'user_email');
+ $this->read_parameter($parameters);
+
+ $errors = array();
+ if ( $this->user_realname == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD1);
+ }
+
+ if ( $this->user_name == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD2);
+ }
+ elseif ( !preg_match("/^[a-z0-9]+([ a-z0-9]*[a-z0-9]+)?$/i", $this->user_name) )
+ {
+ $errors[] = _VALID_ERROR5;
+ }
+
+ if ( $this->user_password == '' || $this->user_password2 == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD3);
+ $this->user_password = '';
+ }
+ elseif ( $this->user_password != $this->user_password2 )
+ {
+ $errors[] = _VALID_ERROR6;
+ $this->user_password = '';
+ }
+
+ if ( !preg_match("/^[a-z0-9\._+\-]+@[a-z0-9\._\-]+\.[a-z]{2,6}$/i", $this->user_email) )
+ {
+ $errors[] = _VALID_ERROR7;
+ }
+
+ return $errors;
+ }
+
+ public function check_weblog_parameters()
+ {
+ $parameters = array('blog_name', 'blog_shortname');
+ $this->read_parameter($parameters);
+
+ $errors = array();
+ if ( $this->blog_name == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _BLOG_FIELD1);
+ }
+
+ if ( $this->blog_shortname == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _BLOG_FIELD2);
+ }
+
+ if ( !preg_match("/^[a-z0-9]+$/i", $this->blog_shortname) )
+ {
+ $errors[] = _VALID_ERROR4;
+ }
+
+ return $errors;
+ }
+
+ public function check_uri_parameters()
+ {
+ $parameters = array('IndexURL', 'AdminURL', 'MediaURL', 'SkinsURL', 'PluginURL', 'ActionURL');
+ $this->read_parameter($parameters);
+
+ $errors = array();
+ if ( substr($this->IndexURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD1);
+ }
+
+ if ( substr($this->AdminURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD2);
+ }
+
+ if ( substr($this->MediaURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD4);
+ }
+
+ if ( substr($this->SkinsURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD6);
+ }
+
+ if ( substr($this->PluginURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD8);
+ }
+
+ if ( strrchr($this->ActionURL, '/') != '/action.php' )
+ {
+ $errors[] = sprintf(_VALID_ERROR9, _PATH_FIELD9);
+ }
+
+ return $errors;
+ }
+
+ public function check_path_parameters()
+ {
+ $parameters = array('AdminPath', 'MediaPath', 'SkinsPath');
+ $this->read_parameter($parameters);
+
+ $separators = array('/', DIRECTORY_SEPARATOR);
+ $errors = array();
+ if ( !in_array(substr($this->AdminPath, -1, 1), $separators) )
+ {
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD3);
+ }
+ elseif ( !file_exists($this->AdminPath) )
+ {
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD3);
+ }
+
+ if ( !in_array(substr($this->MediaPath, -1, 1), $separators) )
+ {
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD5);
+ }
+ elseif ( !file_exists($this->MediaPath) )
+ {
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD5);
+ }
+
+ if ( !in_array(substr($this->SkinsPath, -1, 1), $separators) )
+ {
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD7);
+ }
+ elseif ( !file_exists($this->SkinsPath) )
+ {
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD7);
+ }
+
+ return $errors;
+ }
+
+ /**
+ * check all parameters
+ * @return bool
+ */
+ public function check_all_parameters()
+ {
+ $this->set_locale();
+
+ $isValid = true;
+ $isValid &= (count($this->check_mysql_parameters()) == 0);
+ $isValid &= (count($this->check_user_parameters()) == 0);
+ $isValid &= (count($this->check_weblog_parameters()) == 0);
+ $isValid &= (count($this->check_uri_parameters()) == 0);
+ $isValid &= (count($this->check_path_parameters()) == 0);
+
+ return $isValid;
+ }
+}
++=======
+ Nucleus requires at least PHP version ' . $minimum_php_version . '');
+ }
+
+ // make sure there's no unnecessary escaping: # set_magic_quotes_runtime(0);
+ if ( version_compare(PHP_VERSION, '5.3.0', '<') )
+ {
+ ini_set('magic_quotes_runtime', '0');
+ }
+
+ /* default installed plugins and skins */
+ $aConfPlugsToInstall = array('NP_SecurityEnforcer', 'NP_SkinFiles', 'NP_Medium');
+ $aConfSkinsToImport = array('atom', 'rss2.0', 'rsd', 'default', 'admin/default', 'admin/bookmarklet');
+
+ // Check if some important files
+ do_check_files();
+
+ /* i18n class is needed for internationalization */
+ include_once('../nucleus/libs/i18n.php');
+ if ( !i18n::init('UTF-8', '../nucleus/locales') )
+ {
+ exit(' Failed to initialize iconv or mbstring extension. Would you please contact the administrator of your PHP server?
');
+ }
+
+ // include core classes that are needed for login & plugin handling
+
+ // added for 3.5 sql_* wrapper
+ global $MYSQL_HANDLER;
+
+ if ( !isset($MYSQL_HANDLER) )
+ {
+ $MYSQL_HANDLER = array('mysql', '');
+
+ // check if mysql support is installed; this check may not make sense, as is, in a version past 3.5x
+ if ( !function_exists('mysql_query') && !function_exists('mysqli_query') )
+ {
+ exit(' Your PHP version does not have support for MySQL :(
');
+ }
+ }
+ include_once('../nucleus/libs/sql/sql.php');
+
+ session_start();
+ if ( count($_GET) == 0 && count($_POST) == 0 )
+ {
+ unset($_SESSION['param_manager']);
+ }
+
+ // restore the $param from the session
+ if ( array_key_exists('param_manager', $_SESSION) )
+ {
+ $param = $_SESSION['param_manager'];
+ }
+ else
+ {
+ $param = new ParamManager();
+ }
+
+ // include translation file
+ $param->set_locale();
+
+ do_action();
+
+ // $param is saved to the session
+ if ( isset($param) )
+ {
+ $_SESSION['param_manager'] = $param;
+ }
+ else
+ {
+ unset($_SESSION['param_manager']);
+ }
+ exit;
+
+ /**
+ * installer action
+ */
+ function do_action()
+ {
+ global $param;
+
+ if ( array_key_exists('action', $_POST) )
+ {
+ $isPostback = true;
+ }
+ else
+ {
+ $isPostback = false;
+ }
+
+ // mode change
+ if ( array_key_exists('mode', $_REQUEST) )
+ {
+ if ( $_REQUEST['mode'] == 'detail' )
+ {
+ $param->set_state('detail');
+ }
+ elseif ( $_REQUEST['mode'] == 'simple' )
+ {
+ $param->set_state('mysql');
+ }
+ }
+
+ // input parameter check
+ if ( $isPostback )
+ {
+ switch ( $param->state )
+ {
+ case 'locale':
+ $param->set_state('mysql');
+ $isPostback = false;
+ break;
+ case 'mysql':
+ if ( count($param->check_mysql_parameters()) == 0 )
+ {
+ $param->set_state('weblog');
+ $isPostback = false;
+ }
+ break;
+ case 'weblog':
+ if ( count($param->check_user_parameters()) == 0
+ && count($param->check_weblog_parameters()) == 0 )
+ {
+ $param->set_state('install');
+ $isPostback = false;
+ }
+ break;
+ case 'detail':
+ if ( $param->check_all_parameters() )
+ {
+ $param->set_state('install');
+ $isPostback = false;
+ }
+ break;
+ }
+ }
+
+ // page render
+ show_header();
+ switch ( $param->state )
+ {
+ case 'locale':
+ show_select_locale_form();
+ break;
+ case 'mysql':
+ show_database_setting_form($isPostback);
+ break;
+ case 'weblog':
+ show_blog_setting_form($isPostback);
+ break;
+ case 'detail':
+ show_detail_setting_form($isPostback);
+ break;
+ case 'install':
+ show_install_complete_form();
+ break;
+ }
+ show_footer();
+ }
+
+ /**
+ * header tag of the installation screens
+ **/
+ function show_header()
+ {
+ global $param;
+
+ /* HTTP 1.1 application for no caching */
+ header("Cache-Control: no-cache, must-revalidate");
+ header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
+ header('Content-Type: text/html; charset=' . i18n::get_current_charset());
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ', $config_writable, '';
+ }
+ if ( $mysql_version == '0.0.0' )
+ {
+ echo '', _DBVERSION_UNKOWN, ' ';
+ }
+ elseif ( version_compare($mysql_version, $minimum_mysql_version, '<') )
+ {
+ echo '', sprintf(_DBVERSION_TOOLOW, $minimum_mysql_version), ' ';
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+ check_all_parameters() )
+ {
+ echo '', _VALID_ERROR, " \n";
+ }
+ ?>
+
+
+ PHP:
+ MySQL:
+ ', sprintf(_DBVERSION_TOOLOW, $minimum_mysql_version), '';
+ }
+ ?>
+
+
+
+
+
+
+ 0 )
+ {
+ echo _INST_ERROR;
+ foreach ( $errors as $error )
+ {
+ echo '', $error, " \n";
+ }
+ }
+ else
+ {
+ echo _INST_TEXT;
+ if ( array_key_exists('config_data', $_SESSION) )
+ {
+ echo '', _INST_TEXT4, ' ';
+ ?>
+
+ ', _INST_TEXT5, '';
+ }
+ ?>
+
+
+
+
+ mysql_host;
+ $MYSQL_USER = $param->mysql_user;
+ $MYSQL_PASSWORD = $param->mysql_password;
+ $MYSQL_DATABASE = $param->mysql_database;
+ $MYSQL_PREFIX = $param->mysql_tablePrefix;
+
+ $DIR_NUCLEUS = $param->AdminPath;
+ $DIR_MEDIA = $param->MediaPath;
+ $DIR_SKINS = $param->SkinsPath;
+ $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';
+ $DIR_LOCALES = $DIR_NUCLEUS . 'locales/';
+ $DIR_LIBS = $DIR_NUCLEUS . 'libs/';
+
+ /*
+ * 2.open mySQL connection
+ */
+ $MYSQL_CONN = @DB::setConnectionInfo($MYSQL_HANDLER[1], $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD);
+ if ( $MYSQL_CONN == FALSE )
+ {
+ $errors[] = _DBCONNECT_ERROR;
+ return $errors;
+ }
+
+ /*
+ * 3. try to create database if needed
+ */
+ if ( DB::execute("CREATE DATABASE IF NOT EXISTS {$MYSQL_DATABASE}") === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR1 . ': ' . $errinfo[2];
+ }
+
+ /*
+ * 4. try to select database
+ */
+ $MYSQL_CONN = @DB::setConnectionInfo($MYSQL_HANDLER[1], $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE);
+ if ( !$MYSQL_CONN )
+ {
+ $errors[] = _INST_ERROR2;
+ }
+
+ if ( count($errors) > 0 )
+ {
+ return $errors;
+ }
+
+ /*
+ * 5. execute queries
+ */
+ $table_names = array(
+ 'nucleus_actionlog',
+ 'nucleus_ban',
+ 'nucleus_blog',
+ 'nucleus_category',
+ 'nucleus_comment',
+ 'nucleus_config',
+ 'nucleus_item',
+ 'nucleus_karma',
+ 'nucleus_member',
+ 'nucleus_plugin',
+ 'nucleus_skin',
+ 'nucleus_template',
+ 'nucleus_team',
+ 'nucleus_activation',
+ 'nucleus_tickets'
+ );
+
+ $prefixed_table_names = array();
+ foreach ( $table_names as $table_name )
+ {
+ $prefixed_table_names[] = $MYSQL_PREFIX . $table_name;
+ }
+
+ // table exists check
+ $result = DB::getResult('SHOW TABLES');
+ foreach ( $result as $row )
+ {
+ if ( in_array($row[0], $prefixed_table_names) )
+ {
+ $errors[] = _INST_ERROR3;
+ break;
+ }
+ }
+ if ( count($errors) > 0 )
+ {
+ return $errors;
+ }
+
+ $filename = 'install.sql';
+ $fd = fopen($filename, 'r');
+ $queries = fread($fd, filesize($filename));
+ fclose($fd);
+
+ $queries = preg_split('#(;\n|;\r)#', $queries);
+
+ foreach ( $queries as $query )
+ {
+ if ( preg_match('/\w+/', $query) )
+ {
+ if ( $MYSQL_PREFIX )
+ {
+ $query = str_replace($table_names, $prefixed_table_names, $query);
+ }
+
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR4 . ' (' . $query . ' ): ' . $errinfo[2];
+ }
+ }
+ }
+
+ /*
+ * 6. put needed records
+ */
+ /* push first post */
+ $query = "INSERT INTO %s VALUES (1, %s, %s, %s, 1, 1, %s, 0, 0, 0, 1, 0, 1)";
+ $query = sprintf($query,
+ tableName('nucleus_item'),
+ DB::quoteValue(_1ST_POST_TITLE),
+ DB::quoteValue(_1ST_POST),
+ DB::quoteValue(_1ST_POST2),
+ DB::formatDateTime()
+ );
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR4 . ' (' . $query . ' ): ' . $errinfo[2];
+ }
+
+ /* push configurations */
+ array_merge($errors, updateConfig('IndexURL', $param->IndexURL));
+ array_merge($errors, updateConfig('AdminURL', $param->AdminURL));
+ array_merge($errors, updateConfig('MediaURL', $param->MediaURL));
+ array_merge($errors, updateConfig('SkinsURL', $param->SkinsURL));
+ array_merge($errors, updateConfig('PluginURL', $param->PluginURL));
+ array_merge($errors, updateConfig('ActionURL', $param->ActionURL));
+ array_merge($errors, updateConfig('AdminEmail', $param->user_email));
+ array_merge($errors, updateConfig('SiteName', $param->blog_name));
+ array_merge($errors, updateConfig('Locale', i18n::get_current_locale()));
+
+ /* push super admin */
+ $query = "UPDATE %s SET mname = %s, mrealname = %s, mpassword = %s, memail = %s, murl = %s, madmin = 1, mcanlogin = 1 WHERE mnumber = 1";
+ $query = sprintf($query,
+ tableName('nucleus_member'),
+ DB::quoteValue($param->user_name),
+ DB::quoteValue($param->user_realname),
+ DB::quoteValue(md5($param->user_password)),
+ DB::quoteValue($param->user_email),
+ DB::quoteValue($param->IndexURL)
+ );
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR5 . ': ' . $errinfo[2];
+ }
+
+ /* push new weblog */
+ $query = "UPDATE %s SET bname = %s, bshortname = %s, burl = %s WHERE bnumber = 1";
+ $query = sprintf($query,
+ tableName('nucleus_blog'),
+ DB::quoteValue($param->blog_name),
+ DB::quoteValue($param->blog_shortname),
+ DB::quoteValue($param->IndexURL)
+ );
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR6 . ': ' . $errinfo[2];
+ }
+
+ /* push default category */
+ $query = "UPDATE %s SET cname = %s, cdesc = %s WHERE catid = 1";
+ $query = sprintf($query,
+ tableName('nucleus_category'),
+ DB::quoteValue(_GENERALCAT_NAME),
+ DB::quoteValue(_GENERALCAT_DESC)
+ );
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR6 . ': ' . $errinfo[2];
+ }
+
+ /*
+ * 7. install default plugins and skins
+ */
+ global $aConfPlugsToInstall, $aConfSkinsToImport;
+ $aSkinErrors = array();
+ $aPlugErrors = array();
+
+ if ( (count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) )
+ {
+ include_once($DIR_LIBS . 'globalfunctions.php');
+ global $manager;
+ if ( !isset($manager) )
+ {
+ $manager = new Manager();
+ }
+
+ include_once($DIR_LIBS . 'skinie.php');
+
+ $aSkinErrors = installCustomSkins();
+ if ( count($aSkinErrors) > 0 )
+ {
+ array_merge($errors, $aSkinErrors);
+ }
+
+ $query = "SELECT sdnumber FROM %s WHERE sdname='admin/default'";
+ $query = sprintf($query, tableName('nucleus_skin_desc'));
+ $res = intval(DB::getValue($query));
+ array_merge($errors, updateConfig('AdminSkin', $res));
+
+ $query = "SELECT sdnumber FROM %s WHERE sdname='admin/bookmarklet'";
+ $query = sprintf($query, tableName('nucleus_skin_desc'));
+ $res = intval(DB::getValue($query));
+ array_merge($errors, updateConfig('BookmarkletSkin', $res));
+
+ $query = "SELECT sdnumber FROM %s WHERE sdname='default'";
+ $query = sprintf($query, tableName('nucleus_skin_desc'));
+ $defSkinID = intval(DB::getValue($query));
+
+ $query = "UPDATE %s SET bdefskin=%d WHERE bnumber=1";
+ $query = sprintf($query, tableName('nucleus_blog'), $defSkinID);
+ DB::execute($query);
+ $query = "UPDATE %s SET value=%d WHERE name='BaseSkin'";
+ $query = sprintf($query, tableName('nucleus_config'), $defSkinID);
+ DB::execute($query);
+
+ $aPlugErrors = installCustomPlugs();
+ if ( count($aPlugErrors) > 0 )
+ {
+ array_merge($errors, $aPlugErrors);
+ }
+ }
+
+ /*
+ * 8. Write config file ourselves (if possible)
+ */
+ $config_data = '<' . '?php' . "\n";
+ $config_data .= "// mySQL connection information\n";
+ $config_data .= "\$MYSQL_HOST = '" . $MYSQL_HOST . "';\n";
+ $config_data .= "\$MYSQL_USER = '" . $MYSQL_USER . "';\n";
+ $config_data .= "\$MYSQL_PASSWORD = '" . $MYSQL_PASSWORD . "';\n";
+ $config_data .= "\$MYSQL_DATABASE = '" . $MYSQL_DATABASE . "';\n";
+ $config_data .= "\$MYSQL_PREFIX = '" . $MYSQL_PREFIX . "';\n";
+ $config_data .= "// new in 3.50. first element is db handler, the second is the db driver used by the handler\n";
+ $config_data .= "// default is \$MYSQL_HANDLER = array('mysql','mysql');\n";
+ $config_data .= "//\$MYSQL_HANDLER = array('mysql','mysql');\n";
+ $config_data .= "//\$MYSQL_HANDLER = array('pdo','mysql');\n";
+ $config_data .= "\$MYSQL_HANDLER = array('" . $MYSQL_HANDLER[0] . "','" . $MYSQL_HANDLER[1] . "');\n";
+ $config_data .= "\n";
+ $config_data .= "// main nucleus directory\n";
+ $config_data .= "\$DIR_NUCLEUS = '" . $DIR_NUCLEUS . "';\n";
+ $config_data .= "\n";
+ $config_data .= "// path to media dir\n";
+ $config_data .= "\$DIR_MEDIA = '" . $DIR_MEDIA . "';\n";
+ $config_data .= "\n";
+ $config_data .= "// extra skin files for imported skins\n";
+ $config_data .= "\$DIR_SKINS = '" . $DIR_SKINS . "';\n";
+ $config_data .= "\n";
+ $config_data .= "// these dirs are normally sub dirs of the nucleus dir, but \n";
+ $config_data .= "// you can redefine them if you wish\n";
+ $config_data .= "\$DIR_PLUGINS = \$DIR_NUCLEUS . 'plugins/';\n";
+ $config_data .= "\$DIR_LOCALES = \$DIR_NUCLEUS . 'locales/';\n";
+ $config_data .= "\$DIR_LIBS = \$DIR_NUCLEUS . 'libs/';\n";
+ $config_data .= "\n";
+ $config_data .= "// include libs\n";
+ $config_data .= "include(\$DIR_LIBS.'globalfunctions.php');\n";
+ $config_data .= "?" . ">";
+
+ $result = false;
+ if ( @!file_exists('../config.php') || is_writable('../config.php') )
+ {
+ if ( $fp = @fopen('../config.php', 'w') )
+ {
+ $result = @fwrite($fp, $config_data, i18n::strlen($config_data));
+ fclose($fp);
+ }
+ }
+
+ if ( $result )
+ {
+ // try to change the read-only permission.
+ if ( strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' )
+ {
+ @chmod('../config.php', 0444);
+ }
+ }
+ else
+ {
+ $_SESSION['config_data'] = $config_data;
+ }
+
+ return $errors;
+ }
+
+ /**
+ * Confirm that you can write to the configuration file
+ * @return string error message
+ */
+ function canConfigFileWritable()
+ {
+ if ( @file_exists('../config.php') && @!is_writable('../config.php') )
+ {
+ // try to change the read-write permission.
+ if ( strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' )
+ {
+ @chmod('../config.php', 0666);
+ }
+
+ if ( @!is_writable('../config.php') )
+ {
+ return _INST_ERROR8;
+ }
+ }
+ return '';
+ }
+
+ /**
+ * To obtain the version of MySQL
+ * @return string
+ */
+ function getMySqlVersion()
+ {
+ global $MYSQL_HANDLER, $minimum_mysql_version, $errors;
+ // Turn on output buffer
+ // Needed to repress the output of the sql function that are
+ // not part of php (in this case the @ operator doesn't work)
+ ob_start();
+
+ // note: this piece of code is taken from phpMyAdmin
+ $conn = @DB::setConnectionInfo($MYSQL_HANDLER[1], 'localhost', '', '');
+
+ if ( $conn )
+ {
+ $row = DB::getAttribute(PDO::ATTR_SERVER_VERSION);
+ $match = preg_split('#\.#', $row);
+ }
+ else
+ {
+ $row = @DB::getRow('SHOW VARIABLES LIKE \'version\'');
+
+ if ( $row )
+ {
+ $match = preg_split('#\.#', $row[1]);
+ }
+ else
+ {
+ $output = (function_exists('shell_exec')) ? @shell_exec('mysql -V') : '0.0.0';
+ preg_match('@[0-9]+\.[0-9]+\.[0-9]+@', $output, $version);
+ $match = preg_split('#\.#', $version[0]);
+
+ if ( $match[0] == '' )
+ {
+ $match = array('0', '0', '0');
+ }
+ }
+ }
+
+ @DB::disConnect();
+
+ //End and clean output buffer
+ ob_end_clean();
+
+ return implode($match, '.');
+ }
+
+ /**
+ * Add a table prefix if it is used
+ *
+ * @param string $input table name with prefix
+ * @return string
+ */
+ function tableName($input)
+ {
+ global $MYSQL_PREFIX;
+ if ( $MYSQL_PREFIX )
+ {
+ return $MYSQL_PREFIX . $input;
+ }
+ else
+ {
+ return $input;
+ }
+ }
+
+ /**
+ * Install custom plugins
+ */
+ function installCustomPlugs()
+ {
+ global $aConfPlugsToInstall, $DIR_LIBS, $manager;
+
+ $aErrors = array();
+ if ( count($aConfPlugsToInstall) == 0 )
+ {
+ return $aErrors;
+ }
+
+ $query = sprintf('SELECT * FROM %s', tableName('nucleus_plugin'));
+ $res = DB::getResult($query);
+ $numCurrent = $res->rowCount();
+
+ foreach ( $aConfPlugsToInstall as $plugName )
+ {
+ $query = sprintf('INSERT INTO %s (porder, pfile) VALUES (%d, %s)',
+ tableName('nucleus_plugin'),
+ (++$numCurrent),
+ DB::quoteValue($plugName));
+ DB::execute($query);
+
+ $manager->clearCachedInfo('installedPlugins');
+ $plugin =& $manager->getPlugin($plugName);
+ $plugin->setID($numCurrent);
+
+ if ( !$plugin )
+ {
+ $query = sprintf('DELETE FROM %s WHERE pfile = %s',
+ tableName('nucleus_plugin'),
+ DB::quoteValue($plugName));
+ DB::execute($query);
+ $numCurrent--;
+ array_push($aErrors, sprintf(_INST_ERROR9, $plugName));
+ continue;
+ }
+ $plugin->install();
+ }
+
+ $query = sprintf('DELETE FROM %s', tableName('nucleus_plugin_event'));
+ DB::execute($query);
+ $query = sprintf('SELECT pid, pfile FROM %s', tableName('nucleus_plugin'));
+ $res = DB::getResult($query);
+
+ foreach ( $res as $row )
+ {
+ $plug =& $manager->getPlugin($row['pfile']);
+
+ if ( $plug )
+ {
+ $eventList = $plug->getEventList();
+ foreach ( $eventList as $eventName )
+ {
+ $query = sprintf('INSERT INTO %s (pid, event) VALUES (%d, %s)',
+ tableName('nucleus_plugin_event'),
+ intval($row['pid']),
+ DB::quoteValue($eventName));
+ DB::execute($query);
+ }
+ }
+ }
+ return $aErrors;
+ }
+
+ /**
+ * Install custom skins
+ * Prepares the installation of custom skins
+ */
+ function installCustomSkins()
+ {
+ global $aConfSkinsToImport, $DIR_LIBS, $DIR_SKINS;
+
+ $aErrors = array();
+ if ( count($aConfSkinsToImport) == 0 )
+ {
+ return $aErrors;
+ }
+
+ $importer = new SkinImport();
+
+ foreach ( $aConfSkinsToImport as $skinName )
+ {
+ $importer->reset();
+ $skinFile = $DIR_SKINS . $skinName . '/skinbackup.xml';
+
+ if ( !@file_exists($skinFile) )
+ {
+ array_push($aErrors, sprintf(_INST_ERROR10, $skinFile));
+ continue;
+ }
+
+ $error = $importer->readFile($skinFile);
+
+ if ( $error )
+ {
+ array_push($aErrors, sprintf(_INST_ERROR11, $skinName) . ' : ' . $error);
+ continue;
+ }
+
+ $error = $importer->writeToDatabase(1);
+
+ if ( $error )
+ {
+ array_push($aErrors, sprintf(_INST_ERROR12, $skinName) . ' : ' . $error);
+ continue;
+ }
+ }
+ return $aErrors;
+ }
+
+ /**
+ * Check if some important files of the Nucleus CMS installation are available
+ * Give an error if one or more files are not accessible
+ */
+ function do_check_files()
+ {
+ $missingfiles = array();
+ $files = array(
+ './install.sql',
+ '../index.php',
+ '../action.php',
+ '../nucleus/index.php',
+ '../nucleus/libs/ACTION.php',
+ '../nucleus/libs/ACTIONLOG.php',
+ '../nucleus/libs/ACTIONS.php',
+ '../nucleus/libs/ADMIN.php',
+ '../nucleus/libs/BaseActions.php',
+ '../nucleus/libs/BLOG.php',
+ '../nucleus/libs/BODYACTIONS.php',
+ '../nucleus/libs/COMMENT.php',
+ '../nucleus/libs/COMMENTACTIONS.php',
+ '../nucleus/libs/COMMENTS.php',
+ '../nucleus/libs/ENTITY.php',
+ '../nucleus/libs/globalfunctions.php',
+ '../nucleus/libs/i18n.php',
+ '../nucleus/libs/ITEM.php',
+ '../nucleus/libs/ITEMACTIONS.php',
+ '../nucleus/libs/LINK.php',
+ '../nucleus/libs/MANAGER.php',
+ '../nucleus/libs/MEDIA.php',
+ '../nucleus/libs/MEMBER.php',
+ '../nucleus/libs/NOTIFICATION.php',
+ '../nucleus/libs/PARSER.php',
+ '../nucleus/libs/PLUGIN.php',
+ '../nucleus/libs/PLUGINADMIN.php',
+ '../nucleus/libs/SEARCH.php',
+ '../nucleus/libs/showlist.php',
+ '../nucleus/libs/SKIN.php',
+ '../nucleus/libs/TEMPLATE.php',
+ '../nucleus/libs/vars4.1.0.php',
+ '../nucleus/libs/xmlrpc.inc.php',
+ '../nucleus/libs/xmlrpcs.inc.php',
+ '../nucleus/libs/sql/DB.php',
+ '../nucleus/libs/sql/MYSQLPDO.php'
+ );
+
+ $count = count($files);
+ for ( $i = 0; $i < $count; $i++ )
+ {
+ if ( !is_readable($files[$i]) )
+ {
+ array_push($missingfiles, 'File ' . $files[$i] . ' is missing or not readable. ');
+ }
+ }
+
+ if ( count($missingfiles) > 0 )
+ {
+ exit(implode("\n", $missingfiles));
+ }
+ }
+
+ /**
+ * Updates the configuration in the database
+ *
+ * @param string $name name of the config var
+ * @param string $value new value of the config var
+ * @return array
+ */
+ function updateConfig($name, $value)
+ {
+ $errors = array();
+
+ $query = "UPDATE %s SET value = %s WHERE name = %s";
+ $query = sprintf($query, tableName('nucleus_config'), DB::quoteValue(trim($value)), DB::quoteValue($name));
+
+ if ( DB::execute($query) === FALSE )
+ {
+ $errinfo = DB::getError();
+ $errors[] = _INST_ERROR4 . ': ' . $errinfo[2];
+ }
+ return $errors;
+ }
+
+ class ParamManager
+ {
+ /* process parameter */
+ public $state;
+ public $locale;
+
+ /* mysql connection parameters */
+ public $mysql_host;
+ public $mysql_user;
+ public $mysql_password;
+ public $mysql_database;
+ public $mysql_tablePrefix;
+
+ /* weblog configuration parameters */
+ public $blog_name;
+ public $blog_shortname;
+
+ /* member configuration parameters */
+ public $user_name;
+ public $user_realname;
+ public $user_password;
+ private $user_password2;
+ public $user_email;
+
+ /* URI parameters */
+ private $root_url;
+ public $IndexURL;
+ public $AdminURL;
+ public $MediaURL;
+ public $SkinsURL;
+ public $PluginURL;
+ public $ActionURL;
+
+ /* path parameters */
+ private $root_path;
+ public $AdminPath;
+ public $MediaPath;
+ public $SkinsPath;
+
+ /**
+ * constructor
+ */
+ public function __construct()
+ {
+ $this->init();
+ }
+
+ public function init()
+ {
+ // set default values
+ $this->state = 'locale';
+ $this->install_mode = 'simple';
+ $this->locale = '';
+ $this->mysql_host = @ini_get('mysql.default_host');
+ $this->blog_name = 'My Nucleus CMS';
+ $this->blog_shortname = 'mynucleuscms';
+
+ /* root path */
+ $directory_separator = preg_quote(DIRECTORY_SEPARATOR, '|');
+ $this->root_path = implode('/', preg_split("|$directory_separator|", realpath(dirname(__FILE__) . '/..')));
+ if ( substr($this->root_path, -1, 1) !== '/' )
+ {
+ $this->root_path .= '/';
+ }
+ $base_path_pcre = preg_quote($this->root_path, '|');
+
+ /* current directry name */
+ $directory_name = preg_replace("#{$base_path_pcre}#", '', implode('/', preg_split("#{$directory_separator}#", realpath(dirname(__FILE__)))));
+ $directory_name_pcre = preg_quote($directory_name, '|');
+
+ /* root uri */
+ $root_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
+ $this->root_url = preg_replace("|$directory_name_pcre(.*)$|", '', $root_url);
+
+ $this->AdminPath = $this->root_path . 'nucleus/';
+ $this->MediaPath = $this->root_path . 'media/';
+ $this->SkinsPath = $this->root_path . 'skins/';
+
+ $this->IndexURL = $this->root_url;
+ $this->AdminURL = $this->root_url . 'nucleus/';
+ $this->MediaURL = $this->root_url . 'media/';
+ $this->SkinsURL = $this->root_url . 'skins/';
+ $this->PluginURL = $this->root_url . 'nucleus/plugins/';
+ $this->ActionURL = $this->root_url . 'action.php';
+ }
+
+ private function read_parameter($parameter)
+ {
+ foreach ( $parameter as $element )
+ {
+ if ( array_key_exists($element, $_POST) )
+ {
+ $this->$element = $_POST[$element];
+ }
+ }
+ }
+
+ public function set_state($state)
+ {
+ $states = array('locale', 'mysql', 'weblog', 'detail', 'install');
+ if ( in_array($state, $states) )
+ {
+ $this->state = $state;
+ }
+ }
+
+ public function set_locale()
+ {
+ $this->read_parameter(array('locale'));
+
+ if ( !$this->locale )
+ {
+ /**
+ * default locale select simple implementation
+ *
+ * NOTE:
+ * RFC2616: Hypertext Transfer Protocol -- HTTP/1.1
+ * http://www.ietf.org/rfc/rfc2616.txt
+ *
+ * 14.4 Accept-Language
+ *
+ * The Accept-Language request-header field is similar to Accept, but
+ * restricts the set of natural languages that are preferred as a
+ * response to the request. Language tags are defined in section 3.10.
+ *
+ * Accept-Language = "Accept-Language" ":"
+ * 1#( language-range [ ";" "q" "=" qvalue ] )
+ * language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
+ *
+ * Each language-range MAY be given an associated quality value which
+ * represents an estimate of the user's preference for the languages
+ * specified by that range. The quality value defaults to "q=1". For
+ * example,
+ *
+ * Accept-Language: da, en-gb;q=0.8, en;q=0.7
+ *
+ * would mean: "I prefer Danish, but will accept British English and
+ * other types of English." A language-range matches a language-tag if
+ * it exactly equals the tag, or if it exactly equals a prefix of the
+ * tag such that the first tag character following the prefix is "-".
+ * The special range "*", if present in the Accept-Language field,
+ * matches every tag not matched by any other range present in the
+ * Accept-Language field.
+ *
+ * TODO: this is appropriate implement or not
+ */
+ $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+
+ /* retrieve language token of language tag from first token */
+ $language = '';
+ if ( is_array($languages) && count($languages) > 0 )
+ {
+ $language = preg_replace('#^([\w]+).*$#', '$1', $languages[0]);
+ }
+
+ $locales = i18n::get_available_locale_list();
+ foreach ( $locales as $locale )
+ {
+ if ( i18n::strpos($locale, $language) === 0 )
+ {
+ $this->locale = $locale;
+ break;
+ }
+ }
+ }
+
+ /* include installer translation messages */
+ $translation_file = "./locales/{$this->locale}." . i18n::get_current_charset() . '.php';
+ if ( !file_exists($translation_file) )
+ {
+ $translation_file = './locales/en_Latn_US.UTF-8.php';
+ }
+ include($translation_file);
+
+ /* include global translation messages */
+ $translation_file = "../nucleus/locales/{$this->locale}." . i18n::get_current_charset() . '.php';
+ if ( !file_exists($translation_file) )
+ {
+ $translation_file = './locales/en_Latn_US.UTF-8.php';
+ }
+ include($translation_file);
+
+ i18n::set_current_locale($this->locale);
+
+ return;
+ }
+
+ public function check_mysql_parameters()
+ {
+ global $MYSQL_HANDLER;
+
+ $parameters = array('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database', 'mysql_tablePrefix');
+ $this->read_parameter($parameters);
+
+ $errors = array();
+ if ( $this->mysql_host == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD1);
+ }
+
+ if ( $this->mysql_user == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD2);
+ }
+
+ if ( $this->mysql_user != ''
+ && !preg_match('/^[a-z0-9_\-]+$/i', $this->mysql_user) )
+ {
+ $errors[] = sprintf(_VALID_ERROR2, _DB_FIELD2);
+ }
+
+ if ( $this->mysql_database == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD4);
+ }
+
+ if ( $this->mysql_database != ''
+ && !preg_match('/^[a-z0-9_\-]+$/i', $this->mysql_database) )
+ {
+ $errors[] = sprintf(_VALID_ERROR2, _DB_FIELD4);
+ }
+
+ if ( $this->mysql_tablePrefix != ''
+ && !preg_match('/^[a-z0-9_]+$/i', $this->mysql_tablePrefix) )
+ {
+ $errors[] = sprintf(_VALID_ERROR3, _DB_FIELD5);
+ }
+
+ if ( count($errors) == 0 )
+ {
+ $mysql_conn = @DB::setConnectionInfo($MYSQL_HANDLER[1], $this->mysql_host, $this->mysql_user, $this->mysql_password);
+ if ( $mysql_conn == false )
+ {
+ $errors[] = _DBCONNECT_ERROR;
+ }
+ else
+ {
+ @DB::disConnect();
+ }
+ }
+
+ return $errors;
+ }
+
+ public function check_user_parameters()
+ {
+ $parameters = array('user_name', 'user_realname', 'user_password', 'user_password2', 'user_email');
+ $this->read_parameter($parameters);
+
+ $errors = array();
+ if ( $this->user_realname == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD1);
+ }
+
+ if ( $this->user_name == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD2);
+ }
+ elseif ( !preg_match("/^[a-z0-9]+([ a-z0-9]*[a-z0-9]+)?$/i", $this->user_name) )
+ {
+ $errors[] = _VALID_ERROR5;
+ }
+
+ if ( $this->user_password == '' || $this->user_password2 == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD3);
+ $this->user_password = '';
+ }
+ elseif ( $this->user_password != $this->user_password2 )
+ {
+ $errors[] = _VALID_ERROR6;
+ $this->user_password = '';
+ }
+
+ if ( !preg_match("/^[a-z0-9\._+\-]+@[a-z0-9\._\-]+\.[a-z]{2,6}$/i", $this->user_email) )
+ {
+ $errors[] = _VALID_ERROR7;
+ }
+
+ return $errors;
+ }
+
+ public function check_weblog_parameters()
+ {
+ $parameters = array('blog_name', 'blog_shortname');
+ $this->read_parameter($parameters);
+
+ $errors = array();
+ if ( $this->blog_name == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _BLOG_FIELD1);
+ }
+
+ if ( $this->blog_shortname == '' )
+ {
+ $errors[] = sprintf(_VALID_ERROR1, _BLOG_FIELD2);
+ }
+
+ if ( !preg_match("/^[a-z0-9]+$/i", $this->blog_shortname) )
+ {
+ $errors[] = _VALID_ERROR4;
+ }
+
+ return $errors;
+ }
+
+ public function check_uri_parameters()
+ {
+ $parameters = array('IndexURL', 'AdminURL', 'MediaURL', 'SkinsURL', 'PluginURL', 'ActionURL');
+ $this->read_parameter($parameters);
+
+ $errors = array();
+ if ( substr($this->IndexURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD1);
+ }
+
+ if ( substr($this->AdminURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD2);
+ }
+
+ if ( substr($this->MediaURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD4);
+ }
+
+ if ( substr($this->SkinsURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD6);
+ }
+
+ if ( substr($this->PluginURL, -1, 1) !== '/' )
+ {
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD8);
+ }
+
+ if ( strrchr($this->ActionURL, '/') != '/action.php' )
+ {
+ $errors[] = sprintf(_VALID_ERROR9, _PATH_FIELD9);
+ }
+
+ return $errors;
+ }
+
+ public function check_path_parameters()
+ {
+ $parameters = array('AdminPath', 'MediaPath', 'SkinsPath');
+ $this->read_parameter($parameters);
+
+ $separators = array('/', DIRECTORY_SEPARATOR);
+ $errors = array();
+ if ( !in_array(substr($this->AdminPath, -1, 1), $separators) )
+ {
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD3);
+ }
+ elseif ( !file_exists($this->AdminPath) )
+ {
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD3);
+ }
+
+ if ( !in_array(substr($this->MediaPath, -1, 1), $separators) )
+ {
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD5);
+ }
+ elseif ( !file_exists($this->MediaPath) )
+ {
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD5);
+ }
+
+ if ( !in_array(substr($this->SkinsPath, -1, 1), $separators) )
+ {
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD7);
+ }
+ elseif ( !file_exists($this->SkinsPath) )
+ {
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD7);
+ }
+
+ return $errors;
+ }
+
+ /**
+ * check all parameters
+ * @return bool
+ */
+ public function check_all_parameters()
+ {
+ $this->set_locale();
+
+ $isValid = true;
+ $isValid &= (count($this->check_mysql_parameters()) == 0);
+ $isValid &= (count($this->check_user_parameters()) == 0);
+ $isValid &= (count($this->check_weblog_parameters()) == 0);
+ $isValid &= (count($this->check_uri_parameters()) == 0);
+ $isValid &= (count($this->check_path_parameters()) == 0);
+
+ return $isValid;
+ }
+ }
++>>>>>>> skinnable-master
diff --combined nucleus/bookmarklet.php
index 6278c97,61af96c..836b920
--- a/nucleus/bookmarklet.php
+++ b/nucleus/bookmarklet.php
@@@ -25,11 -25,25 +25,32 @@@ $CONF['UsingAdminArea'] = 1
// include all classes and config data
include('../config.php');
++<<<<<<< HEAD
++=======
+ // get skin object
+ $skinid = $member->bookmarklet;
+ if ( !Skin::existsID($skinid) )
+ {
+ $skinid = $CONF['BookmarkletSkin'];
+ if ( !Skin::existsID($skinid) )
+ {
+ sendContentType('text/html');
+ echo _ERROR_SKIN;
+ exit;
+ }
+ }
+ $skin =& $manager->getSkin($skinid, 'AdminActions', 'AdminSkin');
+
++>>>>>>> skinnable-master
// check logged-in or pass through
$action = requestVar('action');
if ( !$member->isLoggedIn() )
{
++<<<<<<< HEAD
+ bm_loginAndPassThrough($action);
++=======
+ bm_loginAndPassThrough($skin, $action);
++>>>>>>> skinnable-master
exit;
}
else if ( $action == 'login')
@@@ -49,16 -63,13 +70,19 @@@ else if ( $action == ''
$action = 'add';
}
++<<<<<<< HEAD
+// send HTTP 1.1 message header for Content-Type
+sendContentType('text/html', 'bookmarklet-' . $action);
+
++=======
++>>>>>>> skinnable-master
// check ticket
$aActionsNotToCheck = array('login', 'add', 'edit');
if ( !in_array($action, $aActionsNotToCheck) )
{
if ( !$manager->checkTicket() )
{
- bm_doError(_ERROR_BADTICKET);
+ bm_doError($skin, _ERROR_BADTICKET);
}
}
@@@ -67,32 -78,32 +91,32 @@@ switch ( $action
{
// adds the item for real
case 'additem':
- bm_doAddItem();
+ bm_doAddItem($skin);
break;
// shows the edit item form
case 'edit':
- bm_doEditForm();
+ bm_doEditForm($skin);
break;
// edits the item for real
case 'edititem':
- bm_doEditItem();
+ bm_doEditItem($skin);
break;
// on login, 'action' gets changed to 'nextaction'
case 'login':
- bm_doError('Something went wrong');
+ bm_doError($skin, 'Something went wrong');
break;
// shows the fill in form
case 'add':
default:
- bm_doShowForm();
+ bm_doShowForm($skin);
break;
}
- function bm_doAddItem()
+ function bm_doAddItem($skin)
{
global $member, $manager, $CONF;
@@@ -101,7 -112,7 +125,7 @@@
if ( $result['status'] == 'error' )
{
- bm_doError($result['message']);
+ bm_doError($skin, $result['message']);
}
$blogid = getBlogIDFromItemID($result['itemid']);
@@@ -118,12 -129,12 +142,16 @@@
$extrahead = '';
}
++<<<<<<< HEAD
+ bm_message(_ITEM_ADDED, _ITEM_ADDED, $message,$extrahead);
++=======
+ bm_message($skin, _ITEM_ADDED, $message,$extrahead);
++>>>>>>> skinnable-master
return;
}
- function bm_doEditItem()
+ function bm_doEditItem($skin)
{
global $member, $manager, $CONF;
@@@ -133,7 -144,7 +161,7 @@@
// only allow if user is allowed to alter item
if ( !$member->canUpdateItem($itemid, $catid) )
{
- bm_doError(_ERROR_DISALLOWED);
+ bm_doError($skin, _ERROR_DISALLOWED);
}
$body = postVar('body');
@@@ -163,7 -174,7 +191,7 @@@
// show error when sth goes wrong
if ( !$catid )
{
- bm_doError('Could not create new category');
+ bm_doError($skin, 'Could not create new category');
}
}
@@@ -186,7 -197,7 +214,7 @@@
$timestamp = 0;
break;
default:
- bm_doError('Something went wrong');
+ bm_doError($skin, 'Something went wrong');
}
// update item for real
@@@ -197,58 -208,48 +225,81 @@@
Item::delete($draftid);
}
- // show success message
- if ( $catid != intPostVar('catid') )
+ if ( $result['status'] == 'newcategory' )
{
- bm_message(_ITEM_UPDATED, _ITEM_UPDATED, 'Item was added, and a new category was created. Click here to edit the name and description of the category. ', '');
+ $href = "index.php?action=categoryedit&blogid={$blogid}&catid={$result['catid']}";
+ $onclick = 'if (event && event.preventDefault) event.preventDefault(); window.open(this.href); return false;';
+ $title = _BOOKMARKLET_NEW_WINDOW;
+ $aTag = " ";
+ $message = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . ' ';
}
else
{
- bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _ITEM_UPDATED, '');
+ $message = _ITEM_ADDED;
}
++<<<<<<< HEAD
+ return;
+}
+
+function bm_loginAndPassThrough($action='add')
++=======
+ // show success message
+ bm_message($skin, _ITEM_ADDED, $message, '');
+ return;
+ }
+
+ function bm_loginAndPassThrough($skin, $action='add')
++>>>>>>> skinnable-master
{
+ /*
+ * TODO: ãããåºåããã
$blogid = intRequestVar('blogid');
$itemid = intRequestVar('itemid');
$log_text = requestVar('logtext');
$log_link = requestVar('loglink');
$log_linktitle = requestVar('loglinktitle');
++<<<<<<< HEAD
+ echo "\n";
+ echo "\n";
+ echo "\n";
+ echo "Nucleus CMS Bookmarklet \n";
+
+ bm_style();
+
+ echo "\n";
+ echo "\n";
+ echo '' . _LOGIN_PLEASE . " \n";
+ echo "\n";
+ echo '' . _POPUP_CLOSE . "
\n";
+ echo "\n";
+ echo "\n";
++=======
+ */
+
+ $skin->parse('showlogin');
++>>>>>>> skinnable-master
return;
}
- function bm_doShowForm()
+ function bm_doShowForm($skin)
{
global $manager, $member;
@@@ -259,18 -260,15 +310,24 @@@
if ( !Blog::existsID($blogid) )
{
- bm_doError(_ERROR_NOSUCHBLOG);
+ bm_doError($skin, _ERROR_NOSUCHBLOG);
}
++<<<<<<< HEAD
+ else
+ {
+ $blog =& $manager->getBlog($blogid);
+ }
+
+ if ( !$member->isTeamMember($blogid) )
++=======
+ else if ( !$member->isTeamMember($blogid) )
++>>>>>>> skinnable-master
{
- bm_doError(_ERROR_NOTONTEAM);
+ bm_doError($skin, _ERROR_NOTONTEAM);
}
+ $blog =& $manager->getBlog($blogid);
+
$logje = '';
if ( $log_text )
@@@ -288,23 -286,32 +345,48 @@@
$logje .= '' . Entity::hsc($log_linktitle) . ' ';
}
++<<<<<<< HEAD
+ $variables = array();
+ $variables['body'] = $logje;
+ $variables['title'] = Entity::hsc($log_linktitle);
+
+ $handler = new PageFactory($blog);
+ $handler->setVariables($variables);
+
+ $contents = $handler->getTemplateFor('bookmarklet', 'add');
+ $manager->notify('PreAddItemForm', array('contents' => &$contents, 'blog' => &$blog));
+
+ $parser = new Parser($handler);
+ $parser->parse($contents);
+
++=======
+ $item = array();
+ $item['body'] = $logje;
+ $item['title'] = Entity::hsc($log_linktitle);
+
+ $data = array(
+ 'blog' => &$blog,
+ 'item' => &$item,
+ 'contents' => &$item
+ );
+ $manager->notify('PreAddItemForm', $data);
+
+ if ( $blog->convertBreaks() )
+ {
+ $item['body'] = removeBreaks($item['body']);
+ }
+
+ Admin::$blog = &$blog;
+ Admin::$contents = &$item;
+
+ Admin::$action = 'createitem';
+ $skin->parse('createitem');
+
++>>>>>>> skinnable-master
return;
}
- function bm_doEditForm()
+ function bm_doEditForm($skin)
{
global $member, $manager;
@@@ -312,74 -319,54 +394,105 @@@
if ( !$manager->existsItem($itemid, 0, 0) )
{
- bm_doError(_ERROR_NOSUCHITEM);
+ bm_doError($skin, _ERROR_NOSUCHITEM);
}
-
- if ( !$member->canAlterItem($itemid) )
+ else if ( !$member->canAlterItem($itemid) )
{
- bm_doError(_ERROR_DISALLOWED);
+ bm_doError($skin, _ERROR_DISALLOWED);
}
++<<<<<<< HEAD
+ $variables =& $manager->getItem($itemid, 1, 1);
++=======
++>>>>>>> skinnable-master
$blog =& $manager->getBlog(getBlogIDFromItemID($itemid) );
+ $item =& $manager->getItem($itemid, 1, 1);
++<<<<<<< HEAD
+ $manager->notify('PrepareItemForEdit', array('item' => &$variables) );
++=======
+ $data = array(
+ 'blog' => &$blog,
+ 'item' => &$item
+ );
+ $manager->notify('PrepareItemForEdit', $data);
++>>>>>>> skinnable-master
if ( $blog->convertBreaks() )
{
- $item['body'] = removeBreaks($item['body']);
- $item['more'] = removeBreaks($item['more']);
+ $variables['body'] = removeBreaks($variables['body']);
+ $variables['more'] = removeBreaks($variables['more']);
}
++<<<<<<< HEAD
+ $handler = new PageFactory($blog);
+ $handler->setVariables($variables);
+
+ $contents = $handler->getTemplateFor('bookmarklet', 'edit');
+
+ $parser = new Parser($handler);
+ $parser->parse($contents);
+
+ return;
+}
++=======
+ Admin::$blog = &$blog;
+ Admin::$contents = &$item;
+
+ Admin::$action = 'itemedit';
+ $skin->parse('itemedit');
+
+ return;}
++>>>>>>> skinnable-master
- function bm_doError($msg)
+ function bm_doError($skin, $msg)
{
- bm_message(_ERROR, _ERRORMSG, $msg);
+ bm_message($skin, _ERRORMSG, $msg);
die;
}
- function bm_message($title, $head, $msg, $extrahead = '')
+ function bm_message($skin, $title, $msg, $extrahead = '')
{
++<<<<<<< HEAD
+ echo "\n";
+ echo "\n";
+ echo "\n";
+ echo "{$title} \n";
+
+ bm_style();
+
+ echo $extrahead . "\n";
+ echo "\n";
+ echo "\n";
+ echo "{$head} \n";
+ echo "{$msg}
\n";
+ echo '' . _POPUP_CLOSE . "
\n";
+ echo "\n";
+ echo "\n";
++=======
+ Admin::$extrahead = $extrahead;
+ Admin::$headMess = $msg;
+ $skin->parse('adminerrorpage');
++>>>>>>> skinnable-master
return;
}
- function bm_style()
+ function bm_doContextMenuCode($width=600, $height=500)
{
++<<<<<<< HEAD
+ echo " \n";
+ echo " \n";
+ return;
+}
+
+function bm_doContextMenuCode($width=600, $height=500)
+{
+ global $CONF;
+
++=======
+ global $CONF;
++>>>>>>> skinnable-master
$blogid = (integer) intGetVar('blogid');
echo "\n";
+
+ self::$skin->parse('editmembersettings');
+ return;
+ }
+
+ /**
+ * Admin::action_changemembersettings()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_changemembersettings()
+ {
+ global $member, $CONF, $manager;
+
+ $memberid = intRequestVar('memberid');
+
+ // check if allowed
+ ($member->getID() == $memberid) or $member->isAdmin() or self::disallow();
+
+ $name = trim(strip_tags(postVar('name')));
+ $realname = trim(strip_tags(postVar('realname')));
+ $password = postVar('password');
+ $repeatpassword = postVar('repeatpassword');
+ $email = strip_tags(postVar('email'));
+ $url = strip_tags(postVar('url'));
+ $adminskin = intPostVar('adminskin');
+ $bookmarklet = intPostVar('bookmarklet');
+
+ // begin if: sometimes user didn't prefix the URL with http:// or https://, this cause a malformed URL. Let's fix it.
+ if ( !preg_match('#^https?://#', $url) )
+ {
+ $url = 'http://' . $url;
+ }
+
+ $admin = postVar('admin');
+ $canlogin = postVar('canlogin');
+ $notes = strip_tags(postVar('notes'));
+ $locale = postVar('locale');
+
+ $mem =& $manager->getMember($memberid);
+
+ if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
+ {
+ if ( !isValidDisplayName($name) )
+ {
+ self::error(_ERROR_BADNAME);
+ return;
+ }
+
+ if ( ($name != $mem->getDisplayName()) && Member::exists($name) )
+ {
+ self::error(_ERROR_NICKNAMEINUSE);
+ return;
+ }
+
+ if ( $password != $repeatpassword )
+ {
+ self::error(_ERROR_PASSWORDMISMATCH);
+ return;
+ }
+
+ if ( $password && (i18n::strlen($password) < 6) )
+ {
+ self::error(_ERROR_PASSWORDTOOSHORT);
+ return;
+ }
+
+ if ( $password )
+ {
+ $pwdvalid = true;
+ $pwderror = '';
+
+ $data = array(
+ 'password' => $password,
+ 'errormessage' => &$pwderror,
+ 'valid' => &$pwdvalid
+ );
+ $manager->notify('PrePasswordSet', $data);
+
+ if ( !$pwdvalid )
+ {
+ self::error($pwderror);
+ return;
+ }
+ }
+ }
+
+ if ( !NOTIFICATION::address_validation($email) )
+ {
+ self::error(_ERROR_BADMAILADDRESS);
+ return;
+ }
+ if ( !$realname )
+ {
+ self::error(_ERROR_REALNAMEMISSING);
+ return;
+ }
+ if ( ($locale != '') && (!in_array($locale, i18n::get_available_locale_list())) )
+ {
+ self::error(_ERROR_NOSUCHTRANSLATION);
+ return;
+ }
+
+ // check if there will remain at least one site member with both the logon and admin rights
+ // (check occurs when taking away one of these rights from such a member)
+ if ( (!$admin && $mem->isAdmin() && $mem->canLogin())
+ || (!$canlogin && $mem->isAdmin() && $mem->canLogin())
+ )
+ {
+ $r = DB::getResult('SELECT * FROM '.sql_table('member').' WHERE madmin=1 and mcanlogin=1');
+ if ( $r->rowCount() < 2 )
+ {
+ self::error(_ERROR_ATLEASTONEADMIN);
+ return;
+ }
+ }
+
+ if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
+ {
+ $mem->setDisplayName($name);
+ if ( $password )
+ {
+ $mem->setPassword($password);
+ }
+ }
+
+ $oldEmail = $mem->getEmail();
+
+ $mem->setRealName($realname);
+ $mem->setEmail($email);
+ $mem->setURL($url);
+ $mem->setNotes($notes);
+ $mem->setLocale($locale);
+ $mem->setAdminSkin($adminskin);
+ $mem->setBookmarklet($bookmarklet);
+
+ // only allow super-admins to make changes to the admin status
+ if ( $member->isAdmin() )
+ {
+ $mem->setAdmin($admin);
+ $mem->setCanLogin($canlogin);
+ }
+
+ $autosave = postVar('autosave');
+ $mem->setAutosave($autosave);
+
+ $mem->write();
+
+ // store plugin options
+ $aOptions = requestArray('plugoption');
+ NucleusPlugin::apply_plugin_options($aOptions);
+ $data = array(
+ 'context' => 'member',
+ 'memberid' => $memberid,
+ 'member' => &$mem
+ );
+ $manager->notify('PostPluginOptionsUpdate', $data);
+
+ // if email changed, generate new password
+ if ( $oldEmail != $mem->getEmail() )
+ {
+ $mem->sendActivationLink('addresschange', $oldEmail);
+ // logout member
+ $mem->newCookieKey();
+
+ // only log out if the member being edited is the current member.
+ if ( $member->getID() == $memberid )
+ {
+ $member->logout();
+ }
+ self::action_login(_MSG_ACTIVATION_SENT, 0);
+ return;
+ }
+
+ if ( ($mem->getID() == $member->getID())
+ && ($mem->getDisplayName() != $member->getDisplayName()) )
+ {
+ $mem->newCookieKey();
+ $member->logout();
+ self::action_login(_MSG_LOGINAGAIN, 0);
+ }
+ else
+ {
+ self::action_overview(_MSG_SETTINGSCHANGED);
+ }
+ return;
+ }
+
+ /**
+ * Admin::action_memberadd()
+ *
+ * @param void
+ * @return void
+ *
+ */
+ static private function action_memberadd()
+ {
+ global $member, $manager;
+
+ // check if allowed
+ $member->isAdmin() or self::disallow();
+
+ if ( postVar('password') != postVar('repeatpassword') )
+ {
+ self::error(_ERROR_PASSWORDMISMATCH);
+ return;
+ }
+
+ if ( i18n::strlen(postVar('password')) < 6 )
+ {
+ self::error(_ERROR_PASSWORDTOOSHORT);
+ return;
+ }
+
+ $res = Member::create(
+ postVar('name'),
+ postVar('realname'),
+ postVar('password'),
+ postVar('email'),
+ postVar('url'),
+ postVar('admin'),
+ postVar('canlogin'),
+ postVar('notes')
+ );
+
+ if ( $res != 1 )
+ {
+ self::error($res);
+ return;
+ }
+
+ // fire PostRegister event
+ $newmem = new Member();
+ $newmem->readFromName(postVar('name'));
+ $data = array(
+ 'member' => &$newmem
+ );
+ $manager->notify('PostRegister', $data);
+
+ self::action_usermanagement();
+ return;
+ }
+
+ /**
+ * Admin::action_forgotpassword()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_forgotpassword()
+ {
+ self::$skin->parse('forgotpassword');
+ return;
+ }
+
+ /**
+ * Admin::action_activate()
+ * Account activation
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_activate()
+ {
+ $key = getVar('key');
+ self::showActivationPage($key);
+ return;
+ }
+
+ /**
+ * Admin::showActivationPage()
+ *
+ * @param void
+ * @return void
+ */
+ static private function showActivationPage($key, $message = '')
+ {
+ global $manager;
+
+ // clean up old activation keys
+ Member::cleanupActivationTable();
+
+ // get activation info
+ $info = Member::getActivationInfo($key);
+
+ if ( !$info )
+ {
+ self::error(_ERROR_ACTIVATE);
+ return;
+ }
+
+ $mem =& $manager->getMember($info->vmember);
+
+ if ( !$mem )
+ {
+ self::error(_ERROR_ACTIVATE);
+ return;
+ }
+
+ /* TODO: we should consider to use the other way insterad of this */
+ $_POST['ackey'] = $key;
+ $_POST['bNeedsPasswordChange'] = TRUE;
+
+ self::$headMess = $message;
+ self::$skin->parse('activate');
+ return;
+ }
+
+ /**
+ * Admin::action_activatesetpwd()
+ * Account activation - set password part
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_activatesetpwd()
+ {
+ global $manager;
+ $key = postVar('key');
+
+ // clean up old activation keys
+ Member::cleanupActivationTable();
+
+ // get activation info
+ $info = Member::getActivationInfo($key);
+
+ if ( !$info || ($info->type == 'addresschange') )
+ {
+ return self::showActivationPage($key, _ERROR_ACTIVATE);
+ }
+
+ $mem =& $manager->getMember($info->vmember);
+
+ if ( !$mem )
+ {
+ return self::showActivationPage($key, _ERROR_ACTIVATE);
+ }
+
+ $password = postVar('password');
+ $repeatpassword = postVar('repeatpassword');
+
+ if ( $password != $repeatpassword )
+ {
+ return self::showActivationPage($key, _ERROR_PASSWORDMISMATCH);
+ }
+
+ if ( $password && (i18n::strlen($password) < 6) )
+ {
+ return self::showActivationPage($key, _ERROR_PASSWORDTOOSHORT);
+ }
+
+ if ( $password )
+ {
+ $pwdvalid = true;
+ $pwderror = '';
+
+ $data = array(
+ 'password' => $password,
+ 'errormessage' => &$pwderror,
+ 'valid' => &$pwdvalid
+ );
+ $manager->notify('PrePasswordSet', $data);
+ if ( !$pwdvalid )
+ {
+ return self::showActivationPage($key,$pwderror);
+ }
+ }
+
+ $error = '';
+
+ $data = array(
+ 'type' => 'activation',
+ 'member' => $mem,
+ 'error' => &$error
+ );
+ $manager->notify('ValidateForm', $data);
+ if ( $error != '' )
+ {
+ return self::showActivationPage($key, $error);
+ }
+
+ // set password
+ $mem->setPassword($password);
+ $mem->write();
+
+ // do the activation
+ Member::activate($key);
+
+ self::$skin->parse('activatesetpwd');
+ return;
+ }
+
+ /**
+ * Admin::action_manageteam()
+ * Manage team
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_manageteam()
+ {
+ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+
+ // check if allowed
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ self::$skin->parse('manageteam');
+ return;
+ }
+
+ /**
+ * Admin::action_teamaddmember()
+ * Add member to team
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_teamaddmember()
+ {
+ global $member, $manager;
+
+ $memberid = intPostVar('memberid');
+ $blogid = intPostVar('blogid');
+ $admin = intPostVar('admin');
+
+ // check if allowed
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $blog =& $manager->getBlog($blogid);
+ if ( !$blog->addTeamMember($memberid, $admin) )
+ {
+ self::error(_ERROR_ALREADYONTEAM);
+ return;
+ }
+
+ self::action_manageteam();
+ return;
+ }
+
+ /**
+ * Admin::action_teamdelete()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_teamdelete()
+ {
+ global $member, $manager;
+
+ $memberid = intRequestVar('memberid');
+ $blogid = intRequestVar('blogid');
+
+ // check if allowed
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $teammem =& $manager->getMember($memberid);
+ $blog =& $manager->getBlog($blogid);
+
+ self::$skin->parse('teamdelete');
+ return;
+ }
+
+ /**
+ * Admin::action_teamdeleteconfirm()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_teamdeleteconfirm()
+ {
+ global $member;
+
+ $memberid = intRequestVar('memberid');
+ $blogid = intRequestVar('blogid');
+
+ $error = self::deleteOneTeamMember($blogid, $memberid);
+ if ( $error )
+ {
+ self::error($error);
+ return;
+ }
+ self::action_manageteam();
+ return;
+ }
+
+ /**
+ * Admin::deleteOneTeamMember()
+ *
+ * @param void
+ * @return void
+ */
+ static public function deleteOneTeamMember($blogid, $memberid)
+ {
+ global $member, $manager;
+
+ $blogid = intval($blogid);
+ $memberid = intval($memberid);
+
+ // check if allowed
+ if ( !$member->blogAdminRights($blogid) )
+ {
+ return _ERROR_DISALLOWED;
+ }
+
+ // check if: - there remains at least one blog admin
+ // - (there remains at least one team member)
+ $tmem =& $manager->getMember($memberid);
+
+
+ $data = array(
+ 'member' => &$tmem,
+ 'blogid' => $blogid
+ );
+ $manager->notify('PreDeleteTeamMember', $data);
+
+ if ( $tmem->isBlogAdmin($blogid) )
+ {
+ /* TODO: why we did double check? */
+ // check if there are more blog members left and at least one admin
+ // (check for at least two admins before deletion)
+ $query = "SELECT * FROM %s WHERE tblog=%d and tadmin=1;";
+ $query = sprintf($query, sql_table('team'), (integer) $blogid);
+ $r = DB::getResult($query);
+ if ( $r->rowCount() < 2 )
+ {
+ return _ERROR_ATLEASTONEBLOGADMIN;
+ }
+ }
+
+ $query = "DELETE FROM %s WHERE tblog=%d AND tmember=%d;";
+ $query = sprintf($query, sql_table('team'), (integer) $blogid, (integer) $memberid);
+ DB::execute($query);
+
+ $data = array(
+ 'member' => &$tmem,
+ 'blogid' => $blogid
+ );
+ $manager->notify('PostDeleteTeamMember', $data);
+
+ return '';
+ }
+
+ /**
+ * Admin::action_teamchangeadmin()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_teamchangeadmin()
+ {
+ global $manager, $member;
+
+ $blogid = intRequestVar('blogid');
+ $memberid = intRequestVar('memberid');
+
+ // check if allowed
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $mem =& $manager->getMember($memberid);
+
+ // don't allow when there is only one admin at this moment
+ if ( $mem->isBlogAdmin($blogid) )
+ {
+ $query = "SELECT * FROM %s WHERE tblog=%d AND tadmin=1;";
+ $query = sprintf($query, sql_table('team'), (integer) $blogid);
+ $r = DB::getResult($query);
+ if ( $r->rowCount() == 1 )
+ {
+ self::error(_ERROR_ATLEASTONEBLOGADMIN);
+ return;
+ }
+ }
+
+ if ( $mem->isBlogAdmin($blogid) )
+ {
+ $newval = 0;
+ }
+ else
+ {
+ $newval = 1;
+ }
+
+ $query = "UPDATE %s SET tadmin=%d WHERE tblog=%d and tmember=%d;";
+ $query = sprintf($query, (integer) $blogid, (integer) $newval, (integer) $blogid, (integer) $memberid);
+ DB::execute($query);
+
+ // only show manageteam if member did not change its own admin privileges
+ if ( $member->isBlogAdmin($blogid) )
+ {
+ self::action_manageteam();
+ }
+ else
+ {
+ self::action_overview(_MSG_ADMINCHANGED);
+ }
+ return;
+ }
+
+ /**
+ * Admin::action_blogsettings()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_blogsettings()
+ {
+ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+
+ // check if allowed
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $blog =& $manager->getBlog($blogid);
+
+ self::$extrahead .= "\n";
+
+ self::$skin->parse('blogsettings');
+ return;
+ }
+
+ /**
+ * Admin::action_categorynew()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_categorynew()
+ {
+ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $cname = postVar('cname');
+ $cdesc = postVar('cdesc');
+
+ if ( !isValidCategoryName($cname) )
+ {
+ self::error(_ERROR_BADCATEGORYNAME);
+ return;
+ }
+
+ $query = "SELECT * FROM %s WHERE cname=%s AND cblog=%d;";
+ $query = sprintf($query, sql_table('category'), DB::quoteValue($cname), (integer) $blogid);
+ $res = DB::getResult($query);
+ if ( $res->rowCount() > 0 )
+ {
+ self::error(_ERROR_DUPCATEGORYNAME);
+ return;
+ }
+
+ $blog =& $manager->getBlog($blogid);
+ $newCatID = $blog->createNewCategory($cname, $cdesc);
+
+ self::action_blogsettings();
+ return;
+ }
+
+ /**
+ * Admin::action_categoryedit()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_categoryedit($catid = '', $blogid = '', $desturl = '')
+ {
+ global $member, $manager;
+
+ if ( $blogid == '' )
+ {
+ $blogid = intGetVar('blogid');
+ }
+ else
+ {
+ $blogid = intval($blogid);
+ }
+ if ( $catid == '' )
+ {
+ $catid = intGetVar('catid');
+ }
+ else
+ {
+ $catid = intval($catid);
+ }
+
+ /* TODO: we should consider to use the other way insterad of this */
+ $_REQUEST['blogid'] = $blogid;
+ $_REQUEST['catid'] = $catid;
+ $_REQUEST['desturl'] = $desturl;
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ self::$extrahead .= "\n";
+
+ self::$skin->parse('categoryedit');
+ return;
+ }
+
+ /**
+ * Admin::action_categoryupdate()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_categoryupdate()
+ {
+ global $member, $manager;
+
+ $blogid = intPostVar('blogid');
+ $catid = intPostVar('catid');
+ $cname = postVar('cname');
+ $cdesc = postVar('cdesc');
+ $desturl = postVar('desturl');
+
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ if ( !isValidCategoryName($cname) )
+ {
+ self::error(_ERROR_BADCATEGORYNAME);
+ return;
+ }
+
+ $query = "SELECT * FROM %s WHERE cname=%s AND cblog=%d AND not(catid=%d);";
+ $query = sprintf($query, sql_table('category'), DB::quoteValue($cname), (integer) $blogid, (integer) $catid);
+ $res = DB::getResult($query);
+ if ( $res->rowCount() > 0 )
+ {
+ self::error(_ERROR_DUPCATEGORYNAME);
+ return;
+ }
+
+ $query = "UPDATE %s SET cname=%s, cdesc=%s WHERE catid=%d;";
+ $query = sprintf($query, sql_table('category'), DB::quoteValue($cname), DB::quoteValue($cdesc), (integer) $catid);
+ DB::execute($query);
+
+ // store plugin options
+ $aOptions = requestArray('plugoption');
+ NucleusPlugin::apply_plugin_options($aOptions);
+ $data = array(
+ 'context' => 'category',
+ 'catid' => $catid
+ );
+ $manager->notify('PostPluginOptionsUpdate', $data);
+
+ if ( $desturl )
+ {
+ redirect($desturl);
+ return;
+ }
+
+ self::action_blogsettings();
+
+ return;
+ }
+
+ /**
+ * Admin::action_categorydelete()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_categorydelete()
+ {
+ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+ $catid = intRequestVar('catid');
+
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $blog =& $manager->getBlog($blogid);
+
+ // check if the category is valid
+ if ( !$blog->isValidCategory($catid) )
+ {
+ self::error(_ERROR_NOSUCHCATEGORY);
+ return;
+ }
+
+ // don't allow deletion of default category
+ if ( $blog->getDefaultCategory() == $catid )
+ {
+ self::error(_ERROR_DELETEDEFCATEGORY);
+ return;
+ }
+
+ // check if catid is the only category left for blogid
+ $query = "SELECT catid FROM %s WHERE cblog=%d;";
+ $query = sprintf($query, sql_table('category'), $blogid);
+ $res = DB::getResult($query);
+ if ( $res->rowCount() == 1 )
+ {
+ self::error(_ERROR_DELETELASTCATEGORY);
+ return;
+ }
+
+ self::$skin->parse('categorydelete');
++>>>>>>> skinnable-master
+ return;
+ }
+
+ /**
++<<<<<<< HEAD
++ * Admin::action_browseownitems()
++=======
+ * Admin::action_categorydeleteconfirm()
++>>>>>>> skinnable-master
+ *
+ * @param void
+ * @return void
+ */
- static private function action_categorydeleteconfirm()
++<<<<<<< HEAD
++ public function action_browseownitems()
+ {
- global $member, $manager;
++ global $member, $manager, $CONF;
++
++ $this->pagehead();
++
++ echo '(' . _BACKHOME . ")
\n";
++ echo '' . _ITEMLIST_YOUR . " \n";
++
++ // start index
++ if ( postVar('start') )
++ {
++ $start = intPostVar('start');
++ }
++ else
++ {
++ $start = 0;
++ }
++
++ // amount of items to show
++ if ( postVar('amount') )
++ {
++ $amount = intPostVar('amount');
++ }
++ else
++ {
++ $amount = (integer) $CONF['DefaultListSize'];
++ if ( $amount < 1 )
++ {
++ $amount = 10;
++ }
++ }
++
++ $search = postVar('search'); // search through items
++
++ $query = 'SELECT bshortname, cname, mname, ititle, ibody, idraft, inumber, itime'
++ . ' FROM '.sql_table('item').', '.sql_table('blog') . ', '.sql_table('member') . ', '.sql_table('category')
++ . ' WHERE iauthor='. $member->getID() .' and iauthor=mnumber and iblog=bnumber and icat=catid';
++
++ if ( $search )
++ {
++ $query .= " and ((ititle LIKE " . DB::quoteValue('%'.$search.'%') . ") or (ibody LIKE " . DB::quoteValue('%'.$search.'%') . ") or (imore LIKE " . DB::quoteValue('%'.$search.'%') . "))";
++ }
++
++ $query .= ' ORDER BY itime DESC'
++ . " LIMIT $start, $amount";
++
++ $template['content'] = 'itemlist';
++ $template['now'] = time();
++
++ $manager->loadClass("ENCAPSULATE");
++ $navList = new NavList('browseownitems', $start, $amount, 0, 1000, /*$blogid*/ 0, $search, 0);
++ $navList->showBatchList('item',$query,'table',$template);
++
++ $this->pagefoot();
++=======
++ static private function action_categorydeleteconfirm()
++ {
++ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+ $catid = intRequestVar('catid');
+
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $error = self::deleteOneCategory($catid);
+ if ( $error )
+ {
+ self::error($error);
+ return;
+ }
+
+ self::action_blogsettings();
+ return;
+ }
+
+ /**
+ * Admin::deleteOneCategory()
+ * Delete a category by its id
+ *
+ * @param String $catid category id for deleting
+ * @return Void
+ */
+ static public function deleteOneCategory($catid)
+ {
+ global $manager, $member;
+
+ $catid = intval($catid);
+ $blogid = getBlogIDFromCatID($catid);
+
+ if ( !$member->blogAdminRights($blogid) )
+ {
+ return ERROR_DISALLOWED;
+ }
+
+ // get blog
+ $blog =& $manager->getBlog($blogid);
+
+ // check if the category is valid
+ if ( !$blog || !$blog->isValidCategory($catid) )
+ {
+ return _ERROR_NOSUCHCATEGORY;
+ }
+
+ $destcatid = $blog->getDefaultCategory();
+
+ // don't allow deletion of default category
+ if ( $blog->getDefaultCategory() == $catid )
+ {
+ return _ERROR_DELETEDEFCATEGORY;
+ }
+
+ // check if catid is the only category left for blogid
+ $query = "SELECT catid FROM %s WHERE cblog=%d;";
+ $query = sprintf($query, sql_table('category'), (integer) $blogid);
+
+ $res = DB::getResult($query);
+ if ( $res->rowCount() == 1 )
+ {
+ return _ERROR_DELETELASTCATEGORY;
+ }
+
+ $data = array('catid' => $catid);
+ $manager->notify('PreDeleteCategory', $data);
+
+ // change category for all items to the default category
+ $query = "UPDATE %s SET icat=%d WHERE icat=%d;";
+ $query =sprintf($query, sql_table('item'), (integer) $destcatid, (integer) $catid);
+ DB::execute($query);
+
+ // delete all associated plugin options
+ NucleusPlugin::delete_option_values('category', (integer) $catid);
+
+ // delete category
+ $query = "DELETE FROM %s WHERE catid=%d;";
+ $query = sprintf($query, sql_table('category'), (integer) $catid);
+ DB::execute($query);
+
+ $data = array('catid' => $catid);
+ $manager->notify('PostDeleteCategory', $data);
++>>>>>>> skinnable-master
+ return;
+ }
+
+ /**
++<<<<<<< HEAD
++ * Admin::action_itemcommentlist()
++ *
++ * Show all the comments for a given item
++ * @param integer $itemid ID for item
++ * @return void
++ */
++ public function action_itemcommentlist($itemid = '')
++ {
++ global $member, $manager, $CONF;
++
++ if ( $itemid == '' )
++ {
++ $itemid = intRequestVar('itemid');
++ }
++
++ // only allow if user is allowed to alter item
++ $member->canAlterItem($itemid) or $this->disallow();
++
++ $blogid = getBlogIdFromItemId($itemid);
++
++ $this->pagehead();
++
++ // start index
++ if ( postVar('start') )
++ {
++ $start = intPostVar('start');
++ }
++ else
++ {
++ $start = 0;
++ }
++
++ // amount of items to show
++ if ( postVar('amount') )
++ {
++ $amount = intPostVar('amount');
++ }
++ else
++ {
++ $amount = (integer) $CONF['DefaultListSize'];
++ if ( $amount < 1 )
++ {
++ $amount = 10;
++ }
++ }
++
++ $search = postVar('search');
++
++ echo '(' . _BACKTOOVERVIEW . " )
\n";
++ echo '',_COMMENTS,' ';
++
++ $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem FROM ' . sql_table('comment') . ' LEFT OUTER JOIN ' . sql_table('member') . ' ON mnumber = cmember WHERE citem = ' . $itemid;
++
++ if ( $search )
++ {
++ $query .= " and cbody LIKE " . DB::quoteValue('%'.$search.'%');
++ }
++
++ $query .= ' ORDER BY ctime ASC'
++ . " LIMIT $start,$amount";
++
++ $template['content'] = 'commentlist';
++ $template['canAddBan'] = $member->blogAdminRights(getBlogIDFromItemID($itemid));
++
++ $manager->loadClass("ENCAPSULATE");
++ $navList = new NavList('itemcommentlist', $start, $amount, 0, 1000, 0, $search, $itemid);
++ $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS);
++
++ $this->pagefoot();
++=======
+ * Admin::moveOneCategory()
+ * Delete a category by its id
+ *
+ * @param int $catid category id for move
+ * @param int $destblogid blog id for destination
+ * @return void
+ */
+ static public function moveOneCategory($catid, $destblogid)
+ {
+ global $manager, $member;
+ $catid = intval($catid);
+ $destblogid = intval($destblogid);
+ $blogid = getBlogIDFromCatID($catid);
+ // mover should have admin rights on both blogs
+ if (!$member->blogAdminRights($blogid)) {
+ return _ERROR_DISALLOWED;
+ }
+ if (!$member->blogAdminRights($destblogid)) {
+ return _ERROR_DISALLOWED;
+ }
+ // cannot move to self
+ if ($blogid == $destblogid) {
+ return _ERROR_MOVETOSELF;
+ }
+ // get blogs
+ $blog =& $manager->getBlog($blogid);
+ $destblog =& $manager->getBlog($destblogid);
+ // check if the category is valid
+ if (!$blog || !$blog->isValidCategory($catid)) {
+ return _ERROR_NOSUCHCATEGORY;
+ }
+ // don't allow default category to be moved
+ if ($blog->getDefaultCategory() == $catid) {
+ return _ERROR_MOVEDEFCATEGORY;
+ }
+ $data = array(
+ 'catid' => &$catid,
+ 'sourceblog' => &$blog,
+ 'destblog' => &$destblog
+ );
+ $manager->notify('PreMoveCategory', $data);
+ // update comments table (cblog)
+ $query = 'SELECT '
+ . ' inumber '
+ . 'FROM '
+ . sql_table('item') . ' '
+ . 'WHERE '
+ . ' icat = %d';
+ $items = sql_query(sprintf($query, $catid));
+ while ($oItem = sql_fetch_object($items)) {
+ $query = 'UPDATE '
+ . sql_table('comment') . ' '
+ . 'SET '
+ . ' cblog = %d' . ' '
+ . 'WHERE '
+ . ' citem = %d';
+ sql_query(sprintf($query, $destblogid, $oItem->inumber));
+ }
+
+ // update items (iblog)
+ $query = 'UPDATE '
+ . sql_table('item') . ' '
+ . 'SET '
+ . ' iblog = %d '
+ . 'WHERE '
+ . ' icat = %d';
+ sql_query(sprintf($query, $destblogid, $catid));
+
+ // move category
+ $query = 'UPDATE '
+ . sql_table('category') . ' '
+ . 'SET '
+ . ' cblog = %d' . ' '
+ . 'WHERE '
+ . ' catid = %d';
+ sql_query(sprintf($query, $destblogid, $catid));
+
+ $data = array(
+ 'catid' => &$catid,
+ 'sourceblog' => &$blog,
+ 'destblog' => $destblog
+ );
+ $manager->notify('PostMoveCategory', $data);
+ return;
+ }
+
+ /**
+ * Admin::action_blogsettingsupdate
+ * Updating blog settings
+ *
+ * @param Void
+ * @return Void
+ */
+ static private function action_blogsettingsupdate()
+ {
+ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $blog =& $manager->getBlog($blogid);
+
+ $notify_address = trim(postVar('notify'));
+ $shortname = trim(postVar('shortname'));
+ $updatefile = trim(postVar('update'));
+
+ $notifyComment = intPostVar('notifyComment');
+ $notifyVote = intPostVar('notifyVote');
+ $notifyNewItem = intPostVar('notifyNewItem');
+
+ if ( $notifyComment == 0 )
+ {
+ $notifyComment = 1;
+ }
+ if ( $notifyVote == 0 )
+ {
+ $notifyVote = 1;
+ }
+ if ( $notifyNewItem == 0 )
+ {
+ $notifyNewItem = 1;
+ }
+ $notifyType = $notifyComment * $notifyVote * $notifyNewItem;
+
+ if ( $notify_address && !NOTIFICATION::address_validation($notify_address) )
+ {
+ self::error(_ERROR_BADNOTIFY);
+ return;
+ }
+
+ if ( !isValidShortName($shortname) )
+ {
+ self::error(_ERROR_BADSHORTBLOGNAME);
+ return;
+ }
+
+ if ( ($blog->getShortName() != $shortname) && $manager->existsBlog($shortname) )
+ {
+ self::error(_ERROR_DUPSHORTBLOGNAME);
+ return;
+ }
+ // check if update file is writable
+ if ( $updatefile && !is_writeable($updatefile) )
+ {
+ self::error(_ERROR_UPDATEFILE);
+ return;
+ }
+
+ $blog->setName(trim(postVar('name')));
+ $blog->setShortName($shortname);
+ $blog->setNotifyAddress($notify_address);
+ $blog->setNotifyType($notifyType);
+ $blog->setMaxComments(postVar('maxcomments'));
+ $blog->setCommentsEnabled(postVar('comments'));
+ $blog->setTimeOffset(postVar('timeoffset'));
+ $blog->setUpdateFile($updatefile);
+ $blog->setURL(trim(postVar('url')));
+ $blog->setDefaultSkin(intPostVar('defskin'));
+ $blog->setDescription(trim(postVar('desc')));
+ $blog->setPublic(postVar('public'));
+ $blog->setConvertBreaks(intPostVar('convertbreaks'));
+ $blog->setAllowPastPosting(intPostVar('allowpastposting'));
+ $blog->setDefaultCategory(intPostVar('defcat'));
+ $blog->setSearchable(intPostVar('searchable'));
+ $blog->setEmailRequired(intPostVar('reqemail'));
+ $blog->writeSettings();
+
+ // store plugin options
+ $aOptions = requestArray('plugoption');
+ NucleusPlugin::apply_plugin_options($aOptions);
+
+ $data = array(
+ 'context' => 'blog',
+ 'blogid' => $blogid,
+ 'blog' => &$blog
+ );
+ $manager->notify('PostPluginOptionsUpdate', $data);
+
+ self::action_overview(_MSG_SETTINGSCHANGED);
++>>>>>>> skinnable-master
+ return;
+ }
+
+ /**
++<<<<<<< HEAD
++ * Admin::action_browseowncomments()
++ * Browse own comments
++=======
+ * Admin::action_deleteblog()
++>>>>>>> skinnable-master
+ *
+ * @param void
+ * @return void
+ */
++<<<<<<< HEAD
++ public function action_browseowncomments()
++ {
++ global $member, $manager, $CONF;
++
++ // start index
++ if ( postVar('start') )
++ {
++ $start = intPostVar('start');
++ }
++ else
++ {
++ $start = 0;
++ }
++
++ // amount of items to show
++ if ( postVar('amount') )
++ {
++ $amount = intPostVar('amount');
++ }
++ else
++ {
++ $amount = intval($CONF['DefaultListSize']);
++ if ( $amount < 1 )
++ {
++ $amount = 10;
++ }
++ }
++
++ $search = postVar('search');
++
++ $query = 'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cmember=' . $member->getID();
++
++ if ( $search )
++ {
++ $query .= " and cbody LIKE " . DB::quoteValue('%'.$search.'%');
++ }
++
++ $query .= ' ORDER BY ctime DESC'
++ . " LIMIT $start,$amount";
++
++ $this->pagehead();
++
++ echo '(' . _BACKHOME . ")
\n";
++ echo '' . _COMMENTS_YOUR . " \n";
++
++ $template['content'] = 'commentlist';
++ $template['canAddBan'] = 0; // doesn't make sense to allow banning yourself
++
++ $manager->loadClass("ENCAPSULATE");
++ $navList = new NavList('browseowncomments', $start, $amount, 0, 1000, 0, $search, 0);
++ $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS_YOUR);
++
++ $this->pagefoot();
++=======
+ static private function action_deleteblog()
+ {
+ global $member, $CONF, $manager;
+
+ $blogid = intRequestVar('blogid');
+
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ // check if blog is default blog
+ if ( $CONF['DefaultBlog'] == $blogid )
+ {
+ self::error(_ERROR_DELDEFBLOG);
+ return;
+ }
+
+ $blog =& $manager->getBlog($blogid);
+
+ self::$skin->parse('deleteblog');
+ return;
+ }
+
+ /**
+ * Admin::action_deleteblogconfirm()
+ * Delete Blog
+ *
+ * @param Void
+ * @return Void
+ */
+ static private function action_deleteblogconfirm()
+ {
+ global $member, $CONF, $manager;
+
+ $blogid = intRequestVar('blogid');
+
+ $data = array('blogid' => $blogid);
+ $manager->notify('PreDeleteBlog', $data);
+
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ // check if blog is default blog
+ if ( $CONF['DefaultBlog'] == $blogid )
+ {
+ self::error(_ERROR_DELDEFBLOG);
+ return;
+ }
+
+ // delete all comments
+ $query = 'DELETE FROM ' . sql_table('comment') . ' WHERE cblog='.$blogid;
+ DB::execute($query);
+
+ // delete all items
+ $query = 'DELETE FROM ' . sql_table('item') . ' WHERE iblog=' . $blogid;
+ DB::execute($query);
+
+ // delete all team members
+ $query = 'DELETE FROM ' . sql_table('team') . ' WHERE tblog=' . $blogid;
+ DB::execute($query);
+
+ // delete all bans
+ $query = 'DELETE FROM ' . sql_table('ban') . ' WHERE blogid=' . $blogid;
+ DB::execute($query);
+
+ // delete all categories
+ $query = 'DELETE FROM ' . sql_table('category') . ' WHERE cblog=' . $blogid;
+ DB::execute($query);
+
+ // delete all associated plugin options
+ NucleusPlugin::delete_option_values('blog', $blogid);
+
+ // delete the blog itself
+ $query = 'DELETE FROM ' . sql_table('blog') . ' WHERE bnumber=' . $blogid;
+ DB::execute($query);
+
+ $data = array('blogid' => $blogid);
+ $manager->notify('PostDeleteBlog', $data);
+
+ self::action_overview(_DELETED_BLOG);
++>>>>>>> skinnable-master
+ return;
+ }
+
+ /**
++<<<<<<< HEAD
++ * Admin::action_blogcommentlist()
++ *
++ * Browse all comments for a weblog
++ * @param integer $blogid ID for weblog
++ * @return void
++ */
++ function action_blogcommentlist($blogid = '')
++ {
++ global $member, $manager, $CONF;
++
++ if ( $blogid == '' )
++ {
++ $blogid = intRequestVar('blogid');
++ }
++ else
++ {
++ $blogid = intval($blogid);
++ }
++
++ $member->teamRights($blogid) or $member->isAdmin() or $this->disallow();
++
++ // start index
++ if ( postVar('start') )
++ {
++ $start = intPostVar('start');
++ }
++ else
++ {
++ $start = 0;
++ }
++
++ // amount of items to show
++ if ( postVar('amount') )
++ {
++ $amount = intPostVar('amount');
++ }
++ else
++ {
++ $amount = intval($CONF['DefaultListSize']);
++ if ( $amount < 1 )
++ {
++ $amount = 10;
++ }
++ }
++
++ $search = postVar('search'); // search through comments
++
++ $query = 'SELECT cbody, cuser, cemail, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cblog=' . intval($blogid);
++
++ if ( $search != '' )
++ {
++ $query .= " and cbody LIKE " . DB::quoteValue('%'.$search.'%');
++ }
++
++ $query .= ' ORDER BY ctime DESC'
++ . " LIMIT $start,$amount";
++
++ $blog =& $manager->getBlog($blogid);
++
++ $this->pagehead();
++
++ echo '(' . _BACKHOME . ")
\n";
++ echo '', _COMMENTS_BLOG , ' ' , $this->bloglink($blog), ' ';
++
++ $template['content'] = 'commentlist';
++ $template['canAddBan'] = $member->blogAdminRights($blogid);
++
++ $manager->loadClass("ENCAPSULATE");
++ $navList = new NavList('blogcommentlist', $start, $amount, 0, 1000, $blogid, $search, 0);
++ $navList->showBatchList('comment',$query,'table',$template, _NOCOMMENTS_BLOG);
++
++ $this->pagefoot();
++=======
+ * Admin::action_memberdelete()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_memberdelete()
+ {
+ global $member, $manager;
+
+ $memberid = intRequestVar('memberid');
+
+ ($member->getID() == $memberid) or $member->isAdmin() or self::disallow();
+
+ $mem =& $manager->getMember($memberid);
+
+ self::$skin->parse('memberdelete');
+ return;
+ }
+
+ /**
+ * Admin::action_memberdeleteconfirm()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_memberdeleteconfirm()
+ {
+ global $member;
+
+ $memberid = intRequestVar('memberid');
+
+ ($member->getID() == $memberid) or $member->isAdmin() or self::disallow();
+
+ $error = self::deleteOneMember($memberid);
+ if ( $error )
+ {
+ self::error($error);
+ return;
+ }
+
+ if ( $member->isAdmin() )
+ {
+ self::action_usermanagement();
+ return;
+ }
+ else
+ {
+ self::action_overview(_DELETED_MEMBER);
+ return;
+ }
+ return;
+ }
+
+ /**
+ * Admin::deleteOneMember()
+ * Delete a member by id
+ *
+ * @static
+ * @params Integer $memberid member id
+ * @return String null string or error messages
+ */
+ static public function deleteOneMember($memberid)
+ {
+ global $manager;
+
+ $memberid = intval($memberid);
+ $mem =& $manager->getMember($memberid);
+
+ if ( !$mem->canBeDeleted() )
+ {
+ return _ERROR_DELETEMEMBER;
+ }
+
+ $data = array('member' => &$mem);
+ $manager->notify('PreDeleteMember', $data);
+
+ /* unlink comments from memberid */
+ if ( $memberid )
+ {
+ $query = "UPDATE %s SET cmember=0, cuser=%s WHERE cmember=%d;";
+ $query = sprintf($query, sql_table('comment'), DB::quoteValue($mem->getDisplayName()), $memberid);
+ DB::execute($query);
+ }
+
+ $query = 'DELETE FROM ' . sql_table('member') . ' WHERE mnumber=' . $memberid;
+ DB::execute($query);
+
+ $query = 'DELETE FROM ' . sql_table('team') . ' WHERE tmember=' . $memberid;
+ DB::execute($query);
+
+ $query = 'DELETE FROM ' . sql_table('activation') . ' WHERE vmember=' . $memberid;
+ DB::execute($query);
+
+ // delete all associated plugin options
+ NucleusPlugin::delete_option_values('member', $memberid);
+
+ $data = array('member' => &$mem);
+ $manager->notify('PostDeleteMember', $data);
+
+ return '';
+ }
+
+ /**
+ * Admin::action_createnewlog()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_createnewlog()
+ {
+ global $member, $CONF, $manager;
+
+ // Only Super-Admins can do this
+ $member->isAdmin() or self::disallow();
+
+ self::$skin->parse('createnewlog');
+ return;
+ }
+
+ /**
+ * Admin::action_addnewlog()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_addnewlog()
+ {
+ global $member, $manager, $CONF;
+
+ // Only Super-Admins can do this
+ $member->isAdmin() or self::disallow();
+
+ $bname = trim(postVar('name'));
+ $bshortname = trim(postVar('shortname'));
+ $btimeoffset = postVar('timeoffset');
+ $bdesc = trim(postVar('desc'));
+ $bdefskin = postVar('defskin');
+
+ if ( !isValidShortName($bshortname) )
+ {
+ self::error(_ERROR_BADSHORTBLOGNAME);
+ return;
+ }
+
+ if ( $manager->existsBlog($bshortname) )
+ {
+ self::error(_ERROR_DUPSHORTBLOGNAME);
+ return;
+ }
+
+ $data = array(
+ 'name' => &$bname,
+ 'shortname' => &$bshortname,
+ 'timeoffset' => &$btimeoffset,
+ 'description' => &$bdesc,
+ 'defaultskin' => &$bdefskin
+ );
+ $manager->notify('PreAddBlog', $data);
+
+ // add slashes for sql queries
+ $bname = DB::quoteValue($bname);
+ $bshortname = DB::quoteValue($bshortname);
+ $btimeoffset = DB::quoteValue($btimeoffset);
+ $bdesc = DB::quoteValue($bdesc);
+ $bdefskin = DB::quoteValue($bdefskin);
+
+ // create blog
+ $query = "INSERT INTO %s (bname, bshortname, bdesc, btimeoffset, bdefskin) VALUES (%s, %s, %s, %s, %s);";
+ $query = sprintf($query, sql_table('blog'), $bname, $bshortname, $bdesc, $btimeoffset, $bdefskin);
+ DB::execute($query);
+
+ $blogid = DB::getInsertId();
+ $blog =& $manager->getBlog($blogid);
+
+ // create new category
+ $catdefname = (!defined('_EBLOGDEFAULTCATEGORY_NAME') ? 'General' : _EBLOGDEFAULTCATEGORY_NAME);
+ $catdefdesc = (!defined('_EBLOGDEFAULTCATEGORY_DESC') ? 'Items that do not fit in other categories' : _EBLOGDEFAULTCATEGORY_DESC);
+
+ $query = 'INSERT INTO %s (cblog, cname, cdesc) VALUES (%d, %s, %s)';
+ DB::execute(sprintf($query, sql_table('category'), (integer) $blogid, DB::quoteValue($catdefname), DB::quoteValue($catdefdesc)));
+ $catid = DB::getInsertId();
+
+ // set as default category
+ $blog->setDefaultCategory($catid);
+ $blog->writeSettings();
+
+ // create team member
+ $query = "INSERT INTO %s (tmember, tblog, tadmin) VALUES (%d, %d, 1);";
+ $query = sprintf($query, sql_table('team'), (integer) $member->getID(), (integer) $blogid);
+ DB::execute($query);
+
+ $itemdeftitle = (defined('_EBLOG_FIRSTITEM_TITLE') ? _EBLOG_FIRSTITEM_TITLE : 'First Item');
+ $itemdefbody = (defined('_EBLOG_FIRSTITEM_BODY') ? _EBLOG_FIRSTITEM_BODY : 'This is the first item in your weblog. Feel free to delete it.');
+
+ $blog->additem(
+ $blog->getDefaultCategory(),
+ $itemdeftitle,$itemdefbody,
+ '',
+ $blogid,
+ $member->getID(),
+ $blog->getCorrectTime(),
+ 0,
+ 0,
+ 0
+ );
+
+ $data = array('blog' => &$blog);
+ $manager->notify('PostAddBlog', $data);
+
+ $data = array(
+ 'blog' => &$blog,
+ 'name' => _EBLOGDEFAULTCATEGORY_NAME,
+ 'description' => _EBLOGDEFAULTCATEGORY_DESC,
+ 'catid' => $catid
+ );
+ $manager->notify('PostAddCategory', $data);
+
+ /* TODO: we should consider to use the other way insterad of this */
+ $_REQUEST['blogid'] = $blogid;
+ $_REQUEST['catid'] = $catid;
+ self::$skin->parse('addnewlog');
++>>>>>>> skinnable-master
+ return;
+ }
+
+ /**
++<<<<<<< HEAD
++ * Admin::action_createitem()
++ * Provide a page to item a new item to the given blog
++=======
+ * Admin::action_addnewlog2()
++>>>>>>> skinnable-master
+ *
+ * @param void
+ * @return void
+ */
++<<<<<<< HEAD
++ public function action_createitem()
++ {
++ global $member, $manager;
++
++ $blogid = intRequestVar('blogid');
++
++ // check if allowed
++ $member->teamRights($blogid) or $this->disallow();
++
++ $memberid = $member->getID();
++
++ $blog =& $manager->getBlog($blogid);
++
++ // generate the add-item form
++ $handler = new PageFactory($blog);
++
++ $contents = $handler->getTemplateFor('admin', 'add');
++ $manager->notify('PreAddItemForm', array('contents' => &$contents, 'blog' => &$blog));
++
++ $parser = new Parser($handler);
++
++ $this->pagehead();
++ $parser->parse($contents);
++ $this->pagefoot();
++
++=======
+ static private function action_addnewlog2()
+ {
+ global $member, $manager;
+ $blogid = intRequestVar('blogid');
+
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ $burl = requestVar('url');
+
+ $blog =& $manager->getBlog($blogid);
+ $blog->setURL(trim($burl));
+ $blog->writeSettings();
+
+ self::action_overview(_MSG_NEWBLOG);
+ return;
+ }
+
+ /**
+ * Admin::action_skinieoverview()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_skinieoverview()
+ {
+ global $member, $DIR_LIBS, $manager;
+
+ $member->isAdmin() or self::disallow();
+
+ include_once($DIR_LIBS . 'skinie.php');
+
+ self::$skin->parse('skinieoverview');
++>>>>>>> skinnable-master
+ return;
+ }
+
+ /**
++<<<<<<< HEAD
++ * Admin::action_itemedit()
++=======
+ * Admin::action_skinieimport()
++>>>>>>> skinnable-master
+ *
+ * @param void
+ * @return void
+ */
++<<<<<<< HEAD
++ public function action_itemedit()
++ {
++ global $member, $manager;
++
++ $itemid = intRequestVar('itemid');
++
++ // only allow if user is allowed to alter item
++ $member->canAlterItem($itemid) or $this->disallow();
++
++ $variables =& $manager->getItem($itemid, 1, 1);
++ $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
++
++ $manager->notify('PrepareItemForEdit', array('item' => &$variables));
++
++ if ( $blog->convertBreaks() )
++ {
++ $variables['body'] = removeBreaks($variables['body']);
++ $variables['more'] = removeBreaks($variables['more']);
++ }
++
++ // form to edit blog items
++ $handler = new PageFactory($blog);
++ $handler->setVariables($variables);
++
++ $content = $handler->getTemplateFor('admin', 'edit');
++
++ $parser = new Parser($handler);
++
++ $this->pagehead();
++ $parser->parse($content);
++ $this->pagefoot();
++ return;
++ }
++
++ /**
++ * @todo document this
++ */
++ function action_itemupdate() {
++ global $member, $manager, $CONF;
++
++ $itemid = intRequestVar('itemid');
++ $catid = postVar('catid');
++
++ // only allow if user is allowed to alter item
++ $member->canUpdateItem($itemid, $catid) or $this->disallow();
++
+ $actiontype = postVar('actiontype');
+
+ // delete actions are handled by itemdelete (which has confirmation)
+ if ($actiontype == 'delete') {
+ $this->action_itemdelete();
+ return;
+ }
+
+ $body = postVar('body');
+ $title = postVar('title');
+ $more = postVar('more');
+ $closed = intPostVar('closed');
+ $draftid = intPostVar('draftid');
+
+ // default action = add now
+ if (!$actiontype)
+ $actiontype='addnow';
+
+ // create new category if needed
+ if ( i18n::strpos($catid,'newcat') === 0 ) {
+ // get blogid
+ list($blogid) = sscanf($catid,"newcat-%d");
+
+ // create
+ $blog =& $manager->getBlog($blogid);
+ $catid = $blog->createNewCategory();
+
+ // show error when sth goes wrong
+ if (!$catid)
+ $this->doError(_ERROR_CATCREATEFAIL);
+ }
+
+ /*
+ set some variables based on actiontype
+
+ actiontypes:
+ draft items -> addnow, addfuture, adddraft, delete
+ non-draft items -> edit, changedate, delete
+
+ variables set:
+ $timestamp: set to a nonzero value for future dates or date changes
+ $wasdraft: set to 1 when the item used to be a draft item
+ $publish: set to 1 when the edited item is not a draft
+ */
+ $blogid = getBlogIDFromItemID($itemid);
+ $blog =& $manager->getBlog($blogid);
+
+ $wasdrafts = array('adddraft', 'addfuture', 'addnow');
+ $wasdraft = in_array($actiontype, $wasdrafts) ? 1 : 0;
+ $publish = ($actiontype != 'adddraft' && $actiontype != 'backtodrafts') ? 1 : 0;
+ if ($actiontype == 'addfuture' || $actiontype == 'changedate') {
+ $timestamp = mktime(intPostVar('hour'), intPostVar('minutes'), 0, intPostVar('month'), intPostVar('day'), intPostVar('year'));
+ } else {
+ $timestamp =0;
+ }
+
+ // edit the item for real
+ Item::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);
+
+ $this->updateFuturePosted($blogid);
+
+ if ($draftid > 0) {
+ // delete permission is checked inside Item::delete()
+ Item::delete($draftid);
+ }
+
+ // show category edit window when we created a new category
+ // ($catid will then be a new category ID, while postVar('catid') will be 'newcat-x')
+ if ($catid != intPostVar('catid')) {
+ $this->action_categoryedit(
+ $catid,
+ $blog->getID(),
+ $CONF['AdminURL'] . 'index.php?action=itemlist&blogid=' . getBlogIDFromItemID($itemid)
+ );
+ } else {
+ // TODO: set start item correctly for itemlist
+ $this->action_itemlist(getBlogIDFromItemID($itemid));
+ }
+ }
++=======
+ static private function action_skinieimport()
+ {
+ global $member;
+
+ $member->isAdmin() or self::disallow();
+
+ $skinFileRaw = postVar('skinfile');
+ $mode = postVar('mode');
+
+ $error = self::skinieimport($mode, $skinFileRaw);
+ if ( $error )
+ {
+ self::error($error);
+ return;
+ }
+
+ self::$skin->parse('skinieimport');
+ return;
+ }
/**
- * Admin::action_itemdelete()
- * Delete item
+ * Admin::action_skiniedoimport()
*
- * @param Void
- * @return Void
+ * @param void
+ * @return void
+ */
+ static private function action_skiniedoimport()
+ {
+ global $member, $DIR_LIBS, $DIR_SKINS;
+
+ $member->isAdmin() or self::disallow();
+
+ // load skinie class
+ include_once($DIR_LIBS . 'skinie.php');
+
+ $mode = postVar('mode');
+ $skinFileRaw = postVar('skinfile');
+ $allowOverwrite = intPostVar('overwrite');
+
+ $error = self::skiniedoimport($mode, $skinFileRaw, $allowOverwrite);
+ if ( $error )
+ {
+ self::error($msg);
+ return;
+ }
+
+ self::$skin->parse('skiniedoimport');
+ return;
+ }
+
+ /**
+ * Admin::action_skinieexport()
+ *
+ * @param void
+ * @return void
*/
- function action_itemdelete()
+ static private function action_skinieexport()
+ {
+ global $member;
+
+ $member->isAdmin() or self::disallow();
+
+ $aSkins = requestIntArray('skin');
+ $aTemplates = requestIntArray('template');
+ $info = postVar('info');
+
+ self::skinieexport($aSkins, $aTemplates, $info);
+
+ return;
+ }
+
+ /**
+ * Admin::action_templateoverview()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_templateoverview()
{
global $member, $manager;
- $itemid = intRequestVar('itemid');
+ $member->isAdmin() or self::disallow();
- // only allow if user is allowed to alter item
- $member->canAlterItem($itemid) or $this->disallow();
+ self::$skin->parse('templateoverview');
+ return;
+ }
+
+ /**
+ * Admin::action_templateedit()
+ *
+ * @param string $msg message for pageheader
+ * @return void
+ */
+ static private function action_templateedit($msg = '')
+ {
+ global $member, $manager;
+ if ( $msg )
+ {
+ self::$headMess = $msg;
+ }
- if ( !$manager->existsItem($itemid,1,1) )
+ $templateid = intRequestVar('templateid');
+
+ $member->isAdmin() or self::disallow();
+
+ self::$extrahead .= "\n";
+ self::$extrahead .= "\n";
+
+ self::$skin->parse('templateedit');
+ return;
+ }
+
+ /**
+ * Admin::action_templateupdate()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_templateupdate()
+ {
+ global $member,$manager;
+
+ $templateid = intRequestVar('templateid');
+
+ $member->isAdmin() or self::disallow();
+
+ $name = postVar('tname');
+ $desc = postVar('tdesc');
+
+ if ( !isValidTemplateName($name) )
+ {
+ self::error(_ERROR_BADTEMPLATENAME);
+ return;
+ }
+
+ if ( (Template::getNameFromId($templateid) != $name) && Template::exists($name) )
{
- $this->error(_ERROR_NOSUCHITEM);
+ self::error(_ERROR_DUPTEMPLATENAME);
+ return;
}
- $item =& $manager->getItem($itemid,1,1);
- $title = Entity::hsc(strip_tags($item['title']));
- $body = strip_tags($item['body']);
- $body = Entity::hsc(Entity::shorten($body,300,'...'));
+ // 1. Remove all template parts
+ $query = "DELETE FROM %s WHERE tdesc=%d;";
+ $query = sprintf($query, sql_table('template'), (integer) $templateid);
+ DB::execute($query);
- $this->pagehead();
- echo '' . _DELETE_CONFIRM . " \n";
- echo '' . _CONFIRMTXT_ITEM . "
\n";
- echo "\n";
- echo "{$title} \n";
- echo " \n";
- echo "{$body}\n";
- echo "
\n";
- echo "\n";
- $this->pagefoot();
+ // 2. Update description
+ $query = "UPDATE %s SET tdname=%s, tddesc=%s WHERE tdnumber=%d;";
+ $query = sprintf($query, sql_table('template_desc'), DB::quoteValue($name), DB::quoteValue($desc), (integer) $templateid);
+ DB::execute($query);
+
+ // 3. Add non-empty template parts
+ self::addToTemplate($templateid, 'ITEM_HEADER', postVar('ITEM_HEADER'));
+ self::addToTemplate($templateid, 'ITEM', postVar('ITEM'));
+ self::addToTemplate($templateid, 'ITEM_FOOTER', postVar('ITEM_FOOTER'));
+ self::addToTemplate($templateid, 'MORELINK', postVar('MORELINK'));
+ self::addToTemplate($templateid, 'EDITLINK', postVar('EDITLINK'));
+ self::addToTemplate($templateid, 'NEW', postVar('NEW'));
+ self::addToTemplate($templateid, 'COMMENTS_HEADER', postVar('COMMENTS_HEADER'));
+ self::addToTemplate($templateid, 'COMMENTS_BODY', postVar('COMMENTS_BODY'));
+ self::addToTemplate($templateid, 'COMMENTS_FOOTER', postVar('COMMENTS_FOOTER'));
+ self::addToTemplate($templateid, 'COMMENTS_CONTINUED', postVar('COMMENTS_CONTINUED'));
+ self::addToTemplate($templateid, 'COMMENTS_TOOMUCH', postVar('COMMENTS_TOOMUCH'));
+ self::addToTemplate($templateid, 'COMMENTS_AUTH', postVar('COMMENTS_AUTH'));
+ self::addToTemplate($templateid, 'COMMENTS_ONE', postVar('COMMENTS_ONE'));
+ self::addToTemplate($templateid, 'COMMENTS_MANY', postVar('COMMENTS_MANY'));
+ self::addToTemplate($templateid, 'COMMENTS_NONE', postVar('COMMENTS_NONE'));
+ self::addToTemplate($templateid, 'ARCHIVELIST_HEADER', postVar('ARCHIVELIST_HEADER'));
+ self::addToTemplate($templateid, 'ARCHIVELIST_LISTITEM', postVar('ARCHIVELIST_LISTITEM'));
+ self::addToTemplate($templateid, 'ARCHIVELIST_FOOTER', postVar('ARCHIVELIST_FOOTER'));
+ self::addToTemplate($templateid, 'BLOGLIST_HEADER', postVar('BLOGLIST_HEADER'));
+ self::addToTemplate($templateid, 'BLOGLIST_LISTITEM', postVar('BLOGLIST_LISTITEM'));
+ self::addToTemplate($templateid, 'BLOGLIST_FOOTER', postVar('BLOGLIST_FOOTER'));
+ self::addToTemplate($templateid, 'CATLIST_HEADER', postVar('CATLIST_HEADER'));
+ self::addToTemplate($templateid, 'CATLIST_LISTITEM', postVar('CATLIST_LISTITEM'));
+ self::addToTemplate($templateid, 'CATLIST_FOOTER', postVar('CATLIST_FOOTER'));
+ self::addToTemplate($templateid, 'DATE_HEADER', postVar('DATE_HEADER'));
+ self::addToTemplate($templateid, 'DATE_FOOTER', postVar('DATE_FOOTER'));
+ self::addToTemplate($templateid, 'FORMAT_DATE', postVar('FORMAT_DATE'));
+ self::addToTemplate($templateid, 'FORMAT_TIME', postVar('FORMAT_TIME'));
+ self::addToTemplate($templateid, 'SEARCH_HIGHLIGHT', postVar('SEARCH_HIGHLIGHT'));
+ self::addToTemplate($templateid, 'SEARCH_NOTHINGFOUND', postVar('SEARCH_NOTHINGFOUND'));
+ self::addToTemplate($templateid, 'POPUP_CODE', postVar('POPUP_CODE'));
+ self::addToTemplate($templateid, 'MEDIA_CODE', postVar('MEDIA_CODE'));
+ self::addToTemplate($templateid, 'IMAGE_CODE', postVar('IMAGE_CODE'));
+
+ $data = array('fields' => array());
+ $manager->notify('TemplateExtraFields', $data);
+ foreach ( $data['fields'] as $pfkey=>$pfvalue )
+ {
+ foreach ( $pfvalue as $pffield => $pfdesc )
+ {
+ self::addToTemplate($templateid, $pffield, postVar($pffield));
+ }
+ }
+
+ // jump back to template edit
+ self::action_templateedit(_TEMPLATE_UPDATED);
return;
}
- /**
- * @todo document this
- */
- function action_itemdeleteconfirm() {
- global $member;
-
- $itemid = intRequestVar('itemid');
-
- // only allow if user is allowed to alter item
- $member->canAlterItem($itemid) or $this->disallow();
-
- // get blogid first
- $blogid = getBlogIdFromItemId($itemid);
-
- // delete item (note: some checks will be performed twice)
- $this->deleteOneItem($itemid);
-
- $this->action_itemlist($blogid);
- }
-
- /**
- * Deletes one item and returns error if something goes wrong
- * @param int $itemid
- */
- function deleteOneItem($itemid) {
- global $member, $manager;
-
- // only allow if user is allowed to alter item (also checks if itemid exists)
- if (!$member->canAlterItem($itemid))
- return _ERROR_DISALLOWED;
-
- // need to get blogid before the item is deleted
- $blogid = getBlogIDFromItemId($itemid);
-
- $manager->loadClass('ITEM');
- Item::delete($itemid);
-
- // update blog's futureposted
- $this->updateFuturePosted($blogid);
- }
-
/**
- * Admin::updateFuturePosted()
- * Update a blog's future posted flag
+ * Admin::addToTemplate()
*
- * @param integer $blogid
+ * @param Integer $id ID for template
+ * @param String $partname parts name
+ * @param String $content template contents
+ * @return Integer record index
+ *
+ */
+ static private function addToTemplate($id, $partname, $content)
+ {
+ // don't add empty parts:
+ if ( !trim($content) )
+ {
+ return -1;
+ }
+
+ $query = "INSERT INTO %s (tdesc, tpartname, tcontent) VALUES (%d, %s, %s);";
+ $query = sprintf($query, sql_table('template'), (integer) $id, DB::quoteValue($partname), DB::quoteValue($content));
+ if ( DB::execute($query) === FALSE )
+ {
+ $err = DB::getError();
+ exit(_ADMIN_SQLDIE_QUERYERROR . $err[2]);
+ }
+ return DB::getInsertId();
+ }
+
+ /**
+ * Admin::action_templatedelete()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_templatedelete()
+ {
+ global $member, $manager;
+
+ $member->isAdmin() or self::disallow();
+
+ $templateid = intRequestVar('templateid');
+ // TODO: check if template can be deleted
+
+ self::$skin->parse('templatedelete');
+ return;
+ }
++>>>>>>> skinnable-master
+
+ /**
+ * Admin::action_templatedeleteconfirm()
+ *
+ * @param void
* @return void
+ */
+ static private function action_templatedeleteconfirm()
+ {
+ global $member, $manager;
+
+ $templateid = intRequestVar('templateid');
+
+ $member->isAdmin() or self::disallow();
+
+ $data = array('templateid' => $templateid);
+ $manager->notify('PreDeleteTemplate', $data);
+
+ // 1. delete description
+ DB::execute('DELETE FROM ' . sql_table('template_desc') . ' WHERE tdnumber=' . $templateid);
+
+ // 2. delete parts
+ DB::execute('DELETE FROM ' . sql_table('template') . ' WHERE tdesc=' . $templateid);
+
+
+ $data = array('templateid' => $templateid);
+ $manager->notify('PostDeleteTemplate', $data);
+
+ self::action_templateoverview();
+ return;
+ }
+
+ /**
+ * Admin::action_templatenew()
*
+ * @param void
+ * @return void
*/
- function updateFuturePosted($blogid)
+ static private function action_templatenew()
{
- global $manager;
+ global $member;
- $blog =& $manager->getBlog($blogid);
- $currenttime = $blog->getCorrectTime(time());
+ $member->isAdmin() or self::disallow();
++<<<<<<< HEAD
+ $query = "SELECT * FROM %s WHERE iblog=%d AND iposted=0 AND itime>%s";
+ $query = sprintf($query, sql_table('item'), (integer) $blogid, DB::formatDateTime($currenttime));
+ $result = DB::getResult($query);
+
+ if ( $result->rowCount() > 0 )
++=======
+ $name = postVar('name');
+ $desc = postVar('desc');
+
+ if ( !isValidTemplateName($name) )
++>>>>>>> skinnable-master
{
- $blog->setFuturePost();
+ self::error(_ERROR_BADTEMPLATENAME);
+ return;
}
- else
+
+ if ( Template::exists($name) )
{
- $blog->clearFuturePost();
+ self::error(_ERROR_DUPTEMPLATENAME);
+ return;
}
+
+ $newTemplateId = Template::createNew($name, $desc);
+
+ self::action_templateoverview();
return;
}
++<<<<<<< HEAD
+
+ /**
+ * @todo document this
+ */
+ function action_itemmove() {
+ global $member, $manager;
+
+ $itemid = intRequestVar('itemid');
+
+ // only allow if user is allowed to alter item
+ $member->canAlterItem($itemid) or $this->disallow();
+
+ $item =& $manager->getItem($itemid,1,1);
+
+ $this->pagehead();
+ ?>
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_itemmoveto() {
+ global $member, $manager;
+
+ $itemid = intRequestVar('itemid');
+ $catid = requestVar('catid');
+
+ // create new category if needed
+ if ( i18n::strpos($catid,'newcat') === 0 ) {
+ // get blogid
+ list($blogid) = sscanf($catid,'newcat-%d');
+
+ // create
+ $blog =& $manager->getBlog($blogid);
+ $catid = $blog->createNewCategory();
+
+ // show error when sth goes wrong
+ if (!$catid)
+ $this->doError(_ERROR_CATCREATEFAIL);
+ }
+
+ // only allow if user is allowed to alter item
+ $member->canUpdateItem($itemid, $catid) or $this->disallow();
+
+ $old_blogid = getBlogIDFromItemId($itemid);
+
+ Item::move($itemid, $catid);
+
+ // set the futurePosted flag on the blog
+ $this->updateFuturePosted(getBlogIDFromItemId($itemid));
+
+ // reset the futurePosted in case the item is moved from one blog to another
+ $this->updateFuturePosted($old_blogid);
+
+ if ($catid != intRequestVar('catid'))
+ $this->action_categoryedit($catid, $blog->getID());
+ else
+ $this->action_itemlist(getBlogIDFromCatID($catid));
+ }
+
+ /**
+ * Moves one item to a given category (category existance should be checked by caller)
+ * errors are returned
+ * @param int $itemid
+ * @param int $destCatid category ID to which the item will be moved
+ */
+ function moveOneItem($itemid, $destCatid) {
+ global $member;
+
+ // only allow if user is allowed to move item
+ if (!$member->canUpdateItem($itemid, $destCatid))
+ return _ERROR_DISALLOWED;
+
+ Item::move($itemid, $destCatid);
+ }
+
+ /**
+ * Adds a item to the chosen blog
+ */
+ function action_additem() {
+ global $manager, $CONF;
+
+ $manager->loadClass('ITEM');
+
+ $result = Item::createFromRequest();
+
+ if ($result['status'] == 'error')
+ $this->error($result['message']);
+
+ $blogid = getBlogIDFromItemID($result['itemid']);
+ $blog =& $manager->getBlog($blogid);
+ $btimestamp = $blog->getCorrectTime();
+ $item = $manager->getItem(intval($result['itemid']), 1, 1);
+
+ if ($result['status'] == 'newcategory') {
+ $distURI = $manager->addTicketToUrl($CONF['AdminURL'] . 'index.php?action=itemList&blogid=' . intval($blogid));
+ $this->action_categoryedit($result['catid'], $blogid, $distURI);
+ } else {
+ $methodName = 'action_itemList';
+ call_user_func(array(&$this, $methodName), $blogid);
+ }
+ }
+
+ /**
+ * Allows to edit previously made comments
+ **/
+ function action_commentedit() {
+
+ global $member, $manager;
+
+ $commentid = intRequestVar('commentid');
+
+ $member->canAlterComment($commentid) or $this->disallow();
+
+ $comment = Comment::getComment($commentid);
+
+ $manager->notify('PrepareCommentForEdit', array('comment' => &$comment) );
+
+ // change to \n
+ $comment['body'] = str_replace(' ', '', $comment['body']);
+
+ // replaced eregi_replace() below with preg_replace(). ereg* functions are deprecated in PHP 5.3.0
+ /* original eregi_replace: eregi_replace("[^<]* ", "\\1", $comment['body']) */
+
+ $comment['body'] = preg_replace("#[^<]* #i", "\\1", $comment['body']);
+
+ $this->pagehead();
+
+ ?>
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_commentupdate() {
+ global $member, $manager;
+
+ $commentid = intRequestVar('commentid');
+
+ $member->canAlterComment($commentid) or $this->disallow();
+
+ $url = postVar('url');
+ $email = postVar('email');
+ $body = postVar('body');
+
+ # replaced eregi() below with preg_match(). ereg* functions are deprecated in PHP 5.3.0
+ # original eregi: eregi("[a-zA-Z0-9|\.,;:!\?=\/\\]{90,90}", $body) != FALSE
+ # important note that '\' must be matched with '\\\\' in preg* expressions
+
+ // intercept words that are too long
+ if (preg_match('#[a-zA-Z0-9|\.,;:!\?=\/\\\\]{90,90}#', $body) != FALSE)
++=======
+
+ /**
+ * Admin::action_templateclone()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_templateclone()
+ {
+ global $member;
+
+ $templateid = intRequestVar('templateid');
+
+ $member->isAdmin() or self::disallow();
+
+ // 1. read old template
+ $name = Template::getNameFromId($templateid);
+ $desc = Template::getDesc($templateid);
+
+ // 2. create desc thing
+ $name = "cloned" . $name;
+
+ // if a template with that name already exists:
+ if ( Template::exists($name) )
++>>>>>>> skinnable-master
{
- $this->error(_ERROR_COMMENT_LONGWORD);
+ $i = 1;
+ while (Template::exists($name . $i))
+ {
+ $i++;
+ }
+ $name .= $i;
}
-
- // check length
- if (i18n::strlen($body) < 3)
+
+ $newid = Template::createNew($name, $desc);
+
+ // 3. create clone
+ // go through parts of old template and add them to the new one
+ $query = "SELECT tpartname, tcontent FROM %s WHERE tdesc=%d;";
+ $query = sprintf($query, sql_table('template'), (integer) $templateid);
+
+ $res = DB::getResult($query);
+ foreach ( $res as $row)
{
- $this->error(_ERROR_COMMENT_NOCOMMENT);
+ self::addToTemplate($newid, $row['tpartname'], $row['tcontent']);
}
-
- if (i18n::strlen($body) > 5000)
+
+ self::action_templateoverview();
+ return;
+ }
+
+ /**
+ * Admin::action_admintemplateoverview()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_admintemplateoverview()
+ {
+ global $member;
+ $member->isAdmin() or self::disallow();
+ self::$skin->parse('admntemplateoverview');
+ return;
+ }
+
+ /**
+ * Admin::action_admintemplateedit()
+ *
+ * @param string $msg message for pageheader
+ * @return void
+ */
+ static private function action_admintemplateedit($msg = '')
+ {
+ global $member, $manager;
+ if ( $msg )
{
- $this->error(_ERROR_COMMENT_TOOLONG);
+ self::$headMess = $msg;
}
- $member->isAdmin() or self::disallow();
-
++<<<<<<< HEAD
+
+ // prepare body
+ $body = Comment::prepareBody($body);
+
+ // call plugins
+ $manager->notify('PreUpdateComment',array('body' => &$body));
+
+ $query = 'UPDATE ' . sql_table('comment')
+ . ' SET cmail = ' . DB::quoteValue($url) . ', cemail = ' . DB::quoteValue($email) . ', cbody = ' . DB::quoteValue($body)
+ . ' WHERE cnumber = ' . $commentid;
+ DB::execute($query);
+
+ // get itemid
+ $res = DB::getValue('SELECT citem FROM '.sql_table('comment').' WHERE cnumber=' . $commentid);
+ $itemid = $res;
+
+ if ($member->canAlterItem($itemid))
+ $this->action_itemcommentlist($itemid);
+ else
+ $this->action_browseowncomments();
+
+ }
++=======
++ $member->isAdmin() or self::disallow();
++
+ self::$extrahead .= "\n";
+ self::$extrahead .= '' . "\n";
+
+ self::$skin->parse('admintemplateedit');
+ return;
+ }
++>>>>>>> skinnable-master
/**
- * Admin::action_commentdelete()
- * Update comment
+ * Admin::action_admintemplateupdate()
*
- * @param Void
- * @return Void
+ * @param void
+ * @return void
*/
- function action_commentdelete()
+ static private function action_admintemplateupdate()
{
global $member, $manager;
+ $templateid = intRequestVar('templateid');
+ $member->isAdmin() or self::disallow();
+ $name = postVar('tname');
+ $desc = postVar('tdesc');
- $commentid = intRequestVar('commentid');
- $member->canAlterComment($commentid) or $this->disallow();
- $comment = Comment::getComment($commentid);
-
- $body = strip_tags($comment['body']);
- $body = Entity::hsc(Entity::shorten($body, 300, '...'));
-
- if ( $comment['member'] )
+ if ( !isValidTemplateName($name) )
{
- $author = $comment['member'];
+ self::error(_ERROR_BADTEMPLATENAME);
+ return;
}
- else
+
+ if ( (Template::getNameFromId($templateid) != $name) && Template::exists($name) )
{
- $author = $comment['user'];
+ self::error(_ERROR_DUPTEMPLATENAME);
+ return;
}
- $this->pagehead();
+ // 1. Remove all template parts
+ $query = "DELETE FROM %s WHERE tdesc=%d;";
+ $query = sprintf($query, sql_table('template'), (integer) $templateid);
+ DB::execute($query);
- echo '' . _DELETE_CONFIRM . " \n";
- echo '' . _CONFIRMTXT_COMMENT . "
\n";
- echo "\n";
- echo '' . _EDITC_WHO . ": {$author} \n";
- echo '' . _EDITC_TEXT . ": {$body}\n";
- echo "
\n";
- echo "\n";
- echo "\n";
- echo " \n";
- echo $manager->addTicketHidden() . "\n";
- echo " \n";
- echo ' \n";
- echo "
\n";
- echo " \n";
- $this->pagefoot();
+ // 2. Update description
+ $query = "UPDATE %s SET tdname=%s, tddesc=%s WHERE tdnumber=%d;";
+ $query = sprintf($query, sql_table('template_desc'), DB::quoteValue($name), DB::quoteValue($desc), (integer) $templateid);
+ DB::execute($query);
+
+ // 3. Add non-empty template parts
+ self::addToTemplate($templateid, 'NORMALSKINLIST_HEAD', postVar('NORMALSKINLIST_HEAD'));
+ self::addToTemplate($templateid, 'NORMALSKINLIST_BODY', postVar('NORMALSKINLIST_BODY'));
+ self::addToTemplate($templateid, 'NORMALSKINLIST_FOOT', postVar('NORMALSKINLIST_FOOT'));
+ self::addToTemplate($templateid, 'ADMIN_CUSTOMHELPLINK_ICON', postVar('ADMIN_CUSTOMHELPLINK_ICON'));
+ self::addToTemplate($templateid, 'ADMIN_CUSTOMHELPLINK_ANCHOR', postVar('ADMIN_CUSTOMHELPLINK_ANCHOR'));
+ self::addToTemplate($templateid, 'ADMIN_BLOGLINK', postVar('ADMIN_BLOGLINK'));
+ self::addToTemplate($templateid, 'ADMIN_BATCHLIST', postVar('ADMIN_BATCHLIST'));
+ self::addToTemplate($templateid, 'ACTIVATE_FORGOT_TITLE', postVar('ACTIVATE_FORGOT_TITLE'));
+ self::addToTemplate($templateid, 'ACTIVATE_FORGOT_TEXT', postVar('ACTIVATE_FORGOT_TEXT'));
+ self::addToTemplate($templateid, 'ACTIVATE_REGISTER_TITLE', postVar('ACTIVATE_REGISTER_TITLE'));
+ self::addToTemplate($templateid, 'ACTIVATE_REGISTER_TEXT', postVar('ACTIVATE_REGISTER_TEXT'));
+ self::addToTemplate($templateid, 'ACTIVATE_CHANGE_TITLE', postVar('ACTIVATE_CHANGE_TITLE'));
+ self::addToTemplate($templateid, 'ACTIVATE_CHANGE_TEXT', postVar('ACTIVATE_CHANGE_TEXT'));
+ self::addToTemplate($templateid, 'TEMPLATE_EDIT_EXPLUGNAME', postVar('TEMPLATE_EDIT_EXPLUGNAME'));
+ self::addToTemplate($templateid, 'TEMPLATE_EDIT_ROW_HEAD', postVar('TEMPLATE_EDIT_ROW_HEAD'));
+ self::addToTemplate($templateid, 'TEMPLATE_EDIT_ROW_TAIL', postVar('TEMPLATE_EDIT_ROW_TAIL'));
+ self::addToTemplate($templateid, 'SPECIALSKINLIST_HEAD', postVar('SPECIALSKINLIST_HEAD'));
+ self::addToTemplate($templateid, 'SPECIALSKINLIST_BODY', postVar('SPECIALSKINLIST_BODY'));
+ self::addToTemplate($templateid, 'SPECIALSKINLIST_FOOT', postVar('SPECIALSKINLIST_FOOT'));
+ self::addToTemplate($templateid, 'SYSTEMINFO_GDSETTINGS', postVar('SYSTEMINFO_GDSETTINGS'));
+ self::addToTemplate($templateid, 'BANLIST_DELETED_LIST', postVar('BANLIST_DELETED_LIST'));
+ self::addToTemplate($templateid, 'INSERT_PLUGOPTION_TITLE', postVar('INSERT_PLUGOPTION_TITLE'));
+ self::addToTemplate($templateid, 'INSERT_PLUGOPTION_BODY', postVar('INSERT_PLUGOPTION_BODY'));
+ self::addToTemplate($templateid, 'INPUTYESNO_TEMPLATE_ADMIN', postVar('INPUTYESNO_TEMPLATE_ADMIN'));
+ self::addToTemplate($templateid, 'INPUTYESNO_TEMPLATE_NORMAL', postVar('INPUTYESNO_TEMPLATE_NORMAL'));
+ self::addToTemplate($templateid, 'ADMIN_SPECIALSKINLIST_HEAD', postVar('ADMIN_SPECIALSKINLIST_HEAD'));
+ self::addToTemplate($templateid, 'ADMIN_SPECIALSKINLIST_BODY', postVar('ADMIN_SPECIALSKINLIST_BODY'));
+ self::addToTemplate($templateid, 'ADMIN_SPECIALSKINLIST_FOOT', postVar('ADMIN_SPECIALSKINLIST_FOOT'));
+ self::addToTemplate($templateid, 'SKINIE_EXPORT_LIST', postVar('SKINIE_EXPORT_LIST'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_SELECT_HEAD', postVar('SHOWLIST_LISTPLUG_SELECT_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_SELECT_BODY', postVar('SHOWLIST_LISTPLUG_SELECT_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_SELECT_FOOT', postVar('SHOWLIST_LISTPLUG_SELECT_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_MEMBLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_MEMBLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_MEMBLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_MEMBLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_MEMBLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_MEMBLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TEAMLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_TEAMLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TEAMLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_TEAMLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TEAMLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_TEAMLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_GURL', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_GURL'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGEVENTLIST', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGEVENTLIST'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGNEDUPDATE', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGNEDUPDATE'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGIN_DEPEND', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGIN_DEPEND'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGIN_DEPREQ', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGIN_DEPREQ'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLISTFALSE', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLISTFALSE'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_ACTN', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_ACTN'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_ADMN', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_ADMN'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_HELP', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_HELP'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGOPTSETURL', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGOPTSETURL'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_POPTLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_POPTLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_POPTLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_POPTLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OPWORD', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OPWORD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEP', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEP'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEO', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEO'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEC', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEC'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OTAREA', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OTAREA'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OITEXT', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OITEXT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGOPTN_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGOPTN_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_POPTLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_POPTLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ITEMLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_ITEMLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ITEMLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_ITEMLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ITEMLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_ITEMLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CMNTLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_CMNTLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CMNTLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_CMNTLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CMNTLIST_ABAN', postVar('SHOWLIST_LISTPLUG_TABLE_CMNTLIST_ABAN'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CMNTLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_CMNTLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLIST_BD_TADM', postVar('SHOWLIST_LISTPLUG_TABLE_BLIST_BD_TADM'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLIST_BD_SADM', postVar('SHOWLIST_LISTPLUG_TABLE_BLIST_BD_SADM'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SHORTNAM_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_SHORTNAM_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SHORTNAM_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_SHORTNAM_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SHORTNAM_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_SHORTNAM_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CATELIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_CATELIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CATELIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_CATELIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CATELIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_CATELIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TPLTLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_TPLTLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TPLTLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_TPLTLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TPLTLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_TPLTLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SKINLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_SKINLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SKINLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_SKINLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SKINLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_SKINLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_DRFTLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_DRFTLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_DRFTLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_DRFTLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_DRFTLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_DRFTLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ACTNLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_ACTNLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ACTNLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_ACTNLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ACTNLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_ACTNLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_IBANLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_IBANLIST_HEAD'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_IBANLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_IBANLIST_BODY'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_IBANLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_IBANLIST_FOOT'));
+ self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_NAVILIST', postVar('SHOWLIST_LISTPLUG_TABLE_NAVILIST'));
+ self::addToTemplate($templateid, 'PLUGIN_QUICKMENU_TITLE', postVar('PLUGIN_QUICKMENU_TITLE'));
+ self::addToTemplate($templateid, 'PLUGIN_QUICKMENU_HEAD', postVar('PLUGIN_QUICKMENU_HEAD'));
+ self::addToTemplate($templateid, 'PLUGIN_QUICKMENU_BODY', postVar('PLUGIN_QUICKMENU_BODY'));
+ self::addToTemplate($templateid, 'PLUGIN_QUICKMENU_FOOT', postVar('PLUGIN_QUICKMENU_FOOT'));
+
+ $data = array('fields' => array());
+ $manager->notify('AdminTemplateExtraFields', $data);
+ foreach ( $data['fields'] as $pfkey => $pfvalue )
+ {
+ foreach ( $pfvalue as $pffield => $pfdesc )
+ {
+ self::addToTemplate($templateid, $pffield, postVar($pffield));
+ }
+ }
+
+ // jump back to template edit
+ self::action_admintemplateedit(_TEMPLATE_UPDATED);
+ return;
+ }
+
+ /**
+ * Admin::action_admintemplatedelete()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_admintemplatedelete()
+ {
+ global $member, $manager;
+ $member->isAdmin() or self::disallow();
+
+ // TODO: check if template can be deleted
+ self::$skin->parse('admintemplatedelete');
return;
}
++<<<<<<< HEAD
+ /**
+ * @todo document this
+ */
+ function action_commentdeleteconfirm() {
+ global $member;
+
+ $commentid = intRequestVar('commentid');
+
+ // get item id first
+ $res = DB::getValue('SELECT citem FROM '.sql_table('comment') .' WHERE cnumber=' . $commentid);
+ $itemid = $res;
+
+ $error = $this->deleteOneComment($commentid);
+ if ($error)
+ $this->doError($error);
+
+ if ($member->canAlterItem($itemid))
+ $this->action_itemcommentlist($itemid);
+ else
+ $this->action_browseowncomments();
+ }
+
+ /**
+ * @todo document this
+ */
+ function deleteOneComment($commentid) {
+ global $member, $manager;
+
+ $commentid = intval($commentid);
+
+ if (!$member->canAlterComment($commentid))
+ return _ERROR_DISALLOWED;
+
+ $manager->notify('PreDeleteComment', array('commentid' => $commentid));
+
+ // delete the comments associated with the item
+ $query = 'DELETE FROM '.sql_table('comment').' WHERE cnumber=' . $commentid;
+ DB::execute($query);
+
+ $manager->notify('PostDeleteComment', array('commentid' => $commentid));
+
+ return '';
+ }
+
+ /**
+ * Admin::action_usermanagement()
+ *
+ * Usermanagement main
+ * @param void
+ * @return void
+ */
+ public function action_usermanagement()
+ {
+ global $member, $manager;
+
+ // check if allowed
+ $member->isAdmin() or $this->disallow();
+
+ $this->pagehead();
+
+ echo '(' . _BACKTOMANAGE . ")
\n";
+
+ echo '' . _MEMBERS_TITLE . " \n";
+
+ echo '' . _MEMBERS_CURRENT . " \n";
+
+ // show list of members with actions
+ $query = 'SELECT * FROM '.sql_table('member');
+ $template['content'] = 'memberlist';
+ $template['tabindex'] = 10;
+
+ $manager->loadClass("ENCAPSULATE");
+ $batch = new Batch('member');
+ $batch->showlist($query,'table',$template);
+
+ echo '' . _MEMBERS_NEW .' ';
+ echo "\n";
+ echo "\n";
+ echo "
\n";
+ $manager->addTicketHidden();
+
+ echo '
\n";
+ echo "
\n";
+ echo " \n";
+ $this->pagefoot();
+ return;
+ }
+
+ /**
+ * Edit member settings
+ */
+ function action_memberedit() {
+ $this->action_editmembersettings(intRequestVar('memberid'));
+ }
+
++=======
++>>>>>>> skinnable-master
/**
- * @todo document this
+ * Admin::action_admintemplatedeleteconfirm()
+ *
+ * @param void
+ * @return void
*/
- function action_editmembersettings($memberid = '') {
- global $member, $manager, $CONF;
+ static private function action_admintemplatedeleteconfirm()
+ {
+ global $member, $manager;
- if ($memberid == '')
- {
- $memberid = $member->getID();
- }
+ $templateid = intRequestVar('templateid');
+ $member->isAdmin() or self::disallow();
- // check if allowed
- ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();
+ $data = array('templateid' => $templateid);
+ $manager->notify('PreDeleteAdminTemplate', $data);
- $extrahead = '';
- $this->pagehead($extrahead);
+ // 1. delete description
+ $query = "DELETE FROM %s WHERE tdnumber=%s;";
+ $query = sprintf($query, sql_table('template_desc'), (integer) $templateid);
+ DB::execute($query);
++<<<<<<< HEAD
+ // show message to go back to member overview (only for admins)
+ if ($member->isAdmin())
+ {
+ echo '(' ._MEMBERS_BACKTOOVERVIEW. ') ';
+ }
+ else
+ {
+ echo '(' ._BACKHOME. ') ';
+ }
+ echo '' . _MEMBERS_EDIT . ' ';
+
+ $mem =& $manager->getMember($memberid);
+ ?>
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+
+
+
+ isAdmin()) { ?>
+
+ getDisplayName());
+ }
+ ?>
+
+
+
+
+
+ isAdmin()) { ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ isAdmin()) {
+ ?>
+
+
+ input_yesno('admin',$mem->isAdmin(),60); ?>
+
+
+ input_yesno('canlogin',$mem->canLogin(),70,1,0,_YES,_NO,$mem->isAdmin()); ?>
+
+
+
+
+
+
+
+
+
+
+ getLocale() || !in_array($mem->getLocale(), $locales) )
+ {
+ echo "" . Entity::hsc(_MEMBERS_USESITELANG) . " \n";
+ }
+ else
+ {
+ echo "" . Entity::hsc(_MEMBERS_USESITELANG) . " \n";
+ }
+
+ foreach( $locales as $locale )
+ {
+ if( $locale == $mem->getLocale() )
+ {
+ echo "{$locale} \n";
+ }
+ else
+ {
+ echo "{$locale} \n";
+ }
+ }
+ ?>
+
+
+
+
+
+
+ input_yesno('autosave', $mem->getAutosave(), 87); ?>
+
+ _insertPluginOptions('member',$memberid);
+ ?>
+
+
+
+
+
+
+
+
+
+ ',_PLUGINS_EXTRA,'';
+
+ $manager->notify(
+ 'MemberSettingsFormExtras',
+ array(
+ 'member' => &$mem
+ )
+ );
+ $this->pagefoot();
++=======
+ // 2. delete parts
+ $query = "DELETE FROM %s WHERE tdesc=%d;";
+ $query = sprintf($query, sql_table('template'), (integer) $templateid);
+ DB::execute($query);
+
+ $data = array('templateid' => $templateid);
+ $manager->notify('PostDeleteAdminTemplate', $data);
+
+ self::action_admintemplateoverview();
+ return;
++>>>>>>> skinnable-master
}
- /**
- * @todo document this
- */
- function action_changemembersettings() {
- global $member, $CONF, $manager;
-
- $memberid = intRequestVar('memberid');
-
- // check if allowed
- ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();
-
- $name = trim(strip_tags(postVar('name')));
- $realname = trim(strip_tags(postVar('realname')));
- $password = postVar('password');
- $repeatpassword = postVar('repeatpassword');
- $email = strip_tags(postVar('email'));
- $url = strip_tags(postVar('url'));
-
- # replaced eregi() below with preg_match(). ereg* functions are deprecated in PHP 5.3.0
- # original eregi: !eregi("^https?://", $url)
-
- // begin if: sometimes user didn't prefix the URL with http:// or https://, this cause a malformed URL. Let's fix it.
- if (!preg_match('#^https?://#', $url) )
+ /**
+ * Admin::action_admintemplatenew()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_admintemplatenew()
+ {
+ global $member;
+ $member->isAdmin() or self::disallow();
+ $name = postVar('name');
+ $desc = postVar('desc');
+
+ if ( !isValidTemplateName($name) )
{
++<<<<<<< HEAD
+ $url = 'http://' . $url;
+ }
+
+ $admin = postVar('admin');
+ $canlogin = postVar('canlogin');
+ $notes = strip_tags(postVar('notes'));
+ $locale = postVar('locale');
+
+ $mem =& $manager->getMember($memberid);
+
+ if ($CONF['AllowLoginEdit'] || $member->isAdmin()) {
+
+ if (!isValidDisplayName($name))
+ $this->error(_ERROR_BADNAME);
+
+ if (($name != $mem->getDisplayName()) && Member::exists($name))
+ $this->error(_ERROR_NICKNAMEINUSE);
+
+ if ($password != $repeatpassword)
+ $this->error(_ERROR_PASSWORDMISMATCH);
+
+ if ($password && (i18n::strlen($password) < 6))
+ $this->error(_ERROR_PASSWORDTOOSHORT);
+
+ if ($password) {
+ $pwdvalid = true;
+ $pwderror = '';
+ $manager->notify('PrePasswordSet',array('password' => $password, 'errormessage' => &$pwderror, 'valid' => &$pwdvalid));
+ if (!$pwdvalid) {
+ $this->error($pwderror);
+ }
+ }
++=======
+ self::error(_ERROR_BADTEMPLATENAME);
+ return;
++>>>>>>> skinnable-master
}
-
- if ( !NOTIFICATION::address_validation($email) )
+ else if ( !preg_match('#^admin/#', $name) )
{
- $this->error(_ERROR_BADMAILADDRESS);
+ self::error(_ERROR_BADADMINTEMPLATENAME);
+ return;
}
- if ( !$realname )
+ else if ( Template::exists($name) )
{
- $this->error(_ERROR_REALNAMEMISSING);
+ self::error(_ERROR_DUPTEMPLATENAME);
+ return;
}
++<<<<<<< HEAD
+ if ( ($locale != '') && (!in_array($locale, i18n::get_available_locale_list())) )
+ $this->error(_ERROR_NOSUCHTRANSLATION);
+
+ // check if there will remain at least one site member with both the logon and admin rights
+ // (check occurs when taking away one of these rights from such a member)
+ if ( (!$admin && $mem->isAdmin() && $mem->canLogin())
+ || (!$canlogin && $mem->isAdmin() && $mem->canLogin())
+ )
+ {
+ $r = DB::getResult('SELECT * FROM '.sql_table('member').' WHERE madmin=1 and mcanlogin=1');
+ if ($r->rowCount() < 2)
+ $this->error(_ERROR_ATLEASTONEADMIN);
+ }
+
+ if ($CONF['AllowLoginEdit'] || $member->isAdmin()) {
+ $mem->setDisplayName($name);
+ if ($password)
+ $mem->setPassword($password);
+ }
+
+ $oldEmail = $mem->getEmail();
+
+ $mem->setRealName($realname);
+ $mem->setEmail($email);
+ $mem->setURL($url);
+ $mem->setNotes($notes);
+ $mem->setLocale($locale);
+
+
+ // only allow super-admins to make changes to the admin status
+ if ($member->isAdmin()) {
+ $mem->setAdmin($admin);
+ $mem->setCanLogin($canlogin);
+ }
+
+ $autosave = postVar ('autosave');
+ $mem->setAutosave($autosave);
+
+ $mem->write();
+
+ // store plugin options
+ $aOptions = requestArray('plugoption');
+ NucleusPlugin::apply_plugin_options($aOptions);
+ $manager->notify('PostPluginOptionsUpdate',array('context' => 'member', 'memberid' => $memberid, 'member' => &$mem));
+
+ // if email changed, generate new password
+ if ($oldEmail != $mem->getEmail())
+ {
+ $mem->sendActivationLink('addresschange', $oldEmail);
+ // logout member
+ $mem->newCookieKey();
+
+ // only log out if the member being edited is the current member.
+ if ($member->getID() == $memberid)
+ $member->logout();
+ $this->action_login(_MSG_ACTIVATION_SENT, 0);
+ return;
+ }
+
+
+ if ( ( $mem->getID() == $member->getID() )
+ && ( $mem->getDisplayName() != $member->getDisplayName() )
+ ) {
+ $mem->newCookieKey();
+ $member->logout();
+ $this->action_login(_MSG_LOGINAGAIN, 0);
+ } else {
+ $this->action_overview(_MSG_SETTINGSCHANGED);
+ }
+ }
+
++=======
+
+ $newTemplateId = Template::createNew($name, $desc);
+ self::action_admintemplateoverview();
+ return;
+ }
+
++>>>>>>> skinnable-master
/**
- * Admin::action_memberadd()
+ * Admin::action_admintemplateclone()
*
* @param void
* @return void
- *
- */
- function action_memberadd()
+ */
+ static private function action_admintemplateclone()
{
- global $member, $manager;
+ global $member;
+ $templateid = intRequestVar('templateid');
+ $member->isAdmin() or self::disallow();
- // check if allowed
- $member->isAdmin() or $this->disallow();
+ // 1. read old template
+ $name = Template::getNameFromId($templateid);
+ $desc = Template::getDesc($templateid);
- if ( postVar('password') != postVar('repeatpassword') )
+ // 2. create desc thing
+ $name = $name . "cloned";
+
+ // if a template with that name already exists:
+ if ( Template::exists($name) )
{
- $this->error(_ERROR_PASSWORDMISMATCH);
+ $i = 1;
+ while ( Template::exists($name . $i) )
+ {
+ $i++;
+ }
+ $name .= $i;
}
- if ( i18n::strlen(postVar('password')) < 6 )
+ $newid = Template::createNew($name, $desc);
+
+ // 3. create clone
+ // go through parts of old template and add them to the new one
+ $query = "SELECT tpartname, tcontent FROM %s WHERE tdesc=%d;";
+ $query = sprintf($query, sql_table('template'), (integer) $templateid);
+
+ $res = DB::getResult($query);
+ foreach ( $res as $row )
{
- $this->error(_ERROR_PASSWORDTOOSHORT);
+ self::addToTemplate($newid, $row['tpartname'], $row['tcontent']);
}
- $res = Member::create(postVar('name'), postVar('realname'), postVar('password'), postVar('email'), postVar('url'), postVar('admin'), postVar('canlogin'), postVar('notes'));
- if ( $res != 1 )
+ self::action_admintemplateoverview();
+ return;
+ }
+
+ /**
+ * Admin::action_skinoverview()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_skinoverview()
+ {
+ global $member, $manager;
+
+ $member->isAdmin() or self::disallow();
+
+ self::$skin->parse('skinoverview');
+ return;
+ }
+
+ /**
+ * Admin::action_skinnew()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_skinnew()
+ {
+ global $member;
+
+ $member->isAdmin() or self::disallow();
+
+ $name = trim(postVar('name'));
+ $desc = trim(postVar('desc'));
+
+ if ( !isValidSkinName($name) )
+ {
+ self::error(_ERROR_BADSKINNAME);
+ return;
+ }
+ else if ( SKIN::exists($name) )
{
- $this->error($res);
+ self::error(_ERROR_DUPSKINNAME);
+ return;
}
- // fire PostRegister event
- $newmem = new Member();
- $newmem->readFromName(postVar('name'));
- $manager->notify('PostRegister',array('member' => &$newmem));
+ SKIN::createNew($name, $desc);
- $this->action_usermanagement();
+ self::action_skinoverview();
return;
}
-
++<<<<<<< HEAD
+
+ /**
+ * Account activation
+ *
+ * @author dekarma
+ */
+ function action_activate() {
+
+ $key = getVar('key');
+ $this->_showActivationPage($key);
+ }
+
+ /**
+ * @todo document this
+ */
+ function _showActivationPage($key, $message = '')
+ {
+ global $manager;
+
+ // clean up old activation keys
+ Member::cleanupActivationTable();
+
+ // get activation info
+ $info = Member::getActivationInfo($key);
+
+ if (!$info)
+ $this->error(_ERROR_ACTIVATE);
+
+ $mem =& $manager->getMember($info['vmember']);
+
+ if (!$mem)
+ $this->error(_ERROR_ACTIVATE);
+
+ $text = '';
+ $title = '';
+ $bNeedsPasswordChange = true;
+
+ switch ($info['vtype'])
+ {
+ case 'forgot':
+ $title = _ACTIVATE_FORGOT_TITLE;
+ $text = _ACTIVATE_FORGOT_TEXT;
+ break;
+ case 'register':
+ $title = _ACTIVATE_REGISTER_TITLE;
+ $text = _ACTIVATE_REGISTER_TEXT;
+ break;
+ case 'addresschange':
+ $title = _ACTIVATE_CHANGE_TITLE;
+ $text = _ACTIVATE_CHANGE_TEXT;
+ $bNeedsPasswordChange = false;
+ Member::activate($key);
+ break;
+ }
+
+ $aVars = array(
+ 'memberName' => Entity::hsc($mem->getDisplayName())
+ );
+ $title = Template::fill($title, $aVars);
+ $text = Template::fill($text, $aVars);
+
+ $this->pagehead();
+
+ echo '' , $title, ' ';
+ echo '' , $text, '
';
+
+ if ($message != '')
+ {
+ echo '',$message,'
';
+ }
+
+ if ($bNeedsPasswordChange)
+ {
+ ?>
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+
+
+ pagefoot();
+
+ }
+
+ /**
+ * Account activation - set password part
+ *
+ * @author dekarma
+ */
+ function action_activatesetpwd()
+ {
+ global $manager;
+ $key = postVar('key');
+
+ // clean up old activation keys
+ Member::cleanupActivationTable();
+
+ // get activation info
+ $info = Member::getActivationInfo($key);
+
+ if (!$info || ($info['type'] == 'addresschange'))
+ return $this->_showActivationPage($key, _ERROR_ACTIVATE);
+
+ $mem =& $manager->getMember($info['vmember']);
+
+ if (!$mem)
+ return $this->_showActivationPage($key, _ERROR_ACTIVATE);
+
+ $password = postVar('password');
+ $repeatpassword = postVar('repeatpassword');
+
+ if ($password != $repeatpassword)
+ return $this->_showActivationPage($key, _ERROR_PASSWORDMISMATCH);
+
+ if ($password && (i18n::strlen($password) < 6))
+ return $this->_showActivationPage($key, _ERROR_PASSWORDTOOSHORT);
+
+ if ($password) {
+ $pwdvalid = true;
+ $pwderror = '';
+ global $manager;
+ $manager->notify('PrePasswordSet',array('password' => $password, 'errormessage' => &$pwderror, 'valid' => &$pwdvalid));
+ if (!$pwdvalid) {
+ return $this->_showActivationPage($key,$pwderror);
+ }
+ }
+
+ $error = '';
+
+ $manager->notify('ValidateForm', array('type' => 'activation', 'member' => $mem, 'error' => &$error));
+ if ($error != '')
+ return $this->_showActivationPage($key, $error);
+
+
+ // set password
+ $mem->setPassword($password);
+ $mem->write();
+
+ // do the activation
+ Member::activate($key);
+
+ $this->pagehead();
+ echo '',_ACTIVATE_SUCCESS_TITLE,' ';
+ echo '',_ACTIVATE_SUCCESS_TEXT,'
';
+ $this->pagefoot();
+ }
+
/**
- * Admin::action_skinedit()
+ * Admin::action_manageteam()
*
+ * Manage team
* @param void
* @return void
*/
- static private function action_skinedit()
+ public function action_manageteam()
{
- global $member;
+ global $member, $manager;
- $member->isAdmin() or self::disallow();
+ $blogid = intRequestVar('blogid');
- self::$skin->parse('skinedit');
- return;
- }
-
- /**
- * Admin::action_skineditgeneral()
- *
- * @param void
- * @return void
- */
- static private function action_skineditgeneral()
- {
- global $member;
+ // check if allowed
+ $member->blogAdminRights($blogid) or $this->disallow();
- $skinid = intRequestVar('skinid');
+ $this->pagehead();
- $member->isAdmin() or self::disallow();
+ echo "(" . _BACK_TO_BLOGSETTINGS . ")
\n";
- $error = self::skineditgeneral($skinid);
- if ( $error )
- {
- self::error($error);
- return;
- }
+ echo '' . _TEAM_TITLE . getBlogNameFromID($blogid) . " \n";
- self::action_skinedit();
- return;
- }
-
- static private function action_skinedittype($msg = '')
- {
- global $member;
+ echo '' . _TEAM_CURRENT . " \n";
- $member->isAdmin() or self::disallow();
+ $query = 'SELECT tblog, tmember, mname, mrealname, memail, tadmin'
+ . ' FROM '.sql_table('member').', '.sql_table('team')
+ . ' WHERE tmember=mnumber and tblog=' . $blogid;
- if ( $msg )
- {
- self::$headMess = $msg;
- }
+ $template['content'] = 'teamlist';
+ $template['tabindex'] = 10;
- $type = requestVar('type');
- $type = trim($type);
- $type = strtolower($type);
+ $manager->loadClass("ENCAPSULATE");
+ $batch = new Batch('team');
+ $batch->showlist($query, 'table', $template);
- if ( !isValidShortName($type) )
- {
- self::error(_ERROR_SKIN_PARTS_SPECIAL_FORMAT);
- return;
- }
+ echo '' . _TEAM_ADDNEW . " \n";
+
+ echo "\n";
+ echo "\n";
+ echo " \n";
+
+ $this->pagefoot();
+ return;
+ }
+
+ /**
+ * Add member to team
+ */
+ function action_teamaddmember() {
+ global $member, $manager;
+
+ $memberid = intPostVar('memberid');
+ $blogid = intPostVar('blogid');
+ $admin = intPostVar('admin');
+
+ // check if allowed
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ $blog =& $manager->getBlog($blogid);
+ if (!$blog->addTeamMember($memberid, $admin))
+ $this->error(_ERROR_ALREADYONTEAM);
+
+ $this->action_manageteam();
+
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_teamdelete() {
+ global $member, $manager;
+
+ $memberid = intRequestVar('memberid');
+ $blogid = intRequestVar('blogid');
+
+ // check if allowed
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ $teammem =& $manager->getMember($memberid);
+ $blog =& $manager->getBlog($blogid);
+
+ $this->pagehead();
+ ?>
+
+
+ getDisplayName()) ?> getName())) ?>
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_teamdeleteconfirm() {
+ global $member;
+
+ $memberid = intRequestVar('memberid');
+ $blogid = intRequestVar('blogid');
+
+ $error = $this->deleteOneTeamMember($blogid, $memberid);
+ if ($error)
+ $this->error($error);
+
+
+ $this->action_manageteam();
+ }
+
+ /**
+ * @todo document this
+ */
+ function deleteOneTeamMember($blogid, $memberid) {
+ global $member, $manager;
+
+ $blogid = intval($blogid);
+ $memberid = intval($memberid);
+
+ // check if allowed
+ if (!$member->blogAdminRights($blogid))
+ return _ERROR_DISALLOWED;
+
+ // check if: - there remains at least one blog admin
+ // - (there remains at least one team member)
+ $tmem =& $manager->getMember($memberid);
+
+ $manager->notify('PreDeleteTeamMember', array('member' => &$tmem, 'blogid' => $blogid));
+
+ if ($tmem->isBlogAdmin($blogid)) {
+ // check if there are more blog members left and at least one admin
+ // (check for at least two admins before deletion)
+ $query = 'SELECT * FROM '.sql_table('team') . ' WHERE tblog='.$blogid.' and tadmin=1';
+ $r = DB::getResult($query);
+ if ($r->rowCount() < 2)
+ return _ERROR_ATLEASTONEBLOGADMIN;
+ }
+
+ $query = 'DELETE FROM '.sql_table('team')." WHERE tblog=$blogid and tmember=$memberid";
+ DB::execute($query);
+
+ $manager->notify('PostDeleteTeamMember', array('member' => &$tmem, 'blogid' => $blogid));
+
+ return '';
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_teamchangeadmin() {
+ global $manager, $member;
+
+ $blogid = intRequestVar('blogid');
+ $memberid = intRequestVar('memberid');
+
+ // check if allowed
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ $mem =& $manager->getMember($memberid);
+
+ // don't allow when there is only one admin at this moment
+ if ($mem->isBlogAdmin($blogid)) {
+ $r = DB::getResult('SELECT * FROM '.sql_table('team') . " WHERE tblog=$blogid and tadmin=1");
+ if ($r->rowCount() == 1)
+ $this->error(_ERROR_ATLEASTONEBLOGADMIN);
+ }
+
+ if ($mem->isBlogAdmin($blogid))
+ $newval = 0;
+ else
+ $newval = 1;
+
+ $query = 'UPDATE '.sql_table('team') ." SET tadmin=$newval WHERE tblog=$blogid and tmember=$memberid";
+ DB::execute($query);
+
+ // only show manageteam if member did not change its own admin privileges
+ if ($member->isBlogAdmin($blogid))
+ $this->action_manageteam();
+ else
+ $this->action_overview(_MSG_ADMINCHANGED);
+ }
/**
- * Admin::action_skinupdate()
+ * Admin::action_blogsettings()
*
* @param void
* @return void
*/
- static private function action_skinupdate()
+ public function action_blogsettings()
{
- global $manager, $member;
+ global $member, $manager;
- $skinid = intRequestVar('skinid');
- $content = trim(postVar('content'));
- $type = postVar('type');
+ $blogid = intRequestVar('blogid');
- $member->isAdmin() or self::disallow();
+ // check if allowed
+ $member->blogAdminRights($blogid) or $this->disallow();
- $skin =& $manager->getSKIN($skinid);
- $skin->update($type, $content);
+ $blog =& $manager->getBlog($blogid);
- self::action_skinedittype(_SKIN_UPDATED);
- return;
- }
-
- /**
- * Admin::action_skindelete()
- *
- * @param void
- * @return void
- */
- static private function action_skindelete()
- {
- global $CONF, $member;
+ $extrahead = "\n";
+ $this->pagehead($extrahead);
- $member->isAdmin() or self::disallow();
+ echo '(' . _BACKHOME . ")
\n";
+ echo '' . _EBLOG_TITLE . ": '{$this->bloglink($blog)}' \n";
- $skinid = intRequestVar('skinid');
+ echo '' . _EBLOG_TEAM_TITLE . " \n";
- // don't allow default skin to be deleted
- if ( $skinid == $CONF['BaseSkin'] )
- {
- self::error(_ERROR_DEFAULTSKIN);
+ echo '' . _EBLOG_CURRENT_TEAM_MEMBER;
+
+ $query = "SELECT mname, mrealname FROM %s, %s WHERE mnumber=tmember AND tblog=%d;";
+ $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
+ $res = DB::getResult($query);
+ $aMemberNames = array();
+ foreach ( $res as $row )
+ {
+ $aMemberNames[] = Entity::hsc($row['mname']) . ' (' . Entity::hsc($row['mrealname']). ')';
+ }
+ echo implode(',', $aMemberNames);
+
+ echo "
\n";
+ echo '';
+ echo '' . _EBLOG_TEAM_TEXT . ' ';
+ echo "
\n";
+
+ echo '' . _EBLOG_SETTINGS_TITLE . " \n";
+
+ echo "\n";
+ echo "\n";
+
+ echo "
\n";
+ $manager->addTicketHidden() . "\n";
+ echo "
\n";
+
+ echo '
' . "\n";
+ echo "\n";
+ echo "\n";
+ echo '' . _EBLOG_CHANGE . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_CHANGE . " \n";
+ echo ' ' . " \n";
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo "\n";
+ echo '' . _EBLOG_NAME . " \n";
+ echo ' ' . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_SHORTNAME;
+ help('shortblogname');
+ echo _EBLOG_SHORTNAME_EXTRA;
+ echo " \n";
+ echo ' ' . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_DESC . " \n";
+ echo ' ' . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_URL . " \n";
+ echo ' ' . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_DEFSKIN;
+ help('blogdefaultskin');
+ echo " \n";
+ echo "\n";
+
+ $query = 'SELECT sdname as text, sdnumber as value FROM ' . sql_table('skin_desc');
+ $template['name'] = 'defskin';
+ $template['selected'] = $blog->getDefaultSkin();
+ $template['tabindex'] = 50;
+ showlist($query, 'select', $template);
+
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_LINEBREAKS;
+ help('convertbreaks');
+ echo " \n";
+ echo '';
+ $this->input_yesno('convertbreaks',$blog->convertBreaks(),55);
+ echo " \n";
+ echo " \n";
+
+ echo "\n";
+ echo '' . _EBLOG_ALLOWPASTPOSTING;
+ help('allowpastposting');
+ echo " \n";
+ echo '';
+ $this->input_yesno('allowpastposting',$blog->allowPastPosting(),57);
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_DISABLECOMMENTS;
+ echo " \n";
+ echo '';
+ $this->input_yesno('comments', $blog->commentsEnabled(), 60);
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_ANONYMOUS . " \n";
+ echo '';
+ $this->input_yesno('public',$blog->isPublic(),70);
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_REQUIREDEMAIL . " \n";
+ echo '';
+ $this->input_yesno('reqemail', $blog->emailRequired(),72);
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_NOTIFY;
+ help('blognotify');
+ echo " \n";
+ echo ' ' . " \n";
+ echo " \n";
+
+ echo "\n";
+ echo '' . _EBLOG_NOTIFY_ON . " \n";
+ echo "\n";
+
+ if ( !$blog->notifyOnComment() )
+ {
+ echo "\n";
+ }
+ else
+ {
+ echo "\n";
+ }
+ echo '' . _EBLOG_NOTIFY_COMMENT . " \n";
+
+ if ( !$blog->notifyOnVote() )
+ {
+ echo " \n";
+ }
+ else
+ {
+ echo " \n";
+ }
+
+ echo '' . _EBLOG_NOTIFY_KARMA . " \n";
+
+ if ( !$blog->notifyOnNewItem() )
+ {
+ echo " \n";
+
+ }
+ else
+ {
+ echo " \n";
+ }
+
+ echo '' . _EBLOG_NOTIFY_ITEM . " \n";
+
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_MAXCOMMENTS;
+ help('blogmaxcomments');
+ echo " \n";
+ echo ' ' . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_UPDATE;
+ help('blogupdatefile');
+ echo " \n";
+ echo ' ' . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_DEFCAT . " \n";
+ echo "\n";
+ $query = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";
+ $query = sprintf($query, sql_table('category'), (integer) $blog->getID());
+ $template['name'] = 'defcat';
+ $template['selected'] = $blog->getDefaultCategory();
+ $template['tabindex'] = 110;
+ showlist($query, 'select', $template);
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_OFFSET;
+ help('blogtimeoffset');
+ echo " \n";
+ echo _EBLOG_STIME;
+ echo ' ' . i18n::formatted_datetime('%H:%M', time()) . ' ';
+ echo _EBLOG_BTIME;
+ echo '' . i18n::formatted_datetime('%H:%M', $blog->getCorrectTime()) . ' ';
+ echo " \n";
+ echo ' ' . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _EBLOG_SEARCH;
+ help('blogsearchable');
+ echo " \n";
+ echo '';
+ $this->input_yesno('searchable', $blog->getSearchable(), 122);
+ echo " \n";
+ echo " \n";
+
+ // plugin options
+ $this->_insertPluginOptions('blog', $blogid);
+
+ echo " \n";
+ echo "
\n";
+
+ echo "
\n";
+ echo " \n";
+
+ echo '' . _EBLOG_CAT_TITLE . " \n";
+
+ $query = 'SELECT * FROM '.sql_table('category').' WHERE cblog='.$blog->getID().' ORDER BY cname';
+ $template['content'] = 'categorylist';
+ $template['tabindex'] = 200;
+
+ $manager->loadClass("ENCAPSULATE");
+ $batch = new Batch('category');
+ $batch->showlist($query,'table',$template);
+
+ echo "\n";
+ echo "\n";
+ echo " \n";
+
+ echo '' . _PLUGINS_EXTRA . " \n";
+ $manager->notify('BlogSettingsFormExtras', array('blog' => &$blog));
+
+ $this->pagefoot();
+ return;
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_categorynew() {
+ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ $cname = postVar('cname');
+ $cdesc = postVar('cdesc');
+
+ if (!isValidCategoryName($cname))
+ $this->error(_ERROR_BADCATEGORYNAME);
+
+ $query = 'SELECT * FROM '.sql_table('category') . ' WHERE cname=' . DB::quoteValue($cname).' and cblog=' . intval($blogid);
+ $res = DB::getResult($query);
+ if ($res->rowCount() > 0)
+ $this->error(_ERROR_DUPCATEGORYNAME);
+
+ $blog =& $manager->getBlog($blogid);
+ $newCatID = $blog->createNewCategory($cname, $cdesc);
+
+ $this->action_blogsettings();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_categoryedit($catid = '', $blogid = '', $desturl = '') {
+ global $member, $manager;
+
+ if ($blogid == '')
+ $blogid = intGetVar('blogid');
+ else
+ $blogid = intval($blogid);
+ if ($catid == '')
+ $catid = intGetVar('catid');
+ else
+ $catid = intval($catid);
+
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ $res = DB::getRow('SELECT * FROM '.sql_table('category')." WHERE cblog=$blogid AND catid=$catid");
+
+ $cname = $res['cname'];
+ $cdesc = $res['cdesc'];
+
+ $extrahead = '';
+ $this->pagehead($extrahead);
+
+ echo "(",_BACK_TO_BLOGSETTINGS,")
";
+
+ ?>
+ ''
+
+
+
+
+
+ addTicketHidden(); ?>
+
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_categoryupdate() {
+ global $member, $manager;
+
+ $blogid = intPostVar('blogid');
+ $catid = intPostVar('catid');
+ $cname = postVar('cname');
+ $cdesc = postVar('cdesc');
+ $desturl = postVar('desturl');
+
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ if (!isValidCategoryName($cname))
+ $this->error(_ERROR_BADCATEGORYNAME);
+
+ $query = 'SELECT * FROM '.sql_table('category').' WHERE cname=' . DB::quoteValue($cname).' and cblog=' . intval($blogid) . " and not(catid=$catid)";
+ $res = DB::getResult($query);
+ if ($res->rowCount() > 0)
+ $this->error(_ERROR_DUPCATEGORYNAME);
+
+ $query = 'UPDATE '.sql_table('category').' SET'
+ . ' cname=' . DB::quoteValue($cname) . ','
+ . ' cdesc=' . DB::quoteValue($cdesc)
+ . ' WHERE catid=' . $catid;
+
+ DB::execute($query);
+
+ // store plugin options
+ $aOptions = requestArray('plugoption');
+ NucleusPlugin::apply_plugin_options($aOptions);
+ $manager->notify('PostPluginOptionsUpdate',array('context' => 'category', 'catid' => $catid));
+
+
+ if ($desturl) {
+ redirect($desturl);
+ exit;
+ } else {
+ $this->action_blogsettings();
+ }
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_categorydelete() {
+ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+ $catid = intRequestVar('catid');
+
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ $blog =& $manager->getBlog($blogid);
+
+ // check if the category is valid
+ if (!$blog->isValidCategory($catid))
+ $this->error(_ERROR_NOSUCHCATEGORY);
+
+ // don't allow deletion of default category
+ if ($blog->getDefaultCategory() == $catid)
+ $this->error(_ERROR_DELETEDEFCATEGORY);
+
+ // check if catid is the only category left for blogid
+ $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid;
+ $res = DB::getResult($query);
+ if ($res->rowCount() == 1)
+ $this->error(_ERROR_DELETELASTCATEGORY);
+
+
+ $this->pagehead();
+ ?>
+
+
+
+ getCategoryName($catid)) ?>
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_categorydeleteconfirm() {
+ global $member, $manager;
+
+ $blogid = intRequestVar('blogid');
+ $catid = intRequestVar('catid');
+
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ $error = $this->deleteOneCategory($catid);
+ if ($error)
+ $this->error($error);
+
+ $this->action_blogsettings();
+ }
++=======
+
+ /**
- * Admin::deleteOneCategory()
- * Delete a category by its id
++ * Admin::action_skinedit()
+ *
- * @param String $catid category id for deleting
- * @return Void
++ * @param void
++ * @return void
+ */
- function deleteOneCategory($catid)
++ static private function action_skinedit()
++ {
++ global $member;
++
++ $member->isAdmin() or self::disallow();
++
++ self::$skin->parse('skinedit');
++ return;
++ }
++
++ /**
++ * Admin::action_skineditgeneral()
++ *
++ * @param void
++ * @return void
++ */
++ static private function action_skineditgeneral()
++ {
++ global $member;
++
++ $skinid = intRequestVar('skinid');
++
++ $member->isAdmin() or self::disallow();
++
++ $error = self::skineditgeneral($skinid);
++ if ( $error )
++ {
++ self::error($error);
++ return;
++ }
++
++ self::action_skinedit();
++ return;
++ }
++
++ static private function action_skinedittype($msg = '')
++ {
++ global $member;
++
++ $member->isAdmin() or self::disallow();
++
++ if ( $msg )
++ {
++ self::$headMess = $msg;
++ }
++
++ $type = requestVar('type');
++ $type = trim($type);
++ $type = strtolower($type);
++
++ if ( !isValidShortName($type) )
++ {
++ self::error(_ERROR_SKIN_PARTS_SPECIAL_FORMAT);
++ return;
++ }
++
++ self::$skin->parse('skinedittype');
++ return;
++ }
++>>>>>>> skinnable-master
++
++ /**
++ * Admin::action_skinupdate()
++ *
++ * @param void
++ * @return void
++ */
++ static private function action_skinupdate()
+ {
+ global $manager, $member;
+
- $catid = intval($catid);
- $blogid = getBlogIDFromCatID($catid);
++ $skinid = intRequestVar('skinid');
++ $content = trim(postVar('content'));
++ $type = postVar('type');
+
- if ( !$member->blogAdminRights($blogid) )
++ $member->isAdmin() or self::disallow();
++
++ $skin =& $manager->getSKIN($skinid);
++ $skin->update($type, $content);
++
++ self::action_skinedittype(_SKIN_UPDATED);
++ return;
++ }
++
++ /**
++ * Admin::action_skindelete()
++ *
++ * @param void
++ * @return void
++ */
++ static private function action_skindelete()
++ {
++ global $CONF, $member;
++
++ $member->isAdmin() or self::disallow();
++
++ $skinid = intRequestVar('skinid');
++
++ // don't allow default skin to be deleted
++ if ( $skinid == $CONF['BaseSkin'] )
+ {
- return ERROR_DISALLOWED;
++ self::error(_ERROR_DEFAULTSKIN);
+ return;
}
- // get blog
- $blog =& $manager->getBlog($blogid);
+ // don't allow deletion of default skins for blogs
+ $query = "SELECT bname FROM %s WHERE bdefskin=%d";
+ $query = sprintf($query, sql_table('blog'), (integer) $skinid);
- // check if the category is valid
- if ( !$blog || !$blog->isValidCategory($catid) )
+ $name = DB::getValue($query);
+ if ( $name )
{
- return _ERROR_NOSUCHCATEGORY;
+ self::error(_ERROR_SKINDEFDELETE . Entity::hsc($name));
+ return;
}
- $destcatid = $blog->getDefaultCategory();
+ self::$skin->parse('skindelete');
+ return;
+ }
+
+ /**
+ * Admin::action_skindeleteconfirm()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_skindeleteconfirm()
+ {
+ global $member, $CONF;
- // don't allow deletion of default category
- if ( $blog->getDefaultCategory() == $catid )
+ $member->isAdmin() or self::disallow();
+
+ $skinid = intRequestVar('skinid');
+
+ // don't allow default skin to be deleted
+ if ( $skinid == $CONF['BaseSkin'] )
{
- return _ERROR_DELETEDEFCATEGORY;
+ self::error(_ERROR_DEFAULTSKIN);
+ return;
}
++<<<<<<< HEAD
+ // check if catid is the only category left for blogid
+ $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid;
+ $res = DB::getResult($query);
+ if ( $res->rowCount() == 1 )
++=======
+ // don't allow deletion of default skins for blogs
+ $query = "SELECT bname FROM %s WHERE bdefskin=%d;";
+ $query = sprintf($query, sql_table('blog'), (integer) $skinid);
+
+ $name = DB::getValue($query);
+ if ( $name )
+ {
+ self::error(_ERROR_SKINDEFDELETE . Entity::hsc($name));
+ return;
+ }
+
+ self::skindeleteconfirm($skinid);
+
+ self::action_skinoverview();
+ return;
+ }
+
+ /**
+ * Admin::action_skinremovetype()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_skinremovetype()
+ {
+ global $member, $CONF;
+
+ $member->isAdmin() or self::disallow();
+
+ $skinid = intRequestVar('skinid');
+ $skintype = requestVar('type');
+
+ if ( !isValidShortName($skintype) )
++>>>>>>> skinnable-master
{
- return _ERROR_DELETELASTCATEGORY;
+ self::error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);
+ return;
}
- $manager->notify('PreDeleteCategory', array('catid' => $catid));
+ self::$skin->parse('skinremovetype');
+ return;
+ }
+
+ /**
+ * Admin::action_skinremovetypeconfirm()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_skinremovetypeconfirm()
+ {
+ global $member;
++<<<<<<< HEAD
+ // change category for all items to the default category
+ $query = 'UPDATE '.sql_table('item')." SET icat=$destcatid WHERE icat=$catid";
+ DB::execute($query);
++=======
+ $member->isAdmin() or self::disallow();
++>>>>>>> skinnable-master
- // delete all associated plugin options
- NucleusPlugin::delete_option_values('category', $catid);
+ $skinid = intRequestVar('skinid');
+ $skintype = requestVar('type');
++<<<<<<< HEAD
+ // delete category
+ $query = 'DELETE FROM '.sql_table('category').' WHERE catid=' .$catid;
+ DB::execute($query);
++=======
+ $error = self::skinremovetypeconfirm($skinid, $skintype);
+ if ( $error )
+ {
+ self::error($error);
+ return;
+ }
++>>>>>>> skinnable-master
- $manager->notify('PostDeleteCategory', array('catid' => $catid));
+ self::action_skinedit();
return;
}
/**
- * Admin::action_blogsettingsupdate
- * Updating blog settings
+ * Admin::action_skinclone()
*
- * @param Void
- * @return Void
+ * @param void
+ * @return void
*/
- function action_blogsettingsupdate()
+ static private function action_skinclone()
{
- global $member, $manager;
+ global $member;
- $blogid = intRequestVar('blogid');
+ $member->isAdmin() or self::disallow();
- $member->blogAdminRights($blogid) or $this->disallow();
+ $skinid = intRequestVar('skinid');
- $blog =& $manager->getBlog($blogid);
+ self::skinclone($skinid);
- $notify_address = trim(postVar('notify'));
- $shortname = trim(postVar('shortname'));
- $updatefile = trim(postVar('update'));
+ self::action_skinoverview();
+ return;
+ }
+
+ /**
+ * Admin::action_adminskinoverview()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskinoverview()
+ {
+ global $member;
- $notifyComment = intPostVar('notifyComment');
- $notifyVote = intPostVar('notifyVote');
- $notifyNewItem = intPostVar('notifyNewItem');
+ $member->isAdmin() or self::disallow();
- if ( $notifyComment == 0 )
+ self::$skin->parse('adminskinoverview');
+ return;
+ }
+
+ /**
+ * Admin::action_adminskinnew()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskinnew()
+ {
+ global $member;
+
+ $member->isAdmin() or self::disallow();
+
+ $name = trim(postVar('name'));
+ $desc = trim(postVar('desc'));
+
+ if ( !isValidSkinName($name) )
{
- $notifyComment = 1;
+ self::error(_ERROR_BADSKINNAME);
+ return;
}
- if ( $notifyVote == 0 )
+ else if ( !preg_match('#^admin/#', $name) )
{
- $notifyVote = 1;
+ self::error(_ERROR_BADADMINSKINNAME);
+ return;
}
- if ( $notifyNewItem == 0 )
+ else if ( Skin::exists($name) )
{
- $notifyNewItem = 1;
+ self::error(_ERROR_DUPSKINNAME);
+ return;
}
- $notifyType = $notifyComment * $notifyVote * $notifyNewItem;
- if ( $notify_address && !NOTIFICATION::address_validation($notify_address) )
+ Skin::createNew($name, $desc);
+
+ self::action_adminskinoverview();
+ return;
+ }
+
+ /**
+ * Admin::action_adminskinedit()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskinedit()
+ {
+ global $member;
+
+ $member->isAdmin() or self::disallow();
+
+ self::$skin->parse('adminskinedit');
+
+ return;
+ }
+
+ /**
+ * Admin::action_adminskineditgeneral()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskineditgeneral()
+ {
+ global $member;
+
+ $skinid = intRequestVar('skinid');
+
+ $member->isAdmin() or self::disallow();
+
+ $error = self::skineditgeneral($skinid, 'AdminActions');
+ if ( $error )
{
- $this->error(_ERROR_BADNOTIFY);
+ self::error($error);
+ return;
}
- if ( !isValidShortName($shortname) )
+ self::action_adminskinedit();
+ return;
+ }
+
+ /**
+ * Admin::action_adminskinedittype()
+ *
+ * @param string $msg message for pageheader
+ * @return void
+ */
+ static private function action_adminskinedittype($msg = '')
+ {
+ global $member;
+
+ $member->isAdmin() or self::disallow();
+
+ if ( $msg )
{
- $this->error(_ERROR_BADSHORTBLOGNAME);
+ self::$headMess = $msg;
}
+ $type = requestVar('type');
+ $type = trim($type);
+ $type = strtolower($type);
- if ( ($blog->getShortName() != $shortname) && $manager->existsBlog($shortname) )
+ if ( !isValidShortName($type) )
{
- $this->error(_ERROR_DUPSHORTBLOGNAME);
+ self::error(_ERROR_SKIN_PARTS_SPECIAL_FORMAT);
+ return;
}
- // check if update file is writable
- if ( $updatefile && !is_writeable($updatefile) )
+
+ self::$skin->parse('adminskinedittype');
+ return;
+ }
+
+ /**
+ * Admin::action_adminskinupdate()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskinupdate()
+ {
+ global $manager, $member;
+
+ $skinid = intRequestVar('skinid');
+ $content = trim(postVar('content'));
+ $type = postVar('type');
+
+ $member->isAdmin() or self::disallow();
+
+ $skin =& $manager->getSkin($skinid, 'AdminActions', 'AdminSkin');
+ $skin->update($type, $content);
+
+ self::action_adminskinedittype(_SKIN_UPDATED);
+ return;
+ }
+
+ /**
+ * Admin::action_adminskindelete()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskindelete()
+ {
+ global $CONF, $member;
+
+ $member->isAdmin() or self::disallow();
+
+ $skinid = intRequestVar('skinid');
+
+ // don't allow default skin to be deleted
+ if ( $skinid == $CONF['AdminSkin'] || $skinid == $CONF['BookmarkletSkin'] )
{
- $this->error(_ERROR_UPDATEFILE);
+ self::error(_ERROR_DEFAULTSKIN);
+ return;
}
- $blog->setName(trim(postVar('name')));
- $blog->setShortName($shortname);
- $blog->setNotifyAddress($notify_address);
- $blog->setNotifyType($notifyType);
- $blog->setMaxComments(postVar('maxcomments'));
- $blog->setCommentsEnabled(postVar('comments'));
- $blog->setTimeOffset(postVar('timeoffset'));
- $blog->setUpdateFile($updatefile);
- $blog->setURL(trim(postVar('url')));
- $blog->setDefaultSkin(intPostVar('defskin'));
- $blog->setDescription(trim(postVar('desc')));
- $blog->setPublic(postVar('public'));
- $blog->setConvertBreaks(intPostVar('convertbreaks'));
- $blog->setAllowPastPosting(intPostVar('allowpastposting'));
- $blog->setDefaultCategory(intPostVar('defcat'));
- $blog->setSearchable(intPostVar('searchable'));
- $blog->setEmailRequired(intPostVar('reqemail'));
- $blog->writeSettings();
+ /* don't allow if someone use it as a default*/
+ $query = 'SELECT * FROM %s WHERE madminskin = %d or mbkmklt = %d;';
+ $res = DB::getResult(sprintf($query, sql_table('member'), $skinid, $skinid));
- // store plugin options
- $aOptions = requestArray('plugoption');
- NucleusPlugin::apply_plugin_options($aOptions);
- $manager->notify('PostPluginOptionsUpdate',array('context' => 'blog', 'blogid' => $blogid, 'blog' => &$blog));
+ $members = array();
+ while ( $row = $res->fetch() ) {
+ $members[] = $row['mrealname'];
+ }
+ if ( count($members) )
+ {
+ self::error(_ERROR_SKINDEFDELETE . implode(' ' . _AND . ' ', $members));
+ return;
+ }
+
+ self::$skin->parse('adminskindelete');
+ return;
+ }
+
+ /**
+ * Admin::action_adminskindeleteconfirm()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskindeleteconfirm()
+ {
+ global $member, $CONF;
+
+ $member->isAdmin() or self::disallow();
+
+ $skinid = intRequestVar('skinid');
+
+ // don't allow default skin to be deleted
+ if ( $skinid == $CONF['AdminSkin'] || $skinid == $CONF['BookmarkletSkin'] )
+ {
+ self::error(_ERROR_DEFAULTSKIN);
+ return;
+ }
+
+ /* don't allow if someone use it as a default*/
+ $query = 'SELECT * FROM %s WHERE madminskin = %d or mbkmklt = %d;';
+ $res = DB::getResult(sprintf($query, sql_table('member'), $skinid, $skinid));
+
+ $members = array();
+ while ( $row = $res->fetch() ) {
+ $members[] = $row['mrealname'];
+ }
+ if ( count($members) )
+ {
+ self::error(_ERROR_SKINDEFDELETE . implode(' ' . _AND . ' ', $members));
+ return;
+ }
+
+ self::skindeleteconfirm($skinid);
+
+ self::action_adminskinoverview();
+ return;
+ }
+
+ /**
+ * Admin::action_adminskinremovetype()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskinremovetype()
+ {
+ global $member, $CONF;
+
+ $member->isAdmin() or self::disallow();
+
+ $skinid = intRequestVar('skinid');
+ $skintype = requestVar('type');
- $this->action_overview(_MSG_SETTINGSCHANGED);
+ if ( !isValidShortName($skintype) )
+ {
+ self::error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);
+ return;
+ }
+
+ self::$skin->parse('adminskinremovetype');
return;
}
++<<<<<<< HEAD
+
+ /**
+ * @todo document this
+ */
+ function action_deleteblog() {
+ global $member, $CONF, $manager;
+
+ $blogid = intRequestVar('blogid');
+
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ // check if blog is default blog
+ if ($CONF['DefaultBlog'] == $blogid)
+ $this->error(_ERROR_DELDEFBLOG);
+
+ $blog =& $manager->getBlog($blogid);
+
+ $this->pagehead();
+ ?>
+
+
+
+
+
+
+ getName()) ?>
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+ pagefoot();
+ }
++=======
++>>>>>>> skinnable-master
/**
- * Admin::action_deleteblogconfirm()
- * Delete Blog
+ * Admin::action_adminskinremovetypeconfirm()
*
- * @param Void
- * @return Void
+ * @param void
+ * @return void
*/
- function action_deleteblogconfirm()
+ static private function action_adminskinremovetypeconfirm()
{
- global $member, $CONF, $manager;
+ global $member;
- $blogid = intRequestVar('blogid');
- $manager->notify('PreDeleteBlog', array('blogid' => $blogid));
- $member->blogAdminRights($blogid) or $this->disallow();
+ $member->isAdmin() or self::disallow();
- // check if blog is default blog
- if ( $CONF['DefaultBlog'] == $blogid )
+ $skinid = intRequestVar('skinid');
+ $skintype = requestVar('type');
+
+ $error = self::skinremovetypeconfirm($skinid, $skintype);
+ if ( $error )
{
- $this->error(_ERROR_DELDEFBLOG);
+ self::error($error);
+ return;
}
++<<<<<<< HEAD
+ // delete all comments
+ $query = 'DELETE FROM '.sql_table('comment').' WHERE cblog='.$blogid;
+ DB::execute($query);
+
+ // delete all items
+ $query = 'DELETE FROM '.sql_table('item').' WHERE iblog='.$blogid;
+ DB::execute($query);
+
+ // delete all team members
+ $query = 'DELETE FROM '.sql_table('team').' WHERE tblog='.$blogid;
+ DB::execute($query);
+
+ // delete all bans
+ $query = 'DELETE FROM '.sql_table('ban').' WHERE blogid='.$blogid;
+ DB::execute($query);
+
+ // delete all categories
+ $query = 'DELETE FROM '.sql_table('category').' WHERE cblog='.$blogid;
+ DB::execute($query);
++=======
+ self::action_adminskinedit();
+ return;
+ }
+
+ /**
+ * Admin::action_adminskinclone()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskinclone()
+ {
+ global $member;
- // delete all associated plugin options
- NucleusPlugin::delete_option_values('blog', $blogid);
+ $member->isAdmin() or self::disallow();
+
+ $skinid = intRequestVar('skinid');
++>>>>>>> skinnable-master
+
+ self::skinclone($skinid, 'AdminActions');
++<<<<<<< HEAD
+ // delete the blog itself
+ $query = 'DELETE FROM '.sql_table('blog').' WHERE bnumber='.$blogid;
+ DB::execute($query);
++=======
+ self::action_adminskinoverview();
+ return;
+ }
+
+ /**
+ * Admin::action_adminskinieoverview()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_adminskinieoverview()
+ {
+ global $member;
++>>>>>>> skinnable-master
- $manager->notify('PostDeleteBlog', array('blogid' => $blogid));
+ $member->isAdmin() or self::disallow();
- $this->action_overview(_DELETED_BLOG);
+ self::$skin->parse('adminskinieoverview');
return;
}
++<<<<<<< HEAD
+
+ /**
+ * @todo document this
+ */
+ function action_memberdelete() {
+ global $member, $manager;
+
+ $memberid = intRequestVar('memberid');
+
+ ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();
+
+ $mem =& $manager->getMember($memberid);
+
+ $this->pagehead();
+ ?>
+
+
+ getDisplayName()) ?>
+
+
+
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_memberdeleteconfirm() {
+ global $member;
++=======
++>>>>>>> skinnable-master
- $memberid = intRequestVar('memberid');
-
- ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();
-
- $error = $this->deleteOneMember($memberid);
- if ($error)
- $this->error($error);
-
- if ($member->isAdmin())
- $this->action_usermanagement();
- else
- $this->action_overview(_DELETED_MEMBER);
- }
-
/**
- * Admin::deleteOneMember()
- * Delete a member by id
+ * Admin::action_adminskinieimport()
*
- * @static
- * @params Integer $memberid member id
- * @return String null string or error messages
+ * @param void
+ * @return void
*/
- function deleteOneMember($memberid)
+ static private function action_adminskinieimport()
{
- global $manager;
+ global $member;
++<<<<<<< HEAD
+ $memberid = intval($memberid);
+ $mem =& $manager->getMember($memberid);
+
+ if ( !$mem->canBeDeleted() )
+ {
+ return _ERROR_DELETEMEMBER;
+ }
++=======
+ $member->isAdmin() or self::disallow();
++>>>>>>> skinnable-master
- $manager->notify('PreDeleteMember', array('member' => &$mem));
+ $skinFileRaw = postVar('skinfile');
+ $mode = postVar('mode');
- /* unlink comments from memberid */
- if ( $memberid )
+ $error = self::skinieimport($mode, $skinFileRaw);
+ if ( $error )
{
- self::error($error);
- return;
++<<<<<<< HEAD
+ $query = "UPDATE %s SET cmember=0, cuser=%s WHERE cmember=%d";
+ $query = sprintf($query, sql_table('comment'), DB::quoteValue($mem->getDisplayName()), $memberid);
+ DB::execute($query);
}
- if ( !is_object(self::$skin) )
- {
- self::action_adminskiniedoimport();
- }
- else
- {
- self::$skin->parse('adminskinieimport');
- }
- return;
- }
-
- /**
- * Admin::action_adminskiniedoimport()
- *
- * @param void
- * @return void
- */
- static private function action_adminskiniedoimport()
- {
- global $DIR_SKINS, $member, $CONF;
+ $query = 'DELETE FROM '.sql_table('member').' WHERE mnumber='.$memberid;
+ DB::execute($query);
- $member->isAdmin() or self::disallow();
+ $query = 'DELETE FROM '.sql_table('team').' WHERE tmember='.$memberid;
+ DB::execute($query);
- $mode = postVar('mode');
- $skinFileRaw = postVar('skinfile');
- $allowOverwrite = intPostVar('overwrite');
+ $query = 'DELETE FROM '.sql_table('activation').' WHERE vmember='.$memberid;
+ DB::execute($query);
+
+ // delete all associated plugin options
+ NucleusPlugin::delete_option_values('member', $memberid);
+
+ $manager->notify('PostDeleteMember', array('member' => &$mem));
+
+ return '';
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_createnewlog() {
+ global $member, $CONF, $manager;
+
+ // Only Super-Admins can do this
+ $member->isAdmin() or $this->disallow();
+
+ $this->pagehead();
+
+ echo '(',_BACKTOMANAGE,')
';
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_addnewlog() {
+ global $member, $manager, $CONF;
+
+ // Only Super-Admins can do this
+ $member->isAdmin() or $this->disallow();
+
+ $bname = trim(postVar('name'));
+ $bshortname = trim(postVar('shortname'));
+ $btimeoffset = postVar('timeoffset');
+ $bdesc = trim(postVar('desc'));
+ $bdefskin = postVar('defskin');
+
+ if (!isValidShortName($bshortname))
+ $this->error(_ERROR_BADSHORTBLOGNAME);
+
+ if ($manager->existsBlog($bshortname))
+ $this->error(_ERROR_DUPSHORTBLOGNAME);
+
+ $manager->notify(
+ 'PreAddBlog',
+ array(
+ 'name' => &$bname,
+ 'shortname' => &$bshortname,
+ 'timeoffset' => &$btimeoffset,
+ 'description' => &$bdesc,
+ 'defaultskin' => &$bdefskin
+ )
+ );
+
+
+ // create blog
+ $query = sprintf('INSERT INTO %s (bname, bshortname, bdesc, btimeoffset, bdefskin) VALUES (%s, %s, %s, %s, %s)',
+ sql_table('blog'),
+ DB::quoteValue($bname),
+ DB::quoteValue($bshortname),
+ DB::quoteValue($bdesc),
+ DB::quoteValue($btimeoffset),
+ DB::quoteValue($bdefskin)
+ );
+ DB::execute($query);
+ $blogid = DB::getInsertId();
+ $blog =& $manager->getBlog($blogid);
+
+ // create new category
+ $catdefname = (defined('_EBLOGDEFAULTCATEGORY_NAME') ? _EBLOGDEFAULTCATEGORY_NAME : 'General');
+ $catdefdesc = (defined('_EBLOGDEFAULTCATEGORY_DESC') ? _EBLOGDEFAULTCATEGORY_DESC : 'Items that do not fit in other categories');
+ $query = sprintf('INSERT INTO %s (cblog, cname, cdesc) VALUES (%d, %s, %s)',
+ sql_table('category'),
+ $blogid,
+ DB::quoteValue($catdefname),
+ DB::quoteValue($catdefdesc)
+ );
+ DB::execute($query);
+ $catid = DB::getInsertId();
+
+ // set as default category
+ $blog->setDefaultCategory($catid);
+ $blog->writeSettings();
+
+ // create team member
+ $memberid = $member->getID();
+ $query = sprintf('INSERT INTO %s (tmember, tblog, tadmin) VALUES (%d, %d, 1)', sql_table('team'), $memberid, $blogid);
+ DB::execute($query);
+
+ $itemdeftitle = (defined('_EBLOG_FIRSTITEM_TITLE') ? _EBLOG_FIRSTITEM_TITLE : 'First Item');
+ $itemdefbody = (defined('_EBLOG_FIRSTITEM_BODY') ? _EBLOG_FIRSTITEM_BODY : 'This is the first item in your weblog. Feel free to delete it.');
+
+ $blog->additem($blog->getDefaultCategory(),$itemdeftitle,$itemdefbody,'',$blogid, $memberid,$blog->getCorrectTime(),0,0,0);
+
+
+ $manager->notify(
+ 'PostAddBlog',
+ array(
+ 'blog' => &$blog
+ )
+ );
+
+ $manager->notify(
+ 'PostAddCategory',
+ array(
+ 'blog' => &$blog,
+ 'name' => _EBLOGDEFAULTCATEGORY_NAME,
+ 'description' => _EBLOGDEFAULTCATEGORY_DESC,
+ 'catid' => $catid
+ )
+ );
+
+ $this->pagehead();
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+<?php
+
+$CONF['Self'] = '.php ';
+
+include('./config.php ');
+
+selectBlog(' ');
+selector();
+
+?>
+
+
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+ pagefoot();
+
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_addnewlog2() {
+ global $member, $manager;
+
+ $member->blogAdminRights($blogid) or $this->disallow();
+
+ $burl = requestVar('url');
+ $blogid = intRequestVar('blogid');
+
+ $blog =& $manager->getBlog($blogid);
+ $blog->setURL(trim($burl));
+ $blog->writeSettings();
+
+ $this->action_overview(_MSG_NEWBLOG);
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skinieoverview() {
+ global $member, $DIR_LIBS, $manager;
+
+ $member->isAdmin() or $this->disallow();
+
+ // load skinie class
+ include_once($DIR_LIBS . 'skinie.php');
+
+ $this->pagehead();
+
+ echo '(',_BACKTOMANAGE,')
';
+
+ ?>
+
+
+
+ 0) {
+ ?>
+
+
+ addTicketHidden() ?>
+
+
+ $skinfile) {
+ $html = Entity::hsc($skinfile);
+ echo '',$skinname,' ';
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+
+ ';
+ echo '',Entity::hsc($row['sdname']),' ';
+ echo '',Entity::hsc($row['sddesc']),' ';
+ echo ' ';
+ }
+
+ echo '',_SKINIE_EXPORT_TEMPLATES,' ';
+
+ // show list of templates
+ $res = DB::getResult('SELECT * FROM '.sql_table('template_desc'));
+ foreach ( $res as $row ) {
+ $id = 'templateexp' . $row['tdnumber'];
+ echo ' ';
+ echo '',Entity::hsc($row['tdname']),' ';
+ echo '',Entity::hsc($row['tddesc']),' ';
+ echo ' ';
+ }
+
+ ?>
+
+
+
+
+
+
+
+
+
+
+ pagefoot();
+
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skinieimport() {
+ global $member, $DIR_LIBS, $DIR_SKINS, $manager;
+
+ $member->isAdmin() or $this->disallow();
+
+ // load skinie class
+ include_once($DIR_LIBS . 'skinie.php');
+
+ $skinFileRaw= postVar('skinfile');
+ $mode = postVar('mode');
+
+ $importer = new SkinImport();
+
+ // get full filename
+ if ($mode == 'file')
+ {
+ $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';
+
+ // backwards compatibilty (in v2.0, exports were saved as skindata.xml)
+ if (!file_exists($skinFile))
+ $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';
+ } else {
+ $skinFile = $skinFileRaw;
+ }
+
+ // read only metadata
+ $error = $importer->readFile($skinFile, 1);
+
+ // clashes
+ $skinNameClashes = $importer->checkSkinNameClashes();
+ $templateNameClashes = $importer->checkTemplateNameClashes();
+ $hasNameClashes = (count($skinNameClashes) > 0) || (count($templateNameClashes) > 0);
+
+ if ($error) $this->error($error);
+
+ $this->pagehead();
+
+ echo '(',_BACK,')
';
+ ?>
+
+
+
+ getInfo()) ?>
+ '._AND.' ',$importer->getSkinNames()) ?>
+ '._AND.' ',$importer->getTemplateNames()) ?>
+
+ '._AND.' ',$skinNameClashes) ?>
+ '._AND.' ',$templateNameClashes) ?>
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+
+
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skiniedoimport() {
+ global $member, $DIR_LIBS, $DIR_SKINS;
+
+ $member->isAdmin() or $this->disallow();
+
+ // load skinie class
+ include_once($DIR_LIBS . 'skinie.php');
+
+ $skinFileRaw= postVar('skinfile');
+ $mode = postVar('mode');
+
+ $allowOverwrite = intPostVar('overwrite');
+
+ // get full filename
+ if ($mode == 'file')
+ {
+ $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';
+
+ // backwards compatibilty (in v2.0, exports were saved as skindata.xml)
+ if (!file_exists($skinFile))
+ $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';
+
+ } else {
+ $skinFile = $skinFileRaw;
+ }
+
+ $importer = new SkinImport();
+
+ $error = $importer->readFile($skinFile);
+
+ if ($error)
+ $this->error($error);
+
+ $error = $importer->writeToDatabase($allowOverwrite);
+
+ if ($error)
+ $this->error($error);
+
+ $this->pagehead();
+
+ echo '(',_BACKTOMANAGE,')
';
+ ?>
+
+
+
+ getInfo()) ?>
+ '._AND.' ',$importer->getSkinNames()) ?>
+ '._AND.' ',$importer->getTemplateNames()) ?>
+
+
+ pagefoot();
+
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skinieexport() {
+ global $member, $DIR_LIBS;
+
+ $member->isAdmin() or $this->disallow();
+
+ // load skinie class
+ include_once($DIR_LIBS . 'skinie.php');
+
+ $aSkins = requestIntArray('skin');
+ $aTemplates = requestIntArray('template');
+
+ if (!is_array($aTemplates)) $aTemplates = array();
+ if (!is_array($aSkins)) $aSkins = array();
+
+ $skinList = array_keys($aSkins);
+ $templateList = array_keys($aTemplates);
+
+ $info = postVar('info');
+
+ $exporter = new SkinExport();
+ foreach ($skinList as $skinId) {
+ $exporter->addSkin($skinId);
+ }
+ foreach ($templateList as $templateId) {
+ $exporter->addTemplate($templateId);
+ }
+ $exporter->setInfo($info);
+
+ $exporter->export();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_templateoverview() {
+ global $member, $manager;
+
+ $member->isAdmin() or $this->disallow();
+
+ $this->pagehead();
+
+ echo '(',_BACKTOMANAGE,')
';
+
+ echo '' . _TEMPLATE_TITLE . ' ';
+ echo '' . _TEMPLATE_AVAILABLE_TITLE . ' ';
+
+ $query = 'SELECT * FROM '.sql_table('template_desc').' ORDER BY tdname';
+ $template['content'] = 'templatelist';
+ $template['tabindex'] = 10;
+ showlist($query,'table',$template);
+
+ echo '' . _TEMPLATE_NEW_TITLE . ' ';
+
+ ?>
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_templateedit($msg = '') {
+ global $member, $manager;
+
+ $templateid = intRequestVar('templateid');
+
+ $member->isAdmin() or $this->disallow();
+
+ $extrahead = '';
+ $extrahead .= '';
+
+ $this->pagehead($extrahead);
+
+ $templatename = Template::getNameFromId($templateid);
+ $templatedescription = Template::getDesc($templateid);
+ $template =& $manager->getTemplate($templatename);
+
+ ?>
+
+ ()
+
+
+ ''
+
+ "._MESSAGE.": $msg";
+ ?>
+
+
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+_templateEditRow($template, _TEMPLATE_ITEMHEADER, 'ITEM_HEADER', '', 8);
+ $this->_templateEditRow($template, _TEMPLATE_ITEMBODY, 'ITEM', '', 9, 1);
+ $this->_templateEditRow($template, _TEMPLATE_ITEMFOOTER, 'ITEM_FOOTER', '', 10);
+ $this->_templateEditRow($template, _TEMPLATE_MORELINK, 'MORELINK', 'morelink', 20);
+ $this->_templateEditRow($template, _TEMPLATE_EDITLINK, 'EDITLINK', 'editlink', 25);
+ $this->_templateEditRow($template, _TEMPLATE_NEW, 'NEW', 'new', 30);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_CHEADER, 'COMMENTS_HEADER', 'commentheaders', 40);
+ $this->_templateEditRow($template, _TEMPLATE_CBODY, 'COMMENTS_BODY', 'commentbody', 50, 1);
+ $this->_templateEditRow($template, _TEMPLATE_CFOOTER, 'COMMENTS_FOOTER', 'commentheaders', 60);
+ $this->_templateEditRow($template, _TEMPLATE_CONE, 'COMMENTS_ONE', 'commentwords', 70);
+ $this->_templateEditRow($template, _TEMPLATE_CMANY, 'COMMENTS_MANY', 'commentwords', 80);
+ $this->_templateEditRow($template, _TEMPLATE_CMORE, 'COMMENTS_CONTINUED', 'commentcontinued', 90);
+ $this->_templateEditRow($template, _TEMPLATE_CMEXTRA, 'COMMENTS_AUTH', 'memberextra', 100);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_CNONE, 'COMMENTS_NONE', '', 110);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_CTOOMUCH, 'COMMENTS_TOOMUCH', '', 120);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_AHEADER, 'ARCHIVELIST_HEADER', '', 130);
+ $this->_templateEditRow($template, _TEMPLATE_AITEM, 'ARCHIVELIST_LISTITEM', '', 140);
+ $this->_templateEditRow($template, _TEMPLATE_AFOOTER, 'ARCHIVELIST_FOOTER', '', 150);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_BLOGHEADER, 'BLOGLIST_HEADER', '', 160);
+ $this->_templateEditRow($template, _TEMPLATE_BLOGITEM, 'BLOGLIST_LISTITEM', '', 170);
+ $this->_templateEditRow($template, _TEMPLATE_BLOGFOOTER, 'BLOGLIST_FOOTER', '', 180);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_CATHEADER, 'CATLIST_HEADER', '', 190);
+ $this->_templateEditRow($template, _TEMPLATE_CATITEM, 'CATLIST_LISTITEM', '', 200);
+ $this->_templateEditRow($template, _TEMPLATE_CATFOOTER, 'CATLIST_FOOTER', '', 210);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_DHEADER, 'DATE_HEADER', 'dateheads', 220);
+ $this->_templateEditRow($template, _TEMPLATE_DFOOTER, 'DATE_FOOTER', 'dateheads', 230);
+ $this->_templateEditRow($template, _TEMPLATE_DFORMAT, 'FORMAT_DATE', 'datetime', 240);
+ $this->_templateEditRow($template, _TEMPLATE_TFORMAT, 'FORMAT_TIME', 'datetime', 250);
+ $this->_templateEditRow($template, _TEMPLATE_LOCALE, 'LOCALE', 'locale', 260);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_PCODE, 'POPUP_CODE', '', 270);
+ $this->_templateEditRow($template, _TEMPLATE_ICODE, 'IMAGE_CODE', '', 280);
+ $this->_templateEditRow($template, _TEMPLATE_MCODE, 'MEDIA_CODE', '', 290);
+?>
+
+
+_templateEditRow($template, _TEMPLATE_SHIGHLIGHT, 'SEARCH_HIGHLIGHT', 'highlight',300);
+ $this->_templateEditRow($template, _TEMPLATE_SNOTFOUND, 'SEARCH_NOTHINGFOUND', 'nothingfound',310);
+?>
+
+
+notify('TemplateExtraFields',array('fields'=>&$pluginfields));
+
+ foreach ($pluginfields as $pfkey=>$pfvalue) {
+ echo " \n";
+ echo '' . Entity::hen($pfkey) . " \n";
+ foreach ($pfvalue as $pffield=>$pfdesc) {
+ $this->_templateEditRow($template, $pfdesc, $pffield, '',++$tab,0);
+ }
+ }
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function _templateEditRow(&$template, $description, $name, $help = '', $tabindex = 0, $big = 0) {
+ static $count = 1;
+ if (!isset($template[$name])) $template[$name] = '';
+ ?>
+
+
+
+ isAdmin() or $this->disallow();
+
+ $name = postVar('tname');
+ $desc = postVar('tdesc');
+
+ if (!isValidTemplateName($name))
+ $this->error(_ERROR_BADTEMPLATENAME);
+
+ if ((Template::getNameFromId($templateid) != $name) && Template::exists($name))
+ $this->error(_ERROR_DUPTEMPLATENAME);
+
+
+ $name = DB::quoteValue($name);
+ $desc = DB::quoteValue($desc);
+
+ // 1. Remove all template parts
+ $query = 'DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid;
+ DB::execute($query);
+
+ // 2. Update description
+ $query = 'UPDATE '.sql_table('template_desc').' SET'
+ . ' tdname=' . $name . ','
+ . ' tddesc=' . $desc
+ . ' WHERE tdnumber=' . $templateid;
+ DB::execute($query);
+
+ // 3. Add non-empty template parts
+ $this->addToTemplate($templateid, 'ITEM_HEADER', postVar('ITEM_HEADER'));
+ $this->addToTemplate($templateid, 'ITEM', postVar('ITEM'));
+ $this->addToTemplate($templateid, 'ITEM_FOOTER', postVar('ITEM_FOOTER'));
+ $this->addToTemplate($templateid, 'MORELINK', postVar('MORELINK'));
+ $this->addToTemplate($templateid, 'EDITLINK', postVar('EDITLINK'));
+ $this->addToTemplate($templateid, 'NEW', postVar('NEW'));
+ $this->addToTemplate($templateid, 'COMMENTS_HEADER', postVar('COMMENTS_HEADER'));
+ $this->addToTemplate($templateid, 'COMMENTS_BODY', postVar('COMMENTS_BODY'));
+ $this->addToTemplate($templateid, 'COMMENTS_FOOTER', postVar('COMMENTS_FOOTER'));
+ $this->addToTemplate($templateid, 'COMMENTS_CONTINUED', postVar('COMMENTS_CONTINUED'));
+ $this->addToTemplate($templateid, 'COMMENTS_TOOMUCH', postVar('COMMENTS_TOOMUCH'));
+ $this->addToTemplate($templateid, 'COMMENTS_AUTH', postVar('COMMENTS_AUTH'));
+ $this->addToTemplate($templateid, 'COMMENTS_ONE', postVar('COMMENTS_ONE'));
+ $this->addToTemplate($templateid, 'COMMENTS_MANY', postVar('COMMENTS_MANY'));
+ $this->addToTemplate($templateid, 'COMMENTS_NONE', postVar('COMMENTS_NONE'));
+ $this->addToTemplate($templateid, 'ARCHIVELIST_HEADER', postVar('ARCHIVELIST_HEADER'));
+ $this->addToTemplate($templateid, 'ARCHIVELIST_LISTITEM', postVar('ARCHIVELIST_LISTITEM'));
+ $this->addToTemplate($templateid, 'ARCHIVELIST_FOOTER', postVar('ARCHIVELIST_FOOTER'));
+ $this->addToTemplate($templateid, 'BLOGLIST_HEADER', postVar('BLOGLIST_HEADER'));
+ $this->addToTemplate($templateid, 'BLOGLIST_LISTITEM', postVar('BLOGLIST_LISTITEM'));
+ $this->addToTemplate($templateid, 'BLOGLIST_FOOTER', postVar('BLOGLIST_FOOTER'));
+ $this->addToTemplate($templateid, 'CATLIST_HEADER', postVar('CATLIST_HEADER'));
+ $this->addToTemplate($templateid, 'CATLIST_LISTITEM', postVar('CATLIST_LISTITEM'));
+ $this->addToTemplate($templateid, 'CATLIST_FOOTER', postVar('CATLIST_FOOTER'));
+ $this->addToTemplate($templateid, 'DATE_HEADER', postVar('DATE_HEADER'));
+ $this->addToTemplate($templateid, 'DATE_FOOTER', postVar('DATE_FOOTER'));
+ $this->addToTemplate($templateid, 'FORMAT_DATE', postVar('FORMAT_DATE'));
+ $this->addToTemplate($templateid, 'FORMAT_TIME', postVar('FORMAT_TIME'));
+ $this->addToTemplate($templateid, 'LOCALE', postVar('LOCALE'));
+ $this->addToTemplate($templateid, 'SEARCH_HIGHLIGHT', postVar('SEARCH_HIGHLIGHT'));
+ $this->addToTemplate($templateid, 'SEARCH_NOTHINGFOUND', postVar('SEARCH_NOTHINGFOUND'));
+ $this->addToTemplate($templateid, 'POPUP_CODE', postVar('POPUP_CODE'));
+ $this->addToTemplate($templateid, 'MEDIA_CODE', postVar('MEDIA_CODE'));
+ $this->addToTemplate($templateid, 'IMAGE_CODE', postVar('IMAGE_CODE'));
+
+ $pluginfields = array();
+ $manager->notify('TemplateExtraFields',array('fields'=>&$pluginfields));
+ foreach ($pluginfields as $pfkey=>$pfvalue) {
+ foreach ($pfvalue as $pffield=>$pfdesc) {
+ $this->addToTemplate($templateid, $pffield, postVar($pffield));
+ }
+ }
+
+ // jump back to template edit
+ $this->action_templateedit(_TEMPLATE_UPDATED);
+
+ }
+
++=======
++ self::error($error);
++ return;
++ }
++
++ if ( !is_object(self::$skin) )
++ {
++ self::action_adminskiniedoimport();
++ }
++ else
++ {
++ self::$skin->parse('adminskinieimport');
++ }
++ return;
++ }
++
++>>>>>>> skinnable-master
+ /**
- * Admin::addToTemplate()
- *
- * @param Integer $id ID for template
- * @param String $partname parts name
- * @param String $content template contents
- * @return Integer record index
++ * Admin::action_adminskiniedoimport()
+ *
++ * @param void
++ * @return void
+ */
- function addToTemplate($id, $partname, $content)
++ static private function action_adminskiniedoimport()
+ {
- // don't add empty parts:
- if ( !trim($content) )
++ global $DIR_SKINS, $member, $CONF;
++
++ $member->isAdmin() or self::disallow();
++
++ $mode = postVar('mode');
++ $skinFileRaw = postVar('skinfile');
++ $allowOverwrite = intPostVar('overwrite');
+
+ $error = self::skiniedoimport($mode, $skinFileRaw, $allowOverwrite);
+ if ( $error )
{
- return -1;
- self::error($error);
- return;
++ self::error($error);
++ return;
+ }
+
++<<<<<<< HEAD
+ $partname = DB::quoteValue($partname);
+ $content = DB::quoteValue($content);
+
+ $query = "INSERT INTO %s (tdesc, tpartname, tcontent) VALUES (%d, %s, %s)";
+ $query = sprintf($query, sql_table('template'), (integer) $id, $partname, $content);
+ if ( DB::execute($query) === FALSE )
+ {
+ $err = DB::getError();
+ exit(_ADMIN_SQLDIE_QUERYERROR . $err[2]);
+ }
+ return DB::getInsertId();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_templatedelete() {
+ global $member, $manager;
+
+ $member->isAdmin() or $this->disallow();
+
+ $templateid = intRequestVar('templateid');
+ // TODO: check if template can be deleted
+
+ $this->pagehead();
+
+ $name = Template::getNameFromId($templateid);
+ $desc = Template::getDesc($templateid);
+
+ ?>
+
+
+
+ ()
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_templatedeleteconfirm() {
+ global $member, $manager;
+
+ $templateid = intRequestVar('templateid');
+
+ $member->isAdmin() or $this->disallow();
+
+ $manager->notify('PreDeleteTemplate', array('templateid' => $templateid));
+
+ // 1. delete description
+ DB::execute('DELETE FROM '.sql_table('template_desc').' WHERE tdnumber=' . $templateid);
+
+ // 2. delete parts
+ DB::execute('DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid);
+
+ $manager->notify('PostDeleteTemplate', array('templateid' => $templateid));
+
+ $this->action_templateoverview();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_templatenew() {
+ global $member;
+
+ $member->isAdmin() or $this->disallow();
+
+ $name = postVar('name');
+ $desc = postVar('desc');
+
+ if (!isValidTemplateName($name))
+ $this->error(_ERROR_BADTEMPLATENAME);
+
+ if (Template::exists($name))
+ $this->error(_ERROR_DUPTEMPLATENAME);
+
+ $newTemplateId = Template::createNew($name, $desc);
+
+ $this->action_templateoverview();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_templateclone() {
+ global $member;
+
+ $templateid = intRequestVar('templateid');
+
+ $member->isAdmin() or $this->disallow();
+
+ // 1. read old template
+ $name = Template::getNameFromId($templateid);
+ $desc = Template::getDesc($templateid);
+
+ // 2. create desc thing
+ $name = "cloned" . $name;
+
+ // if a template with that name already exists:
+ if (Template::exists($name)) {
+ $i = 1;
+ while (Template::exists($name . $i))
+ $i++;
+ $name .= $i;
+ }
+
+ $newid = Template::createNew($name, $desc);
+
+ // 3. create clone
+ // go through parts of old template and add them to the new one
+ $res = DB::getResult('SELECT tpartname, tcontent FROM '.sql_table('template').' WHERE tdesc=' . $templateid);
+ foreach ( $res as $row ) {
+ $this->addToTemplate($newid, $row['tpartname'], $row['tcontent']);
+ }
+
+ $this->action_templateoverview();
+ }
+
+ /**
+ * Admin::action_skinoverview()
+ *
+ * @param void
+ * @return void
+ */
+ public function action_skinoverview()
+ {
+ global $member, $manager;
+
+ $member->isAdmin() or $this->disallow();
+
+ $this->pagehead();
+
+ echo '(' . _BACKTOMANAGE . ")
\n";
+ echo '' . _SKIN_EDIT_TITLE . " \n";
+ echo '' . _SKIN_AVAILABLE_TITLE . " \n";
+
+ $query = 'SELECT * FROM '.sql_table('skin_desc').' ORDER BY sdname;';
+ $template['content'] = 'skinlist';
+ $template['tabindex'] = 10;
+
+ showlist($query,'table',$template);
+
+ echo '' . _SKIN_NEW_TITLE . " \n";
+ echo "\n";
+ echo "\n";
+ echo "
\n";
+
+ $manager->addTicketHidden() . "\n";
+
+ echo "
\n";
+
+ echo "
\n";
+ echo " \n";
+
+ $this->pagefoot();
+ return;
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skinnew() {
+ global $member;
+
+ $member->isAdmin() or $this->disallow();
+
+ $name = trim(postVar('name'));
+ $desc = trim(postVar('desc'));
+
+ if (!isValidSkinName($name))
+ $this->error(_ERROR_BADSKINNAME);
+
+ if (Skin::exists($name))
+ $this->error(_ERROR_DUPSKINNAME);
+
+ $newId = Skin::createNew($name, $desc);
+
+ $this->action_skinoverview();
+ }
+
+ /**
+ * Admin::action_skinedit()
+ * @param void
+ * @return void
+ */
+ public function action_skinedit()
+ {
+ global $member, $manager;
+
+ $skinid = intRequestVar('skinid');
+
+ $member->isAdmin() or $this->disallow();
+
+ $skin = new SKIN($skinid);
+ $default_skin_types = $skin->getDefaultTypes();
+ $available_skin_types = $skin->getAvailableTypes();
+
+ $this->pagehead();
+
+ echo "";
+ echo '( ' . _SKIN_BACK . " )";
+ echo "
\n";
+ echo '' . _SKIN_EDITONE_TITLE . $skin->getName() . " \n";
+
+ echo '' . _SKIN_PARTS_TITLE . " \n";
+ echo _SKIN_PARTS_MSG . "\n";
+ echo "\n";
+
+ $tabindex = 10;
+ foreach ( $default_skin_types as $type => $friendly_name )
+ {
+ echo "\n";
+ echo "";
+ echo $friendly_name;
+ echo " \n";
+ help("skinpart{$type}");
+ echo " \n";
+ $tabindex++;
+ }
+ echo " \n";
+
+ echo '' . _SKIN_PARTS_SPECIAL . ' ';
+ echo "\n";
+ echo " \n";
+ echo " \n";
+ echo " \n";
+ echo ' \n";
+ echo " \n";
+
+ /* NOTE: special skin parts has FALSE in its value */
+ if ( in_array(FALSE, array_values($available_skin_types)) )
+ {
+ $tabstart = 75;
+
+ echo '';
+ }
+
+ echo '' . _SKIN_GENSETTINGS_TITLE . " \n";
+ echo "\n";
+ echo "\n";
+ echo " \n";
+ $this->pagefoot();
+ return;
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skineditgeneral() {
+ global $member;
+
+ $skinid = intRequestVar('skinid');
+
+ $member->isAdmin() or $this->disallow();
+
+ $name = postVar('name');
+ $desc = postVar('desc');
+ $type = postVar('type');
+ $inc_mode = postVar('inc_mode');
+ $inc_prefix = postVar('inc_prefix');
+
+ $skin = new SKIN($skinid);
+
+ // 1. Some checks
+ if (!isValidSkinName($name))
+ $this->error(_ERROR_BADSKINNAME);
+
+ if (($skin->getName() != $name) && Skin::exists($name))
+ $this->error(_ERROR_DUPSKINNAME);
+
+ if (!$type) $type = 'text/html';
+ if (!$inc_mode) $inc_mode = 'normal';
+
+ // 2. Update description
+ $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);
+
+ $this->action_skinedit();
+
+ }
+
+ /**
+ * Admin::action_skinedittype()
+ *
+ * @param string $msg message for pageheader
+ * @return void
+ */
+ public function action_skinedittype($msg = '')
+ {
+ global $member, $manager;
+
+ $skinid = intRequestVar('skinid');
+ $type = requestVar('type');
+
+ $member->isAdmin() or $this->disallow();
+
+ $type = trim($type);
+ $type = strtolower($type);
+
+ if ( !isValidShortName($type) )
+ {
+ $this->error(_ERROR_SKIN_PARTS_SPECIAL_FORMAT);
+ }
+
+ $skin = new SKIN($skinid);
+ $skin_types = $skin->getAvailableTypes();
+ if ( !array_key_exists($type, $skin_types) || !$skin_types[$type] )
+ {
+ $friendlyName = ucfirst($type);
+ }
+ else
+ {
+ $friendlyName = $skin_types[$type];
+ }
+
+ $this->pagehead();
+
+ echo '(' . _SKIN_GOBACK . " )
\n";
+
+ echo '' . _SKIN_EDITPART_TITLE . " '" . Entity::hsc($skin->getName()) . "': " . Entity::hsc($friendlyName) . " \n";
+
+ if ( $msg != '')
+ {
+ echo "" . _MESSAGE . ": $msg
\n";
+ }
+
+ echo "\n";
+ echo "\n";
+
+ echo " \n";
+ $manager->addTicketHidden() . "\n";
+ echo " \n";
+ echo " \n";
+
+ echo ' ' . "\n";
+ echo ' ' . "\n";
+ echo '(skin type: ' . Entity::hsc($friendlyName) . ")\n";
+
+ if ( !array_key_exists($type, $skin_types) || !$skin_types[$type] )
+ {
+ help('skinpartspecial');
+ }
+ else
+ {
+ help('skinpart' . $type);
+ }
+ echo " \n";
+
+ echo "\n";
+ echo Entity::hsc($skin->getContentFromDB($type)) . "\n";
+ echo " \n";
+
+ echo " \n";
+ echo ' ' . "\n";
+ echo ' ' . "\n";
+ echo '(skin type: ' . Entity::hsc($friendlyName) . ")\n";
+
+ echo " \n";
+ echo " \n";
+ echo _SKIN_ALLOWEDVARS;
+
+ $actions = $skin->getAllowedActionsForType($type);
+
+ sort($actions);
+
+ while ( $current = array_shift($actions) )
+ {
+ // skip deprecated vars
+ if ( in_array($current, array('ifcat', 'imagetext', 'vars')) )
+ {
+ continue;
+ }
+
+ echo helplink("skinvar-{$current}") . "{$current}\n";
+
+ if ( count($actions) != 0 )
+ {
+ echo ", ";
+ }
+ }
+
+ echo " \n";
+ echo " \n";
+ echo _SKINEDIT_ALLOWEDBLOGS;
+
+ $query = 'SELECT bshortname, bname FROM '.sql_table('blog');
+ showlist($query, 'table', array('content'=>'shortblognames'));
+
+ echo " \n";
+ echo _SKINEDIT_ALLOWEDTEMPLATESS;
+
+ $query = 'SELECT tdname as name, tddesc as description FROM '.sql_table('template_desc');
+ showlist($query, 'table', array('content'=>'shortnames'));
+
+ echo "
\n";
+ echo " \n";
+
+ $this->pagefoot();
+
+ return;
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skinupdate() {
+ global $member;
+
+ $skinid = intRequestVar('skinid');
+ $content = trim(postVar('content'));
+ $type = postVar('type');
+
+ $member->isAdmin() or $this->disallow();
+
+ $skin = new SKIN($skinid);
+ $skin->update($type, $content);
+
+ $this->action_skinedittype(_SKIN_UPDATED);
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skindelete() {
+ global $member, $manager, $CONF;
+
+ $skinid = intRequestVar('skinid');
+
+ $member->isAdmin() or $this->disallow();
+
+ // don't allow default skin to be deleted
+ if ($skinid == $CONF['BaseSkin'])
+ $this->error(_ERROR_DEFAULTSKIN);
+
+ // don't allow deletion of default skins for blogs
+ $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid;
+ $r = DB::getValue($query);
+ if ( $r )
+ $this->error(_ERROR_SKINDEFDELETE . Entity::hsc($r));
+
+ $this->pagehead();
+
+ $skin = new SKIN($skinid);
+ $name = $skin->getName();
+ $desc = $skin->getDescription();
+
+ ?>
+
+
+
+ ()
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+ pagefoot();
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skindeleteconfirm() {
+ global $member, $CONF, $manager;
+
+ $skinid = intRequestVar('skinid');
+
+ $member->isAdmin() or $this->disallow();
+
+ // don't allow default skin to be deleted
+ if ($skinid == $CONF['BaseSkin'])
+ $this->error(_ERROR_DEFAULTSKIN);
+
+ // don't allow deletion of default skins for blogs
+ $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid;
+ $r = DB::getValue($query);
+ if ($r)
+ $this->error(_ERROR_SKINDEFDELETE .$r);
+
+ $manager->notify('PreDeleteSkin', array('skinid' => $skinid));
+
+ // 1. delete description
+ DB::execute('DELETE FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $skinid);
+
+ // 2. delete parts
+ DB::execute('DELETE FROM '.sql_table('skin').' WHERE sdesc=' . $skinid);
+
+ $manager->notify('PostDeleteSkin', array('skinid' => $skinid));
+
+ $this->action_skinoverview();
+ }
+
+ /**
+ * Admin::action_skinremovetype()
+ *
+ * @param void
+ * @return void
+ */
+ public function action_skinremovetype()
+ {
+ global $member, $manager, $CONF;
+
+ $skinid = intRequestVar('skinid');
+ $skintype = requestVar('type');
+
+ if ( !isValidShortName($skintype) )
+ {
+ $this->error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);
+ }
+
+ $member->isAdmin() or $this->disallow();
+
+ // don't allow default skinparts to be deleted
+ $skin = new Skin($skinid);
+ $default_skin_types = $skin->getDefaultTypes();
+ if ( array_key_exists($skintype, $default_skin_types) )
+ {
+ $this->error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);
+ }
+
+ $name = $skin->getName();
+ $desc = $skin->getDescription();
+
+ $this->pagehead();
+
+ echo '' . _DELETE_CONFIRM . " \n";
+ echo "\n";
+ echo _CONFIRMTXT_SKIN_PARTS_SPECIAL;
+ echo Entity::hsc($skintype);
+ echo '(' . Entity::hsc($name) . ')';
+ echo ' (' . Entity::hsc($desc) . ')';
+ echo "
\n";
+
+ echo "\n";
+ echo "\n";
+ echo " \n";
+ $manager->addTicketHidden();
+ echo " \n";
+ echo ' ' . "\n";
+ echo ' ' . "\n";
+ echo "
\n";
+ echo " \n";
+ $this->pagefoot();
+ return;
+ }
+
+ /**
+ * Admin::action_skinremovetypeconfirm()
+ *
+ * @param void
+ * @return void
+ */
+ public function action_skinremovetypeconfirm()
+ {
+ global $member, $CONF, $manager;
+
+ $skinid = intRequestVar('skinid');
+ $skintype = requestVar('type');
+
+ if ( !isValidShortName($skintype) )
+ {
+ $this->error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);
+ }
+
+ $member->isAdmin() or $this->disallow();
+
+ // don't allow default skinparts to be deleted
+ $skin = new Skin($skinid);
+ $default_skin_types = $skin->getDefaultTypes();
+ if ( array_key_exists($skintype, $default_skin_types) )
+ {
+ $this->error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);
}
+ $data = array(
+ 'skinid' => $skinid,
+ 'skintype' => $skintype
+ );
+ $manager->notify('PreDeleteSkinPart', $data);
+
+ // delete part
+ $query = "DELETE FROM %s WHERE sdesc=%d AND stype='%s';";
+ $query = sprintf($query, sql_table('skin'), (integer) $skinid, $skintype);
+ DB::execute($query);
+
+ $data = array(
+ 'skinid' => $skinid,
+ 'skintype' => $skintype
+ );
+ $manager->notify('PostDeleteSkinPart', $data);
+
+ $this->action_skinedit();
+ return;
+ }
+
+ /**
+ * @todo document this
+ */
+ function action_skinclone() {
+ global $member;
+
+ $skinid = intRequestVar('skinid');
+
+ $member->isAdmin() or $this->disallow();
+
+ // 1. read skin to clone
+ $skin = new SKIN($skinid);
+
+ $name = "clone_" . $skin->getName();
+
+ // if a skin with that name already exists:
+ if (Skin::exists($name)) {
+ $i = 1;
+ while (Skin::exists($name . $i))
+ $i++;
+ $name .= $i;
+ }
+
+ // 2. create skin desc
+ $newid = Skin::createNew(
+ $name,
+ $skin->getDescription(),
+ $skin->getContentType(),
+ $skin->getIncludeMode(),
+ $skin->getIncludePrefix()
+ );
+
+ $query = "SELECT stype FROM " . sql_table('skin') . " WHERE sdesc = " . $skinid;
+ $res = DB::getResult($query);
+ foreach ( $res as $row) {
+ $this->skinclonetype($skin, $newid, $row['stype']);
+ }
+
+ $this->action_skinoverview();
+
+ }
++=======
+ if ( !is_object(self::$skin) )
+ {
+ global $DIR_SKINS;
+ $query = "SELECT min(sdnumber) FROM %s WHERE sdname != 'admin/bookmarklet' AND sdname LIKE 'admin/%%'";
+ $query = sprintf($query, sql_table('skin_desc'));
+ $res = intval(DB::getValue($query));
+ $query = "UPDATE %s SET value = %d WHERE name = 'AdminSkin'";
+ $query = sprintf($query, sql_table('config'), $res);
+ DB::execute($query);
+ if ( $res )
+ {
+ redirect($CONF['AdminURL']);
+ exit;
+ }
+ $skin = new Skin(0, 'AdminActions', 'AdminSkin');
+ $skin->parse('importAdmin', $DIR_SKINS . 'admin/defaultimporter.skn');
+ }
+ else
+ {
+ self::$skin->parse('adminskiniedoimport');
+ }
+ return;
+ }
++>>>>>>> skinnable-master
/**
- * Admin::skinclonetype()
+ * Admin::action_adminskinieexport()
*
- * @param String $skin Skin object
- * @param Integer $newid ID for this clone
- * @param String $type type of skin
- * @return Void
+ * @param void
+ * @return void
*/
- function skinclonetype($skin, $newid, $type)
+ static private function action_adminskinieexport()
{
++<<<<<<< HEAD
+ $newid = intval($newid);
+ $content = $skin->getContentFromDB($type);
+
+ if ( $content )
+ {
+ $query = "INSERT INTO %s (sdesc, scontent, stype) VALUES (%d, '%s', '%s')";
+ $query = sprintf($query, sql_table('skin'), (integer) $newid, $content, $type);
+ DB::execute($query);
+ }
++=======
+ global $member;
+
+ $member->isAdmin() or self::disallow();
+
+ // load skinie class
+ $aSkins = requestIntArray('skin');
+ $aTemplates = requestIntArray('template');
+ $info = postVar('info');
+
+ self::skinieexport($aSkins, $aTemplates, $info);
+
++>>>>>>> skinnable-master
return;
}
@@@ -5097,337 -4253,14 +8864,346 @@@
* @param Void
* @return Void
*/
- function action_settingsedit() {
+ static private function action_settingsedit()
+ {
global $member, $manager, $CONF, $DIR_NUCLEUS, $DIR_MEDIA;
++<<<<<<< HEAD
+
+ $member->isAdmin() or $this->disallow();
+
+ $this->pagehead();
+
+ echo '(',_BACKTOMANAGE,')
';
+ ?>
+
+
+
+
+
+
+
+ addTicketHidden() ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ en_Latn_US\n";
+ }
+ else
+ {
+ echo "en_Latn_US \n";
+ }
+
+ foreach ( $locales as $locale )
+ {
+ if ( $locale == 'en_Latn_US' )
+ {
+ continue;
+ }
+ if ( $locale == i18n::get_current_locale() )
+ {
+ echo "{$locale} \n";
+ }
+ else
+ {
+ echo "{$locale} \n";
+ }
+ }
+ ?>
+
+
+
+
+
+
+ input_yesno('DisableSite',$CONF['DisableSite'],10060); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ input_yesno('DisableJsTools',$CONF['DisableJsTools'],10075); */ ?>
+
+ ",_SETTINGS_JSTOOLBAR_NONE,"";
+ $extra = ($CONF['DisableJsTools'] == 2) ? 'selected="selected"' : '';
+ echo "",_SETTINGS_JSTOOLBAR_SIMPLE," ";
+ $extra = ($CONF['DisableJsTools'] == 0) ? 'selected="selected"' : '';
+ echo "",_SETTINGS_JSTOOLBAR_FULL," ";
+ ?>
+
+
+
+
+ input_yesno('URLMode',$CONF['URLMode'],10077,
+ 'normal','pathinfo',_SETTINGS_URLMODE_NORMAL,_SETTINGS_URLMODE_PATHINFO);
+
+ echo ' ', _SETTINGS_URLMODE_HELP;
+
+ ?>
+
+
+
+
+ input_yesno('DebugVars',$CONF['DebugVars'],10078);
+
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $name";
+
+ }
+
+ }
+
+ closedir($dirhandle);
+
+ ?>
+
+
+
+
+
+
+
+
+
+ " . _WARNING_NOTADIR . " ";
+ if (!is_readable($DIR_MEDIA))
+ echo "" . _WARNING_NOTREADABLE . " ";
+ if (!is_writeable($DIR_MEDIA))
+ echo "" . _WARNING_NOTWRITABLE . " ";
+ ?>
+
+
+
+
+
+
+
+
+ input_yesno('AllowUpload',$CONF['AllowUpload'],10090); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+ input_yesno('MediaPrefix',$CONF['MediaPrefix'],10110); ?>
+
+
+
+
+
+ input_yesno('AllowLoginEdit',$CONF['AllowLoginEdit'],10120); ?>
+
+
+
+
+ input_yesno('AllowMemberCreate',$CONF['AllowMemberCreate'],10130); ?>
+
+
+
+
+
+ input_yesno('NewMemberCanLogon',$CONF['NewMemberCanLogon'],10140); ?>
+
+
+
+
+
+ input_yesno('AllowMemberMail',$CONF['AllowMemberMail'],10150); ?>
+
+
+
+
+
+ input_yesno('NonmemberMail',$CONF['NonmemberMail'],10155); ?>
+
+
+
+
+
+ input_yesno('ProtectMemNames',$CONF['ProtectMemNames'],10156); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ input_yesno('CookieSecure',$CONF['CookieSecure'],10180); ?>
+
+
+ input_yesno('SessionCookie',$CONF['SessionCookie'],10190,
+ 1,0,_SETTINGS_COOKIESESSION,_SETTINGS_COOKIEMONTH); ?>
+
+
+
+ input_yesno('LastVisit',$CONF['LastVisit'],10200); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ',_PLUGINS_EXTRA,'';
+
+ $manager->notify(
+ 'GeneralSettingsFormExtras',
+ array()
+ );
+
+ $this->pagefoot();
++=======
+
+ $member->isAdmin() or self::disallow();
+
+ self::$skin->parse('settingsedit');
+ return;
++>>>>>>> skinnable-master
}
/**
@@@ -5437,61 -4270,65 +9213,65 @@@
* @param void
* @return void
*/
- function action_settingsupdate() {
+ static private function action_settingsupdate()
+ {
global $member, $CONF;
- $member->isAdmin() or $this->disallow();
+ $member->isAdmin() or self::disallow();
// check if email address for admin is valid
if ( !NOTIFICATION::address_validation(postVar('AdminEmail')) )
{
- $this->error(_ERROR_BADMAILADDRESS);
+ self::error(_ERROR_BADMAILADDRESS);
+ return;
}
// save settings
- $this->updateConfig('DefaultBlog', postVar('DefaultBlog'));
- $this->updateConfig('BaseSkin', postVar('BaseSkin'));
- $this->updateConfig('IndexURL', postVar('IndexURL'));
- $this->updateConfig('AdminURL', postVar('AdminURL'));
- $this->updateConfig('PluginURL', postVar('PluginURL'));
- $this->updateConfig('SkinsURL', postVar('SkinsURL'));
- $this->updateConfig('ActionURL', postVar('ActionURL'));
- $this->updateConfig('Locale', postVar('Locale'));
- $this->updateConfig('AdminEmail', postVar('AdminEmail'));
- $this->updateConfig('SessionCookie', postVar('SessionCookie'));
- $this->updateConfig('AllowMemberCreate',postVar('AllowMemberCreate'));
- $this->updateConfig('AllowMemberMail', postVar('AllowMemberMail'));
- $this->updateConfig('NonmemberMail', postVar('NonmemberMail'));
- $this->updateConfig('ProtectMemNames', postVar('ProtectMemNames'));
- $this->updateConfig('SiteName', postVar('SiteName'));
- $this->updateConfig('NewMemberCanLogon',postVar('NewMemberCanLogon'));
- $this->updateConfig('DisableSite', postVar('DisableSite'));
- $this->updateConfig('DisableSiteURL', postVar('DisableSiteURL'));
- $this->updateConfig('LastVisit', postVar('LastVisit'));
- $this->updateConfig('MediaURL', postVar('MediaURL'));
- $this->updateConfig('AllowedTypes', postVar('AllowedTypes'));
- $this->updateConfig('AllowUpload', postVar('AllowUpload'));
- $this->updateConfig('MaxUploadSize', postVar('MaxUploadSize'));
- $this->updateConfig('MediaPrefix', postVar('MediaPrefix'));
- $this->updateConfig('AllowLoginEdit', postVar('AllowLoginEdit'));
- $this->updateConfig('DisableJsTools', postVar('DisableJsTools'));
- $this->updateConfig('CookieDomain', postVar('CookieDomain'));
- $this->updateConfig('CookiePath', postVar('CookiePath'));
- $this->updateConfig('CookieSecure', postVar('CookieSecure'));
- $this->updateConfig('URLMode', postVar('URLMode'));
- $this->updateConfig('CookiePrefix', postVar('CookiePrefix'));
- $this->updateConfig('DebugVars', postVar('DebugVars'));
- $this->updateConfig('DefaultListSize', postVar('DefaultListSize'));
- $this->updateConfig('AdminCSS', postVar('AdminCSS'));
-
+ self::updateConfig('DefaultBlog', postVar('DefaultBlog'));
+ self::updateConfig('BaseSkin', postVar('BaseSkin'));
+ self::updateConfig('IndexURL', postVar('IndexURL'));
+ self::updateConfig('AdminURL', postVar('AdminURL'));
+ self::updateConfig('PluginURL', postVar('PluginURL'));
+ self::updateConfig('SkinsURL', postVar('SkinsURL'));
+ self::updateConfig('ActionURL', postVar('ActionURL'));
+ self::updateConfig('Locale', postVar('Locale'));
+ self::updateConfig('AdminEmail', postVar('AdminEmail'));
+ self::updateConfig('SessionCookie', postVar('SessionCookie'));
+ self::updateConfig('AllowMemberCreate', postVar('AllowMemberCreate'));
+ self::updateConfig('AllowMemberMail', postVar('AllowMemberMail'));
+ self::updateConfig('NonmemberMail', postVar('NonmemberMail'));
+ self::updateConfig('ProtectMemNames', postVar('ProtectMemNames'));
+ self::updateConfig('SiteName', postVar('SiteName'));
+ self::updateConfig('NewMemberCanLogon', postVar('NewMemberCanLogon'));
+ self::updateConfig('DisableSite', postVar('DisableSite'));
+ self::updateConfig('DisableSiteURL', postVar('DisableSiteURL'));
+ self::updateConfig('LastVisit', postVar('LastVisit'));
+ self::updateConfig('MediaURL', postVar('MediaURL'));
+ self::updateConfig('AllowedTypes', postVar('AllowedTypes'));
+ self::updateConfig('AllowUpload', postVar('AllowUpload'));
+ self::updateConfig('MaxUploadSize', postVar('MaxUploadSize'));
+ self::updateConfig('MediaPrefix', postVar('MediaPrefix'));
+ self::updateConfig('AllowLoginEdit', postVar('AllowLoginEdit'));
+ self::updateConfig('DisableJsTools', postVar('DisableJsTools'));
+ self::updateConfig('CookieDomain', postVar('CookieDomain'));
+ self::updateConfig('CookiePath', postVar('CookiePath'));
+ self::updateConfig('CookieSecure', postVar('CookieSecure'));
+ self::updateConfig('URLMode', postVar('URLMode'));
+ self::updateConfig('CookiePrefix', postVar('CookiePrefix'));
+ self::updateConfig('DebugVars', postVar('DebugVars'));
+ self::updateConfig('DefaultListSize', postVar('DefaultListSize'));
+ self::updateConfig('AdminCSS', postVar('AdminCSS'));
+ self::updateConfig('AdminSkin', postVar('adminskin'));
+ self::updateConfig('BookmarkletSkin', postVar('bookmarklet'));
+
// load new config and redirect (this way, the new locale will be used is necessary)
// note that when changing cookie settings, this redirect might cause the user
// to have to log in again.
getConfig();
redirect($CONF['AdminURL'] . '?action=manage');
- exit;
+ return;
}
-
+
/**
* Admin::action_systemoverview()
* Output system overview
@@@ -5499,188 -4336,12 +9279,193 @@@
* @param void
* @return void
*/
- function action_systemoverview()
+ static private function action_systemoverview()
{
++<<<<<<< HEAD
+ global $member, $nucleus, $CONF;
+
+ $this->pagehead();
+
+ echo '' . _ADMIN_SYSTEMOVERVIEW_HEADING . " \n";
+
+ if ( $member->isLoggedIn() && $member->isAdmin() )
+ {
+ // Information about the used PHP and MySQL installation
+ echo '' . _ADMIN_SYSTEMOVERVIEW_PHPANDMYSQL . " \n\n";
+
+ // Version of PHP MySQL
+ echo '\n";
+ echo "\n";
+ echo "\n";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_VERSIONS . " \n";
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo "\n";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_PHPVERSION . " \n";
+ echo '' . phpversion() . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_MYSQLVERSION . " \n";
+ echo '' . DB::getAttribute(PDO::ATTR_SERVER_VERSION) . ' (' . DB::getAttribute(PDO::ATTR_CLIENT_VERSION) . ')' . " \n";
+ echo " \n";
+ echo " \n";
+ echo "
\n\n";
+
+ // Important PHP settings
+ echo '\n";
+ echo "\n";
+ echo "\n";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_SETTINGS . " \n";
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo "\n";
+ echo 'magic_quotes_gpc' . " \n";
+ $mqg = get_magic_quotes_gpc() ? 'On' : 'Off';
+ echo '' . $mqg . " \n";
+ echo " \n";
+ echo "\n";
+ echo 'magic_quotes_runtime' . " \n";
+ $mqr = get_magic_quotes_runtime() ? 'On' : 'Off';
+ echo '' . $mqr . " \n";
+ echo " \n";
+ echo "\n";
+ echo 'register_globals' . " \n";
+ $rg = ini_get('register_globals') ? 'On' : 'Off';
+ echo '' . $rg . " \n";
+ echo " \n";
+ echo " \n";
+ echo "
\n\n";
+
+ // Information about GD library
+ $gdinfo = gd_info();
+ echo '\n";
+ echo "\n";
+ echo "\n";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_GDLIBRALY . " \n";
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ foreach ( $gdinfo as $key=>$value )
+ {
+ if ( is_bool($value) )
+ {
+ $value = $value ? _ADMIN_SYSTEMOVERVIEW_ENABLE : _ADMIN_SYSTEMOVERVIEW_DISABLE;
+ }
+ else
+ {
+ $value = Entity::hsc($value);
+ }
+ echo "\n";
+ echo '' . $key . " \n";
+ echo '' . $value . " \n";
+ echo " \n";
+ }
+ echo " \n";
+ echo "
\n\n";
+
+ // Check if special modules are loaded
+ ob_start();
+ phpinfo(INFO_MODULES);
+ $im = ob_get_contents();
+ ob_clean();
+ echo '\n";
+ echo "\n";
+ echo "";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_MODULES . " \n";
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo 'mod_rewrite' . " \n";
+ $modrewrite = (i18n::strpos($im, 'mod_rewrite') !== FALSE) ?
+ _ADMIN_SYSTEMOVERVIEW_ENABLE :
+ _ADMIN_SYSTEMOVERVIEW_DISABLE;
+ echo '' . $modrewrite . " \n";
+ echo " \n";
+ echo " \n";
+ echo "
\n\n";
+
+ // Information about the used Nucleus CMS
+ echo '' . _ADMIN_SYSTEMOVERVIEW_NUCLEUSSYSTEM . " \n";
+ global $nucleus;
+ $nv = getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
+ $np = getNucleusPatchLevel();
+ echo "\n";
+ echo "\n";
+ echo "\n";
+ echo 'Nucleus CMS' . " \n";
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo "\n";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_NUCLEUSVERSION . " \n";
+ echo '' . $nv . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_NUCLEUSPATCHLEVEL . " \n";
+ echo '' . $np . " \n";
+ echo " \n";
+ echo " \n";
+ echo "
\n\n";
+
+ // Important settings of the installation
+ echo '\n";
+ echo "\n";
+ echo "\n";
+ echo '' . _ADMIN_SYSTEMOVERVIEW_NUCLEUSSETTINGS . " \n";
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo "\n";
+ echo '' . '$CONF[' . "'Self'] \n";
+ echo '' . $CONF['Self'] . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . '$CONF[' . "'ItemURL'] \n";
+ echo '' . $CONF['ItemURL'] . " \n";
+ echo " \n";
+ echo "\n";
+ echo '' . '$CONF[' . "'alertOnHeadersSent'] \n";
+ $ohs = $CONF['alertOnHeadersSent'] ?
+ _ADMIN_SYSTEMOVERVIEW_ENABLE :
+ _ADMIN_SYSTEMOVERVIEW_DISABLE;
+ echo '' . $ohs . " \n";
+ echo " \n";
+ echo "\n";
+ echo "i18n::get_current_charset() \n";
+ echo '' . i18n::get_current_charset() . " \n";
+ echo " \n";
+ echo " \n";
+ echo "
\n\n";
+
+ // Link to the online version test at the Nucleus CMS website
+ echo '' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK . " \n";
+ if ( $nucleus['codename'] != '')
+ {
+ $codenamestring = ' "' . $nucleus['codename'] . '"';
+ }
+ else
+ {
+ $codenamestring = '';
+ }
+ echo _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TXT;
+ $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
+ echo '';
+ echo 'Nucleus CMS ' . $nv . $codenamestring;
+ echo ' ';
+ }
+ else
+ {
+ echo _ADMIN_SYSTEMOVERVIEW_NOT_ADMIN;
+ }
+ $this->pagefoot();
++=======
+ self::$skin->parse('systemoverview');
+ return;
++>>>>>>> skinnable-master
}
-
+
/**
* Admin::updateConfig()
*
@@@ -5688,35 -4349,30 +9473,42 @@@
* @param string $val
* @return integer return the ID in which the latest query posted
*/
- function updateConfig($name, $val)
+ static private function updateConfig($name, $val)
{
++<<<<<<< HEAD
+ $name = DB::quoteValue($name);
+ $val = DB::quoteValue(trim($val));
+
+ $query = "UPDATE %s SET value=%s WHERE name=%s";
+ $query = sprintf($query, sql_table('config'), $val, $name);
+ if ( DB::execute($query) === FALSE )
+ {
+ $err = DB::getError();
+ die("Query error: " . $err[2]);
++=======
+ $query = "UPDATE %s SET value=%s WHERE name=%s";
+ $query = sprintf($query, sql_table('config'), DB::quoteValue($val), DB::quoteValue($name));
+ if ( DB::execute($query) === FALSE )
+ {
+ $err = DB::getError();
+ die(_ADMIN_SQLDIE_QUERYERROR . $err[2]);
++>>>>>>> skinnable-master
}
return DB::getInsertId();
}
/**
+ * Admin::error()
* Error message
- * @param string $msg message that will be shown
+ *
+ * @param string $msg message that will be shown
+ * @return void
*/
- function error($msg)
+ static public function error($msg)
{
- $this->pagehead();
-
- echo "Error! \n";
- echo $msg;
- echo " \n";
- echo '' . _BACK . " \n";
- $this->pagefoot();
- exit;
+ self::$headMess = $msg;
+ self::$skin->parse('adminerrorpage');
+ return;
}
/**
@@@ -5726,637 -4382,276 +9518,713 @@@
* @param void
* @return void
*/
- function disallow()
+ static public function disallow()
{
ActionLog::add(WARNING, _ACTIONLOG_DISALLOWED . serverVar('REQUEST_URI'));
- $this->error(_ERROR_DISALLOWED);
+ self::error(_ERROR_DISALLOWED);
+ return;
+ }
+
+ /**
+ * Admin::action_PluginAdmin()
+ * Output pluginadmin
+ *
+ * @param string $skinContents
+ * @param string $extrahead
+ * @return void
+ */
+ static public function action_PluginAdmin($skinContents, $extrahead = '')
+ {
+ self::$extrahead .= $extrahead;
+ self::$skin->parse('pluginadmin', $skinContents);
+ return;
}
/**
- * Admin::pagehead()
- * Output admin page head
+ * Admin::action_bookmarklet()
*
* @param void
* @return void
*/
++<<<<<<< HEAD
+ function pagehead($extrahead = '')
+ {
+ global $member, $nucleus, $CONF, $manager;
+
+ $manager->notify(
+ 'AdminPrePageHead',
+ array(
+ 'extrahead' => &$extrahead,
+ 'action' => $this->action));
+
+ $baseUrl = Entity::hsc($CONF['AdminURL']);
+ if ( !array_key_exists('AdminCSS',$CONF) )
+ {
+ DB::execute("INSERT INTO ".sql_table('config')." VALUES ('AdminCSS', 'original')");
+ $CONF['AdminCSS'] = 'original';
+ }
+
+ /* HTTP 1.1 application for no caching */
+ header("Cache-Control: no-cache, must-revalidate");
+ header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
+
+ $root_element = 'html';
+ $charset = i18n::get_current_charset();
+ $locale = preg_replace('#_#', '-', i18n::get_current_locale());
+
+ echo "xml_version_info}\" encoding=\"{$charset}\" ?>\n";
+ echo "formal_public_identifier}\" \"{$this->system_identifier}\">\n";
+ echo "<{$root_element} xmlns=\"{$this->xhtml_namespace}\" xml:lang=\"{$locale}\" lang=\"{$locale}\">\n";
+ echo "\n";
+ echo '' . Entity::hsc($CONF['SiteName']) . " - Admin \n";
+ echo " \n";
+ echo " \n";
+ echo "\n";
+ echo "\n";
+ echo "\n";
+ echo "{$extrahead}\n";
+ echo "\n\n";
+ echo "\n";
+ echo "\n";
+ echo "\n";
+ echo "
\n";
+ echo "
\n";
+ echo "
\n";
+ if ( $member->isLoggedIn() )
+ {
+ echo _LOGGEDINAS . ' ' . $member->getDisplayName() ." -
" . _LOGOUT. " \n";
+ echo "
" . _ADMINHOME . " - ";
+ }
+ else
+ {
+ echo '
' . _NOTLOGGEDIN . " \n";
+ }
+ echo "
"._YOURSITE." \n";
+ echo '(';
++=======
+ static private function action_bookmarklet()
+ {
+ global $member, $manager;
++>>>>>>> skinnable-master
- if (array_key_exists('codename', $nucleus) && $nucleus['codename'] != '' )
- {
- $codenamestring = ' "' . $nucleus['codename'].'"';
- }
- else
- {
- $codenamestring = '';
- }
+ $blogid = intRequestVar('blogid');
+ $member->teamRights($blogid) or self::disallow();
- if ( $member->isLoggedIn() && $member->isAdmin() )
- {
- $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
- echo '
Nucleus CMS ' . $nucleus['version'] . $codenamestring . ' ';
-
- $newestVersion = getLatestVersion();
- $newestCompare = str_replace('/','.',$newestVersion);
- $currentVersion = str_replace(array('/','v'),array('.',''),$nucleus['version']);
- if ( $newestVersion && version_compare($newestCompare, $currentVersion) > 0 )
- {
- echo "
\n";
- echo '
';
- echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion;
- echo " ";
- }
- }
- else
- {
- echo 'Nucleus CMS ' . $nucleus['version'] . $codenamestring;
- }
- echo ')';
- echo '
';
+ self::$skin->parse('bookmarklet');
+ return;
+ }
+
+ /**
+ * Admin::action_actionlog()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_actionlog()
+ {
+ global $member, $manager;
+
+ $member->isAdmin() or self::disallow();
+
+ self::$skin->parse('actionlog');
return;
}
/**
- * Admin::pagefoot()
- * Output admin page foot include quickmenu
+ * Admin::action_banlist()
*
* @param void
* @return void
*/
- function pagefoot()
+ static private function action_banlist()
{
- global $action, $member, $manager;
+ global $member, $manager;
- $manager->notify(
- 'AdminPrePageFoot',
- array('action' => $this->action)
- );
+ $blogid = intRequestVar('blogid');
+ $member->blogAdminRights($blogid) or self::disallow();
- if ( $member->isLoggedIn() && ($action != 'showlogin') )
- {
- echo '
' . _LOGOUT . " \n";
- echo "
\n";
- }
+ self::$skin->parse('banlist');
+ return;
+ }
+
+ /**
+ * Admin::action_banlistdelete()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_banlistdelete()
+ {
+ global $member, $manager;
- echo "\n";
+ $blogid = intRequestVar('blogid');
+ $member->blogAdminRights($blogid) or self::disallow();
+
+ self::$skin->parse('banlistdelete');
+ return;
+ }
+
+ /**
+ * Admin::action_banlistdeleteconfirm()
+ *
+ * @param void
+ * @return void
+ */
+ static private function action_banlistdeleteconfirm()
+ {
+ global $member, $manager;
- echo "\n";
- echo "\n";
-
- echo "\n";
- echo "
\n";
-
- echo "\n";
- echo "
\n";
-
- echo "\n";
- echo "
\n";
+ /* TODO: we should use other ways */
+ $_REQUEST['delblogs'] = $deleted;
- echo "\n";
- echo "