function updateUserCachedPoints($fbId, $always = false) { require_once PATH_CORE . '/classes/user.class.php'; $userTable = new UserTable($this->db); $user = $userTable->getRowObject(); $userinfoTable = new UserInfoTable($this->db); $userinfo = $userinfoTable->getRowObject(); if ($userinfo->loadWhere("fbId={$fbId} " . ($always ? "" : "AND DATE_ADD(lastUpdateCachedPointsAndChallenges, INTERVAL 1 HOUR) < NOW()"))) { $userinfoTable->updateUserCachedPointsAndChallenges($userinfo->userid, &$user, &$userinfo, $weekOf); } }
function updateCachedPointsAndChallenges($limit = 1000, $weekOf = '') { $this->log('updateCachedPointsAndChallenges...'); if ($weekOf != '') { $this->log('Warning: weekOf = ' . $weekOf . ', specifying a date different from NOW() will cache weekly totals for a different week than the frontend expects. Rerun without weekOf to reset this.'); } // fields that need to be updated offline include /* * cachedPointTotal * cached */ // other fields that might need/want to be updated include comments and stories, however these arent critical because // scan every use account and adjust the user level to match their cached points require_once PATH_CORE . '/classes/user.class.php'; if ($limit == 0) { $useridList = $this->db->query("SELECT SQL_CALC_FOUND_ROWS\tuserid FROM UserInfo;"); // $this->page->rowsPerPage } else { $useridList = $this->db->query("SELECT SQL_CALC_FOUND_ROWS\tuserid FROM UserInfo ORDER BY lastUpdateCachedPointsAndChallenges ASC LIMIT 0,{$limit}"); // $this->page->rowsPerPage } $userTable = new UserTable($this->db); $user = $userTable->getRowObject(); $userinfoTable = new UserInfoTable($this->db); $userinfo = $userinfoTable->getRowObject(); if ($this->db->countQ($useridList) > 0) { while ($data = $this->db->readQ($useridList)) { if ($userinfoTable->updateUserCachedPointsAndChallenges($data->userid, &$user, &$userinfo, $weekOf)) { //$this->log('updated user '. $data->userid.'<br/>'); } else { $this->log('updateCachedPointsAndChallenges: couldnt update for user ' . $data->userid); } } } else { $this->log('updateCachedPointsAndChallenges: got no user records!'); } }
function processPrizeOrder($prizeid, $userid, &$message) { require_once PATH_CORE . '/classes/user.class.php'; require_once PATH_CORE . '/classes/prizes.class.php'; require_once PATH_CORE . '/classes/orders.class.php'; $orderTable = new OrderTable($this->db); $userTable = new UserTable($this->db); $userInfoTable = new UserInfoTable($this->db); $prizeTable = new PrizeTable($this->db); $user = $userTable->getRowObject(); $userInfo = $userInfoTable->getRowObject(); $prize = $prizeTable->getRowObject(); $order = $orderTable->getRowObject(); if (!$user->load($userid) || !$userInfo->load($userid) || !$prize->load($prizeid)) { $message = "There was an error loading prize and/or user records."; return false; } $userInfoTable->updateUserCachedPointsAndChallenges($userid, $user, $userInfo); // slightly inefficient, calls load again // final check, in case something else happened if (!$this->checkOrderPossible($prize, $user, $userinfo, $message)) { return false; } // everythings ok: if (!($prize->isWeekly || $prize->isGrand)) { $user->cachedPointTotal -= $prize->pointCost; } $prize->currentStock--; $order->userid = $user->userid; $order->prizeid = $prize->id; $order->pointCost = $prize->pointCost; // cache points spent in here for proper recordkeeping. $phpnow = time(); $order->dateSubmitted = date('Y-m-d H:i:s', $phpnow); $order->status = 'submitted'; if (!$order->insert()) { $message = 'Error submitting your order, please email support.'; return false; } $user->update(); $prize->update(); $message .= 'Your order number is #' . $order->id . '.'; // debatable -- should this show up in the log if its a weekly or grand prize? $log = $this->app->getActivityLog(); $log->add($log->serialize(0, $this->page->session->userid, 'redeemed', $_POST['prizeid'], 0)); return $order->id; }