Advertisement
Guest User

Data_model

a guest
May 26th, 2015
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.89 KB | None | 0 0
  1. <?php
  2.  
  3. class Data_model extends CI_Model
  4. {
  5.     public $realm;
  6.     private $connection;
  7.     private $emuStr = false;
  8.     private $statements = array();
  9.    
  10.     public function __construct()
  11.     {
  12.         parent::__construct();
  13.        
  14.         /* Let's prepare our SQL statements */
  15.         $this->statements['trinity'] = array(
  16.             'TopArenaTeams' =>  "SELECT `arenaTeamId` AS arenateamid, `rating`, `rank`, `name`, `captainGuid` AS captain, `type` FROM `arena_team` WHERE `type` = ? ORDER BY rating DESC LIMIT ?;",
  17.             'TeamMembers'   =>  "SELECT
  18.                                     `arena_team_member`.`arenaTeamId` AS arenateamid,
  19.                                     `arena_team_member`.`guid` AS guid,
  20.                                     `arena_team_member`.`personalRating` AS rating,
  21.                                     `arena_team_member`.`seasonGames` AS games,
  22.                                     `arena_team_member`.`seasonWins` AS wins,
  23.                                     `characters`.`name` AS name,
  24.                                     `characters`.`class` AS class,
  25.                                     `characters`.`level` AS level
  26.                                 FROM `arena_team_member`
  27.                                 RIGHT JOIN `characters` ON `characters`.`guid` = `arena_team_member`.`guid`
  28.                                 WHERE `arena_team_member`.`arenateamid` = ? ORDER BY guid ASC;",
  29.             'TopHKPlayers'  =>  "SELECT `guid`, `name`, `level`, `race`, `class`, `gender`, `totalKills` AS kills FROM `characters` WHERE `totalKills` > 0 ORDER BY `totalKills` DESC LIMIT ?;",
  30.         );
  31.        
  32.         $this->statements['skyfire'] = array(
  33.             'TopArenaTeams' =>  "SELECT `arenaTeamId` AS arenateamid, `rating`, `rank`, `name`, `captainGuid` AS captain, `type` FROM `arena_team` WHERE `type` = ? ORDER BY rating DESC LIMIT ?;",
  34.             'TeamMembers'   =>  "SELECT
  35.                                     `arena_team_member`.`arenaTeamId` AS arenateamid,
  36.                                     `arena_team_member`.`guid` AS guid,
  37.                                     `arena_team_member`.`personalRating` AS rating,
  38.                                     `arena_team_member`.`seasonGames` AS games,
  39.                                     `arena_team_member`.`seasonWins` AS wins,
  40.                                     `characters`.`name` AS name,
  41.                                     `characters`.`class` AS class,
  42.                                     `characters`.`level` AS level
  43.                                 FROM `arena_team_member`
  44.                                 RIGHT JOIN `characters` ON `characters`.`guid` = `arena_team_member`.`guid`
  45.                                 WHERE `arena_team_member`.`arenateamid` = ? ORDER BY guid ASC;",
  46.             'TopHKPlayers'  =>  "SELECT `guid`, `name`, `level`, `race`, `class`, `gender`, `totalKills` AS kills FROM `characters` WHERE `totalKills` > 0 ORDER BY `totalKills` DESC LIMIT ?;",
  47.         );
  48.        
  49.         $this->statements['mangos'] = array(
  50.             'TopArenaTeams' =>  "SELECT `arena_team`.`arenateamid` AS arenateamid,
  51.                                         `arena_team_stats`.`rating` AS rating,
  52.                                         `arena_team_stats`.`rank` AS rank,
  53.                                         `arena_team`.`name` AS name,
  54.                                         `arena_team`.`captainguid` AS captain,
  55.                                         `arena_team`.`type` AS type
  56.                                     FROM `arena_team`, `arena_team_stats`
  57.                                     WHERE `arena_team`.`arenateamid` = `arena_team_stats`.`arenateamid` AND `arena_team`.`type` = ?
  58.                                     ORDER BY `arena_team_stats`.`rating` DESC LIMIT ?;",
  59.             'TeamMembers'   =>  "SELECT
  60.                                     `arena_team_member`.`arenateamid` AS arenateamid,
  61.                                     `arena_team_member`.`guid` AS guid,
  62.                                     `arena_team_member`.`personal_rating` AS rating,
  63.                                     `arena_team_member`.`played_season` AS games,
  64.                                     `arena_team_member`.`wons_season` AS wins,
  65.                                     `characters`.`name` AS name,
  66.                                     `characters`.`class` AS class,
  67.                                     `characters`.`level` AS level
  68.                                 FROM `arena_team_member`
  69.                                 RIGHT JOIN `characters` ON `characters`.`guid` = `arena_team_member`.`guid`
  70.                                 WHERE `arena_team_member`.`arenateamid` = ? ORDER BY guid ASC;",
  71.             'TopHKPlayers'  =>  "SELECT `guid`, `name`, `level`, `race`, `class`, `gender`, `totalKills` AS kills FROM `characters` WHERE `totalKills` > 0 ORDER BY `totalKills` DESC LIMIT ?;",
  72.         );
  73.        
  74.         $this->statements['arcemu'] = array(
  75.             'TopArenaTeams' =>  "SELECT `id` AS arenateamid, `rating`, `ranking` AS rank, `name`, `leader` AS captain, `type` FROM `arenateams` WHERE `type` = ? ORDER BY rating DESC LIMIT ?;",
  76.             'TeamMembers'   =>  "SELECT `player_data1`, `player_data2`, `player_data3`, `player_data4`, `player_data5`, `player_data6`, `player_data7`, `player_data8`, `player_data9`, `player_data10` FROM `arenateams` WHERE `id` = ? LIMIT 1;",
  77.             'Character'     =>  "SELECT `guid`, `name`, `class`, `level` FROM `characters` WHERE `guid` = ? LIMIT 1;",
  78.             'TopHKPlayers'  =>  "SELECT `guid`, `name`, `level`, `race`, `class`, `gender`, `killsLifeTime` AS kills FROM `characters` WHERE `killsLifeTime` > 0 ORDER BY `killsLifeTime` DESC LIMIT ?;",
  79.         );
  80.        
  81.         $this->statements['summitemu'] = array(
  82.         );
  83.     }
  84.  
  85.     public function GetStatement($key)
  86.     {
  87.         if (!$this->emuStr)
  88.             return false;
  89.  
  90.         if (!isset($this->statements[$this->emuStr][$key]))
  91.             return false;
  92.            
  93.         return $this->statements[$this->emuStr][$key];
  94.     }
  95.  
  96.     /**
  97.      * Assign the realm object to the model
  98.      */
  99.     public function setRealm($id)
  100.     {
  101.         $this->realm = $this->realms->getRealm($id);
  102.        
  103.         $replace = array('_ra', '_soap');
  104.         //Remove the ra/soap crap
  105.         $this->emuStr = str_replace($replace, '', $this->realm->getConfig('emulator'));
  106.     }
  107.  
  108.     /**
  109.      * Connect to the character database
  110.      */
  111.     public function connect()
  112.     {
  113.         $this->realm->getCharacters()->connect();
  114.         $this->connection = $this->realm->getCharacters()->getConnection();
  115.     }
  116.  
  117.     /***************************************
  118.     *         TOP ARENA FUNCTIONS
  119.     ***************************************/
  120.  
  121.     public function getTeams($count = 5, $type = 2)
  122.     {
  123.         //make sure the count param is digit
  124.         if (!ctype_digit($count))
  125.         {
  126.             $count = 5;
  127.         }
  128.        
  129.         //Switch the type number for arcemu
  130.         if ($this->emuStr == 'arcemu')
  131.         {
  132.             switch ($type)
  133.             {
  134.                 case 2: $type = 0; break;
  135.                 case 3: $type = 1; break;
  136.                 case 5: $type = 2; break;
  137.             }
  138.         }
  139.        
  140.         $this->connect();
  141.        
  142.         $result = $this->connection->query($this->GetStatement('TopArenaTeams'), array($type, $count));
  143.        
  144.         if($result && $result->num_rows() > 0)
  145.         {
  146.             $teams = $result->result_array();
  147.            
  148.             // Get the team members
  149.             if ($teams)
  150.             {
  151.                 foreach ($teams as $key => $arr)
  152.                 {
  153.                     $members = $this->getTeamMembers((int)$arr['arenateamid']);
  154.                     //Save the team members
  155.                     $teams[$key]['members'] = $members;
  156.                 }
  157.             }
  158.            
  159.             return $teams;
  160.         }
  161.        
  162.         unset($result);
  163.        
  164.         return false;
  165.     }
  166.  
  167.     public function getTeamMembers($team)
  168.     {
  169.         // Different handling for arcemu
  170.         if ($this->emuStr == 'arcemu')
  171.         {
  172.             return $this->getTeamMembersArcemu($team);
  173.         }
  174.        
  175.         $this->connect();
  176.        
  177.         $result = $this->connection->query($this->GetStatement('TeamMembers'), array($team));
  178.        
  179.         if($result && $result->num_rows() > 0)
  180.         {
  181.             return $result->result_array();
  182.         }
  183.        
  184.         unset($result);
  185.        
  186.         return false;
  187.     }
  188.    
  189.     public function getTeamMembersArcemu($team)
  190.     {
  191.         $this->connect();
  192.        
  193.         $result = $this->connection->query($this->GetStatement('TeamMembers'), array($team));
  194.        
  195.         if($result && $result->num_rows() > 0)
  196.         {
  197.             $members = array();
  198.             $row = $result->result_array();
  199.             $row = $row[0];
  200.            
  201.             // Get the team members
  202.             for ($i = 1; $i <= 10; $i++)
  203.             {
  204.                 if ($row['player_data'.$i] == '')
  205.                     continue;
  206.  
  207.                 list($guid, $weekGames, $weekWins, $seasonGames, $seasonWins, $rating) = explode(' ', $row['player_data'.$i]);
  208.                
  209.                 settype($guid, "integer");
  210.                
  211.                 // Check if there is a player at this pos
  212.                 if ($guid == 0)
  213.                     continue;
  214.                
  215.                 //Get some character data
  216.                 $result2 = $this->connection->query($this->GetStatement('Character'), array($guid));
  217.                
  218.                 if($result2 && $result2->num_rows() > 0)
  219.                 {
  220.                     $char = $result2->result_array();
  221.                     $char = $char[0];
  222.                    
  223.                     array_push($members, array(
  224.                         'guid'      => $guid,
  225.                         'rating'    => $rating,
  226.                         'games'     => $seasonGames,
  227.                         'wins'      => $seasonWins,
  228.                         'name'      => $char['name'],
  229.                         'class'     => $char['class'],
  230.                         'level'     => $char['level']
  231.                     ));
  232.                    
  233.                     unset($char);
  234.                 }
  235.                 unset($result2, $guid, $weekGames, $weekWins, $seasonGames, $seasonWins, $rating);
  236.             }
  237.             unset($row);
  238.            
  239.             //check if the team has any players
  240.             if (count($members) > 0)
  241.             {
  242.                 return $members;
  243.             }
  244.         }
  245.        
  246.         unset($result);
  247.        
  248.         return false;
  249.     }
  250.    
  251.     public function getTopHKPlayers($count = 10)
  252.     {
  253.         //make sure the count param is digit
  254.         if (!ctype_digit($count))
  255.         {
  256.             $count = 10;
  257.         }
  258.        
  259.         $this->connect();
  260.        
  261.         $result = $this->connection->query($this->GetStatement('TopHKPlayers'), array($count));
  262.        
  263.         if($result && $result->num_rows() > 0)
  264.         {
  265.             $players = $result->result_array();
  266.            
  267.             // Add rank
  268.             $i = 1;
  269.             foreach ($players as $key => $player)
  270.             {
  271.                 $players[$key]['rank'] = $this->addNumberSuffix($i);
  272.                 $i++;
  273.             }
  274.            
  275.             return $players;
  276.         }
  277.        
  278.         unset($result);
  279.        
  280.         return false;
  281.     }
  282.    
  283.     private function addNumberSuffix($num)
  284.     {
  285.         if (!in_array(($num % 100), array(11,12,13)))
  286.         {
  287.             switch ($num % 10)
  288.             {
  289.                 // Handle 1st, 2nd, 3rd
  290.                 case 1:  return $num.'st';
  291.                 case 2:  return $num.'nd';
  292.                 case 3:  return $num.'rd';
  293.             }
  294.         }
  295.        
  296.         return $num.'th';
  297.     }
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement