]> git.mxchange.org Git - mailer.git/blobdiff - inc/libs/surfbar_functions.php
Fix for surfbar if no account has depleted points
[mailer.git] / inc / libs / surfbar_functions.php
index bdc6cd749c177e0cced6d370078b6194327d633e..4e7497906f2701fba10c4805a4bf485869b3e6ba 100644 (file)
@@ -42,7 +42,7 @@ if (!defined('__SECURITY')) {
 // -----------------------------------------------------------------------------
 //
 // Admin has added an URL with given user id and so on
-function SURFBAR_ADMIN_ADD_URL ($url) {
+function SURFBAR_ADMIN_ADD_URL ($url, $limit) {
        // Do some pre-checks
        if (!IS_ADMIN()) {
                // Not an admin
@@ -56,10 +56,13 @@ function SURFBAR_ADMIN_ADD_URL ($url) {
        } elseif (!SURFBAR_IF_USER_BOOK_MORE_URLS()) {
                // No more allowed!
                return false;
+       } elseif ("".($limit + 0)."" != "".$limit."") {
+               // Invalid amount entered
+               return false;
        }
 
        // Register the new URL
-       return SURFBAR_REGISTER_URL($url, "0", "ACTIVE", "unlock");
+       return SURFBAR_REGISTER_URL($url, "0", "ACTIVE", "unlock", $limit);
 }
 // Admin unlocked an email so we can migrate the URL
 function SURFBAR_ADMIN_MIGRATE_URL ($url, $uid) {
@@ -139,7 +142,7 @@ function SURFBAR_ADMIN_REJECT_URL_IDS ($IDs) {
 // -----------------------------------------------------------------------------
 //
 // Member has added an URL
-function SURFBAR_MEMBER_ADD_URL ($url) {
+function SURFBAR_MEMBER_ADD_URL ($url, $limit) {
        global $_CONFIG;
 
        // Do some pre-checks
@@ -155,10 +158,13 @@ function SURFBAR_MEMBER_ADD_URL ($url) {
        } elseif (!SURFBAR_IF_USER_BOOK_MORE_URLS($GLOBALS['userid'])) {
                // No more allowed!
                return false;
+       } elseif ("".($limit + 0)."" != "".$limit."") {
+               // Invalid amount entered
+               return false;
        }
 
        // Register the new URL
-       return SURFBAR_REGISTER_URL($url, $GLOBALS['userid']);
+       return SURFBAR_REGISTER_URL($url, $GLOBALS['userid'], "PENDING", "reg", $limit);
 }
 // Create list of actions depending on status for the user
 function SURFBAR_MEMBER_ACTIONS ($urlId, $status) {
@@ -289,19 +295,81 @@ function SURFBAR_MEMBER_BOOKNOW_ACTION ($urlData) {
 }
 //
 // -----------------------------------------------------------------------------
+//                           Self-maintenance functions
+// -----------------------------------------------------------------------------
+//
+// Main function
+function SURFBAR_HANDLE_SELF_MAINTENANCE () {
+       // Handle URLs which limit has depleted so we can stop them
+       SURFBAR_HANDLE_DEPLETED_VIEWS();
+
+       // Handle low-points amounts
+       SURFBAR_HANDLE_LOW_POINTS();
+}
+// Handle URLs which limit has depleted
+function SURFBAR_HANDLE_DEPLETED_VIEWS () {
+       // Get all URLs
+       $urlArray = SURFBAR_GET_URL_DATA("0", "views_max", "id", "ASC", "id", " AND views_allowed>0 AND status='ACTIVE'");
+
+       // Do we have some entries?
+       if (count($urlArray) > 0) {
+               // Then handle all!
+               foreach ($urlArray as $id => $urlData) {
+                       // Backup data
+                       $data = $urlData;
+
+                       // Rewrite array for next call
+                       $urlData[$id] = $data;
+
+                       // Handle the status
+                       SURFBAR_CHANGE_STATUS($id, "ACTIVE", "DEPLETED", $urlData);
+               } // END - foreach
+       } // END - if
+}
+// Alert users which have URLs booked and are low on points amount
+function SURFBAR_HANDLE_LOW_POINTS () {
+       global $_CONFIG;
+
+       // Get all userids
+       $UIDs = SURFBAR_DETERMINE_DEPLETED_USERIDS($_CONFIG['surfbar_warn_low_points']);
+
+       // "Walk" through all URLs
+       foreach ($UIDs['uid'] as $uid => $dummy) {
+               // Is the last notification far enougth away to notify again?
+               if ((time() - $UIDs['notified'][$uid]) >= $_CONFIG['surfbar_low_interval']) {
+                       // Prepare content
+                       $content = array(
+                               'uid'      => $uid,
+                               'low'      => TRANSLATE_COMMA($_CONFIG['surfbar_warn_low_points']),
+                               'points'   => TRANSLATE_COMMA($UIDs['points'][$uid]),
+                               'notified' => MAKE_DATETIME($UIDs['notified'][$uid]),
+                               'interval' => CREATE_FANCY_TIME($_CONFIG['surfbar_low_interval'])
+                       );
+
+                       // Notify this user
+                       SURFBAR_NOTIFY_USER("low_points", $content);
+
+                       // Update last notified
+                       SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET surfbar_low_notified=NOW() WHERE userid=%s LIMIT 1",
+                               array($uid), __FILE__, __LINE__);
+               } // END - if
+       } // END - foreach
+}
+//
+// -----------------------------------------------------------------------------
 //                               Generic functions
 // -----------------------------------------------------------------------------
 //
 // Looks up by an URL
-function SURFBAR_LOOKUP_BY_URL ($url) {
+function SURFBAR_LOOKUP_BY_URL ($url, $uid) {
        // Now lookup that given URL by itself
-       $urlArray = SURFBAR_GET_URL_DATA($url, "url");
+       $urlArray = SURFBAR_GET_URL_DATA($url, "url", "id", "ASC", "id", sprintf(" AND userid=%s", bigintval($uid)));
 
        // Was it found?
        return (count($urlArray) > 0);
 }
 // Load URL data by given search term and column
-function SURFBAR_GET_URL_DATA ($searchTerm, $column="id", $order="id", $sort="ASC", $group="id") {
+function SURFBAR_GET_URL_DATA ($searchTerm, $column="id", $order="id", $sort="ASC", $group="id", $add="") {
        global $lastUrlData;
 
        // By default nothing is found
@@ -320,9 +388,9 @@ 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, views_total, status, registered, last_locked, lock_reason
+       $result = SQL_QUERY_ESC("SELECT id, userid, url, views_total, status, registered, last_locked, lock_reason, views_max, views_allowed
 FROM "._MYSQL_PREFIX."_surfbar_urls
-WHERE %s='%s'
+WHERE %s='%s'".$add."
 ORDER BY %s %s
 %s",
                array($column, $searchTerm, $order, $sort, $limit), __FILE__, __LINE__);
@@ -349,7 +417,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, $status="PENDING", $addMode="reg") {
+function SURFBAR_REGISTER_URL ($url, $uid, $status="PENDING", $addMode="reg", $limit=0) {
        global $_CONFIG;
 
        // Make sure by the user registered URLs are always pending
@@ -360,14 +428,22 @@ function SURFBAR_REGISTER_URL ($url, $uid, $status="PENDING", $addMode="reg") {
                'url'         => $url,
                'frametester' => FRAMETESTER($url),
                'uid'         => $uid,
-               'status'      => $status
+               'status'      => $status,
+               'limit'       => $limit
        );
 
        // Insert the URL into database
        $content['insert_id'] = SURFBAR_INSERT_URL_BY_ARRAY($content);
 
-       // Translate status, reward and costs
+       // Is this ID valid?
+       if ($content['insert_id'] == 0) {
+               // INSERT did not insert any data!
+               return false;
+       } // END - if
+
+       // Translate status and limit
        $content['status'] = SURFBAR_TRANSLATE_STATUS($content['status']);
+       $content['limit'] = SURFBAR_TRANSLATE_LIMIT($content['limit']);
 
        // If in reg-mode we notify admin
        if (($addMode == "reg") || ($_CONFIG['surfbar_notify_admin_unlock'] == "Y")) {
@@ -390,11 +466,13 @@ function SURFBAR_INSERT_URL_BY_ARRAY ($urlData) {
        if (empty($uid)) $uid = 0;
 
        // Just run the insert query for now
-       SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_surfbar_urls (userid, url, status) VALUES(%s, '%s', '%s')",
+       SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_surfbar_urls (userid,url,status,views_max,views_allowed) VALUES(%s,'%s','%s','%s','%s')",
                array(
                        $uid,
                        $urlData['url'],
-                       $urlData['status']
+                       $urlData['status'],
+                       $urlData['limit'],
+                       $urlData['limit']
                ), __FILE__, __LINE__
        );
 
@@ -410,10 +488,9 @@ function SURFBAR_NOTIFY_ADMIN ($messageType, $content) {
        $subject = ADMIN_SURFBAR_NOTIFY_DEFAULT_SUBJECT;
 
        // Prepare subject
-       $eval = sprintf("\$subject = ADMIN_SURFBAR_NOTIFY_%s_SUBJECT;",
+       $subject = constant(sprintf("ADMIN_SURFBAR_NOTIFY_%s_SUBJECT",
                strtoupper($messageType)
-       );
-       @eval($eval);
+       ));
 
        // Send the notification out
        return SEND_ADMIN_NOTIFICATION($subject, $templateName, $content, $content['uid']);
@@ -432,10 +509,9 @@ function SURFBAR_NOTIFY_USER ($messageType, $content) {
        $subject = MEMBER_SURFBAR_NOTIFY_DEFAULT_SUBJECT;
 
        // Prepare subject
-       $eval = sprintf("\$subject = MEMBER_SURFBAR_NOTIFY_%s_SUBJECT;",
+       $subject = constant(sprintf("MEMBER_SURFBAR_NOTIFY_%s_SUBJECT",
                strtoupper($messageType)
-       );
-       @eval($eval);
+       ));
 
        // Load template
        $mailText = LOAD_EMAIL_TEMPLATE($templateName, $content, $content['uid']);
@@ -443,6 +519,20 @@ function SURFBAR_NOTIFY_USER ($messageType, $content) {
        // Send the email
        return SEND_EMAIL($content['uid'], $subject, $mailText);
 }
+// Translates the limit
+function SURFBAR_TRANSLATE_LIMIT ($limit) {
+       // Is this zero?
+       if ($limit == 0) {
+               // Unlimited!
+               $return = MEMBER_SURFBAR_UNLIMITED_VIEWS;
+       } else {
+               // Translate comma
+               $return = TRANSLATE_COMMA($limit);
+       }
+
+       // Return value
+       return $return;
+}
 // Translate the URL status
 function SURFBAR_TRANSLATE_STATUS ($status) {
        // Create constant name
@@ -573,20 +663,20 @@ LIMIT 1",
        return $isFull;
 }
 // Get total amount of URLs of given status for current user or of ACTIVE URLs by default
-function SURFBAR_GET_TOTAL_URLS ($status="ACTIVE", $excludeUserId="") {
+function SURFBAR_GET_TOTAL_URLS ($status="ACTIVE", $excludeUserId=0) {
        // Determine depleted user account
        $UIDs = SURFBAR_DETERMINE_DEPLETED_USERIDS();
 
        // Is the exlude userid set?
-       if ($excludeUserId !== "") {
+       if ($excludeUserId > 0) {
                // Then add it
-               $UIDs[] = $excludeUserId;
+               $UIDs['uid'][$excludeUserId] = $excludeUserId;
        } // END - if
 
        // Get amount from database
        $result = SQL_QUERY_ESC("SELECT COUNT(id) AS cnt
 FROM "._MYSQL_PREFIX."_surfbar_urls
-WHERE userid NOT IN (".implode(",", $UIDs).") AND status='%s'",
+WHERE userid NOT IN (".implode(",", $UIDs['uid']).") AND status='%s'",
                array($status), __FILE__, __LINE__
        );
 
@@ -691,6 +781,8 @@ function SURFBAR_GENERATE_VALIDATION_CODE ($urlId, $salt="") {
 
        // Finally encrypt it PGP-like and return it
        $valHashedCode = generatePassString($hashedCode);
+
+       // Return hashed value
        //DEBUG_LOG(__FUNCTION__.":finalValCode={$valHashedCode}");
        return $valHashedCode;
 }
@@ -737,8 +829,20 @@ function SURFBAR_PAY_POINTS ($urlId) {
 function SURFBAR_UPDATE_INSERT_STATS_RECORD () {
        global $_CONFIG;
 
-       // Update views_total
-       SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_surfbar_urls SET views_total=views_total+1 WHERE id=%s LIMIT 1",
+       // Init add
+       $ADD = "";
+
+       // Get allowed views
+       $allowed = SURFBAR_GET_ALLOWED_VIEWS();
+
+       // Do we have a limit?
+       if ($allowed > 0) {
+               // Then count views_max down!
+               $ADD .= ",views_max=views_max-1";
+       } // END - if
+
+       // Update URL stats
+       SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_surfbar_urls SET views_total=views_total+1".$ADD." WHERE id=%s LIMIT 1",
                array(SURFBAR_GET_ID()), __FILE__, __LINE__);
 
        // Update the stats entry
@@ -746,7 +850,7 @@ function SURFBAR_UPDATE_INSERT_STATS_RECORD () {
                array($GLOBALS['userid'], SURFBAR_GET_ID()), __FILE__, __LINE__);
 
        // Was that update okay?
-       if (SQL_AFFECTEDROWS() == 0) {
+       if (SQL_AFFECTEDROWS() < 1) {
                // No, then insert entry
                SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_surfbar_stats (userid,url_id,count) VALUES(%s,%s,1)",
                        array($GLOBALS['userid'], SURFBAR_GET_ID()), __FILE__, __LINE__);
@@ -774,7 +878,7 @@ function SURFBAR_UPDATE_SALT_STATS () {
        //DEBUG_LOG(__FUNCTION__.":salt=".SURFBAR_GET_SALT().",id=".SURFBAR_GET_ID().",uid=".$GLOBALS['userid']."");
 
        // Was that okay?
-       if (SQL_AFFECTEDROWS() == 0) {
+       if (SQL_AFFECTEDROWS() < 1) {
                // 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__);
@@ -809,40 +913,54 @@ LIMIT 1",
        return ($cnt == 1);
 }
 // Determine which user hash no more points left
-function SURFBAR_DETERMINE_DEPLETED_USERIDS() {
+function SURFBAR_DETERMINE_DEPLETED_USERIDS ($limit=0) {
        // Init array
-       $UIDs = array();
+       $UIDs = array(
+               'uid'      => array(),
+               'points'   => array(),
+               'notified' => array(),
+       );
 
        // Do we have a current user id?
-       if (IS_MEMBER()) {
+       if ((IS_MEMBER()) && ($limit == 0)) {
                // Then add this as well
-               $UIDs[] = $GLOBALS['userid'];
+               $UIDs['uid'][$GLOBALS['userid']]      = $GLOBALS['userid'];
+               $UIDs['points'][$GLOBALS['userid']]   = GET_TOTAL_DATA($GLOBALS['userid'], "user_points", "points") - GET_TOTAL_DATA($GLOBALS['userid'], "user_data", "used_points");
+               $UIDs['notified'][$GLOBALS['userid']] = 0;
 
                // Get all userid except logged in one
-               $result = SQL_QUERY_ESC("SELECT userid FROM "._MYSQL_PREFIX."_surfbar_urls
-WHERE userid NOT IN (%s,0) AND status='ACTIVE'
-GROUP BY userid
-ORDER BY userid ASC",
+               $result = SQL_QUERY_ESC("SELECT u.userid, UNIX_TIMESTAMP(d.surfbar_low_notified) AS notified
+FROM "._MYSQL_PREFIX."_surfbar_urls AS u
+INNER JOIN "._MYSQL_PREFIX."_user_data AS d
+ON u.userid=d.userid
+WHERE u.userid NOT IN (%s,0) AND u.status='ACTIVE'
+GROUP BY u.userid
+ORDER BY u.userid ASC",
                        array($GLOBALS['userid']), __FILE__, __LINE__);
        } else {
                // Get all userid
-               $result = SQL_QUERY_ESC("SELECT userid FROM "._MYSQL_PREFIX."_surfbar_urls
-WHERE status='ACTIVE'
-GROUP BY userid
-ORDER BY userid ASC", __FILE__, __LINE__);
+               $result = SQL_QUERY("SELECT u.userid, UNIX_TIMESTAMP(d.surfbar_low_notified) AS notified
+FROM "._MYSQL_PREFIX."_surfbar_urls AS u
+INNER JOIN "._MYSQL_PREFIX."_user_data AS d
+ON u.userid=d.userid
+WHERE u.status='ACTIVE'
+GROUP BY u.userid
+ORDER BY u.userid ASC", __FILE__, __LINE__);
        }
 
        // Load all userid
-       while (list($uid) = SQL_FETCHROW($result)) {
+       while (list($uid, $notified) = SQL_FETCHROW($result)) {
                // Get total points
                $points = GET_TOTAL_DATA($uid, "user_points", "points") - GET_TOTAL_DATA($uid, "user_data", "used_points");
                //DEBUG_LOG(__FUNCTION__.":uid={$uid},points={$points}");
 
                // Shall we add this to ignore?
-               if ($points <= 0) {
+               if ($points <= $limit) {
                        // Ignore this one!
                        //DEBUG_LOG(__FUNCTION__.":uid={$uid} has depleted points amount!");
-                       $UIDs[] = $uid;
+                       $UIDs['uid'][$uid] = $uid;
+                       $UIDs['points'][$uid] = $points;
+                       $UIDs['notified'][$uid] = $notified;
                } // END - if
        } // END - while
 
@@ -1190,7 +1308,7 @@ function SURFBAR_DETERMINE_NEXT_ID ($urlId = 0) {
                $UIDs = SURFBAR_DETERMINE_DEPLETED_USERIDS();
 
                // Get maximum randomness factor
-               $maxRand = SURFBAR_GET_MAX_RANDOM($UIDs, $ADD);
+               $maxRand = SURFBAR_GET_MAX_RANDOM($UIDs['uid'], $ADD);
 
                // If more than one URL can be called generate the random number!
                if ($maxRand > 1) {
@@ -1200,13 +1318,13 @@ function SURFBAR_DETERMINE_NEXT_ID ($urlId = 0) {
 
                // And query the database
                //DEBUG_LOG(__FUNCTION__.":randNum={$randNum},maxRand={$maxRand},surfLock=".SURFBAR_GET_DATA('surf_lock')."");
-               $result = SQL_QUERY_ESC("SELECT sbu.id, sbu.userid, sbu.url, sbs.last_salt, sbu.reward, sbu.costs, sbu.views_total, UNIX_TIMESTAMP(l.last_surfed) AS last_surfed
+               $result = SQL_QUERY_ESC("SELECT sbu.id, sbu.userid, sbu.url, sbs.last_salt, sbu.views_total, sbu.views_max, sbu.views_allowed, UNIX_TIMESTAMP(l.last_surfed) AS last_surfed
 FROM "._MYSQL_PREFIX."_surfbar_urls AS sbu
 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 NOT IN (".implode(",", $UIDs).") AND sbu.status='ACTIVE' AND (sbu.views_allowed=0 OR (sbu.views_allowed > 0 AND sbu.views_max > 0))".$ADD."
+WHERE sbu.userid NOT IN (".implode(",", $UIDs['uid']).") AND sbu.status='ACTIVE' AND (sbu.views_allowed=0 OR (sbu.views_allowed > 0 AND sbu.views_max > 0))".$ADD."
 GROUP BY sbu.id
 ORDER BY l.last_surfed ASC, sbu.id ASC
 LIMIT %s,1",
@@ -1214,7 +1332,7 @@ LIMIT %s,1",
                );
        } 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, UNIX_TIMESTAMP(l.last_surfed) AS last_surfed
+               $result = SQL_QUERY_ESC("SELECT sbu.id, sbu.userid, sbu.url, sbs.last_salt, sbu.views_total, sbu.views_max, sbu.views_allowed, UNIX_TIMESTAMP(l.last_surfed) AS last_surfed
 FROM "._MYSQL_PREFIX."_surfbar_urls AS sbu
 LEFT JOIN "._MYSQL_PREFIX."_surfbar_salts AS sbs
 ON sbu.id=sbs.url_id
@@ -1342,5 +1460,10 @@ function SURFBAR_GET_RELOAD_TIME () {
        // Get data element and return its contents
        return SURFBAR_GET_DATA('time');
 }
+// Getter for allowed views
+function SURFBAR_GET_ALLOWED_VIEWS () {
+       // Get data element and return its contents
+       return SURFBAR_GET_DATA('views_allowed');
+}
 //
 ?>