Surfbar continued:
[mailer.git] / inc / libs / surfbar_functions.php
index 3700fab3972bfde28056b928bf3c78979eea311a..26610a438ed795a8d4430cfbd5886651cc9dd28f 100644 (file)
@@ -225,8 +225,17 @@ function SURFBAR_MEMBER_DO_FORM ($formData, $URLs) {
                return false;
        }
 
+       // Secure action
+       $action = SQL_ESCAPE(htmlentities(strip_tags($formData['action']), ENT_QUOTES));
+
+       // Has it changed?
+       if ($action != $formData['action']) {
+               // Invalid data in action found
+               return false;
+       } // END - if
+
        // Create the function name for selected action
-       $functionName = sprintf("SURFBAR_MEMBER_%s_ACTION", strtoupper(SQL_ESCAPE($formData['action'])));
+       $functionName = sprintf("SURFBAR_MEMBER_%s_ACTION", strtoupper($action));
 
        // Is the function there?
        if (function_exists($functionName)) {
@@ -234,13 +243,14 @@ function SURFBAR_MEMBER_DO_FORM ($formData, $URLs) {
                $URLs[$formData['id']]['new_status'] = $SURFBAR_CACHE['new_status'];
 
                // Extract URL data for call-back
-               $urlData = array($URLs[$formData['id']]);
+               $urlData = array(array_merge($URLs[$formData['id']], array($action => $formData)));
 
                // Action found so execute it
                $performed = call_user_func_array($functionName, $urlData);
        } else {
                // Log invalid request
                DEBUG_LOG(__FUNCTION__, __LINE__, " action={$formData['action']},id={$formData['id']},function={$functionName}");
+               ADD_FATAL(sprintf("Invalid member action! action=%s,id=%s,function=%s", $formData['action'], $formData['id'], $functionName));
        }
 
        // Return status
@@ -259,6 +269,7 @@ function SURFBAR_VALIDATE_MEMBER_ACTION_STATUS ($action, $status) {
 
        // Fetch the new status if found
        if ($isValid) {
+               // Load new status
                list($SURFBAR_CACHE['new_status']) = SQL_FETCHROW($result);
        } // END - if
 
@@ -273,7 +284,7 @@ function SURFBAR_VALIDATE_MEMBER_ACTION_STATUS ($action, $status) {
 //                               Member actions
 // -----------------------------------------------------------------------------
 //
-// Retreat an URL
+// Retreat a booked URL
 function SURFBAR_MEMBER_RETREAT_ACTION ($urlData) {
        // Create the data array for next function call
        $data = array(
@@ -293,6 +304,142 @@ function SURFBAR_MEMBER_BOOKNOW_ACTION ($urlData) {
        // Simply change the status here
        return SURFBAR_CHANGE_STATUS ($urlData['id'], $urlData['status'], $urlData['new_status'], $data);
 }
+// Show edit form or do the changes
+function SURFBAR_MEMBER_EDIT_ACTION ($urlData) {
+       // Is the "execute" flag there?
+       if (isset($urlData['edit']['execute'])) {
+               // Execute the changes
+               return SURFBAR_MEMBER_EXECUTE_ACTION("edit", $urlData);
+       } // END - if
+
+       // Display form
+       return SURFBAR_MEMBER_DISPLAY_ACTION_FORM("edit", $urlData);
+}
+// Show delete form or do the changes
+function SURFBAR_MEMBER_DELETE_ACTION ($urlData) {
+       // Is the "execute" flag there?
+       if (isset($urlData['delete']['execute'])) {
+               // Execute the changes
+               return SURFBAR_MEMBER_EXECUTE_ACTION("delete", $urlData);
+       } // END - if
+
+       // Display form
+       return SURFBAR_MEMBER_DISPLAY_ACTION_FORM("delete", $urlData);
+}
+// Pause active banner
+function SURFBAR_MEMBER_PAUSE_ACTION ($urlData) {
+       return SURFBAR_CHANGE_STATUS($urlData['id'], $urlData['status'], $urlData['new_status'], array($urlData['id'] => $urlData));
+}
+// Unpause stopped banner
+function SURFBAR_MEMBER_UNPAUSE_ACTION ($urlData) {
+       // Fix missing entry for template
+       $urlData['edit'] = $urlData['unpause'];
+       $urlData['edit']['url'] = $urlData['url'];
+       $urlData['edit']['limit'] = $urlData['views_max'];
+
+       // Return status change
+       return SURFBAR_CHANGE_STATUS($urlData['id'], $urlData['status'], $urlData['new_status'], array($urlData['id'] => $urlData));
+}
+// Display selected "action form"
+function SURFBAR_MEMBER_DISPLAY_ACTION_FORM ($action, $urlData) {
+       // Translate some data
+       $urlData['registered']    = MAKE_DATETIME($urlData['registered'], "2");
+       $urlData['views_total']   = TRANSLATE_COMMA($urlData['views_total']);
+       $urlData['views_max']     = TRANSLATE_COMMA($urlData['views_max']);
+       $urlData['views_allowed'] = TRANSLATE_COMMA($urlData['views_allowed']);
+       $urlData['last_locked']   = MAKE_DATETIME($urlData['last_locked'], "2");
+
+       // Is the lock reason empty?
+       if (empty($urlData['lock_reason'])) {
+               // Fix it to three dashes
+               $urlData['lock_reason'] = "---";
+       } // END - if
+
+       // Include fields only for action 'edit'
+       if ($action == "edit") {
+               // Default is not limited
+               $urlData['limited_yes'] = "";
+               $urlData['limited_no']  = " checked=\"checked\"";
+               $urlData['limited']     = "false";
+
+               // Is this URL limited?
+               if ($urlData['views_max'] > 0) {
+                       // Then rewrite form data
+                       $urlData['limited_yes'] = " checked=\"checked\"";
+                       $urlData['limited_no']  = "";
+                       $urlData['limited']     = "true";
+               } // END - if
+       } // END - if
+
+       // Load the form and display it
+       LOAD_TEMPLATE(sprintf("member_surfbar_%s_action_form", $action), false, $urlData);
+
+       // All fine by default ... ;-)
+       return true;
+}
+// Execute choosen action
+function SURFBAR_MEMBER_EXECUTE_ACTION ($action, $urlData) {
+       // By default nothing is executed
+       $executed = false;
+
+       // Is limitation "no" and "limit" is > 0?
+       if ((isset($urlData[$action]['limited'])) && ($urlData[$action]['limited'] == "N") && ((isset($urlData[$action]['limit'])) && ($urlData[$action]['limit'] > 0)) || (!isset($urlData[$action]['limit']))) {
+               // Set it to unlimited
+               $urlData[$action]['limit'] = 0;
+       } // END - if
+
+       // Construct function name
+       $functionName = sprintf("SURFBAR_MEMBER_EXECUTE_%s_ACTION", strtoupper($action));
+
+       // Is 'userid' set and not 'uid' ?
+       if ((!isset($urlData['uid'])) && (isset($urlData['userid']))) {
+               // Auto-fix this
+               $urlData['uid'] = $urlData['userid'];
+       } // END - if
+
+       // Is that function there?
+       if (function_exists($functionName)) {
+               // Execute the function
+               if (call_user_func_array($functionName, array($urlData)) == true) {
+                       // Update status as well
+                       $executed = SURFBAR_CHANGE_STATUS($urlData['id'], $urlData['status'], $urlData['new_status'], array($urlData['id'] => $urlData));
+               } // END - if
+       } else {
+               // Not found!
+               ADD_FATAL(sprintf(MEMBER_SURFBAR_EXECUTE_ACTION_404, $functionName));
+       }
+
+       // Return status
+       return $executed;
+}
+// "Execute edit" function: Update changed data
+function SURFBAR_MEMBER_EXECUTE_EDIT_ACTION ($urlData) {
+       // Default is nothing done
+       $status = false;
+
+       // Translate URLs for testing
+       $url1 = COMPILE_CODE($urlData['url']);
+       $url2 = COMPILE_CODE($urlData['edit']['url']);
+
+       // Has the URL or limit changed?
+       if (true) {
+       //if (($urlData['views_allowed'] != $urlData['edit']['limit']) || ($url1 != $url2)) {
+               // Run the query
+               SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_surfbar_urls SET url='%s', views_allowed=%s, views_max=%s WHERE id=%s AND status='%s' LIMIT 1",
+                       array($urlData['url'], $urlData['edit']['limit'], $urlData['edit']['limit'], $urlData['id'], $urlData['status']), __FILE__, __LINE__);
+
+               // All fine
+               $status = true;
+       }
+
+       // Return status
+       return $status;
+}
+// "Execute delete" function: Does nothing...
+function SURFBAR_MEMBER_EXECUTE_DELETE_ACTION ($urlData) {
+       // Nothing special to do (see above function for such "special actions" to perform)
+       return true;
+}
 //
 // -----------------------------------------------------------------------------
 //                           Self-maintenance functions
@@ -388,7 +535,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, views_total, status, registered, last_locked, lock_reason, views_max, views_allowed
+       $result = SQL_QUERY_ESC("SELECT id, userid, url, views_total, views_max, views_allowed, status, registered, last_locked, lock_reason, views_max, views_allowed
 FROM "._MYSQL_PREFIX."_surfbar_urls
 WHERE %s='%s'".$add."
 ORDER BY %s %s
@@ -442,7 +589,6 @@ function SURFBAR_REGISTER_URL ($url, $uid, $status="PENDING", $addMode="reg", $l
        } // 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
@@ -466,7 +612,7 @@ 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,views_max,views_allowed) VALUES (%s,'%s','%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'],
@@ -487,10 +633,25 @@ function SURFBAR_NOTIFY_ADMIN ($messageType, $content) {
        // Set default subject if following eval() wents wrong
        $subject = ADMIN_SURFBAR_NOTIFY_DEFAULT_SUBJECT;
 
-       // Prepare subject
-       $subject = constant(sprintf("ADMIN_SURFBAR_NOTIFY_%s_SUBJECT",
+       // Create constant name
+       $constantName = sprintf("ADMIN_SURFBAR_NOTIFY_%s_SUBJECT",
                strtoupper($messageType)
-       ));
+       );
+
+       // Prepare subject
+       if (defined($constantName)) {
+               $subject = constant($constantName);
+       } else {
+               ADD_FATAL(ADMIN_SURFBAR_NOTIFY_SUBJECT_404, $constantName);
+       }
+
+       // Translate some data if present
+       if (isset($content['status']))        $content['status']        = SURFBAR_TRANSLATE_STATUS($content['status']);
+       if (isset($content['registered']))    $content['registered']    = MAKE_DATETIME($content['registered'], "2");
+       if (isset($content['last_locked']))   $content['last_locked']   = MAKE_DATETIME($content['last_locked'], "2");
+       if (isset($content['views_total']))   $content['views_total']   = TRANSLATE_COMMA($content['views_total']);
+       if (isset($content['views_allowed'])) $content['views_allowed'] = TRANSLATE_COMMA($content['views_allowed']);
+       if (isset($content['views_max']))     $content['views_max']     = TRANSLATE_COMMA($content['views_max']);
 
        // Send the notification out
        return SEND_ADMIN_NOTIFICATION($subject, $templateName, $content, $content['uid']);
@@ -508,10 +669,17 @@ function SURFBAR_NOTIFY_USER ($messageType, $content) {
        // Set default subject if following eval() wents wrong
        $subject = MEMBER_SURFBAR_NOTIFY_DEFAULT_SUBJECT;
 
-       // Prepare subject
-       $subject = constant(sprintf("MEMBER_SURFBAR_NOTIFY_%s_SUBJECT",
+       // Create constant name
+       $constantName = sprintf("MEMBER_SURFBAR_NOTIFY_%s_SUBJECT",
                strtoupper($messageType)
-       ));
+       );
+
+       // Prepare subject
+       if (defined($constantName)) {
+               $subject = constant($constantName);
+       } else {
+               ADD_FATAL(MEMBER_SURFBAR_NOTIFY_SUBJECT_404, $constantName);
+       }
 
        // Load template
        $mailText = LOAD_EMAIL_TEMPLATE($templateName, $content, $content['uid']);
@@ -541,10 +709,10 @@ function SURFBAR_TRANSLATE_STATUS ($status) {
        // Set default translated status
        $statusTranslated = "!".$constantName."!";
 
-       // Generate eval() command
+       // Is the constant there?
        if (defined($constantName)) {
-               $eval = "\$statusTranslated = ".$constantName.";";
-               eval($eval);
+               // Then get it's value
+               $statusTranslated = constant($constantName);
        } // END - if
 
        // Return result
@@ -818,12 +986,12 @@ function SURFBAR_PAY_POINTS ($urlId) {
        // Remove it from the URL owner
        //DEBUG_LOG(__FUNCTION__, __LINE__, "uid=".SURFBAR_GET_USERID().",costs=".SURFBAR_GET_COSTS()."", false);
        if (SURFBAR_GET_USERID() > 0) {
-               SUB_POINTS(SURFBAR_GET_USERID(), SURFBAR_GET_COSTS());
+               SUB_POINTS("surfbar", SURFBAR_GET_USERID(), SURFBAR_GET_COSTS());
        } // END - if
 
        // Book it to the user
        //DEBUG_LOG(__FUNCTION__, __LINE__, "uid=".$GLOBALS['userid'].",reward=".SURFBAR_GET_REWARD()."", false);
-       ADD_POINTS_REFSYSTEM($GLOBALS['userid'], SURFBAR_GET_DATA('reward'));
+       ADD_POINTS_REFSYSTEM("surfbar", $GLOBALS['userid'], SURFBAR_GET_DATA('reward'));
 }
 // Updates the statistics of current URL/userid
 function SURFBAR_UPDATE_INSERT_STATS_RECORD () {
@@ -1013,11 +1181,21 @@ function SURFBAR_DETERMINE_WAIT_TIME () {
 function SURFBAR_CHANGE_STATUS ($urlId, $prevStatus, $newStatus, $data=array()) {
        global $_CONFIG;
 
+       // Make new status always lower-case
+       $newStatus = strtolower($newStatus);
+
        // Get URL data for status comparison if missing
-       if (count($data) == 0) {
+       if ((!is_array($data)) || (count($data) == 0)) {
+               // Fetch missing URL data
                $data = SURFBAR_GET_URL_DATA($urlId);
        } // END - if
 
+       // Is the new status set?
+       if ((!is_string($newStatus)) || (empty($newStatus))) {
+               // Abort here, but fine!
+               return true;
+       } // END - if
+
        // Is the status like prevStatus is saying?
        if ($data[$urlId]['status'] != $prevStatus) {
                // No, then abort here
@@ -1026,31 +1204,34 @@ function SURFBAR_CHANGE_STATUS ($urlId, $prevStatus, $newStatus, $data=array())
 
 
        // Update the status now
-       // ---------------------- Commented out for debugging member actions! -----------------------
+       // ---------- Comment out for debugging/developing member actions! ---------
        //SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_surfbar_urls SET status='%s' WHERE id=%s LIMIT 1",
        //      array($newStatus, bigintval($urlId)), __FILE__, __LINE__);
-       // ---------------------- Commented out for debugging member actions! -----------------------
+       // ---------- Comment out for debugging/developing member actions! ---------
 
        // Was that fine?
-       if (SQL_AFFECTEDROWS() != 1) {
-               // No, something went wrong
-               return false;
-       } // END - if
+       //if (SQL_AFFECTEDROWS() != 1) {
+       //      // No, something went wrong
+       //      return false;
+       //} // END - if
 
        // Prepare content for notification routines
        $data[$urlId]['uid']         = $data[$urlId]['userid'];
        $data[$urlId]['frametester'] = FRAMETESTER($data[$urlId]['url']);
        $data[$urlId]['reward']      = TRANSLATE_COMMA($_CONFIG['surfbar_static_reward']);
        $data[$urlId]['costs']       = TRANSLATE_COMMA($_CONFIG['surfbar_static_costs']);
-       $data[$urlId]['status']      = SURFBAR_TRANSLATE_STATUS($newStatus);
-       $data[$urlId]['registered']  = MAKE_DATETIME($data[$urlId]['registered'], "2");
-       $newStatus = strtolower($newStatus);
+
+       // Do some dirt fixing here:
+       if (($data[$urlId]['status'] == "STOPPED") && ($newStatus == "pending")) {
+               // Fix for template change
+               $newStatus = "continued";
+       } // END - if
 
        // Send admin notification
-       SURFBAR_NOTIFY_ADMIN("url_{$newStatus}", $data[$urlId]);
+       SURFBAR_NOTIFY_ADMIN("url_{$data[$urlId]['status']}_{$newStatus}", $data[$urlId]);
 
        // Send user notification
-       SURFBAR_NOTIFY_USER("url_{$newStatus}", $data[$urlId]);
+       SURFBAR_NOTIFY_USER("url_{$data[$urlId]['status']}_{$newStatus}", $data[$urlId]);
 
        // All done!
        return true;
@@ -1218,7 +1399,7 @@ function SURFBAR_GET_USER_URLS () {
        $URLs = array();
 
        // Begin the query
-       $result = SQL_QUERY_ESC("SELECT u.id, u.userid, u.url, u.views_total, u.status, UNIX_TIMESTAMP(u.registered) AS registered, UNIX_TIMESTAMP(u.last_locked) AS last_locked, u.lock_reason AS lock_reason
+       $result = SQL_QUERY_ESC("SELECT u.id, u.userid, u.url, u.views_total, u.views_max, u.views_allowed, u.status, UNIX_TIMESTAMP(u.registered) AS registered, UNIX_TIMESTAMP(u.last_locked) AS last_locked, u.lock_reason AS lock_reason
 FROM "._MYSQL_PREFIX."_surfbar_urls AS u
 WHERE u.userid=%s AND u.status != 'DELETED'
 ORDER BY u.id ASC",