function create_transaction($playerID) { //we are going to create a pending order.. we are just intiatng a transaction id - then we will set the order to status pending. Validate::player($playerID); $store = new StoreModel(); $player = new PlayerModel(); $itemID = filter_input(INPUT_POST, 'item'); LOg::add('Received create transaction request with payload: ' . print_r($item, true)); $transactionID = 'y_' . time() . md5(uniqid(rand(), true)); $data['transaction_id'] = $transactionID; $data['player_id'] = $playerID; $data['order_date'] = date('Y-m-d H:i:s'); $data['uid'] = $player->getUidFromPlayerId($playerID); $data['quantity'] = 1; $data['currency'] = 'USD'; $data['updated_at'] = date('Y-m-d H:i:s'); $data['status'] = 'pending'; $data['item'] = $itemID; Log::add('Adding pending transaction sending data to model: ' . print_r($data, true)); $response = $store->addPendingPurchase($data); $item = $store->getItem($itemID); $status = $response['status']; if ($status === 'ok') { $icon = 'coinItem.png'; if ($item->type == 1) { $icon = 'coinItem.png'; } if ($item->type == 2) { $icon = 'lifeItem.png'; } $this->printJson(array('status' => 'ok', 'transactionid' => $response['transaction_id'], 'item' => $itemID, 'name' => $item->title, 'description' => $item->description, 'icon' => Config::get('storage.url') . 'game_assets/' . $icon, 'currency' => 'usd', 'amount' => $item->price)); } else { $this->printJson(array('status' => 'error')); } }
public function lives($playerID) { //we'll have a payload will have the hash key. Validate::player($playerID); Validate::payload($_POST['payload']); //so we passed the inital validation if ($_POST['payload'] == 'true') { $_POST['payload'] = Util::hashPost($_POST); } if (!$_POST) { throw new NInjaException("Error in request"); } if (!$_POST['payload']) { throw new NinjaException("No data was received"); } $data = str_replace(' ', '+', $_POST['payload']); $playerModel = new PlayerModel(); if ($ack = $playerModel->collectGifts($playerID, $data)) { $response['status'] = 'ok'; $response['value'] = $ack['lives']; $response['requests'] = $ack['requestCount']; $response['remaining'] = 0; //since we cap the # they can request to max lives of 8. } else { $response['status'] = 'error'; $response['message'] = "error saving data"; Log::add('Error updating lives'); } $this->printJson($response); }
public function scores($playerID) { //we should have a get payload. $level = $_GET['level']; $ids = explode(',', $_GET['ids']); $scores = array(); if ($level === 0) { return array(); } $playerModel = new PlayerModel(); if (count($ids)) { foreach ($ids as $key => $val) { $friendPlayerID = $playerModel->getPlayerIDFromUID($val, null, false); if ($friendPlayerID != "") { $data = $playerModel->getPlayerLevelScore($friendPlayerID[0], $level); if ($data) { if ($data->score != "") { $scores[$key] = array('uid' => $val, 'score' => (int) $data->score, 'name' => $data->first_name); } else { $scores[$key] = array('uid' => $val, 'score' => 0, 'name' => $data->first_name); } } } } } //add my own score cuz. why not. $mydata = $playerModel->getPlayerLevelScore($playerID, $level); if ($mydata) { $uid = $playerModel->getUidFromPlayerId($playerID); $scores[] = array('uid' => $uid, 'score' => $mydata->score, 'name' => $mydata->first_name); } usort($scores, $this->make_comparer(['score', SORT_DESC])); //$scores =array_multisort($scores, SORT_DESC, $ids); $this->printJson($scores); }
private function processPayment($objectID) { $playerModel = new PlayerModel(); $storeModel = new StoreModel(); $error = false; $newOrder = false; $graphUrl = sprintf('https://graph.facebook.com/%s?access_token=%s|%s', $objectID, Config::get('facebook.appid'), Config::get('facebook.appsecret')); $curl = new Curl(); $curl->get($graphUrl); if ($curl->error) { Log::add('Error in requesting object ' . $curl->error_code . ' : ' . $curl->error_message); throw new NinjaException("Error Processing Request"); } $res = $curl->response; $facebookID = $res->user->id; $playerArray = $playerModel->getPlayerIDFromUID($facebookID, null, false); $playerID = $playerArray[0]; $orderDetails = $storeModel->addOrder($playerID, $objectID, $res); if ($res->actions[0]->status == 'completed') { $status = 'ok'; Log::add('payment ok charged status is good'); } else { if ($res->actions[0]->status == 'failed') { $error = true; $status = 'error'; $message = 'Payment Declined'; Log::add('Payment failed ' . print_r($res, true)); } else { if ($res->actions[0]->status == 'initiated') { $error = false; Log::add('Payment failed ' . print_r($res, true)); } else { $error = true; $status = 'error'; $message = 'User canceled payment'; } } } //ANALYTICS if (!$error) { $array['status'] = 'ok'; $array['player'] = $playerModel->getPlayerData($playerID); $array['order'] = $orderDetails; $this->printJson($array); } else { $array['status'] = 'error'; $array['message'] = $message; $this->printJson($array); } }
public function sendrequest($playerID) { $playerModel = new PlayerModel(); //we'll have some data! Log::add('Send request called with data: ' . print_r($_POST, true)); $requestID = $_POST['request']; $facebookID = $_POST['ids']; $requestType = isset($_POST['type']) ? $_POST['type'] : 1; if ($requestID == '' || $facebookID == '') { Log::add('Error no request or facebook id to gift'); $response['status'] = 'error'; $response['message'] = 'No request sent'; $this->printJson($response); die; } //decode request. $graphUrl = sprintf('https://graph.facebook.com/%s?access_token=%s|%s', $requestID, Config::get('facebook.appid'), Config::get('facebook.appsecret')); $curl = new Curl(); $curl->get($graphUrl); if ($curl->error) { throw new NinjaException($curl->error_message, $curl->error_code); } //Else it's a success let's log it! $res = $curl->response; Log::add('The requestType is: ' . $requestType); $toFacebookID = $_POST['ids']; $fromFacebookID = $res->from->id; $fromName = $res->from->name; $fromID = $playerID; $toPlayers = explode(',', $toFacebookID); if ($requestType == 2) { //reverser this shit. foreach ($toPlayers as $key => $val) { $recipientID = $playerModel->getPlayerIDFromUID($val, null, false); $db['request_id'] = $res->id; $db['from_player'] = $playerID; $db['to_player'] = $recipientID; $db['to_uid'] = $val; $db['from_uid'] = $res->from->id; $db['type'] = 2; $db['from_player_name'] = $sendPlayer->first_name . ' ' . $sendPlayer->last_name; $db['date_added'] = time(); //get recip playerID $playerModel->addRequest($db); } } else { foreach ($toPlayers as $key => $val) { $recipientID = $playerModel->getPlayerIDFromUID($val, null, false); $db['request_id'] = $res->id; $db['from_player'] = $playerID; $db['to_player'] = $recipientID; $db['to_uid'] = $toFacebookID; $db['from_uid'] = $res->from->id; $db['type'] = $purchaseType != '' ? $purchaseType : 1; $db['from_player_name'] = $fromName; $db['date_added'] = time(); $db['type'] = 1; $requestIDS[] = $res->id; $playerModel->addRequest($db); $playerModel->deleteRequest($db); } } $response['status'] = 'ok'; $response['uid'] = $toFacebookID; $this->printJson($response); }
public static final function get($p_id) { return new self(); $p = DBC::queryOneAssoc("SELECT * FROM {self::{$tablename}} WHERE p_id={$p_id}"); } public function validate(&$data, $single = false) { $p = DBC::queryOneAssoc(' SELECT p_id, p_name FROM wog_player WHERE p_name="' . $data['p_name'] . '" '); if ($p && (!is_numeric($this->pk['p_id']) || $p['p_id'] != $this->pk['p_id'])) { alert('玩家名稱重複'); } if (!$single) { return; } } public function sanitize(&$data) { $pair = array(array('hp', 'hpmax'), array('sp', 'spmax'), array('p_exp', 'p_nextexp'), array('base_str', 'str'), array('base_smart', 'smart'), array('base_agi', 'agi'), array('base_life', 'life'), array('base_vit', 'vit'), array('base_au', 'au'), array('base_be', 'be')); foreach ($pair as $item) { if ($data[$item[0]] > $data[$item[1]]) { $data[$item[0]] = $data[$item[1]]; } } } } PlayerModel::setParams(array('p_name' => array('filter' => FILTER_SANITIZE_STRING, 'flags' => FILTER_FLAG_EMPTY_STRING_NULL), 'p_email' => array('filter' => FILTER_SANITIZE_EMAIL), 'act_num' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'act_num_time' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'at' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'df' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'mat' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'mdf' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 's_property' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_ipadd' => array('filter' => FILTER_SANITIZE_EMAIL, 'options' => array('default' => '0.0.0.0'), 'flags' => FILTER_FLAG_EMPTY_STRING_NULL), 'str' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'life' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'vit' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'smart' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'agi' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'hp' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'sp' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'spmax' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_sat_name' => array('filter' => FILTER_SANITIZE_STRING), 'hpmax' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'ch_id' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_money' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_lv' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_exp' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_nextexp' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_win' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_lost' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_sex' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_password' => array('filter' => FILTER_SANITIZE_STRING, 'flags' => FILTER_FLAG_EMPTY_STRING_NULL), 'i_img' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_img_url' => array('filter' => FILTER_SANITIZE_STRING), 'p_img_set' => array('filter' => FILTER_VALIDATE_BOOLEAN, 'flags' => FILTER_NULL_ON_FAILURE), 'p_act_time' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_cdate' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_online_time' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_bbsid' => array('filter' => FILTER_SANITIZE_STRING), 'p_pk_s' => array('filter' => FILTER_VALIDATE_BOOLEAN, 'flags' => FILTER_NULL_ON_FAILURE), 'p_pk_money' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_birth' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_place' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'au' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'be' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'base_str' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'base_agi' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'base_life' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'base_vit' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'base_smart' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'base_au' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'base_be' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_bank' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_bag' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_depot' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_lock' => array('filter' => FILTER_VALIDATE_BOOLEAN, 'flags' => FILTER_NULL_ON_FAILURE), 'p_g_id' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 't_id' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_support' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_cp_st' => array('filter' => FILTER_VALIDATE_BOOLEAN, 'flags' => FILTER_NULL_ON_FAILURE), 'p_cp_time' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_cash' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_recomm' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_attempts' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_lock_time' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_st' => array('filter' => FILTER_VALIDATE_BOOLEAN, 'flags' => FILTER_NULL_ON_FAILURE), 'p_userlv' => array('filter' => FILTER_SANITIZE_NUMBER_INT), 'p_npc' => array('filter' => FILTER_VALIDATE_BOOLEAN, 'flags' => FILTER_NULL_ON_FAILURE)));
public function saveLevelScore($payload = null, $playerID = null) { Validate::Player($playerID); if ($payload == null) { return false; } if ($decodedPayload = NinjaHash::decode($payload)) { $player = new PlayerModel(); $p = $player->loadPlayer($this->playerID); $updates = false; $this->db->select('*'); $this->db->from('level_scores'); $this->db->where('level_id', $decodedPayload->level); $this->db->where('player_id', $this->playerID); $query = $this->db->get(); $tmpObject = $query->row(); $levelScoreExists = $query->num_rows(); if ($levelScoreExists) { if ($decodedPayload->total_moves < $tmpObject->total_moves) { Log::add('total moves was less then ' . $decodedPayload->total_moves . ' : ' . $tmpObject->total_moves); $updates = true; $dbData['total_moves'] = $decodedPayload->total_moves; } if (strlen($decodedPayload->largest_word) > strlen($tmpObject->largest_word)) { Log::add('largest word was bigger ' . $decodedPayload->total_moves . ' : ' . $tmpObject->total_moves); $updates = true; $dbData['largest_word'] = $decodedPayload->largest_word; } if ($decodedPayload->time_elapsed < $tmpObject->time_elapsed || $tmpObject->time_elapsed == '') { Log::add('time elapsed was less then ' . $decodedPayload->total_moves . ' : ' . $tmpObject->total_moves); $updates = true; $dbData['time_elapsed'] = $decodedPayload->time_elapsed; } if ($decodedPayload->score > $tmpObject->score) { Log::add('score was more than ' . $decodedPayload->score . ' : ' . $tmpObject->score); $dbData['score_level'] = $this->getScoreLevel($decodedPayload->score, $decodedPayload->level); $updates = true; $dbData['score'] = $decodedPayload->score; } //update play_count $playCount = $tmpObject->play_count; $playCount = $playCount + 1; $dbData['play_count'] = $playCount; if ($updates) { $this->db->where('level_id', $decodedPayload->level); $this->db->where('player_id', $this->playerID); $this->db->update('level_scores', $dbData); Log::add('updating player level score - last query: ' . $this->db->last_query()); } } else { $dbData['total_moves'] = $decodedPayload->total_moves; $dbData['largest_word'] = $decodedPayload->largest_word; $dbData['time_elapsed'] = $decodedPayload->time_elapsed; $dbData['score'] = $decodedPayload->score; $dbData['date_added'] = date('Y-m-d H:i:a'); $dbData['level_id'] = $decodedPayload->level; $dbData['player_id'] = $this->playerID; $dbData['play_count'] = 1; $dbData['score_level'] = $this->getScoreLevel($decodedPayload->score, $decodedPayload->level); $this->db->insert('level_scores', $dbData); Log::add('inserting player level score - last query: ' . $this->db->last_query()); } //check if leveled up $newLives = $decodedPayload->completed == 'true' ? $player->data->lives + 1 : $player->data->lives; if ($decodedPayload->completed == 'true' && $player->data->level == $decodedPayload->level) { $player->levelUp($playerID, $decodedPayload->score, $newLives); } return $player->data; } else { return false; } }
/** * * @return array|boolean */ function getRemainingEntities($key, $remaining, $which = 'remaining') { $this->db->select("i.Name, m.Filename, i.ItemsID, l.KeysID"); $this->db->from("leads l"); $this->db->join('items i', 'l.ItemsID=i.ItemsID'); $this->db->join('media m', 'l.MediaID=m.MediaID', 'left'); $this->db->where('l.KeysID', $key); $this->db->where('!isnull(l.ItemsID)', false, false); if ($which == 'remaining') { $this->db->where_in('l.ItemsID', $remaining); } else { $this->db->where_not_in('l.ItemsID', $remaining); } if ($this->FilterItems) { $this->db->where_in('i.ItemsID', $this->FilterItems); } $this->db->group_by('i.Name'); $query = $this->db->get(); if ($query->num_rows()) { $ret = array(); foreach ($query->result() as $row) { $items = $this->nextKey($row->ItemsID, parent::getProjectID($key)); $thisitem = isset($items[0]) ? $items[0] : FALSE; $linkToItem = count($items) > 1 ? $items[1] : FALSE; $name = array(); $name['name'] = $thisitem ? $thisitem->ItemName : $row->ItemsID; $name['NamesID'] = NULL; $name['tokey'] = $thisitem ? $thisitem->KeysID : FALSE; $name['LinkTo'] = $linkToItem ? $linkToItem->ItemName : FALSE; $name['LinkToKey'] = $linkToItem ? $linkToItem->KeysID : FALSE; $name['media'] = $row->Filename; $name['url'] = $thisitem ? $thisitem->ItemUrl : FALSE; $name['linkToUrl'] = $linkToItem ? $linkToItem->ItemUrl : FALSE; $ret[] = $name; } return $ret; } else { return false; } }
public function init($uuid) { $swfs = new SwfModel(); $player = new PlayerModel(); $incentiveModel = new IncentiveModel(); if ($_GET['platform'] != '') { $payload['platform'] = $_GET['platform']; } else { $payload['platform'] = "mobile"; } $platform = $payload['platform']; list($playerID, $newPlayer) = $player->getPlayerIDFromUID($uuid, $payload); $p = $player->loadPlayer($playerID); $playerSessionID = md5(uniqid(rand(), true)) . "_" . $p->visitCount; $lastLoginDate = strtotime($p->last_login_date) ? strtotime($p->last_login_date) : "0"; $player->updatePlayerLoginInfo($playerID, $lastLoginDate, $playerSessionID, $platform); if ($_GET['id'] != '') { $collectedItems = $incentiveModel->collectBooty($playerID, $_GET['id']); } $params['status'] = 'ok'; $params['appid'] = Config::get('facebook.appid'); $params['secret'] = Config::get('facebook.appsecret'); $params['repo'] = Config::get('storage.url'); $params['base'] = Config::get('url'); $params['uid'] = $p->uid; $params['playerID'] = $p->player_id; $params['music'] = $p->music ? true : false; $params['soundfx'] = $p->soundfx ? true : false; $params['locale'] = 'en_US'; //going to be spanish or english $params['debug'] = false; $params['namespace'] = Config::get('facebook.namespace'); $params['version'] = (int) $swfs->getBuildNumber(); $params['playerSession'] = $playerSessionID; $params['newPlayer'] = $newPlayer; $params['platform'] = $platform; $params['analyticsUrl'] = Config::get('analytics.url'); $params['analyticsKey'] = Config::Get('analytics.key'); $params['analyticsSecret'] = Config::get('analytics.secret'); $this->printJson($params); }
public function hasProjectItems($project) { $this->project = $project; parent::hasProjectItems($project); }