// -----------------------------------------------------------------------------
//
// 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
} elseif (!SURFBAR_IF_USER_BOOK_MORE_URLS()) {
// No more allowed!
return false;
+ } elseif ("".bigintval($limit)."" != "".$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) {
// -----------------------------------------------------------------------------
//
// Member has added an URL
-function SURFBAR_MEMBER_ADD_URL ($url) {
+function SURFBAR_MEMBER_ADD_URL ($url, $limit) {
global $_CONFIG;
// Do some pre-checks
} elseif (!SURFBAR_IF_USER_BOOK_MORE_URLS($GLOBALS['userid'])) {
// No more allowed!
return false;
+ } elseif ("".bigintval($limit)."" != "".$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) {
}
//
// -----------------------------------------------------------------------------
+// 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 $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
'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")) {
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__
);
// 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
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__
);
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
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__);
//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__);
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, 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, 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
// 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');
+}
//
?>