}
//
// -----------------------------------------------------------------------------
+// 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
} // 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__);
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__
);
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();
// 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
$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) {
// 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, sbu.views_max, sbu.views_allowed, 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",
);
} 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, sbu.views_max, sbu.views_allowed, 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