Guest User

Controller

a guest
Oct 25th, 2010
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.75 KB | None | 0 0
  1. <?php
  2.  
  3. class FE_Register extends Action {
  4.     const EXISTING_EVE_USER = 'EXISTING_EVE_USER';
  5.     const ERROR_CODE = 'ERROR_CODE';
  6.     const ERROR_TEXT = 'ERROR_TEXT';
  7.    
  8.     function defaultAction() {
  9.         if ( ! $this->isRegistrationAllowed() ) {
  10.             return;
  11.         }
  12.         $this->context->getView()->display('register-main.tpl');
  13.     }
  14.    
  15.     function form() {
  16.         $server = $this->context->getServer();
  17.         $request = $this->context->getRequest();
  18.         $view = $this->context->getView();
  19.         $mappers = $server->getVar('RUMA_mappers');
  20.         $eveapi = $server->getVar('RUMA_eveapi');
  21.         if ( ! $this->isRegistrationAllowed() ) {
  22.             return;
  23.         }
  24.         $charId = $server->getVar('HTTP_EVE_CHARID');
  25.        
  26.         $users = $mappers->get('EveUserMapper');
  27.         $user = $users->findByUserId($request->getInt('UserId'));
  28.         if ( ! is_null($user) ) {
  29.             $view->setVar(self::EXISTING_EVE_USER, true);
  30.             if ( $user->getStatus() == EveUser::STATUS_BANNED ) {
  31.                 $view->display('register-user-banned.tpl');
  32.                 return;
  33.             }
  34.         } else {
  35.             $view->setVar(self::EXISTING_EVE_USER, false);
  36.             $user = $users->createInstance();
  37.             $user->setStatus(EveUser::STATUS_ACTIVE);
  38.         }
  39.         if ( $this->createTranslator($user)
  40.             ->toModel('UserId', $request->getStr('UserId'))
  41.             ->toModel('ApiKey', $request->getStr('ApiKey'))
  42.             ->toModel('Email', $request->getStr('Email'))
  43.             ->hasErrors() )
  44.         {
  45.             $view->display('register-main.tpl');
  46.             return;
  47.         }
  48.        
  49.         // получить список персонажей
  50.         $charlist = $eveapi->getAccountAccessor($user->getUserId(),
  51.             $user->getApiKey())->characters();
  52.         if ( $charlist->isError() ) {
  53.             $error = $charlist->getResult()->getNodeByTag('error');
  54.             $view->setVar(self::ERROR_CODE, $error->getAttribute('code'));
  55.             $view->setVar(self::ERROR_TEXT, $error->getValue());
  56.             $view->display('register-main.tpl');
  57.             return;
  58.         }
  59.         // данные персонажа
  60.         $charNode = null;
  61.         foreach ( $charlist->getResult()->getNodeByTag('result')
  62.             ->getNodeByTagAndAttribute('rowset', 'name', 'characters')
  63.             ->getNodesByTag('row') as $node )
  64.         {
  65.             if ( $node->getAttribute('characterID') == $charId ) {
  66.                 $charNode = $node;
  67.             }
  68.         }
  69.         if ( is_null($charNode) ) {
  70.             $view->display('register-account-has-no-char.tpl');
  71.             return;
  72.         }
  73.         // определить тип ключа
  74.         $user->setKeyType($eveapi->getCharacterAccessor($user->getUserId(),
  75.             $user->getApiKey(), $charId)->accountBalance()->isError() ?
  76.             EveUser::KEY_LIMITED : EveUser::KEY_FULL);
  77.        
  78.         // найти или создать корпорацию
  79.         $corps = $mappers->get('EveCorporationMapper');
  80.         $corp = $corps
  81.             ->findByCorporationId($charNode->getAttribute('corporationID'));
  82.         if ( is_null($corp) ) {
  83.             $corp = $corps->createInstance();
  84.             if ( $this->createTranslator($corp)->toModel('CorporationId',
  85.                     $charNode->getAttribute('corporationID'))
  86.                 ->toModel('Name', $charNode->getAttribute('corporationName'))
  87.                 ->hasErrors() )
  88.             {
  89.                 $view->display('register-error.tpl');
  90.                 return;
  91.             }
  92.         } else if ( $corp->getStatus() == EveCorporation::STATUS_BANNED ) {
  93.             $view->display('register-corp-banned.tpl');
  94.             return;
  95.         }
  96.         // сохранить персонажа
  97.         $chars = $mappers->get('EveCharacterMapper');
  98.         $char = $chars->createInstance();
  99.         if ( $this->createTranslator($char)->toModel('User', $user)
  100.             ->toModel('Corporation', $corp)->toModel('CharacterId', $charId)
  101.             ->toModel('Name', $charNode->getAttribute('name'))->hasErrors() )
  102.         {
  103.             $view->display('register-error.tpl');
  104.             return;
  105.         }
  106.         if ( $user->getStatus() == EveUser::STATUS_ACTIVE
  107.             && $corp->getStatus() == EveCorporation::STATUS_ALLOWED )
  108.         {
  109.             $char->setStatus(EveCharacter::STATUS_ACTIVE);
  110.         }
  111.         $user->save();
  112.         $corp->save();
  113.         $char->save();
  114.        
  115.         $view->setVar('user', $user);
  116.         $view->setVar('corporation', $corp);
  117.         $view->setVar('character', $char);
  118.        
  119.         if ( $char->getStatus() == EveCharacter::STATUS_ACTIVE ) {
  120.             $view->display('register-success.tpl');
  121.         } else if ( $user->getStatus() == EveUser::STATUS_PENDING ) {
  122.             $view->display('register-user-pending.tpl');
  123.         } else {
  124.             $view->display('register-corp-pending.tpl');
  125.         }
  126.     }
  127.    
  128.     private function createTranslator($object) {
  129.         return new Ruma_ModelEvent2ViewTranslator($this->context, $object);
  130.     }
  131.    
  132.     private function isRegistrationAllowed() {
  133.         $view = $this->context->getView();
  134.         $server = $this->context->getServer();
  135.         if ( $server->getStr('HTTP_EVE_TRUSTED', 'No') != 'Yes' ) {
  136.             $view->display('register-not-trusted.tpl');
  137.             return false;
  138.         }
  139.  
  140.         $characters = $server->getVar('RUMA_mappers')
  141.             ->get('EveCharacterMapper');
  142.         if ($characters->findByCharacterId($server->getInt('HTTP_EVE_CHARID'))){
  143.             $view->display('register-char-registered.tpl');
  144.             return false;
  145.         }
  146.         return true;
  147.     }
  148.    
  149. }
Advertisement
Add Comment
Please, Sign In to add comment