Esempio n. 1
0
 /**
  * Processes an action on raffle collection.
  *
  * @param null|array $request
  * @throws Exception
  * @return array
  */
 private function processRaffleAction($request = null)
 {
     if ($request === null) {
         $request = $this->request;
     }
     $out = array();
     $out['subtitle'] = _('(Listing raffles)');
     $data = null;
     //check login
     if (!isset($this->access_token)) {
         throw new Exception('Unauthenticated request.', 401);
     }
     $this->adminDAO = isset($this->adminDAO) ? $this->adminDAO : new AdminDAO($this->client_id, $this->client_secret, $this->admin_redirect_uri, null, null, null, null, null, $this->debug);
     $authResponse = $this->adminDAO->authenticate(null, null, $this->adminDAO->getAccessToken());
     if (isset($authResponse['authUrl'])) {
         throw new Exception("Auth error: Invalid admin access token.", 500);
     }
     $adminClient = $this->adminDAO->getClient();
     $tableIds = $this->adminDAO->getTableIds();
     $adminId = $this->adminDAO->getAdminId();
     $this->user = isset($this->user) ? $this->user : new User($this->client_id, $this->client_secret, $this->redirect_uri, $this->access_token, null, null, null, $this->debug);
     $authResponse = $this->user->authenticate(null, null, $this->access_token);
     if (isset($authResponse['authUrl'])) {
         if (!$this->webapp) {
             throw new Exception("Authentication required (token found but expired/revoked).", 401);
         } else {
             return $this->processUserAction(array('collection' => 'user', 'action' => 'logout'));
         }
     }
     $userId = $this->user->requestUserId();
     $isAdmin = $adminId === $userId ? true : false;
     $this->raffleDAO = isset($this->raffleDAO) ? $this->raffleDAO : new RaffleDAO($tableIds, null, $adminClient, $this->debug);
     $this->raffle = isset($this->raffle) ? $this->raffle : new Raffle($this->raffleDAO, $userId, $isAdmin);
     $request['raffleid'] = isset($request['raffleid']) ? $request['raffleid'] : (isset($request['resource']) ? trim($request['resource'], '/') : null);
     switch (isset($request['action']) ? $request['action'] : '') {
         case 'list':
             $filterArray = $this->getListRaffleFilterArray($userId, $isAdmin, $request);
             $data = $this->raffle->getList($filterArray);
             break;
         case 'create':
             if (!isset($request['description'])) {
                 throw new Exception('Must specify a raffle description', 400);
             }
             $data = $this->raffle->create($request['description'], $userId);
             break;
         case 'delete':
             if (!isset($request['raffleid']) || !uuid::is_valid($request['raffleid'])) {
                 throw new Exception('Must specify a raffleid to delete', 400);
             }
             $data = $this->raffle->delete($request['raffleid']);
             break;
         case 'join':
             if (!isset($request['raffleid']) || !uuid::is_valid($request['raffleid'])) {
                 throw new Exception('Must specify a raffleid to join', 400);
             }
             $data = $this->raffle->join($request['raffleid'], isset($request['comment']) ? $request['comment'] : '', $userId);
             break;
         case 'leave':
             if (!isset($request['raffleid']) || !uuid::is_valid($request['raffleid'])) {
                 throw new Exception('Must specify a raffleid to leave', 400);
             }
             $data = $this->raffle->leave($request['raffleid'], $userId);
             break;
         case 'check':
             if (!isset($request['raffleid']) || !uuid::is_valid($request['raffleid'])) {
                 throw new Exception('Must specify a raffleid to check', 400);
             }
             $data = $this->raffle->check($request['raffleid']);
             break;
         case 'open':
             if (!isset($request['raffleid']) || !uuid::is_valid($request['raffleid'])) {
                 throw new Exception('Must specify a raffleid to open', 400);
             }
             $data = $this->raffle->updateStatus($request['raffleid'], 'open');
             break;
         case 'close':
             if (!isset($request['raffleid']) || !uuid::is_valid($request['raffleid'])) {
                 throw new Exception('Must specify a raffleid to close', 400);
             }
             $data = $this->raffle->updateStatus($request['raffleid'], 'closed');
             break;
         case 'raffle':
             if (!isset($request['raffleid']) || !uuid::is_valid($request['raffleid'])) {
                 throw new Exception('Must specify a raffleid to raffle', 400);
             }
             $data = $this->raffle->raffle($request['raffleid'], isset($request['limit']) && intval($request['limit']) > 0 ? intval($request['limit']) : null);
             break;
         default:
             throw new Exception('The request does not contain a valid action.', 404);
     }
     $out['data'] = $data;
     return $out;
 }