Fix for PHP error
[mailer.git] / inc / libs / surfbar_functions.php
index 8cd6082367ad4998b136abddcd4e26ef568095f1..898b2a5d64e841e1b6bc906de4a7a2bb87f8682d 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) {
+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) {
        } // END - if
 
        // Register the new URL
-       return SURFBAR_REGISTER_URL($url, $uid, $reward, "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, $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,15 +116,18 @@ function SURFBAR_REGISTER_URL ($url, $uid, $reward, $status="PENDING", $addMode=
                'frametester' => FRAMETESTER($url),
                'uid'         => $uid,
                'reward'      => $reward,
+               'costs'       => $costs,
+               'payment_id'  => $paymentId,
                'status'      => $status
        );
 
        // 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")) {
@@ -141,11 +144,13 @@ function SURFBAR_REGISTER_URL ($url, $uid, $reward, $status="PENDING", $addMode=
 // 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, status) VALUES(%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']),
-                       bigintval($urlData['url']),
+                       $urlData['url'],
                        (float)$urlData['reward'],
+                       (float)$urlData['costs'],
+                       bigintval($urlData['payment_id']),
                        $urlData['status']
                ), __FILE__, __LINE__
        );
@@ -201,5 +206,406 @@ function SURFBAR_TRANSLATE_STATUS ($status) {
        // Return result
        return $statusTranslated;
 }
+// Determine right template name
+function SURFBAR_DETERMINE_TEMPLATE_NAME() {
+       // Default is the frameset
+       $templateName = "surfbar_frameset";
+
+       // Any frame set? ;-)
+       if (isset($_GET['frame'])) {
+               // Use the frame as a template name part... ;-)
+               $templateName = sprintf("surfbar_frame_%s",
+                       SQL_ESCAPE($_GET['frame'])
+               );
+       } // END - if
+
+       // Return result
+       return $templateName;
+}
+// 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_CACHE, $_CONFIG;
+
+       // Default is full!
+       $isFull = true;
+
+       // Do we have static or dynamic mode?
+       if ($_CONFIG['surfbar_pay_model'] == "STATIC") {
+               // Cache static reload 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
+WHERE userid=%s AND (UNIX_TIMESTAMP() - ".SURFBAR_GET_DATA('surf_lock').") < UNIX_TIMESTAMP(last_surfed)
+LIMIT 1",
+                       array($GLOBALS['userid']), __FILE__, __LINE__
+               );
+
+               // Fetch row
+               list($SURFBAR_CACHE['user_locks']) = SQL_FETCHROW($result);
+
+               // Is it null?
+               if (is_null($SURFBAR_CACHE['user_locks'])) {
+                       // Then fix it to zero!
+                       $SURFBAR_CACHE['user_locks'] = 0;
+               } // END - if
+
+               // Free result
+               SQL_FREERESULT($result);
+
+               // Get total URLs
+               $total = SURFBAR_GET_TOTAL_URLS();
+
+               // Do we have some URLs in lock? Admins can always surf on own URLs!
+               //* 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!");
+       }
+
+       // Return result
+       return $isFull;
+}
+// Get total amount of URLs of given status for current user or of CONFIRMED URLs by default
+function SURFBAR_GET_TOTAL_URLS ($status="CONFIRMED") {
+       // Get amount from database
+       $result = SQL_QUERY_ESC("SELECT COUNT(id) AS cnt
+FROM "._MYSQL_PREFIX."_surfbar_urls
+WHERE userid != %d AND status='%s'",
+               array($GLOBALS['userid'], $status), __FILE__, __LINE__
+       );
+
+       // Fetch row
+       list($cnt) = SQL_FETCHROW($result);
+
+       // Free result
+       SQL_FREERESULT($result);
+
+       // Return result
+       return $cnt;
+}
+// Generate a validation code for the given id number
+function SURFBAR_GENERATE_VALIDATION_CODE ($id, $salt="") {
+       global $_CONFIG, $SURFBAR_CACHE;
+
+       // Generate a code until the length matches
+       $valCode = "";
+       while (strlen($valCode) != $_CONFIG['code_length']) {
+               // Is the salt set?
+               if (empty($salt)) {
+                       // Generate random hashed string
+                       $SURFBAR_CACHE['salt'] = sha1(GEN_PASS(255));
+               } else {
+                       // Use this as salt!
+                       $SURFBAR_CACHE['salt'] = $salt;
+               }
+               //* DEBUG: */ echo __FUNCTION__.":".SURFBAR_GET_SALT()."*<br />\n";
+
+               // ... and now the validation code
+               $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_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_CACHE;
+
+       // Secure id number
+       $id = bigintval($id);
+
+       // Now generate the code again
+       $code = SURFBAR_GENERATE_VALIDATION_CODE($id, $salt);
+
+       // Return result of checking hashes and salts
+       //* 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_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_GET_DATA('reward'));
+
+       // Remove it from the URL owner
+       SUB_POINTS($SURFBAR_CACHE['userid'], SURFBAR_GET_DATA('costs'));
+}
+// Update the salt for validation
+function SURFBAR_UPDATE_SALT() {
+       // 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_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_CACHE, $_CONFIG;
+
+       // Default is no id!
+       $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;
+
+               // 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
+
+               // Get all id from locks within the timestamp
+               $result = SQL_QUERY_ESC("SELECT id, url_id, UNIX_TIMESTAMP(last_surfed)
+FROM
+       "._MYSQL_PREFIX."_surfbar_locks
+WHERE
+       userid=%s
+ORDER BY
+       id ASC", array($GLOBALS['userid']),
+                       __FILE__, __LINE__);
+
+               // Load all entries
+               $IDs = array(); $USE = array();
+               $ignored = array();
+               while (list($id, $url, $last) = SQL_FETCHROW($result)) {
+                       //* DEBUG: */ echo __FUNCTION__.": next - id={$id},url={$url},last={$last}<br />\n";
+                       // Skip entries that are too old
+                       if (($last < (time() - SURFBAR_GET_DATA('surf_lock'))) && (!in_array($url, $ignored))) {
+                               //* DEBUG: */ echo __FUNCTION__.": okay - id={$id},url={$url},last={$last}<br />\n";
+                               // Add only if missing or bigger
+                               if ((!isset($IDs[$url])) || ($IDs[$url] <= $last)) {
+                                       // Add this ID
+                                       //* DEBUG: */ echo __FUNCTION__.": ADD - id={$id},url={$url},last={$last}<br />\n";
+                                       $IDs[$url] = $last;
+                                       $USE[$url] = $id;
+                               } // END - if
+                       } else {
+                               // Ignore these old entries!
+                               //* DEBUG: */ echo __FUNCTION__.": ignore - id={$id},url={$url},last={$last}<br />\n";
+                               $ignored[] = $url;
+                               unset($IDs[$url]);
+                               unset($USE[$url]);
+                       }
+               } // END - if
+
+               // Free result
+               SQL_FREERESULT($result);
+
+               // Shall we add some ids?
+               $ADD = "";
+               if (count($USE) > 0) {
+                       $ADD = " AND l.id IN (".implode(",", $USE).")";
+               } // END - if
+
+               // And query the database
+               //* DEBUG: */ echo __FUNCTION__.":randNum={$randNum},maxRand={$maxRand},surfLock=".SURFBAR_GET_DATA('surf_lock')."<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 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'".$ADD."
+GROUP BY sbu.id
+ORDER BY l.last_surfed ASC, sbu.id ASC
+LIMIT %s,1",
+                       array($GLOBALS['userid'], $randNum), __FILE__, __LINE__
+               );
+               /*
+               while($content = SQL_FETCHARRAY($result)) {
+                       echo "<pre>".print_r($content, true)."</pre>";
+               }
+               die();
+               */
+       } else {
+               // Get data from specified id number
+               $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 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__
+               );
+       }
+
+       // Is there an id number?
+       if (SQL_NUMROWS($result) == 1) {
+               // Load/cache data
+               //* DEBUG: */ echo __FUNCTION__.":count(".count($SURFBAR_CACHE).") - BEFORE<br />\n";
+               $SURFBAR_CACHE = merge_array($SURFBAR_CACHE, SQL_FETCHARRAY($result));
+               //* DEBUG: */ echo __FUNCTION__.":count(".count($SURFBAR_CACHE).") - AFTER<br />\n";
+
+               // Is the time there?
+               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!
+                       //* DEBUG: */ echo __FUNCTION__.": last_salt - FIXED!<br />\n";
+                       $SURFBAR_CACHE['last_salt'] = "";
+               } // END - if
+
+               // Fix missing last_surfed
+               if ((!isset($SURFBAR_CACHE['last_surfed'])) || (is_null($SURFBAR_CACHE['last_surfed']))) {
+                       // Fix it here
+                       //* 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/costs!
+                       $SURFBAR_CACHE['reward'] = $_CONFIG['surfbar_static_reward'];
+                       $SURFBAR_CACHE['costs']  = $_CONFIG['surfbar_static_costs'];
+               } else {
+                       // 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_ID();
+       } // END - if
+
+       // Free result
+       SQL_FREERESULT($result);
+
+       // Return result
+       //* DEBUG: */ echo __FUNCTION__.":nextId={$nextId}<br />\n";
+       return $nextId;
+}
+// ----------------------------------------------------------------------------
+// PLEASE DO NOT ADD ANY OTHER FUNCTIONS BELOW THIS LINE ELSE THEY "WRAP" THE
+// $SURFBAR_CACHE ARRAY!
+// ----------------------------------------------------------------------------
+// Private getter for data elements
+function SURFBAR_GET_DATA ($element) {
+       global $SURFBAR_CACHE;
+
+       // Default is null
+       $data = null;
+
+       // Is the entry there?
+       if (isset($SURFBAR_CACHE[$element])) {
+               // Then take it
+               $data = $SURFBAR_CACHE[$element];
+       } else { // END - if
+               print("<pre>");
+               print_r($SURFBAR_CACHE);
+               debug_print_backtrace();
+               die("</pre>");
+       }
+
+       // Return result
+       return $data;
+}
+// Getter for reward from cache
+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
+       return SURFBAR_GET_DATA('user_locks');
+}
+// Getter for reload time
+function SURFBAR_GET_RELOAD_TIME () {
+       // Get data element and return its contents
+       return SURFBAR_GET_DATA('time');
+}
 //
 ?>