A lot while() conditions rewritten to SQL_FETCHARRAY(), see bug #107, @TODO tags...
[mailer.git] / inc / mysql-manager.php
index d25ae4c41425990ee99c1889570b07c66e4ecb8c..c019248ea03d23b3979f8d096028ef7fb5d29803 100644 (file)
@@ -312,7 +312,7 @@ function ADD_DESCR ($ACC_LVL, $FQFN, $return = false, $output = true) {
                list($ret) = SQL_FETCHROW($result);
 
                // Shall we return it?
-               if ($return) {
+               if ($return === true) {
                        // Return title
                        return $ret;
                } elseif (((GET_EXT_VERSION("sql_patches") >= "0.2.3") && (getConfig('youre_here') == "Y")) || ((IS_ADMIN()) && ($modCheck == "admin"))) {
@@ -363,7 +363,7 @@ function ADD_MENU ($MODE, $act, $wht) {
        // Non-admin shall not see all menus
        if (!IS_ADMIN()) {
                $AND = " AND `visible`='Y' AND `locked`='N'";
-       }
+       } // END - if
 
        // 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='' OR `what` IS NULL)".$AND." ORDER BY `sort`",
@@ -372,60 +372,69 @@ function ADD_MENU ($MODE, $act, $wht) {
        if (SQL_NUMROWS($result_main) > 0) {
                OUTPUT_HTML("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"".$MODE."_menu\">");
                // 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']."*<br />\n";
+               while ($content = SQL_FETCHARRAY($result_main)) {
+                       //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$content['action']."/".$sub_what.":".$GLOBALS['what']."*<br />\n";
                        // Init variables
-                       $GLOBALS['block_mode'] = false; $act = $main_action;
-
-                       // Prepare content
-                       $content = array(
-                               'action' => $main_action,
-                               'title'  => $main_title
-                       );
+                       $GLOBALS['block_mode'] = false;
+                       $act = $content['action'];
 
                        // Load menu header template
                        LOAD_TEMPLATE($MODE."_menu_title", false, $content);
 
-                       $result_sub = SQL_QUERY_ESC("SELECT title, what FROM `{!_MYSQL_PREFIX!}_%s_menu` WHERE `action`='%s' AND `what` != '' AND `what` IS NOT NULL ".$AND." ORDER BY `sort`",
-                        array($MODE, $main_action), __FUNCTION__, __LINE__);
+                       // Sub menu
+                       $result_sub = SQL_QUERY_ESC("SELECT title AS sub_title, what AS sub_what FROM `{!_MYSQL_PREFIX!}_%s_menu` WHERE `action`='%s' AND `what` != '' AND `what` IS NOT NULL ".$AND." ORDER BY `sort`",
+                               array($MODE, $content['action']), __FUNCTION__, __LINE__);
+
+                       // Get number of rows
                        $ctl = SQL_NUMROWS($result_sub);
+
+                       // Do we have some entries?
                        if ($ctl > 0) {
-                               $cnt=0;
-                               while (list($sub_title, $sub_what) = SQL_FETCHROW($result_sub)) {
+                               // Init counter
+                               $cnt = 0;
+
+                               // Load all sub menus
+                               while ($content2 = SQL_FETCHARRAY($result_sub)) {
+                                       // Merge both arrays in one
+                                       $content = merge_array($content, $content2);
+
                                        // Init content
-                                       $content = "";
+                                       $OUT = "";
 
                                        // Full file name for checking menu
-                                       //* DEBUG: */ echo __LINE__.":!!!!".$sub_what."!!!<br />\n";
-                                       $FQFN = sprintf("%sinc/modules/%s/what-%s.php", constant('PATH'), $MODE, $sub_what);
-                                       if (FILE_READABLE($FQFN)) {
-                                               if ((!empty($wht)) && (($wht == $sub_what))) {
-                                                       $content = "<strong>";
+                                       //* DEBUG: */ echo __LINE__.":!!!!".$content['sub_what']."!!!<br />\n";
+                                       $INC = sprintf("inc/modules/%s/what-%s.php", $MODE, $content['sub_what']);
+                                       if (INCLUDE_READABLE($INC)) {
+                                               if ((!empty($wht)) && (($wht == $content['sub_what']))) {
+                                                       $OUT = "<strong>";
                                                }
 
                                                // Navigation link
-                                               $content .= "<a name=\"menu\" class=\"menu_blur\" href=\"{!URL!}/modules.php?module=".$GLOBALS['module']."&amp;what=".$sub_what.ADD_URL_DATA("")."\" target=\"_self\">";
+                                               $OUT .= "<a name=\"menu\" class=\"menu_blur\" href=\"{!URL!}/modules.php?module=".$GLOBALS['module']."&amp;what=".$content['sub_what'].ADD_URL_DATA("")."\" target=\"_self\">";
                                        } else {
-                                               $content .= "<em>";
+                                               $OUT .= "<em>";
                                        }
 
                                        // Menu title
-                                       $content .= getConfig('menu_blur_spacer') . $sub_title;
+                                       $OUT .= getConfig('menu_blur_spacer') . $content['sub_title'];
 
-                                       if (FILE_READABLE($FQFN)) {
-                                               $content .= "</a>";
+                                       if (INCLUDE_READABLE($INC)) {
+                                               $OUT .= "</a>";
                                        } else {
-                                               $content .= "</em>";
+                                               $OUT .= "</em>";
                                        }
 
-                                       if ((!empty($wht)) && (($wht == $sub_what))) {
-                                               $content .= "</strong>";
-                                       }
-                                       $wht = $sub_what; $cnt++;
-                                       // Prepare array
+                                       if ((!empty($wht)) && (($wht == $content['sub_what']))) {
+                                               $OUT .= "</strong>";
+                                       } // END - if
+
+                                       // Remember 'what' for next round and count it up
+                                       $wht = $content['sub_what']; $cnt++;
+
+                                       // Rewrite array
                                        $content =  array(
-                                               'menu' => $content,
-                                               'what' => $sub_what
+                                               'menu' => $OUT,
+                                               'what' => $content['sub_what']
                                        );
 
                                        // Add regular menu row or bottom row?
@@ -438,30 +447,32 @@ function ADD_MENU ($MODE, $act, $wht) {
                        } else {
                                // This is a menu block... ;-)
                                $GLOBALS['block_mode'] = true;
-                               $INC_BLOCK = sprintf("inc/modules/%s/action-%s.php", $MODE, $main_action);
+                               $INC_BLOCK = sprintf("inc/modules/%s/action-%s.php", $MODE, $content['action']);
                                if (FILE_READABLE($INC_BLOCK)) {
                                        // Load include file
-                                       if ((!EXT_IS_ACTIVE($main_action)) || ($main_action == "online")) OUTPUT_HTML("<tr>
+                                       if ((!EXT_IS_ACTIVE($content['action'])) || ($content['action'] == "online")) OUTPUT_HTML("<tr>
 
   <td class=\"".$MODE."_menu_whats\">");
-                                       //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*<br />\n";
+                                       //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$content['action']."/".$content['sub_what'].":".$GLOBALS['what']."*<br />\n";
                                        LOAD_INC($INC_BLOCK);
-                                       //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*<br />\n";
-                                       if ((!EXT_IS_ACTIVE($main_action)) || ($main_action == "online")) OUTPUT_HTML("  </td>
+                                       //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$content['action']."/".$content['sub_what'].":".$GLOBALS['what']."*<br />\n";
+                                       if ((!EXT_IS_ACTIVE($content['action'])) || ($content['action'] == "online")) OUTPUT_HTML("  </td>
 </tr>");
                                }
-                               //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*<br />\n";
+                               //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$content['action']."/".$content['sub_what'].":".$GLOBALS['what']."*<br />\n";
                        }
                        $main_cnt++;
-                       //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*<br />\n";
-                       if (SQL_NUMROWS($result_main) > $main_cnt)      OUTPUT_HTML("<tr><td class=\"".$MODE."_menu_seperator\"></td></tr>");
+                       //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$content['action']."/".$content['sub_what'].":".$GLOBALS['what']."*<br />\n";
+                       if (SQL_NUMROWS($result_main) > $main_cnt) {
+                               OUTPUT_HTML("<tr><td class=\"".$MODE."_menu_seperator\"></td></tr>");
+                       } // END - if
                }
 
                // Free memory
                SQL_FREERESULT($result_main);
 
                // Close table
-               //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$main_action."/".$sub_what.":".$GLOBALS['what']."*<br />\n";
+               //* DEBUG: */ echo __LINE__."/".$main_cnt."/".$content['action']."/".$content['sub_what'].":".$GLOBALS['what']."*<br />\n";
                OUTPUT_HTML("</table>");
        }
 }
@@ -529,53 +540,49 @@ function IS_ADMIN ($admin="") {
 // Generates a list of "max receiveable emails per day"
 function ADD_MAX_RECEIVE_LIST ($MODE, $default = "", $return = false) {
        $OUT = "";
+       $result = false;
+
        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", __FUNCTION__, __LINE__);
-               if (SQL_NUMROWS($result) > 0) {
-                       $OUT = "";
-                       while (list($value, $comment) = SQL_FETCHROW($result)) {
-                               $OUT .= "      <option value=\"".$value."\"";
-                               if (REQUEST_POST('max_mails') == $value) $OUT .= " selected=\"selected\"";
-                               $OUT .= ">".$value." {--PER_DAY--}";
-                               if (!empty($comment)) $OUT .= " (".$comment.")";
-                               $OUT .= "</option>\n";
-                       }
-                       define('__MAX_RECEIVE_OPTIONS', $OUT);
+               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",
+                               __FUNCTION__, __LINE__);
+                       break;
 
-                       // Free memory
-                       SQL_FREERESULT($result);
-                       $OUT = LOAD_TEMPLATE("guest_receive_table", true);
-               } else {
-                       // Maybe the admin has to setup some maximum values?
-                       debug_report_bug("Nothing is being done here?");
-               }
-               break;
+               case "member":
+                       // Members are allowed to set to zero mails per day (we will change this soon!)
+                       $result = SQL_QUERY("SELECT value, comment FROM `{!_MYSQL_PREFIX!}_max_receive` ORDER BY value",
+                               __FUNCTION__, __LINE__);
+                       break;
 
-       case "member":
-               // Members are allowed to set to zero mails per day (we will change this soon!)
-               $result = SQL_QUERY("SELECT value, comment FROM `{!_MYSQL_PREFIX!}_max_receive` ORDER BY value", __FUNCTION__, __LINE__);
-               if (SQL_NUMROWS($result) > 0) {
-                       $OUT = "";
-                       while (list($value, $comment) = SQL_FETCHROW($result)) {
-                               $OUT .= "      <option value=\"".$value."\"";
-                               if ($default == $value) $OUT .= " selected=\"selected\"";
-                               $OUT .= ">".$value." {--PER_DAY--}";
-                               if (!empty($comment)) $OUT .= " (".$comment.")";
-                               $OUT .= "</option>\n";
-                       }
-                       define('__MAX_RECEIVE_OPTIONS', $OUT);
-                       SQL_FREERESULT($result);
-                       $OUT = LOAD_TEMPLATE("member_receive_table", true);
-               } else {
-                       // Maybe the admin has to setup some maximum values?
-                       $OUT = LOAD_TEMPLATE("admin_settings_saved", true, getMessage('NO_MAX_VALUES'));
+               default: // Invalid!
+                       DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Invalid mode %s detected.", $MODE));
+                       break;
+       }
+
+       // Some entries are found?
+       if (SQL_NUMROWS($result) > 0) {
+               $OUT = "";
+               while ($content = SQL_FETCHARRAY($result)) {
+                       $OUT .= "      <option value=\"".$content['value']."\"";
+                       if (REQUEST_POST('max_mails') == $content['value']) $OUT .= " selected=\"selected\"";
+                       $OUT .= ">".$content['value']." {--PER_DAY--}";
+                       if (!empty($content['comment'])) $OUT .= " (".$content['comment'].")";
+                       $OUT .= "</option>\n";
                }
-               break;
+               define('__MAX_RECEIVE_OPTIONS', $OUT);
+
+               // Load template
+               $OUT = LOAD_TEMPLATE($MODE."_receive_table", true);
+       } else {
+               // Maybe the admin has to setup some maximum values?
+               debug_report_bug("Nothing is being done here?");
        }
 
-       if ($return) {
+       // Free result
+       SQL_FREERESULT($result);
+
+       if ($return === true) {
                // Return generated HTML code
                return $OUT;
        } else {
@@ -1226,7 +1233,7 @@ function ADD_POINTS_REFSYSTEM ($subject, $uid, $points, $send_notify=false, $rid
 
                                // Prepare content
                                $content = array(
-                                       'text'   => REASON_DIRECT_PAYMENT,
+                                       'text'   => getMessage('REASON_DIRECT_PAYMENT'),
                                        'points' => TRANSLATE_COMMA($ref_points)
                                );
 
@@ -1234,7 +1241,7 @@ function ADD_POINTS_REFSYSTEM ($subject, $uid, $points, $send_notify=false, $rid
                                $msg = LOAD_EMAIL_TEMPLATE("add-points", $content, $uid);
 
                                // And sent it away
-                               SEND_EMAIL($email, SUBJECT_DIRECT_PAYMENT, $msg);
+                               SEND_EMAIL($email, getMessage('SUBJECT_DIRECT_PAYMENT'), $msg);
                                if (!REQUEST_ISSET_GET(('mid'))) LOAD_TEMPLATE("admin_settings_saved", false, getMessage('ADMIN_POINTS_ADDED'));
                        }
 
@@ -1301,13 +1308,14 @@ function UPDATE_REF_COUNTER ($uid) {
        } // END - if
 }
 
-// OBSOLETE: Sends out mail to all administrators
+// Sends out mail to all administrators. This function is no longer obsolete
+// because we need it when there is no ext-admins installed
 function SEND_ADMIN_EMAILS ($subj, $msg) {
        // Load all admin email addresses
        $result = SQL_QUERY("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` ORDER BY `id` ASC", __FUNCTION__, __LINE__);
-       while (list($email) = SQL_FETCHROW($result)) {
+       while ($content = SQL_FETCHARRAY($result)) {
                // Send the email out
-               SEND_EMAIL($email, $subj, $msg);
+               SEND_EMAIL($content['email'], $subj, $msg);
        } // END - if
 
        // Free result
@@ -1475,7 +1483,7 @@ function ADD_OPTION_LINES ($table, $id, $name, $default="", $special="", $where=
        $ret = "";
        if ($table == "/ARRAY/") {
                // Selection from array
-               if (is_array($id) && is_array($name) && sizeof($id) == sizeof($name)) {
+               if (is_array($id) && is_array($name) && count($id) == count($name)) {
                        // Both are arrays
                        foreach ($id as $idx => $value) {
                                $ret .= "<option value=\"".$value."\"";
@@ -1493,6 +1501,7 @@ function ADD_OPTION_LINES ($table, $id, $name, $default="", $special="", $where=
                        array($id, $ORDER, $table, $name), __FUNCTION__, __LINE__);
                if (SQL_NUMROWS($result) > 0) {
                        // Found data so add them as OPTION lines: $id is the value and $name is the "name" of the option
+                       // @TODO Try to rewrite this to $content = SQL_FETCHARRAY()
                        while (list($value, $title, $add) = SQL_FETCHROW($result)) {
                                if (empty($special)) $add = "";
                                $ret .= "<option value=\"".$value."\"";
@@ -1505,15 +1514,15 @@ function ADD_OPTION_LINES ($table, $id, $name, $default="", $special="", $where=
                        SQL_FREERESULT($result);
                } else {
                        // No data found
-                       $ret = "<option value=\"x\">".SELECT_NONE."</option>\n";
+                       $ret = "<option value=\"x\">{--SELECT_NONE--}</option>\n";
                }
        }
 
        // Return - hopefully - the requested data
        return $ret;
 }
-// Activate exchange (DEPERECATED???)
-function activateExchange() {
+// Activate exchange
+function activateExchange () {
        // Check total amount of users
        $totalUsers = GET_TOTAL_DATA("CONFIRMED", "user_data", "userid", "status", true, " AND max_mails > 0");
 
@@ -1798,21 +1807,24 @@ function ADD_CATEGORY_OPTIONS ($mode) {
        $result = SQL_QUERY("SELECT id, cat FROM `{!_MYSQL_PREFIX!}_cats`".$whereStatement." ORDER BY `sort`", __FUNCTION__, __LINE__);
        if (SQL_NUMROWS($result) > 0) {
                // ... and begin loading stuff
-               while (list($id, $cat) = SQL_FETCHROW($result)) {
+               while ($content = SQL_FETCHARRAY($result)) {
                        // Transfer some data
-                       $CATS['id'][]   = $id;
-                       $CATS['name'][] = $cat;
+                       $CATS['id'][]   = $content['id'];
+                       $CATS['name'][] = $content['cat'];
 
                        // Check which users are in this category
                        $result_uids = SQL_QUERY_ESC("SELECT userid FROM `{!_MYSQL_PREFIX!}_user_cats` WHERE cat_id=%s",
-                        array(bigintval($id)), __FUNCTION__, __LINE__);
+                               array(bigintval($content['id'])), __FUNCTION__, __LINE__);
 
                        // Start adding all
                        $uid_cnt = 0;
+                       // @TODO Rewrite this to $content = SQL_FETCHARRAY()
                        while (list($ucat) = SQL_FETCHROW($result_uids)) {
                                $result_ver = SQL_QUERY_ESC("SELECT userid FROM `{!_MYSQL_PREFIX!}_user_data`
 WHERE userid=%s AND `status`='CONFIRMED' AND receive_mails > 0".PREPARE_SQL_HTML_HOLIDAY($mode)." LIMIT 1",
- array(bigintval($ucat)), __FUNCTION__, __LINE__);
+                                       array(bigintval($ucat)), __FUNCTION__, __LINE__);
+
+                               // Add user count
                                $uid_cnt += SQL_NUMROWS($result_ver);
 
                                // Free memory
@@ -1824,7 +1836,7 @@ WHERE userid=%s AND `status`='CONFIRMED' AND receive_mails > 0".PREPARE_SQL_HTML
 
                        // Add counter
                        $CATS['uids'][] = $uid_cnt;
-               }
+               } // END - while
 
                // Free memory
                SQL_FREERESULT($result);
@@ -1833,8 +1845,8 @@ WHERE userid=%s AND `status`='CONFIRMED' AND receive_mails > 0".PREPARE_SQL_HTML
                $OUT = "";
                foreach ($CATS['id'] as $key => $value) {
                        if (strlen($CATS['name'][$key]) > 20) $CATS['name'][$key] = substr($CATS['name'][$key], 0, 17)."...";
-                       $OUT .= "      <option value=\"".$value."\">".$CATS['name'][$key]." (".$CATS['uids'][$key]." ".USER_IN_CAT.")</option>\n";
-               }
+                       $OUT .= "      <option value=\"".$value."\">".$CATS['name'][$key]." (".$CATS['uids'][$key]." {--USER_IN_CAT--})</option>\n";
+               } // END - foreach
        } else {
                // No cateogries are defined yet
                $OUT = "<option class=\"member_failed\">{!MEMBER_NO_CATS!}</option>\n";
@@ -1913,6 +1925,7 @@ function GENERATE_RECEIVER_LIST ($cat, $receiver, $mode="") {
        $CAT_TABS     = "%s";
        $CAT_WHERE    = "";
        $receiverList = "";
+       $result       = false;
 
        // Secure data
        $cat      = bigintval($cat);
@@ -1940,19 +1953,19 @@ function GENERATE_RECEIVER_LIST ($cat, $receiver, $mode="") {
        if ((EXT_IS_ACTIVE("html_mail")) && ($mode == "html")) {
                // Only include HTML receivers
                $result = SQL_QUERY_ESC("SELECT d.userid FROM `{!_MYSQL_PREFIX!}_user_data` AS d ".$CAT_TABS." WHERE d.`status`='CONFIRMED' AND d.html='Y'".$CAT_WHERE." ORDER BY d.%s %s LIMIT %s",
-                array($cat, getConfig('order_select'), getConfig('order_mode'), $receiver), __FUNCTION__, __LINE__);
+                       array($cat, getConfig('order_select'), getConfig('order_mode'), $receiver), __FUNCTION__, __LINE__);
        } else {
                // Include all
                $result = SQL_QUERY_ESC("SELECT d.userid FROM `{!_MYSQL_PREFIX!}_user_data` AS d ".$CAT_TABS." WHERE d.`status`='CONFIRMED'".$CAT_WHERE." ORDER BY d.%s %s LIMIT %s",
-                array($cat, getConfig('order_select'), getConfig('order_mode'), $receiver), __FUNCTION__, __LINE__);
+                       array($cat, getConfig('order_select'), getConfig('order_mode'), $receiver), __FUNCTION__, __LINE__);
        }
 
        // Entries found?
        if ((SQL_NUMROWS($result) >= $receiver) && ($receiver > 0)) {
                // Load all entries
-               while (list($REC) = SQL_FETCHROW($result)) {
+               while ($content = SQL_FETCHARRAY($result)) {
                        // Add receiver when not empty
-                       if (!empty($REC)) $receiverList .= $REC.";";
+                       if (!empty($content['userid'])) $receiverList .= $content['userid'].";";
                } // END - while
 
                // Free memory
@@ -2099,6 +2112,7 @@ function REDUCED_RECIPIENT_RECEIVED_MAILS ($column, $id, $count) {
        // Are there entries?
        if (SQL_NUMROWS($result) > 0) {
                // Now load all userids for one big query!
+               // @TODO This can be somehow rewritten
                $UIDs = array();
                while (list($uid) = SQL_FETCHROW($result)) {
                        $UIDs[$uid] = $uid;