Пример #1
0
 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'));
     }
 }
Пример #2
0
 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);
 }
Пример #3
0
 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);
 }
Пример #4
0
 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);
     }
 }
Пример #5
0
 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);
 }
Пример #6
0
    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)));
Пример #7
0
 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;
     }
 }
Пример #8
0
 /**
  *
  * @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;
     }
 }
Пример #9
0
 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);
 }
Пример #10
0
 public function hasProjectItems($project)
 {
     $this->project = $project;
     parent::hasProjectItems($project);
 }