X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=0.2.1%2Finc%2Fmysql-manager.php;fp=0.2.1%2Finc%2Fmysql-manager.php;h=6c79d2d58395f04d28877d58ffe9f49b909a558f;hp=9174ad2ead818e2688048ef05dce117c50a248f3;hb=7bc25dd08431c94ce9edca131d56c1a36b13c28a;hpb=157ee010917df5ca07e6d31b42f67417b2516d74
diff --git a/0.2.1/inc/mysql-manager.php b/0.2.1/inc/mysql-manager.php
index 9174ad2ead..6c79d2d583 100644
--- a/0.2.1/inc/mysql-manager.php
+++ b/0.2.1/inc/mysql-manager.php
@@ -1,1688 +1,1688 @@
-= "0.1.2") && (is_array($MODULES['module'])) && (isset($MODULES['module'][$mod])))
- {
- // Load from cache
- $name = $MODULES['title'][$mod];
-
- // Update cache hits
- $CONFIG['cache_hits']++;
- }
- else
- {
- // Load from database
- $result = SQL_QUERY_ESC("SELECT title FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1", array($mod), __FILE__, __LINE__);
- list($name) = SQL_FETCHROW($result);
- SQL_FREERESULT($result);
- }
- }
-
- // Trim name
- $name = trim($name);
-
- // Still no luck or empty title?
- if (empty($name))
- {
- // No name found
- $name = LANG_UNKNOWN_MODULE." (".$mod.")";
- if (SQL_NUMROWS($result) == 0)
- {
- // Add module to database
- $dummy = CHECK_MODULE($mod);
- }
- }
- return $name;
-}
-//
-function CHECK_MODULE($mod)
-{
- // We need them now here...
- global $MODULES, $CONFIG, $CACHE;
-
- // Filter module name (names with low chars and underlines are fine!)
- $mod = preg_replace("/[^a-z_]/", "", $mod);
-
- // Check for prefix is a extension...
- $MOD_SPLIT = explode("_", $mod);
- $extension = ""; $mod_chk = $mod;
- //* DEBUG: */ echo __LINE__."*".count($MOD_SPLIT)."*/".$mod."*
";
- if (count($MOD_SPLIT) == 2)
- {
- // Okay, there is a seperator (_) in the name so is the first part a module?
- //* DEBUG: */ echo __LINE__."*".$MOD_SPLIT[0]."*
";
- if (EXT_IS_ACTIVE($MOD_SPLIT[0]))
- {
- // The prefix is an extension's name, so let's set it
- $extension = $MOD_SPLIT[0]; $mod = $MOD_SPLIT[1];
- }
- }
-
- // Major error in module registry is the default
- $ret = "major";
-
- // Check if script is installed if not return a "done" to prevent some errors
- if ((!mxchange_installed) || (mxchange_installing) || (!admin_registered)) return "done";
-
- // Check if cache is latest version
- $locked = "Y"; $hidden = "N"; $admin = "N"; $mem = "N"; $found = false;
- if ((GET_EXT_VERSION("cache") >= "0.1.2") && (is_array($MODULES['module'])))
- {
- // Is the module cached?
- if (isset($MODULES['locked'][$mod_chk])) {
- // Check cache
- $locked = $MODULES['locked'][$mod_chk];
- $hidden = $MODULES['hidden'][$mod_chk];
- $admin = $MODULES['admin_only'][$mod_chk];
- $mem = $MODULES['mem_only'][$mod_chk];
-
- // Update cache hits
- $CONFIG['cache_hits']++;
- $found = true;
- } else {
- // No, then we have to update it!
- $ret = "cache_miss";
- }
- }
- else
- {
- // Check for module in database
- $result = SQL_QUERY_ESC("SELECT locked, hidden, admin_only, mem_only FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1", array($mod_chk), __FILE__, __LINE__);
- if (SQL_NUMROWS($result) == 1)
- {
- // Read data
- list($locked, $hidden, $admin, $mem) = SQL_FETCHROW($result);
- SQL_FREERESULT($result);
- $found = true;
- }
- }
-
- // Check returned values against current access permissions
- //
- // Admin access ----- Guest access ----- --- Guest or member? ---
- if ((IS_ADMIN()) || (($locked == "N") && ($admin == "N") && (($mem == "N") || (IS_LOGGED_IN()))))
- {
- // If you are admin you are welcome for everything!
- $ret = "done";
- }
- elseif ($locked == "Y")
- {
- // Module is locked
- $ret = "locked";
- }
- elseif (($mem == "Y") && (!IS_LOGGED_IN()))
- {
- // You have to login first!
- $ret = "mem_only";
- }
- elseif (($admin == "Y") && (!IS_ADMIN()))
- {
- // Only the Admin is allowed to enter this module!
- $ret = "admin_only";
- }
-
- // Still no luck or not found?
- if (($ret == "major") || ($ret == "cache_miss") || (!$found))
- {
- // ----- Legacy module ----- ---- Module in base folder ---- --- Module with extension's name ---
- if ((file_exists(PATH."inc/modules/".$mod.".php")) || (file_exists(PATH.$mod.".php")) || (file_exists(PATH.$extension."/".$mod.".php")))
- {
- // Data is missing so we add it
- if (GET_EXT_VERSION("sql_patches") >= "0.3.6") {
- // Since 0.3.6 we have a has_menu column, this took me a half hour
- // to find a loop here... *sigh*
- $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_mod_reg
-(module, locked, hidden, mem_only, admin_only, has_menu) VALUES
-('%s', 'Y', 'N', 'N', 'N', 'N')", array($mod_chk), __FILE__, __LINE__);
- } else {
- // Wrong/missing sql_patches!
- $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_mod_reg
-(module, locked, hidden, mem_only, admin_only) VALUES
-('%s', 'Y', 'N', 'N', 'N')", array($mod_chk), __FILE__, __LINE__);
- }
-
- // Everthing is fine?
- if (SQL_AFFECTEDROWS() == 0) {
- // Something bad happend!
- return "major";
- }
-
- // Destroy cache here
- if (GET_EXT_VERSION("cache") >= "0.1.2")
- {
- if ($CACHE->cache_file("mod_reg", true)) $CACHE->cache_destroy();
- unset($MODULES);
- }
-
- // And reload data
- $ret = CHECK_MODULE($mod_chk);
- }
- else
- {
- // Module not found we don't add it to the database
- $ret = "404";
- }
- }
-
- // Return the value
- return $ret;
-}
-//
-function ADD_DESCR($ACC_LVL, $FILE, $return = false, $output = true)
-{
- global $_GET, $DEPTH, $CONFIG;
- $LINK_ADD = ""; $OUT = ""; $AND = "";
- // First we have to do some analysis...
- if (ereg("action-", $FILE))
- {
- // This is an action file!
- $TYPE = "action";
- $SEARCH = substr($FILE, 7);
- switch ($ACC_LVL)
- {
- case "admin":
- $MOD_CHECK = "admin";
- break;
-
- case "sponsor":
- case "guest":
- case "member":
- $MOD_CHECK = $GLOBALS['module'];
- break;
- }
- $AND = " AND what=''";
- }
- elseif (ereg("what-", $FILE))
- {
- // This is an admin what file!
- $TYPE = "what";
- $SEARCH = substr($FILE, 5);
- $AND = "";
- switch ($ACC_LVL)
- {
- case "admin":
- $MOD_CHECK = "admin";
- break;
-
- case "guest":
- case "member":
- $MOD_CHECK = $GLOBALS['module'];
- if (!IS_ADMIN())
- {
- $AND = " AND visible='Y' AND locked='N'";
- }
- break;
- }
- $DUMMY = substr($SEARCH, 0, -4);
- $AND .= " AND action='".GET_ACTION($ACC_LVL, $DUMMY)."'";
- }
- elseif (($ACC_LVL == "sponsor") || ($ACC_LVL == "engine"))
- {
- // Sponsor / engine menu
- $TYPE = "what";
- $SEARCH = $FILE;
- $MOD_CHECK = $GLOBALS['module'];
- $AND = "";
- }
- else
- {
- // Other
- $TYPE = "menu";
- $SEARCH = $FILE;
- $MOD_CHECK = $GLOBALS['module'];
- $AND = "";
- }
- if ((!isset($DEPTH)) && (!$return))
- {
- $DEPTH = "0";
- $PREFIX = "
".YOU_ARE_HERE."
Home";
- }
- else
- {
- if (!$return) $DEPTH++;
- $PREFIX = "";
- }
- $PREFIX .= " -> ";
- if (ereg(".php", $SEARCH))
- {
- $SEARCH = substr($SEARCH, 0, strpos($SEARCH, ".php"));
- }
- $result = SQL_QUERY_ESC("SELECT title FROM "._MYSQL_PREFIX."_%s_menu WHERE %s='%s' ".$AND." LIMIT 1",
- array($ACC_LVL, $TYPE, $SEARCH), __FILE__, __LINE__);
- if (SQL_NUMROWS($result) == 1)
- {
- list($ret) = SQL_FETCHROW($result);
- SQL_FREERESULT($result);
- if ($return)
- {
- // Return title
- return $ret;
- }
- elseif (((GET_EXT_VERSION("sql_patches") >= "0.2.3") && ($CONFIG['youre_here'] == "Y")) || ((IS_ADMIN()) && ($MOD_CHECK == "admin")))
- {
- // Output HTML code
- $OUT = $PREFIX."
".$ret."\n";
- //* DEBUG: */ echo __LINE__."*".$TYPE."/".$GLOBALS['what']."*
\n";
- if (($TYPE == "what") || (($TYPE == "action") && (!isset($_GET['what'])) && ($GLOBALS['what'] != "welcome"))) {
- //* DEBUG: */ echo __LINE__."+".$TYPE."+
\n";
- $OUT .= "
\n";
- }
- }
- }
-
- // Return or output HTML code?
- if ($output)
- {
- // Output HTML code here
- OUTPUT_HTML($OUT);
- }
- else
- {
- // Return HTML code
- return $OUT;
- }
-}
-//
-function ADD_MENU($MODE, $act, $wht)
-{
- global $CONFIG;
- if (!VALIDATE_MENU_ACTION($MODE, $act, $wht, true)) return CODE_MENU_NOT_VALID;
- $main_cnt = 0; $AND = ""; $main_action = ""; $sub_what = "";
- if (!IS_ADMIN())
- {
- $AND = "AND visible='Y' AND locked='N'";
- }
- // Load SQL data and add the menu to the output stream...
- $result_main = SQL_QUERY_ESC("SELECT title, action FROM "._MYSQL_PREFIX."_%s_menu WHERE what='' ".$AND." ORDER BY sort",
- array($MODE), __FILE__, __LINE__);
- //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n";
- if (SQL_NUMROWS($result_main) > 0)
- {
- OUTPUT_HTML ("");
- }
-}
-// This patched function will reduce many SELECT queries for the specified or current admin login
-function IS_ADMIN($admin="")
-{
- global $_COOKIE, $ADMINS, $CONFIG;
- $ret = false; $passCookie = ""; $valPass = "";
- //* DEBUG: */ echo __LINE__."ADMIN:".$admin."
";
-
- // If admin login is not given take current from cookies...
- if ((empty($admin)) && (!empty($_COOKIE['admin_login'])) && (!empty($_COOKIE['admin_md5'])))
- {
- $admin = SQL_ESCAPE($_COOKIE['admin_login']); $passCookie = $_COOKIE['admin_md5'];
- }
- //* DEBUG: */ echo __LINE__."ADMIN:".$admin."/".$passCookie."
";
-
- // Search in array for entry
- if ((!empty($passCookie)) && (isset($ADMINS['password'][$admin])) && (!empty($admin)))
- {
- // Count cache hits
- $CONFIG['cache_hits']++;
-
- // Login data is valid or not?
- $valPass = generatePassString($ADMINS['password'][$admin]);
- }
- elseif (!empty($admin))
- {
- // Search for admin
- $result = SQL_QUERY_ESC("SELECT HIGH_PRIORITY password FROM "._MYSQL_PREFIX."_admins WHERE login='%s' LIMIT 1",
- array($admin), __FILE__, __LINE__);
-
- // Is he admin?
- $passDB = "";
- if (SQL_NUMROWS($result) == 1)
- {
- // Admin login was found so let's load password from DB
- list($passDB) = SQL_FETCHROW($result);
- $valPass = generatePassString($passDB);
- }
-
- // Free memory
- SQL_FREERESULT($result);
- }
-
- if (!empty($valPass))
- {
- // Check if password is valid
- //* DEBUG: */ echo __LINE__."*".$valPass."/".$passCookie)."*
";
- $ret = (($valPass == $passCookie) || (($valPass == "*FAILED*") && (!EXT_IS_ACTIVE("cache"))));
- }
-
- // Return result of comparision
- //* DEBUG: */ if (!$ret) echo __LINE__."OK!
";
- return $ret;
-}
-//
-function ADD_MAX_RECEIVE_LIST($MODE, $default="", $return=false)
-{
- global $_POST;
- $OUT = "";
- switch ($MODE)
- {
- case "guest":
- // Guests (in the registration form) are not allowed to select 0 mails per day.
- $result = SQL_QUERY("SELECT value, comment FROM "._MYSQL_PREFIX."_max_receive WHERE value > 0 ORDER BY value", __FILE__, __LINE__);
- if (SQL_NUMROWS($result) > 0)
- {
- $OUT = "";
- while (list($value, $comment) = SQL_FETCHROW($result))
- {
- $OUT .= " \n";
- }
- }
- // Return - hopefully - the requested data
- return $ret;
-}
-// Aiut
-function activateExchange() {
- global $CONFIG;
- $result = SQL_QUERY("SELECT userid FROM "._MYSQL_PREFIX."_user_data WHERE status='CONFIRMED' AND max_mails > 0", __FILE__, __LINE__);
- if (SQL_NUMROWS($result) >= $CONFIG['activate_xchange'])
- {
- // Free memory
- SQL_FREERESULT($result);
-
- // Activate System
- $SQLs = array(
- "UPDATE "._MYSQL_PREFIX."_mod_reg SET locked='N', hidden='N', mem_only='Y' WHERE module='order' LIMIT 1",
- "UPDATE "._MYSQL_PREFIX."_member_menu SET visible='Y', locked='N' WHERE what='order' OR what='unconfirmed' LIMIT 2",
- "UPDATE "._MYSQL_PREFIX."_config SET activate_xchange='0' WHERE config='0' LIMIT 1"
- );
-
- // Run SQLs
- foreach ($SQLs as $sql)
- {
- $result = SQL_QUERY($sql, __FILE__, __LINE__);
- }
-
- // Destroy cache
- }
-}
-//
-function DELETE_USER_ACCOUNT($uid, $reason)
-{
- $POINTS = 0;
- $result = SQL_QUERY_ESC("SELECT (SUM(p.points) - d.used_points) AS points
-FROM "._MYSQL_PREFIX."_user_points AS p
-LEFT JOIN "._MYSQL_PREFIX."_user_data AS d
-ON p.userid=d.userid
-WHERE p.userid=%d", array(bigintval($uid)), __FILE__, __LINE__);
- if (SQL_NUMROWS($result) == 1)
- {
- // Save his points to add them to the jackpot
- list($POINTS) = SQL_FETCHROW($result);
- SQL_FREERESULT($result);
-
- // Delete points entries as well
- $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_points WHERE userid=%d", array(bigintval($uid)), __FILE__, __LINE__);
-
- // Update mediadata as well
- if (GET_EXT_VERSION("mediadata") >= "0.0.4")
- {
- // Update database
- MEDIA_UPDATE_ENTRY(array("total_points"), "sub", $POINTS);
- }
-
- // Now, when we have all his points adds them do the jackpot!
- ADD_JACKPOT($POINTS);
- }
-
- // Delete category selections as well...
- $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_cats WHERE userid=%d",
- array(bigintval($uid)), __FILE__, __LINE__);
-
- // Remove from rallye if found
- if (EXT_IS_ACTIVE("rallye"))
- {
- $result = SQL_QUERY("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_rallye_users WHERE userid=%d",
- array(bigintval($uid)), __FILE__, __LINE__);
- }
-
- // Now a mail to the user and that's all...
- $msg = LOAD_EMAIL_TEMPLATE("del-user", stripslashes($reason), $uid);
- SEND_EMAIL($uid, ADMIN_DEL_ACCOUNT, $msg);
-
- // Ok, delete the account!
- $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1", array(bigintval($uid)), __FILE__, __LINE__);
-}
-//
-function META_DESCRIPTION($mod, $wht)
-{
- global $CONFIG, $DEPTH;
- if (($mod != "admin") && ($mod != "login"))
- {
- // Exclude admin and member's area
- $DESCR = MAIN_TITLE." ".trim($CONFIG['title_middle'])." ".ADD_DESCR("guest", "what-".$wht, true);
- unset($DEPTH);
- OUTPUT_HTML ("\n");
- }
-}
-//
-function ADD_JACKPOT($points)
-{
- $result = SQL_QUERY("SELECT points FROM "._MYSQL_PREFIX."_jackpot WHERE ok='ok' LIMIT 1", __FILE__, __LINE__);
- if (SQL_NUMROWS($result) == 0)
- {
- // Create line
- $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_jackpot (ok, points) VALUES ('ok', '%s')", array($points), __FILE__, __LINE__);
- }
- else
- {
- // Free memory
- SQL_FREERESULT($result);
-
- // Update points
- $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_jackpot SET points=points+%s WHERE ok='ok' LIMIT 1",
- array($points), __FILE__, __LINE__);
- }
-}
-//
-function SUB_JACKPOT($points)
-{
- // First failed
- $ret = "-1";
-
- // Get current points
- $result = SQL_QUERY("SELECT points FROM "._MYSQL_PREFIX."_jackpot WHERE ok='ok' LIMIT 1", __FILE__, __LINE__);
- if (SQL_NUMROWS($result) == 0)
- {
- // Create line
- $result = SQL_QUERY("INSERT INTO "._MYSQL_PREFIX."_jackpot (ok, points) VALUES ('ok', '0.00000')", __FILE__, __LINE__);
- }
- else
- {
- // Free memory
- SQL_FREERESULT($result);
-
- // Read points
- list($jackpot) = SQL_FETCHROW($result);
- if ($jackpot >= $points)
- {
- // Update points when there are enougth points in jackpot
- $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_jackpot SET points=points-%s WHERE ok='ok' LIMIT 1", array($points), __FILE__, __LINE__);
- $ret = $jackpot - $points;
- }
- }
-}
-//
-function IS_DEMO()
-{
- global $_COOKIE;
- return ((EXT_IS_ACTIVE("demo")) && ($_COOKIE['admin_login'] == "demo"));
-}
-//
-function LOAD_CONFIG($no="0")
-{
- global $CFG_CACHE, $CONFIG;
- $CFG_DUMMY = false;
- // Check for cache extension, cache-array and if the requested configuration is in cache
- if ((is_array($CFG_CACHE)) && (isset($CFG_CACHE['config'][$no])))
- {
- // Load config from cache
- $CFG_DUMMY = array();
- foreach ($CFG_CACHE as $element=>$cfgs)
- {
- $CFG_DUMMY[$element] = $cfgs[$no];
- }
-
- // Count cache hits
- $CONFIG['cache_hits']++;
- }
- else
- {
- // Load config from DB
- $result_config = SQL_QUERY_ESC("SELECT * FROM "._MYSQL_PREFIX."_config WHERE config='%d' LIMIT 1",
- array(bigintval($no)), __FILE__, __LINE__);
- $CFG_DUMMY = SQL_FETCHARRAY($result_config);
- SQL_FREERESULT($result_config);
- }
-
- // Return config array
- return $CFG_DUMMY;
-}
-// Gets the matching what name from module
-function GET_WHAT($MOD_CHECK)
-{
- $wht = "";
- //* DEBUG: */ echo __LINE__."!".$MOD_CHECK."!
\n";
- switch ($MOD_CHECK)
- {
- case "admin":
- $wht = "overview";
- break;
-
- case "login":
- case "index":
- $wht = "welcome";
- break;
-
- default:
- $wht = "";
- break;
- }
-
- // Return what value
- return $wht;
-}
-//
-function MODULE_HAS_MENU($mod)
-{
- global $EXTENSIONS, $MODULES, $CONFIG;
-
- // All is false by default
- $ret = false;
- if (GET_EXT_VERSION("cache") >= "0.1.2")
- {
- if (isset($MODULES['has_menu'][$mod]))
- {
- // Check module cache and count hit
- if ($MODULES['has_menu'][$mod] == "Y") $ret = true;
- $CONFIG['cache_hits']++;
- }
- elseif (isset($EXTENSIONS['ext_menu'][$mod]))
- {
- // Check cache and count hit
- if ($EXTENSIONS['ext_menu'][$mod] == "Y") $ret = true;
- $CONFIG['cache_hits']++;
- }
- }
- if ((GET_EXT_VERSION("sql_patches") >= "0.3.6") && ($ret === false))
- {
- // Check database for entry
- $result = SQL_QUERY_ESC("SELECT has_menu FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1",
- array($mod), __FILE__, __LINE__);
- if (SQL_NUMROWS($result) == 1)
- {
- list($has_menu) = SQL_FETCHROW($result);
- if ($has_menu == "Y") $ret = true;
- }
-
- // Free memory
- SQL_FREERESULT($result);
- } elseif (GET_EXT_VERSION("sql_patches") == "") {
- // No sql_patches installed, so maybe in admin area?
- if ((IS_ADMIN()) && ($mod == "admin")) return true; // Then there is a menu!
- }
-
- // Return status
- return $ret;
-}
-//
-?>
+= "0.1.2") && (is_array($MODULES['module'])) && (isset($MODULES['module'][$mod])))
+ {
+ // Load from cache
+ $name = $MODULES['title'][$mod];
+
+ // Update cache hits
+ $CONFIG['cache_hits']++;
+ }
+ else
+ {
+ // Load from database
+ $result = SQL_QUERY_ESC("SELECT title FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1", array($mod), __FILE__, __LINE__);
+ list($name) = SQL_FETCHROW($result);
+ SQL_FREERESULT($result);
+ }
+ }
+
+ // Trim name
+ $name = trim($name);
+
+ // Still no luck or empty title?
+ if (empty($name))
+ {
+ // No name found
+ $name = LANG_UNKNOWN_MODULE." (".$mod.")";
+ if (SQL_NUMROWS($result) == 0)
+ {
+ // Add module to database
+ $dummy = CHECK_MODULE($mod);
+ }
+ }
+ return $name;
+}
+//
+function CHECK_MODULE($mod)
+{
+ // We need them now here...
+ global $MODULES, $CONFIG, $CACHE;
+
+ // Filter module name (names with low chars and underlines are fine!)
+ $mod = preg_replace("/[^a-z_]/", "", $mod);
+
+ // Check for prefix is a extension...
+ $MOD_SPLIT = explode("_", $mod);
+ $extension = ""; $mod_chk = $mod;
+ //* DEBUG: */ echo __LINE__."*".count($MOD_SPLIT)."*/".$mod."*
";
+ if (count($MOD_SPLIT) == 2)
+ {
+ // Okay, there is a seperator (_) in the name so is the first part a module?
+ //* DEBUG: */ echo __LINE__."*".$MOD_SPLIT[0]."*
";
+ if (EXT_IS_ACTIVE($MOD_SPLIT[0]))
+ {
+ // The prefix is an extension's name, so let's set it
+ $extension = $MOD_SPLIT[0]; $mod = $MOD_SPLIT[1];
+ }
+ }
+
+ // Major error in module registry is the default
+ $ret = "major";
+
+ // Check if script is installed if not return a "done" to prevent some errors
+ if ((!mxchange_installed) || (mxchange_installing) || (!admin_registered)) return "done";
+
+ // Check if cache is latest version
+ $locked = "Y"; $hidden = "N"; $admin = "N"; $mem = "N"; $found = false;
+ if ((GET_EXT_VERSION("cache") >= "0.1.2") && (is_array($MODULES['module'])))
+ {
+ // Is the module cached?
+ if (isset($MODULES['locked'][$mod_chk])) {
+ // Check cache
+ $locked = $MODULES['locked'][$mod_chk];
+ $hidden = $MODULES['hidden'][$mod_chk];
+ $admin = $MODULES['admin_only'][$mod_chk];
+ $mem = $MODULES['mem_only'][$mod_chk];
+
+ // Update cache hits
+ $CONFIG['cache_hits']++;
+ $found = true;
+ } else {
+ // No, then we have to update it!
+ $ret = "cache_miss";
+ }
+ }
+ else
+ {
+ // Check for module in database
+ $result = SQL_QUERY_ESC("SELECT locked, hidden, admin_only, mem_only FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1", array($mod_chk), __FILE__, __LINE__);
+ if (SQL_NUMROWS($result) == 1)
+ {
+ // Read data
+ list($locked, $hidden, $admin, $mem) = SQL_FETCHROW($result);
+ SQL_FREERESULT($result);
+ $found = true;
+ }
+ }
+
+ // Check returned values against current access permissions
+ //
+ // Admin access ----- Guest access ----- --- Guest or member? ---
+ if ((IS_ADMIN()) || (($locked == "N") && ($admin == "N") && (($mem == "N") || (IS_LOGGED_IN()))))
+ {
+ // If you are admin you are welcome for everything!
+ $ret = "done";
+ }
+ elseif ($locked == "Y")
+ {
+ // Module is locked
+ $ret = "locked";
+ }
+ elseif (($mem == "Y") && (!IS_LOGGED_IN()))
+ {
+ // You have to login first!
+ $ret = "mem_only";
+ }
+ elseif (($admin == "Y") && (!IS_ADMIN()))
+ {
+ // Only the Admin is allowed to enter this module!
+ $ret = "admin_only";
+ }
+
+ // Still no luck or not found?
+ if (($ret == "major") || ($ret == "cache_miss") || (!$found))
+ {
+ // ----- Legacy module ----- ---- Module in base folder ---- --- Module with extension's name ---
+ if ((file_exists(PATH."inc/modules/".$mod.".php")) || (file_exists(PATH.$mod.".php")) || (file_exists(PATH.$extension."/".$mod.".php")))
+ {
+ // Data is missing so we add it
+ if (GET_EXT_VERSION("sql_patches") >= "0.3.6") {
+ // Since 0.3.6 we have a has_menu column, this took me a half hour
+ // to find a loop here... *sigh*
+ $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_mod_reg
+(module, locked, hidden, mem_only, admin_only, has_menu) VALUES
+('%s', 'Y', 'N', 'N', 'N', 'N')", array($mod_chk), __FILE__, __LINE__);
+ } else {
+ // Wrong/missing sql_patches!
+ $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_mod_reg
+(module, locked, hidden, mem_only, admin_only) VALUES
+('%s', 'Y', 'N', 'N', 'N')", array($mod_chk), __FILE__, __LINE__);
+ }
+
+ // Everthing is fine?
+ if (SQL_AFFECTEDROWS() == 0) {
+ // Something bad happend!
+ return "major";
+ }
+
+ // Destroy cache here
+ if (GET_EXT_VERSION("cache") >= "0.1.2")
+ {
+ if ($CACHE->cache_file("mod_reg", true)) $CACHE->cache_destroy();
+ unset($MODULES);
+ }
+
+ // And reload data
+ $ret = CHECK_MODULE($mod_chk);
+ }
+ else
+ {
+ // Module not found we don't add it to the database
+ $ret = "404";
+ }
+ }
+
+ // Return the value
+ return $ret;
+}
+//
+function ADD_DESCR($ACC_LVL, $FILE, $return = false, $output = true)
+{
+ global $_GET, $DEPTH, $CONFIG;
+ $LINK_ADD = ""; $OUT = ""; $AND = "";
+ // First we have to do some analysis...
+ if (ereg("action-", $FILE))
+ {
+ // This is an action file!
+ $TYPE = "action";
+ $SEARCH = substr($FILE, 7);
+ switch ($ACC_LVL)
+ {
+ case "admin":
+ $MOD_CHECK = "admin";
+ break;
+
+ case "sponsor":
+ case "guest":
+ case "member":
+ $MOD_CHECK = $GLOBALS['module'];
+ break;
+ }
+ $AND = " AND what=''";
+ }
+ elseif (ereg("what-", $FILE))
+ {
+ // This is an admin what file!
+ $TYPE = "what";
+ $SEARCH = substr($FILE, 5);
+ $AND = "";
+ switch ($ACC_LVL)
+ {
+ case "admin":
+ $MOD_CHECK = "admin";
+ break;
+
+ case "guest":
+ case "member":
+ $MOD_CHECK = $GLOBALS['module'];
+ if (!IS_ADMIN())
+ {
+ $AND = " AND visible='Y' AND locked='N'";
+ }
+ break;
+ }
+ $DUMMY = substr($SEARCH, 0, -4);
+ $AND .= " AND action='".GET_ACTION($ACC_LVL, $DUMMY)."'";
+ }
+ elseif (($ACC_LVL == "sponsor") || ($ACC_LVL == "engine"))
+ {
+ // Sponsor / engine menu
+ $TYPE = "what";
+ $SEARCH = $FILE;
+ $MOD_CHECK = $GLOBALS['module'];
+ $AND = "";
+ }
+ else
+ {
+ // Other
+ $TYPE = "menu";
+ $SEARCH = $FILE;
+ $MOD_CHECK = $GLOBALS['module'];
+ $AND = "";
+ }
+ if ((!isset($DEPTH)) && (!$return))
+ {
+ $DEPTH = "0";
+ $PREFIX = "".YOU_ARE_HERE."
Home";
+ }
+ else
+ {
+ if (!$return) $DEPTH++;
+ $PREFIX = "";
+ }
+ $PREFIX .= " -> ";
+ if (ereg(".php", $SEARCH))
+ {
+ $SEARCH = substr($SEARCH, 0, strpos($SEARCH, ".php"));
+ }
+ $result = SQL_QUERY_ESC("SELECT title FROM "._MYSQL_PREFIX."_%s_menu WHERE %s='%s' ".$AND." LIMIT 1",
+ array($ACC_LVL, $TYPE, $SEARCH), __FILE__, __LINE__);
+ if (SQL_NUMROWS($result) == 1)
+ {
+ list($ret) = SQL_FETCHROW($result);
+ SQL_FREERESULT($result);
+ if ($return)
+ {
+ // Return title
+ return $ret;
+ }
+ elseif (((GET_EXT_VERSION("sql_patches") >= "0.2.3") && ($CONFIG['youre_here'] == "Y")) || ((IS_ADMIN()) && ($MOD_CHECK == "admin")))
+ {
+ // Output HTML code
+ $OUT = $PREFIX."
".$ret."\n";
+ //* DEBUG: */ echo __LINE__."*".$TYPE."/".$GLOBALS['what']."*
\n";
+ if (($TYPE == "what") || (($TYPE == "action") && (!isset($_GET['what'])) && ($GLOBALS['what'] != "welcome"))) {
+ //* DEBUG: */ echo __LINE__."+".$TYPE."+
\n";
+ $OUT .= "
\n";
+ }
+ }
+ }
+
+ // Return or output HTML code?
+ if ($output)
+ {
+ // Output HTML code here
+ OUTPUT_HTML($OUT);
+ }
+ else
+ {
+ // Return HTML code
+ return $OUT;
+ }
+}
+//
+function ADD_MENU($MODE, $act, $wht)
+{
+ global $CONFIG;
+ if (!VALIDATE_MENU_ACTION($MODE, $act, $wht, true)) return CODE_MENU_NOT_VALID;
+ $main_cnt = 0; $AND = ""; $main_action = ""; $sub_what = "";
+ if (!IS_ADMIN())
+ {
+ $AND = "AND visible='Y' AND locked='N'";
+ }
+ // Load SQL data and add the menu to the output stream...
+ $result_main = SQL_QUERY_ESC("SELECT title, action FROM "._MYSQL_PREFIX."_%s_menu WHERE what='' ".$AND." ORDER BY sort",
+ array($MODE), __FILE__, __LINE__);
+ //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n";
+ if (SQL_NUMROWS($result_main) > 0)
+ {
+ OUTPUT_HTML ("");
+ }
+}
+// This patched function will reduce many SELECT queries for the specified or current admin login
+function IS_ADMIN($admin="")
+{
+ global $_COOKIE, $ADMINS, $CONFIG;
+ $ret = false; $passCookie = ""; $valPass = "";
+ //* DEBUG: */ echo __LINE__."ADMIN:".$admin."
";
+
+ // If admin login is not given take current from cookies...
+ if ((empty($admin)) && (!empty($_COOKIE['admin_login'])) && (!empty($_COOKIE['admin_md5'])))
+ {
+ $admin = SQL_ESCAPE($_COOKIE['admin_login']); $passCookie = $_COOKIE['admin_md5'];
+ }
+ //* DEBUG: */ echo __LINE__."ADMIN:".$admin."/".$passCookie."
";
+
+ // Search in array for entry
+ if ((!empty($passCookie)) && (isset($ADMINS['password'][$admin])) && (!empty($admin)))
+ {
+ // Count cache hits
+ $CONFIG['cache_hits']++;
+
+ // Login data is valid or not?
+ $valPass = generatePassString($ADMINS['password'][$admin]);
+ }
+ elseif (!empty($admin))
+ {
+ // Search for admin
+ $result = SQL_QUERY_ESC("SELECT HIGH_PRIORITY password FROM "._MYSQL_PREFIX."_admins WHERE login='%s' LIMIT 1",
+ array($admin), __FILE__, __LINE__);
+
+ // Is he admin?
+ $passDB = "";
+ if (SQL_NUMROWS($result) == 1)
+ {
+ // Admin login was found so let's load password from DB
+ list($passDB) = SQL_FETCHROW($result);
+ $valPass = generatePassString($passDB);
+ }
+
+ // Free memory
+ SQL_FREERESULT($result);
+ }
+
+ if (!empty($valPass))
+ {
+ // Check if password is valid
+ //* DEBUG: */ echo __LINE__."*".$valPass."/".$passCookie)."*
";
+ $ret = (($valPass == $passCookie) || (($valPass == "*FAILED*") && (!EXT_IS_ACTIVE("cache"))));
+ }
+
+ // Return result of comparision
+ //* DEBUG: */ if (!$ret) echo __LINE__."OK!
";
+ return $ret;
+}
+//
+function ADD_MAX_RECEIVE_LIST($MODE, $default="", $return=false)
+{
+ global $_POST;
+ $OUT = "";
+ switch ($MODE)
+ {
+ case "guest":
+ // Guests (in the registration form) are not allowed to select 0 mails per day.
+ $result = SQL_QUERY("SELECT value, comment FROM "._MYSQL_PREFIX."_max_receive WHERE value > 0 ORDER BY value", __FILE__, __LINE__);
+ if (SQL_NUMROWS($result) > 0)
+ {
+ $OUT = "";
+ while (list($value, $comment) = SQL_FETCHROW($result))
+ {
+ $OUT .= " \n";
+ }
+ }
+ // Return - hopefully - the requested data
+ return $ret;
+}
+// Aiut
+function activateExchange() {
+ global $CONFIG;
+ $result = SQL_QUERY("SELECT userid FROM "._MYSQL_PREFIX."_user_data WHERE status='CONFIRMED' AND max_mails > 0", __FILE__, __LINE__);
+ if (SQL_NUMROWS($result) >= $CONFIG['activate_xchange'])
+ {
+ // Free memory
+ SQL_FREERESULT($result);
+
+ // Activate System
+ $SQLs = array(
+ "UPDATE "._MYSQL_PREFIX."_mod_reg SET locked='N', hidden='N', mem_only='Y' WHERE module='order' LIMIT 1",
+ "UPDATE "._MYSQL_PREFIX."_member_menu SET visible='Y', locked='N' WHERE what='order' OR what='unconfirmed' LIMIT 2",
+ "UPDATE "._MYSQL_PREFIX."_config SET activate_xchange='0' WHERE config='0' LIMIT 1"
+ );
+
+ // Run SQLs
+ foreach ($SQLs as $sql)
+ {
+ $result = SQL_QUERY($sql, __FILE__, __LINE__);
+ }
+
+ // Destroy cache
+ }
+}
+//
+function DELETE_USER_ACCOUNT($uid, $reason)
+{
+ $POINTS = 0;
+ $result = SQL_QUERY_ESC("SELECT (SUM(p.points) - d.used_points) AS points
+FROM "._MYSQL_PREFIX."_user_points AS p
+LEFT JOIN "._MYSQL_PREFIX."_user_data AS d
+ON p.userid=d.userid
+WHERE p.userid=%d", array(bigintval($uid)), __FILE__, __LINE__);
+ if (SQL_NUMROWS($result) == 1)
+ {
+ // Save his points to add them to the jackpot
+ list($POINTS) = SQL_FETCHROW($result);
+ SQL_FREERESULT($result);
+
+ // Delete points entries as well
+ $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_points WHERE userid=%d", array(bigintval($uid)), __FILE__, __LINE__);
+
+ // Update mediadata as well
+ if (GET_EXT_VERSION("mediadata") >= "0.0.4")
+ {
+ // Update database
+ MEDIA_UPDATE_ENTRY(array("total_points"), "sub", $POINTS);
+ }
+
+ // Now, when we have all his points adds them do the jackpot!
+ ADD_JACKPOT($POINTS);
+ }
+
+ // Delete category selections as well...
+ $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_cats WHERE userid=%d",
+ array(bigintval($uid)), __FILE__, __LINE__);
+
+ // Remove from rallye if found
+ if (EXT_IS_ACTIVE("rallye"))
+ {
+ $result = SQL_QUERY("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_rallye_users WHERE userid=%d",
+ array(bigintval($uid)), __FILE__, __LINE__);
+ }
+
+ // Now a mail to the user and that's all...
+ $msg = LOAD_EMAIL_TEMPLATE("del-user", stripslashes($reason), $uid);
+ SEND_EMAIL($uid, ADMIN_DEL_ACCOUNT, $msg);
+
+ // Ok, delete the account!
+ $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1", array(bigintval($uid)), __FILE__, __LINE__);
+}
+//
+function META_DESCRIPTION($mod, $wht)
+{
+ global $CONFIG, $DEPTH;
+ if (($mod != "admin") && ($mod != "login"))
+ {
+ // Exclude admin and member's area
+ $DESCR = MAIN_TITLE." ".trim($CONFIG['title_middle'])." ".ADD_DESCR("guest", "what-".$wht, true);
+ unset($DEPTH);
+ OUTPUT_HTML ("\n");
+ }
+}
+//
+function ADD_JACKPOT($points)
+{
+ $result = SQL_QUERY("SELECT points FROM "._MYSQL_PREFIX."_jackpot WHERE ok='ok' LIMIT 1", __FILE__, __LINE__);
+ if (SQL_NUMROWS($result) == 0)
+ {
+ // Create line
+ $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_jackpot (ok, points) VALUES ('ok', '%s')", array($points), __FILE__, __LINE__);
+ }
+ else
+ {
+ // Free memory
+ SQL_FREERESULT($result);
+
+ // Update points
+ $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_jackpot SET points=points+%s WHERE ok='ok' LIMIT 1",
+ array($points), __FILE__, __LINE__);
+ }
+}
+//
+function SUB_JACKPOT($points)
+{
+ // First failed
+ $ret = "-1";
+
+ // Get current points
+ $result = SQL_QUERY("SELECT points FROM "._MYSQL_PREFIX."_jackpot WHERE ok='ok' LIMIT 1", __FILE__, __LINE__);
+ if (SQL_NUMROWS($result) == 0)
+ {
+ // Create line
+ $result = SQL_QUERY("INSERT INTO "._MYSQL_PREFIX."_jackpot (ok, points) VALUES ('ok', '0.00000')", __FILE__, __LINE__);
+ }
+ else
+ {
+ // Free memory
+ SQL_FREERESULT($result);
+
+ // Read points
+ list($jackpot) = SQL_FETCHROW($result);
+ if ($jackpot >= $points)
+ {
+ // Update points when there are enougth points in jackpot
+ $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_jackpot SET points=points-%s WHERE ok='ok' LIMIT 1", array($points), __FILE__, __LINE__);
+ $ret = $jackpot - $points;
+ }
+ }
+}
+//
+function IS_DEMO()
+{
+ global $_COOKIE;
+ return ((EXT_IS_ACTIVE("demo")) && ($_COOKIE['admin_login'] == "demo"));
+}
+//
+function LOAD_CONFIG($no="0")
+{
+ global $CFG_CACHE, $CONFIG;
+ $CFG_DUMMY = false;
+ // Check for cache extension, cache-array and if the requested configuration is in cache
+ if ((is_array($CFG_CACHE)) && (isset($CFG_CACHE['config'][$no])))
+ {
+ // Load config from cache
+ $CFG_DUMMY = array();
+ foreach ($CFG_CACHE as $element=>$cfgs)
+ {
+ $CFG_DUMMY[$element] = $cfgs[$no];
+ }
+
+ // Count cache hits
+ $CONFIG['cache_hits']++;
+ }
+ else
+ {
+ // Load config from DB
+ $result_config = SQL_QUERY_ESC("SELECT * FROM "._MYSQL_PREFIX."_config WHERE config='%d' LIMIT 1",
+ array(bigintval($no)), __FILE__, __LINE__);
+ $CFG_DUMMY = SQL_FETCHARRAY($result_config);
+ SQL_FREERESULT($result_config);
+ }
+
+ // Return config array
+ return $CFG_DUMMY;
+}
+// Gets the matching what name from module
+function GET_WHAT($MOD_CHECK)
+{
+ $wht = "";
+ //* DEBUG: */ echo __LINE__."!".$MOD_CHECK."!
\n";
+ switch ($MOD_CHECK)
+ {
+ case "admin":
+ $wht = "overview";
+ break;
+
+ case "login":
+ case "index":
+ $wht = "welcome";
+ break;
+
+ default:
+ $wht = "";
+ break;
+ }
+
+ // Return what value
+ return $wht;
+}
+//
+function MODULE_HAS_MENU($mod)
+{
+ global $EXTENSIONS, $MODULES, $CONFIG;
+
+ // All is false by default
+ $ret = false;
+ if (GET_EXT_VERSION("cache") >= "0.1.2")
+ {
+ if (isset($MODULES['has_menu'][$mod]))
+ {
+ // Check module cache and count hit
+ if ($MODULES['has_menu'][$mod] == "Y") $ret = true;
+ $CONFIG['cache_hits']++;
+ }
+ elseif (isset($EXTENSIONS['ext_menu'][$mod]))
+ {
+ // Check cache and count hit
+ if ($EXTENSIONS['ext_menu'][$mod] == "Y") $ret = true;
+ $CONFIG['cache_hits']++;
+ }
+ }
+ if ((GET_EXT_VERSION("sql_patches") >= "0.3.6") && ($ret === false))
+ {
+ // Check database for entry
+ $result = SQL_QUERY_ESC("SELECT has_menu FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1",
+ array($mod), __FILE__, __LINE__);
+ if (SQL_NUMROWS($result) == 1)
+ {
+ list($has_menu) = SQL_FETCHROW($result);
+ if ($has_menu == "Y") $ret = true;
+ }
+
+ // Free memory
+ SQL_FREERESULT($result);
+ } elseif (GET_EXT_VERSION("sql_patches") == "") {
+ // No sql_patches installed, so maybe in admin area?
+ if ((IS_ADMIN()) && ($mod == "admin")) return true; // Then there is a menu!
+ }
+
+ // Return status
+ return $ret;
+}
+//
+?>