示例#1
0
 public static function refreshAPIData()
 {
     /*
      * We need the Teamspeak 3 and GW2 API libraries
      */
     require_once "library/Moturdrn/TS3GW2Auth/Includes/GW2_API_Tools/GW2_API_Tools.php";
     require_once "library/Moturdrn/TS3GW2Auth/Includes/TeamSpeak3/ts3admin.class.php";
     $tsAdmin = new ts3admin(XenForo_Application::getOptions()->ts3gw2auth_ts3server, XenForo_Application::getOptions()->ts3gw2auth_ts3serverquery);
     if ($tsAdmin->getElement('success', $tsAdmin->connect())) {
         $tsAdmin->login(XenForo_Application::getOptions()->ts3gw2auth_ts3username, XenForo_Application::getOptions()->ts3gw2auth_ts3password);
         $tsAdmin->selectServer(XenForo_Application::getOptions()->ts3gw2auth_ts3port);
     }
     $logArray = array();
     /*
      * Create the Auth model for getting keys etc
      */
     $authModel = XenForo_Model::create('Moturdrn_TS3GW2Auth_Model_Auth');
     $checkSchedule = self::CHECK_EVERY_HOURS;
     $lastChecked_date = date('Y-m-d H:i:s', strtotime("-{$checkSchedule} hours"));
     $lastChecked = strtotime($lastChecked_date);
     $auths = $authModel->getAuthOlderThan($lastChecked);
     $checkDate = strtotime("now");
     foreach ($auths as $auth) {
         $APIData = gw2_api_request('/v2/account', $auth['gw2_apikey']);
         $response = json_decode($APIData[count($APIData) - 1], true);
         /* API Returned OK - Key Valid */
         if ($APIData[0] == 'HTTP/1.1 200 OK') {
             /**     @var $authWriter Moturdrn_TS3GW2Auth_DataWriter_Auth   * */
             $authWriter = XenForo_DataWriter::create('Moturdrn_TS3GW2Auth_DataWriter_Auth');
             $authWriter->setExistingData($auth['ts3_uniqueid']);
             $authWriter->set('gw2_name', $response['name']);
             $authWriter->set('gw2_account_guid', $response['id']);
             $authWriter->set('gw2_world', $response['world']);
             $authWriter->set('last_check', $checkDate);
             $authWriter->save();
             /* API Returned Bad Request - Key Revoked */
         } elseif ($APIData[0] == 'HTTP/1.1 400 Bad Request' && $response['text'] == 'invalid key') {
             /**     @var $authWriter Moturdrn_TS3GW2Auth_DataWriter_Auth   * */
             $authWriter = XenForo_DataWriter::create('Moturdrn_TS3GW2Auth_DataWriter_Auth');
             $authWriter->setExistingData($auth['ts3_uniqueid']);
             $authWriter->set('gw2_world', 0);
             $authWriter->save();
             $logWriter = XenForo_DataWriter::create('Moturdrn_TS3GW2Auth_DataWriter_Log');
             $logWriter->set('date', $checkDate);
             $logWriter->set('ts3_uniqueid', $auth['ts3_uniqueid']);
             $logWriter->set('ts3_dbid', $auth['ts3_dbid']);
             $logWriter->set('message', 'API Key Not Valid');
             $logWriter->set('apikey', $auth['gw2_apikey']);
             $logWriter->set('apidata', serialize($APIData));
             $logWriter->set('extradata', '');
             $logWriter->save();
         }
     }
     /*
      * Get Verified TS3 IDs and Unverified TS3 IDs
      */
     $verified = $authModel->getAuthVerified(XenForo_Application::getOptions()->ts3gw2auth_worldid);
     $verifiedMembers = $currentMembers = $newMembers = $oldMembers = array();
     foreach ($verified as $key => $addToGroup) {
         $verifiedMembers[] = $addToGroup['ts3_uniqueid'];
     }
     $group_members = $tsAdmin->serverGroupClientList(XenForo_Application::getOptions()->ts3gw2auth_verified_group, true);
     foreach ($group_members['data'] as $member) {
         $currentMembers[] = $member['client_unique_identifier'];
     }
     $newMembers = array_diff($verifiedMembers, $currentMembers);
     $oldMembers = array_diff($currentMembers, $verifiedMembers);
     foreach ($newMembers as $newMember) {
         $ts3_dbid = $tsAdmin->clientGetDbIdFromUid($newMember);
         if ($ts3_dbid['success'] == 1) {
             $tsAdmin->serverGroupAddClient(XenForo_Application::getOptions()->ts3gw2auth_verified_group, $ts3_dbid['data']['cldbid']);
         }
     }
     foreach ($oldMembers as $oldMember) {
         $ts3_dbid = $tsAdmin->clientGetDbIdFromUid($oldMember);
         if ($ts3_dbid['success'] == 1) {
             $tsAdmin->serverGroupDeleteClient(XenForo_Application::getOptions()->ts3gw2auth_verified_group, $ts3_dbid['data']['cldbid']);
         }
     }
 }