Debug comment removed
[mailer.git] / inc / libs / surfbar_functions.php
index 5af00ce901b202e82a00851e5442f14a18ba9695..8d1df27d7976eb349f7ebb97ba80f830f9342d22 100644 (file)
@@ -38,7 +38,7 @@ if (ereg(basename(__FILE__), $_SERVER['PHP_SELF'])) {
 }
 
 // Admin has added an URL with given user id
-function SURFBAR_ADMIN_ADD_URL ($url, $uid, $reward, $paymentId) {
+function SURFBAR_ADMIN_ADD_URL ($url, $uid, $reward, $costs, $paymentId) {
        // Is this really an admin?
        if (!IS_ADMIN()) {
                // Then leave here
@@ -52,7 +52,7 @@ function SURFBAR_ADMIN_ADD_URL ($url, $uid, $reward, $paymentId) {
        } // END - if
 
        // Register the new URL
-       return SURFBAR_REGISTER_URL($url, $uid, $reward, $paymentId, "CONFIRMED", "unlock");
+       return SURFBAR_REGISTER_URL($url, $uid, $reward, $costs, $paymentId, "CONFIRMED", "unlock");
 }
 // Looks up by an URL
 function SURFBAR_LOOKUP_BY_URL ($url) {
@@ -76,7 +76,7 @@ function SURFBAR_GET_URL_DATA ($searchTerm, $column="id", $order="id", $sort="AS
        } // END - if
 
        // Look up the record
-       $result = SQL_QUERY_ESC("SELECT id, userid, url, reward, views_total, status, registered, last_locked, lock_reason
+       $result = SQL_QUERY_ESC("SELECT id, userid, url, reward, costs, views_total, status, registered, last_locked, lock_reason
 FROM "._MYSQL_PREFIX."_surfbar_urls
 WHERE %s='%s'
 ORDER BY %s %s",
@@ -104,7 +104,7 @@ ORDER BY %s %s",
        return $lastUrlData;
 }
 // Registers an URL with the surfbar. You should have called SURFBAR_LOOKUP_BY_URL() first!
-function SURFBAR_REGISTER_URL ($url, $uid, $reward, $paymentId, $status="PENDING", $addMode="reg") {
+function SURFBAR_REGISTER_URL ($url, $uid, $reward, $paymentId, $costs, $status="PENDING", $addMode="reg") {
        global $_CONFIG;
 
        // Make sure by the user registered URLs are always pending
@@ -116,6 +116,7 @@ function SURFBAR_REGISTER_URL ($url, $uid, $reward, $paymentId, $status="PENDING
                'frametester' => FRAMETESTER($url),
                'uid'         => $uid,
                'reward'      => $reward,
+               'costs'       => $costs,
                'payment_id'  => $paymentId,
                'status'      => $status
        );
@@ -123,9 +124,10 @@ function SURFBAR_REGISTER_URL ($url, $uid, $reward, $paymentId, $status="PENDING
        // Insert the URL into database
        $content['insert_id'] = SURFBAR_INSERT_URL_BY_ARRAY($content);
 
-       // Translate status and reward
+       // Translate status, reward and costs
        $content['status'] = SURFBAR_TRANSLATE_STATUS($content['status']);
        $content['reward'] = TRANSLATE_COMMA($content['reward']);
+       $content['costs']  = TRANSLATE_COMMA($content['costs']);
 
        // If in reg-mode we notify admin
        if (($addMode == "reg") || ($_CONFIG['surfbar_notify_admin_unlock'] == "Y")) {
@@ -142,11 +144,12 @@ function SURFBAR_REGISTER_URL ($url, $uid, $reward, $paymentId, $status="PENDING
 // Inserts an url by given data array and return the insert id
 function SURFBAR_INSERT_URL_BY_ARRAY ($urlData) {
        // Just run the insert query for now
-       SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_surfbar_urls (userid, url, reward, payment_id, status) VALUES(%s, '%s', %s, %s, '%s')",
+       SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_surfbar_urls (userid, url, reward, costs, payment_id, status) VALUES(%s, '%s', %s, %s, %s, '%s')",
                array(
                        bigintval($urlData['uid']),
                        $urlData['url'],
                        (float)$urlData['reward'],
+                       (float)$urlData['costs'],
                        bigintval($urlData['payment_id']),
                        $urlData['status']
                ), __FILE__, __LINE__
@@ -219,9 +222,10 @@ function SURFBAR_DETERMINE_TEMPLATE_NAME() {
        // Return result
        return $templateName;
 }
-// Check if the "reload lock" of the current user is full
+// Check if the "reload lock" of the current user is full, call this function
+// before you call SURFBAR_CHECK_RELOAD_LOCK().
 function SURFBAR_CHECK_RELOAD_FULL() {
-       global $SURFBAR_DATA, $_CONFIG;
+       global $SURFBAR_CACHE, $_CONFIG;
 
        // Default is full!
        $isFull = true;
@@ -229,7 +233,7 @@ function SURFBAR_CHECK_RELOAD_FULL() {
        // Do we have static or dynamic mode?
        if ($_CONFIG['surfbar_pay_model'] == "STATIC") {
                // Cache static reload lock
-               $SURFBAR_DATA['surf_lock'] = $_CONFIG['surfbar_static_lock'];
+               $SURFBAR_CACHE['surf_lock'] = $_CONFIG['surfbar_static_lock'];
 
                // Ask the database
                $result = SQL_QUERY_ESC("SELECT COUNT(id) AS cnt FROM "._MYSQL_PREFIX."_surfbar_locks
@@ -239,12 +243,12 @@ LIMIT 1",
                );
 
                // Fetch row
-               list($SURFBAR_DATA['user_locks']) = SQL_FETCHROW($result);
+               list($SURFBAR_CACHE['user_locks']) = SQL_FETCHROW($result);
 
                // Is it null?
-               if (is_null($SURFBAR_DATA['user_locks'])) {
+               if (is_null($SURFBAR_CACHE['user_locks'])) {
                        // Then fix it to zero!
-                       $SURFBAR_DATA['user_locks'] = 0;
+                       $SURFBAR_CACHE['user_locks'] = 0;
                } // END - if
 
                // Free result
@@ -254,7 +258,8 @@ LIMIT 1",
                $total = SURFBAR_GET_TOTAL_URLS();
 
                // Do we have some URLs in lock? Admins can always surf on own URLs!
-               $isFull = (($SURFBAR_DATA['user_locks'] == $total) && ($total > 0));
+               //* DEBUG: */ echo __FUNCTION__.":userLocks=".SURFBAR_GET_DATA('user_locks').",total={$total}<br />\n";
+               $isFull = ((SURFBAR_GET_DATA('user_locks') == $total) && ($total > 0));
        } else {
                // Dynamic model...
                die("DYNAMIC not yet implemented!");
@@ -283,7 +288,7 @@ WHERE userid != %d AND status='%s'",
 }
 // Generate a validation code for the given id number
 function SURFBAR_GENERATE_VALIDATION_CODE ($id, $salt="") {
-       global $_CONFIG, $SURFBAR_DATA;
+       global $_CONFIG, $SURFBAR_CACHE;
 
        // Generate a code until the length matches
        $valCode = "";
@@ -291,27 +296,27 @@ function SURFBAR_GENERATE_VALIDATION_CODE ($id, $salt="") {
                // Is the salt set?
                if (empty($salt)) {
                        // Generate random hashed string
-                       $SURFBAR_DATA['salt'] = sha1(GEN_PASS(255));
+                       $SURFBAR_CACHE['salt'] = sha1(GEN_PASS(255));
                } else {
                        // Use this as salt!
-                       $SURFBAR_DATA['salt'] = $salt;
+                       $SURFBAR_CACHE['salt'] = $salt;
                }
-               //* DEBUG: */ echo "*".$SURFBAR_DATA['salt']."*<br />\n";
+               //* DEBUG: */ echo __FUNCTION__.":".SURFBAR_GET_SALT()."*<br />\n";
 
                // ... and now the validation code
-               $valCode = GEN_RANDOM_CODE($_CONFIG['code_length'], sha1(SURFBAR_GET_DATA('salt').":".$id), $GLOBALS['userid']);
-               //* DEBUG: */ echo "valCode={$valCode}<br />\n";
+               $valCode = GEN_RANDOM_CODE($_CONFIG['code_length'], sha1(SURFBAR_GET_SALT().":".$id), $GLOBALS['userid']);
+               //* DEBUG: */ echo __FUNCTION__.":valCode={$valCode}<br />\n";
        } // END - while
 
        // Hash it with md5() and salt it with the random string
-       $hashedCode = generateHash(md5($valCode), SURFBAR_GET_DATA('salt'));
+       $hashedCode = generateHash(md5($valCode), SURFBAR_GET_SALT());
 
        // Finally encrypt it PGP-like and return it
        return generatePassString($hashedCode);
 }
 // Check validation code
 function SURFBAR_CHECK_VALIDATION_CODE ($id, $check, $salt) {
-       global $SURFBAR_DATA;
+       global $SURFBAR_CACHE;
 
        // Secure id number
        $id = bigintval($id);
@@ -320,76 +325,123 @@ function SURFBAR_CHECK_VALIDATION_CODE ($id, $check, $salt) {
        $code = SURFBAR_GENERATE_VALIDATION_CODE($id, $salt);
 
        // Return result of checking hashes and salts
-       //* DEBUG: */ echo "--- ".$code."<br />\n--- ".$check."<br />\n";
-       //* DEBUG: */ echo "+++ ".$salt."<br />\n+++ ".SURFBAR_GET_DATA('last_salt')."<br />\n";
+       //* DEBUG: */ echo __FUNCTION__.":---".$code."---<br />\n---".$check."---<br />\n";
+       //* DEBUG: */ echo __FUNCTION__.":+++".$salt."+++<br />\n+++".SURFBAR_GET_DATA('last_salt')."+++<br />\n";
        return (($code == $check) && ($salt == SURFBAR_GET_DATA('last_salt')));
 }
 // Lockdown the userid/id combination (reload lock)
 function SURFBAR_LOCKDOWN_ID ($id) {
+       //* DEBUG: */ print "LOCK!<br />\n";
+       //* DEBUG: */ return;
        // Just add it to the database
        SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_surfbar_locks (userid, url_id) VALUES(%s, %s)",
                array($GLOBALS['userid'], bigintval($id)), __FILE__, __LINE__);
+
+       // Remove the salt from database
+       SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_surfbar_salts WHERE url_id=%s AND userid=%s LIMIT 1",
+               array(bigintval($id), $GLOBALS['userid']), __FILE__, __LINE__);
 }
 // Pay points to the user and remove it from the sender
 function SURFBAR_PAY_POINTS ($id) {
-       global $SURFBAR_DATA, $_CONFIG;
+       global $SURFBAR_CACHE, $_CONFIG;
 
        // Re-configure ref-system to surfbar levels
        $_CONFIG['db_percents'] = "percent";
        $_CONFIG['db_table']    = "surfbar_reflevels";
 
        // Book it to the user
-       ADD_POINTS_REFSYSTEM($GLOBALS['userid'], $SURFBAR_DATA['reward']);
+       ADD_POINTS_REFSYSTEM($GLOBALS['userid'], SURFBAR_GET_DATA('reward'));
 
        // Remove it from the URL owner
-       SUB_POINTS($SURFBAR_DATA['userid'], $SURFBAR_DATA['reward']);
+       SUB_POINTS($SURFBAR_CACHE['userid'], SURFBAR_GET_DATA('costs'));
 }
 // Update the salt for validation
 function SURFBAR_UPDATE_SALT() {
-       global $SURFBAR_DATA;
+       // Update views_total
+       SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_surfbar_urls SET views_total=views_total+1 WHERE id=%s LIMIT 1",
+               array(SURFBAR_GET_ID()), __FILE__, __LINE__);
 
        // Simply store the salt from cache away in database...
-       SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_surfbar_urls SET last_salt='%s', views_total=views_total+1 WHERE id=%s LIMIT 1",
-               array(SURFBAR_GET_DATA('salt'), SURFBAR_GET_DATA('id')), __FILE__, __LINE__);
+       SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_surfbar_salts SET last_salt='%s' WHERE url_id=%s AND userid=%s LIMIT 1",
+               array(SURFBAR_GET_SALT(), SURFBAR_GET_ID(), $GLOBALS['userid']), __FILE__, __LINE__);
+
+       // Was that okay?
+       if (SQL_AFFECTEDROWS() == 0) {
+               // Insert missing entry!
+               SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_surfbar_salts (url_id,userid,last_salt) VALUES(%s, %s, '%s')",
+                       array(SURFBAR_GET_ID(), $GLOBALS['userid'], SURFBAR_GET_SALT()), __FILE__, __LINE__);
+       } // END - if
 
        // Return if the update was okay
        return (SQL_AFFECTEDROWS() == 1);
 }
+// Check if the reload lock is active for given id
+function SURFBAR_CHECK_RELOAD_LOCK ($id) {
+       //* DEBUG: */ echo __FUNCTION__.":id={$id}<br />\n";
+       // Ask the database
+       $result = SQL_QUERY_ESC("SELECT COUNT(id) AS cnt
+FROM "._MYSQL_PREFIX."_surfbar_locks
+WHERE userid=%s AND url_id=%s AND (UNIX_TIMESTAMP() - ".SURFBAR_GET_DATA('surf_lock').") < UNIX_TIMESTAMP(last_surfed)
+ORDER BY last_surfed ASC
+LIMIT 1",
+               array($GLOBALS['userid'], bigintval($id)), __FILE__, __LINE__
+       );
+
+       // Fetch counter
+       list($cnt) = SQL_FETCHROW($result);
+
+       // Free result
+       SQL_FREERESULT($result);
+
+       // Return check
+       //* DEBUG: */ echo __FUNCTION__.":cnt={$cnt},".SURFBAR_GET_DATA('surf_lock')."<br />\n";
+       return ($cnt == 1);
+}
 // Determine next id for surfbar view, always call this before you call other
 // getters below this function!!!
 function SURFBAR_GET_NEXT_ID ($id = 0) {
-       global $SURFBAR_DATA, $_CONFIG;
+       global $SURFBAR_CACHE, $_CONFIG;
 
        // Default is no id!
-       $nextId = 0;
+       $nextId = 0; $randNum = 0;
 
        // Is the ID set?
        if ($id == 0) {
                // Set max random factor to total URLs minus 1
                $maxRand = SURFBAR_GET_TOTAL_URLS() - 1;
 
-               // Generate random number
-               $randNum = mt_rand(0, $maxRand);
+               // If more than one URL can be called generate the random number!
+               if ($maxRand > 1) {
+                       // Generate random number
+                       $randNum = mt_rand(0, $maxRand);
+               } // END - if
 
                // And query the database
-               $result = SQL_QUERY_ESC("SELECT sb.id, sb.userid, sb.url, sb.last_salt, sb.reward, sb.views_total, p.time, UNIX_TIMESTAMP(l.last_surfed) AS last_surfed
-FROM "._MYSQL_PREFIX."_surfbar_urls AS sb
+               //* DEBUG: */ echo __FUNCTION__.":randNum={$randNum},maxRand={$maxRand}<br />\n";
+               $result = SQL_QUERY_ESC("SELECT sbu.id, sbu.userid, sbu.url, sbs.last_salt, sbu.reward, sbu.costs, sbu.views_total, p.time, UNIX_TIMESTAMP(l.last_surfed) AS last_surfed
+FROM "._MYSQL_PREFIX."_surfbar_urls AS sbu
 LEFT JOIN "._MYSQL_PREFIX."_payments AS p
-ON sb.payment_id=p.id
+ON sbu.payment_id=p.id
+LEFT JOIN "._MYSQL_PREFIX."_surfbar_salts AS sbs
+ON sbu.id=sbs.url_id
 LEFT JOIN "._MYSQL_PREFIX."_surfbar_locks AS l
-ON sb.id=l.url_id
-WHERE sb.userid != %d AND sb.status='CONFIRMED' AND (l.last_surfed IS NULL OR (UNIX_TIMESTAMP() - ".SURFBAR_GET_DATA('surf_lock').") >= UNIX_TIMESTAMP(l.last_surfed))
-ORDER BY l.last_surfed DESC, sb.last_salt ASC, sb.id ASC
-LIMIT %d,1",
+ON sbu.id=l.url_id
+WHERE sbu.userid != %s AND sbu.status='CONFIRMED' AND (l.last_surfed IS NULL OR (UNIX_TIMESTAMP() - ".SURFBAR_GET_DATA('surf_lock').") >= UNIX_TIMESTAMP(l.last_surfed))
+ORDER BY l.last_surfed ASC, sbu.id ASC
+LIMIT %s,1",
                        array($GLOBALS['userid'], $randNum), __FILE__, __LINE__
                );
        } else {
                // Get data from specified id number
-               $result = SQL_QUERY_ESC("SELECT sb.id, sb.userid, sb.url, sb.last_salt, sb.reward, sb.views_total, p.time
-FROM "._MYSQL_PREFIX."_surfbar_urls AS sb
+               $result = SQL_QUERY_ESC("SELECT sbu.id, sbu.userid, sbu.url, sbs.last_salt, sbu.reward, sbu.costs, sbu.views_total, p.time, UNIX_TIMESTAMP(l.last_surfed) AS last_surfed
+FROM "._MYSQL_PREFIX."_surfbar_urls AS sbu
 LEFT JOIN "._MYSQL_PREFIX."_payments AS p
-ON sb.payment_id=p.id
-WHERE sb.userid != %s AND sb.status='CONFIRMED' AND sb.id=%s
+ON sbu.payment_id=p.id
+LEFT JOIN "._MYSQL_PREFIX."_surfbar_salts AS sbs
+ON sbu.id=sbs.url_id
+LEFT JOIN "._MYSQL_PREFIX."_surfbar_locks AS l
+ON sbu.id=l.url_id
+WHERE sbu.userid != %s AND sbu.status='CONFIRMED' AND sbu.id=%s
 LIMIT 1",
                        array($GLOBALS['userid'], bigintval($id)), __FILE__, __LINE__
                );
@@ -398,60 +450,71 @@ LIMIT 1",
        // Is there an id number?
        if (SQL_NUMROWS($result) == 1) {
                // Load/cache data
-               //* DEBUG: */ echo "*".count($SURFBAR_DATA)."*<br />\n";
-               $SURFBAR_DATA = merge_array($SURFBAR_DATA, SQL_FETCHARRAY($result));
-               //* DEBUG: */ echo "*".count($SURFBAR_DATA)."*<br />\n";
+               //* DEBUG: */ echo __FUNCTION__.":".count($SURFBAR_CACHE)."*<br />\n";
+               $SURFBAR_CACHE = merge_array($SURFBAR_CACHE, SQL_FETCHARRAY($result));
+               //* DEBUG: */ echo __FUNCTION__.":".count($SURFBAR_CACHE)."*<br />\n";
 
                // Is the time there?
-               if (is_null($SURFBAR_DATA['time'])) {
+               if (is_null($SURFBAR_CACHE['time'])) {
+                       // Then repair it wit the static!
+                       //* DEBUG: */ echo __FUNCTION__.": time - STATIC!<br />\n";
+                       $SURFBAR_CACHE['time'] = $_CONFIG['surfbar_static_time'];
+               } // END - if
+
+               // Is the last salt there?
+               if (is_null($SURFBAR_CACHE['last_salt'])) {
                        // Then repair it wit the static!
-                       $SURFBAR_DATA['time'] = $_CONFIG['surfbar_static_time'];
+                       //* DEBUG: */ echo __FUNCTION__.": last_salt - FIXED!<br />\n";
+                       $SURFBAR_CACHE['last_salt'] = "";
                } // END - if
 
                // Fix missing last_surfed
-               if ((!isset($SURFBAR_DATA['last_surfed'])) || (is_null($SURFBAR_DATA['last_surfed']))) {
+               if ((!isset($SURFBAR_CACHE['last_surfed'])) || (is_null($SURFBAR_CACHE['last_surfed']))) {
                        // Fix it here
-                       $SURFBAR_DATA['last_surfed'] = "0";
+                       //* DEBUG: */ echo __FUNCTION__.": last_surfed - FIXED!<br />\n";
+                       $SURFBAR_CACHE['last_surfed'] = "0";
                } // END - if
 
                // Are we in static mode?
                if ($_CONFIG['surfbar_pay_model'] == "STATIC") {
-                       // Then use static reward!
-                       $SURFBAR_DATA['reward'] = $_CONFIG['surfbar_static_reward'];
+                       // Then use static reward/costs!
+                       $SURFBAR_CACHE['reward'] = $_CONFIG['surfbar_static_reward'];
+                       $SURFBAR_CACHE['costs']  = $_CONFIG['surfbar_static_costs'];
                } else {
-                       // Calculate dynamic reward and add it
-                       $SURFBAR_DATA['reward'] += SURFBAR_CALCULATE_DYNAMIC_REWARD_ADD();
+                       // Calculate dynamic reward/costs and add it
+                       $SURFBAR_CACHE['reward'] += SURFBAR_CALCULATE_DYNAMIC_REWARD_ADD();
+                       $SURFBAR_CACHE['costs']  += SURFBAR_CALCULATE_DYNAMIC_COSTS_ADD();
                }
 
                // Now get the id
-               $nextId = SURFBAR_GET_DATA('id');
+               $nextId = SURFBAR_GET_ID();
        } // END - if
 
        // Free result
        SQL_FREERESULT($result);
 
        // Return result
-       //* DEBUG: */ echo "nextId={$nextId}<br />\n";
+       //* DEBUG: */ echo __FUNCTION__.":nextId={$nextId}<br />\n";
        return $nextId;
 }
 // ----------------------------------------------------------------------------
 // PLEASE DO NOT ADD ANY OTHER FUNCTIONS BELOW THIS LINE ELSE THEY "WRAP" THE
-// $SURFBAR_DATA ARRAY!
+// $SURFBAR_CACHE ARRAY!
 // ----------------------------------------------------------------------------
 // Private getter for data elements
 function SURFBAR_GET_DATA ($element) {
-       global $SURFBAR_DATA;
+       global $SURFBAR_CACHE;
 
        // Default is null
        $data = null;
 
        // Is the entry there?
-       if (isset($SURFBAR_DATA[$element])) {
+       if (isset($SURFBAR_CACHE[$element])) {
                // Then take it
-               $data = $SURFBAR_DATA[$element];
+               $data = $SURFBAR_CACHE[$element];
        } else { // END - if
                print("<pre>");
-               print_r($SURFBAR_DATA);
+               print_r($SURFBAR_CACHE);
                debug_print_backtrace();
                die("</pre>");
        }
@@ -464,11 +527,26 @@ function SURFBAR_GET_REWARD () {
        // Get data element and return its contents
        return SURFBAR_GET_DATA('reward');
 }
+// Getter for costs from cache
+function SURFBAR_GET_COSTS () {
+       // Get data element and return its contents
+       return SURFBAR_GET_DATA('costs');
+}
 // Getter for URL from cache
 function SURFBAR_GET_URL () {
        // Get data element and return its contents
        return SURFBAR_GET_DATA('url');
 }
+// Getter for salt from cache
+function SURFBAR_GET_SALT () {
+       // Get data element and return its contents
+       return SURFBAR_GET_DATA('salt');
+}
+// Getter for id from cache
+function SURFBAR_GET_ID () {
+       // Get data element and return its contents
+       return SURFBAR_GET_DATA('id');
+}
 // Getter for user reload locks
 function SURFBAR_GET_USER_RELOAD_LOCK () {
        // Get data element and return its contents