Beispiel #1
0
 /**
  * Gets default search criteria according environment scope
  *
  * @return array Returns array of the search criteria
  */
 private function getDefaultCriteria()
 {
     $environment = $this->getEnvironment();
     $criteria = [['envId' => $environment->id]];
     if (!$this->hasPermissions(Acl::RESOURCE_FARMS)) {
         $where = [];
         $farm = new Farm();
         $farmTeam = new FarmTeam();
         if ($this->hasPermissions(Acl::RESOURCE_OWN_FARMS)) {
             $where[] = "{$farm->columnOwnerId()} = " . $farm->qstr('ownerId', $this->getUser()->id);
         }
         if ($this->hasPermissions(Acl::RESOURCE_TEAM_FARMS)) {
             $join[] = "\n                    LEFT JOIN {$farmTeam->table('ft')} ON {$farmTeam->columnFarmId('ft')} = {$farm->columnId()}\n                    LEFT JOIN `account_team_users` `atu` ON `atu`.`team_id` = {$farmTeam->columnTeamId('ft')}\n                    LEFT JOIN `account_team_envs` `ate` ON `ate`.`team_id` = {$farmTeam->columnTeamId('ft')} AND `ate`.`env_id` = {$farm->columnEnvId()}\n                ";
             $where[] = "`atu`.`user_id` = " . $farmTeam->db()->qstr($this->getUser()->id) . " AND `ate`.`team_id` IS NOT NULL";
         }
         if (!empty($where)) {
             $criteria[Farm::STMT_WHERE] = '(' . join(' OR ', $where) . ')';
         }
         if (!empty($join)) {
             if (empty($criteria[Farm::STMT_FROM])) {
                 $criteria[Farm::STMT_FROM] = $farm->table();
             }
             $criteria[Farm::STMT_FROM] .= implode(' ', $join);
         }
     }
     return $criteria;
 }
Beispiel #2
0
 /**
  * Gets Default search criteria for the Environment scope
  *
  * @return array Returns array of the default search criteria for the Environment scope
  */
 private function getDefaultCriteria()
 {
     $server = new Server();
     $defaultCondition = sprintf("{$server->columnAccountId()} = %d AND {$server->columnEnvId()} = %d ", $this->getUser()->accountId, $this->getEnvironment()->id);
     $and = " AND {$server->columnFarmId()} IS NOT NULL ";
     if (!$this->hasPermissions(Acl::RESOURCE_FARMS)) {
         $where = [];
         $farm = new Farm();
         $farmTeam = new FarmTeam();
         $join[] = " LEFT JOIN {$farm->table('f')} ON {$farm->columnId('f')} = {$server->columnFarmId()}";
         if ($this->hasPermissions(Acl::RESOURCE_OWN_FARMS)) {
             $where[] = "{$farm->columnOwnerId('f')} = " . $farm->qstr('ownerId', $this->getUser()->id);
         }
         if ($this->hasPermissions(Acl::RESOURCE_TEAM_FARMS)) {
             $join[] = "\n                    LEFT JOIN {$farmTeam->table('ft')} ON {$farmTeam->columnFarmId('ft')} = {$farm->columnId('f')}\n                    LEFT JOIN `account_team_users` `atu` ON `atu`.`team_id` = {$farmTeam->columnTeamId('ft')}\n                    LEFT JOIN `account_team_envs` `ate` ON `ate`.`team_id` = {$farmTeam->columnTeamId('ft')} AND `ate`.`env_id` = {$farm->columnEnvId('f')}\n                ";
             $where[] = "`atu`.`user_id` = " . $farmTeam->db()->qstr($this->getUser()->id) . " AND `ate`.`team_id` IS NOT NULL";
         }
         if (!empty($where)) {
             $criteria[Farm::STMT_WHERE] = '(' . $defaultCondition . $and . ' AND ' . join(' OR ', $where) . ')';
         }
         $criteria[Farm::STMT_FROM] = $server->table() . implode(' ', $join);
     }
     // add Temporary and Importing Servers to response
     if ($this->hasPermissions(Acl::RESOURCE_IMAGES_ENVIRONMENT, Acl::PERM_IMAGES_ENVIRONMENT_MANAGE)) {
         $extraCondition = sprintf("({$defaultCondition} AND {$server->columnFarmId()} IS NULL AND {$server->columnStatus()} IN ('%s', '%s'))", Server::STATUS_IMPORTING, Server::STATUS_TEMPORARY);
         if (empty($criteria[Farm::STMT_WHERE]) && $this->hasPermissions(Acl::RESOURCE_FARMS)) {
             $criteria[Farm::STMT_WHERE] = "(({$defaultCondition}{$and}) OR {$extraCondition})";
         } else {
             if (empty($criteria[Farm::STMT_WHERE])) {
                 $criteria[Farm::STMT_WHERE] = "{$extraCondition}";
             } else {
                 $criteria[Farm::STMT_WHERE] = "({$criteria[Farm::STMT_WHERE]} OR {$extraCondition})";
             }
         }
     }
     if (empty($criteria[Farm::STMT_WHERE])) {
         $criteria[Farm::STMT_WHERE] = $defaultCondition;
     }
     return $criteria;
 }
Beispiel #3
0
 public function _teams($from, $to, $action)
 {
     switch ($action) {
         case static::ACT_CONVERT_TO_OBJECT:
             /* @var $from Farm */
             /* @var $team Team */
             foreach ($from->getTeams() as $team) {
                 $to->teams[] = ['id' => $team->id];
             }
             break;
         case static::ACT_CONVERT_TO_ENTITY:
             /* @var $to Farm */
             $newTeams = [];
             $newTeamIds = [];
             $user = $this->controller->getUser();
             foreach ($from->teams as $teamFk) {
                 $team = new Team();
                 $team->id = ApiController::getBareId($teamFk);
                 $newTeams[] = $team;
                 $newTeamIds[] = $team->id;
             }
             $currentTeamIds = [];
             foreach ($to->getTeams() as $team) {
                 $currentTeamIds[] = $team->id;
             }
             sort($newTeamIds);
             sort($currentTeamIds);
             if ($newTeamIds != $currentTeamIds) {
                 //filter out the Teams to which the User has no access
                 $teams = empty($newTeams) ? [] : Team::find([['id' => ['$in' => $newTeamIds]], ['accountId' => $user->getAccountId()]]);
                 if (count($teams) != count($newTeamIds)) {
                     throw new ApiErrorException(404, ErrorMessage::ERR_OBJECT_NOT_FOUND, "Requested Team(s) either does not exist or Farm has no access to it.");
                 }
                 $to->setTeams($newTeams);
             }
             break;
         case static::ACT_GET_FILTER_CRITERIA:
             $team = ApiController::getBareId($from, 'teams');
             $farm = new Farm();
             $farmTeam = new FarmTeam();
             return [AbstractEntity::STMT_FROM => "\n                        JOIN {$farmTeam->table('ft')} ON {$farmTeam->columnFarmId('ft')} = {$farm->columnId()}\n                            AND {$farmTeam->columnTeamId('ft')} = " . $farmTeam->qstr('teamId', $team) . "\n                    "];
     }
 }
Beispiel #4
0
 /**
  * Searches farms by criteria and selecting and initiating their Teams
  *
  * @param    array        $criteria     optional The search criteria.
  * @param    array        $group        optional The group by looks like [property1, ...], by default groups by `id`
  * @param    array        $order        optional The results order looks like [property1 => true|false, ... ]
  * @param    int          $limit        optional The records limit
  * @param    int          $offset       optional The offset
  * @param    bool         $countRecords optional True to calculate total number of the records without limit
  *
  * @return   ArrayCollection|Farm[] Returns collection of the entities.
  *
  * @throws \Scalr\Exception\ModelException
  */
 public static function findWithTeams(array $criteria = null, array $group = null, array $order = null, $limit = null, $offset = null, $countRecords = null)
 {
     $farm = new Farm();
     /* @var $farms Farm[] */
     $farms = [];
     if (!isset($group)) {
         $group = ['id'];
     }
     $collection = $farm->result(AbstractEntity::RESULT_ENTITY_COLLECTION)->find($criteria, $group, $order, $limit, $offset, $countRecords);
     /* @var $farm Farm */
     foreach ($collection as $farm) {
         $farms[$farm->id] = $farm;
     }
     $team = new Team();
     $farmTeam = new FarmTeam();
     $stmt = "\n            SELECT {$team->fields()}, {$farmTeam->fields('ft', true)}\n            FROM {$team->table()}\n            JOIN {$farmTeam->table('ft')} ON {$farmTeam->columnTeamId('ft')} = {$team->columnId()}\n              AND {$farmTeam->columnFarmId('ft')} IN ('" . implode("', '", array_keys($farms)) . "')\n        ";
     foreach ($team->db()->Execute($stmt) as $row) {
         $team = new Team();
         $team->load($row);
         $farmTeam->load($row, 'ft');
         $farms[$farmTeam->farmId]->_teams[$team->id] = $team;
     }
     return $collection;
 }