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 (""); - // There are menus available, so we simply display them... :) - while (list($main_title, $main_action) = SQL_FETCHROW($result_main)) - { - //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; - // Load menu header template - $BLOCK_MODE = false; $act = $main_action; - LOAD_TEMPLATE($MODE."_menu_title", false, $main_title); - - $result_sub = SQL_QUERY_ESC("SELECT title, what FROM "._MYSQL_PREFIX."_%s_menu WHERE action='%s' AND what != '' ".$AND." ORDER BY sort", - array($MODE, $main_action), __FILE__, __LINE__); - $ctl = SQL_NUMROWS($result_sub); - if ($ctl > 0) - { - $cnt=0; - while (list($sub_title, $sub_what) = SQL_FETCHROW($result_sub)) - { - $content = ""; - - // Full file name for checking menu - //* DEBUG: */ echo __LINE__.":!!!!".$sub_what."!!!
\n"; - $test_inc = sprintf("%sinc/modules/%s/what-%s.php", PATH, $MODE, $sub_what); - $test = (file_exists($test_inc) && is_readable($test_inc)); - if ($test) - { - if ((!empty($wht)) && (($wht == $sub_what))) - { - $content = ""; - } - - // Navigation link - $content .= " - -"); - } - //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; - } - $main_cnt++; - //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; - if (SQL_NUMROWS($result_main) > $main_cnt) OUTPUT_HTML ("
"); - } - - // Free memory - SQL_FREERESULT($result_main); - - // Close table - //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; - OUTPUT_HTML ("
"); - //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; - include ($INC_BLOCK); - //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; - if ((!EXT_IS_ACTIVE($main_action)) || ($main_action == "online")) 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 (""); + // There are menus available, so we simply display them... :) + while (list($main_title, $main_action) = SQL_FETCHROW($result_main)) + { + //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; + // Load menu header template + $BLOCK_MODE = false; $act = $main_action; + LOAD_TEMPLATE($MODE."_menu_title", false, $main_title); + + $result_sub = SQL_QUERY_ESC("SELECT title, what FROM "._MYSQL_PREFIX."_%s_menu WHERE action='%s' AND what != '' ".$AND." ORDER BY sort", + array($MODE, $main_action), __FILE__, __LINE__); + $ctl = SQL_NUMROWS($result_sub); + if ($ctl > 0) + { + $cnt=0; + while (list($sub_title, $sub_what) = SQL_FETCHROW($result_sub)) + { + $content = ""; + + // Full file name for checking menu + //* DEBUG: */ echo __LINE__.":!!!!".$sub_what."!!!
\n"; + $test_inc = sprintf("%sinc/modules/%s/what-%s.php", PATH, $MODE, $sub_what); + $test = (file_exists($test_inc) && is_readable($test_inc)); + if ($test) + { + if ((!empty($wht)) && (($wht == $sub_what))) + { + $content = ""; + } + + // Navigation link + $content .= " + +"); + } + //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; + } + $main_cnt++; + //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; + if (SQL_NUMROWS($result_main) > $main_cnt) OUTPUT_HTML ("
"); + } + + // Free memory + SQL_FREERESULT($result_main); + + // Close table + //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; + OUTPUT_HTML ("
"); + //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; + include ($INC_BLOCK); + //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*
\n"; + if ((!EXT_IS_ACTIVE($main_action)) || ($main_action == "online")) 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; +} +// +?>