/**
  * @return array
  */
 public function find()
 {
     $base_entity = singleton($this->table_name);
     $relation_name = $this->alias->getName();
     $class_name = ClassInfo::baseDataClass($this->table_name);
     $subclasses = array_keys(ClassInfo::subclassesFor($class_name));
     do {
         // relationships ...
         $has_many = Config::inst()->get($class_name, 'has_many');
         $has_many_many = Config::inst()->get($class_name, 'many_many');
         $has_one = Config::inst()->get($class_name, 'has_one');
         $belongs_many_many = Config::inst()->get($class_name, 'belongs_many_many');
         if (!is_null($has_many) && array_key_exists($relation_name, $has_many)) {
             break;
         }
         if (!is_null($has_one) && array_key_exists($relation_name, $has_one)) {
             break;
         }
         if (!is_null($has_many_many) && array_key_exists($relation_name, $has_many_many)) {
             break;
         }
         if (!is_null($belongs_many_many) && array_key_exists($relation_name, $belongs_many_many)) {
             break;
         }
         $class_name = array_pop($subclasses);
         if (is_null($class_name)) {
             // we arrive to the end of the hierarchy and didnt find any relation with that name
             throw new InvalidArgumentException(sprintf(' relation %s does not exist for %s', $relation_name, $this->table_name));
         }
         $base_entity = singleton($class_name);
     } while (true);
     return array($base_entity, $has_one, $has_many, $has_many_many, $belongs_many_many);
 }
コード例 #2
0
ファイル: Survey.php プロジェクト: Thingee/openstack-org
 /**
  * @return ISurveyStep[]
  */
 public function getSteps()
 {
     $query = new QueryObject(new SurveyStep());
     $query->addAlias(QueryAlias::create('Template'));
     $query->addOrder(QueryOrder::asc('Template.Order'));
     return new ArrayList(AssociationFactory::getInstance()->getOne2ManyAssociation($this, 'Steps', $query)->toArray());
 }
 public function getNominationsByNominee($member_id, $offset = 0, $limit = 10)
 {
     $query = new QueryObject(new CandidateNomination());
     $query->addAlias(QueryAlias::create('Candidate'));
     $query->addAndCondition(QueryCriteria::equal('Member.ID', $member_id));
     return $this->getAll($query, $offset, $limit);
 }
 /**
  * @param string $dupe_account_email
  * @return IDupeMemberActionAccountRequest
  */
 public function findByDupeAccount($dupe_account_email)
 {
     $query = new QueryObject(new $this->entity_class());
     $query->addAlias(QueryAlias::create('DupeAccount'));
     $query->addAndCondition(QueryCriteria::equal('Member.Email', $dupe_account_email));
     return $this->getBy($query);
 }
コード例 #5
0
 public function search()
 {
     $output = '';
     if (!$this->isJson()) {
         return $this->httpError(500, 'Content Type not allowed');
     }
     try {
         $search_params = json_decode($this->request->getBody(), true);
         $query = new QueryObject(new Consultant());
         $query->addAlias(QueryAlias::create('Company'));
         $query->addAndCondition(QueryCriteria::equal("Active", true));
         $location = @explode(',', @$search_params['location_term']);
         $name = @$search_params['name_term'];
         $service = @$search_params['service_term'];
         if (!empty($name)) {
             $query->addAndCondition(QueryCompoundCriteria::compoundOr(array(QueryCriteria::like('CompanyService.Name', $name), QueryCriteria::like('CompanyService.Overview', $name), QueryCriteria::like('Company.Name', $name))));
         }
         if (!empty($service)) {
             $query->addAlias(QueryAlias::create('ConsultantServiceOfferedType'));
             $query->addAndCondition(QueryCriteria::like("ConsultantServiceOfferedType.Type", $service));
         }
         if (is_array($location) && !empty($location[0])) {
             $query->addAlias(QueryAlias::create('Office'));
             $query->addAndCondition(QueryCriteria::like("Office.City", $location[0]));
         }
         $countries = array_flip(Geoip::getCountryDropDown());
         if (is_array($location) && count($location) == 2) {
             $country = trim($location[1]);
             if (!empty($country) && array_key_exists($country, $countries)) {
                 $query->addAndCondition(QueryCriteria::like("Office.Country", $countries[$country]));
             }
         } else {
             if (is_array($location) && count($location) == 3) {
                 $state = trim($location[1]);
                 $country = trim($location[2]);
                 if (!empty($country) && array_key_exists($country, $countries)) {
                     $query->addAndCondition(QueryCriteria::like("Office.Country", $countries[$country]));
                 }
                 if (!empty($state)) {
                     $query->addAndCondition(QueryCriteria::like("Office.State", $state));
                 }
             }
         }
         list($list, $size) = $this->consultants_repository->getAll($query, 0, 1000);
         foreach ($list as $public_cloud) {
             $output .= $public_cloud->renderWith('ConsultantsDirectoryPage_CloudBox', array('ConsultantLink' => $this->Link()));
         }
     } catch (Exception $ex) {
         return $this->httpError(500, 'Server Error');
     }
     return empty($output) ? $this->httpError(404, '') : $output;
 }
コード例 #6
0
 function search()
 {
     $output = '';
     if (!$this->isJson()) {
         return $this->httpError(500, 'Content Type not allowed');
     }
     try {
         $search_params = json_decode($this->request->getBody(), true);
         $query1 = new QueryObject(new Distribution());
         $query2 = new QueryObject(new Appliance());
         $query1->addAlias(QueryAlias::create('Company'));
         $query2->addAlias(QueryAlias::create('Company'));
         $name = @$search_params['name_term'];
         $service = @$search_params['service_term'];
         if (!empty($name)) {
             $query1->addAndCondition(QueryCompoundCriteria::compoundOr(array(QueryCriteria::like('CompanyService.Name', $name), QueryCriteria::like('CompanyService.Overview', $name), QueryCriteria::like('Company.Name', $name))));
             $query2->addAndCondition(QueryCompoundCriteria::compoundOr(array(QueryCriteria::like('CompanyService.Name', $name), QueryCriteria::like('CompanyService.Overview', $name), QueryCriteria::like('Company.Name', $name))));
         }
         if (!empty($service)) {
             $service = explode('-', $service);
             $query1->addAlias(QueryAlias::create('OpenStackImplementationApiCoverage')->addAlias(QueryAlias::create('OpenStackReleaseSupportedApiVersion')->addAlias(QueryAlias::create('OpenStackComponent'))));
             $query1->addAndCondition(QueryCompoundCriteria::compoundOr(array(QueryCriteria::like('OpenStackComponent.Name', trim($service[0])), QueryCriteria::like('OpenStackComponent.CodeName', trim($service[1])))));
             $query2->addAlias(QueryAlias::create('OpenStackImplementationApiCoverage')->addAlias(QueryAlias::create('OpenStackReleaseSupportedApiVersion')->addAlias(QueryAlias::create('OpenStackComponent'))));
             $query2->addAndCondition(QueryCompoundCriteria::compoundOr(array(QueryCriteria::like('OpenStackComponent.Name', trim($service[0])), QueryCriteria::like('OpenStackComponent.CodeName', trim($service[1])))));
         }
         $query1->addAndCondition(QueryCriteria::equal("Active", true));
         $query2->addAndCondition(QueryCriteria::equal("Active", true));
         list($list1, $size1) = $this->distribution_repository->getAll($query1, 0, 1000);
         list($list2, $size2) = $this->appliance_repository->getAll($query2, 0, 1000);
         $implementations = array_merge($list1, $list2);
         foreach ($implementations as $implementation) {
             $type = $implementation->getMarketPlace()->getName() == IDistribution::MarketPlaceType ? 'distribution' : 'appliance';
             $output .= $implementation->renderWith('DistributionsDirectoryPage_ImplementationBox', array('DistroLink' => $this->Link("distribution"), 'ApplianceLink' => $this->Link("appliance")));
         }
     } catch (Exception $ex) {
         return $this->httpError(500, 'Server Error');
     }
     return empty($output) ? $this->httpError(404, '') : $output;
 }
コード例 #7
0
 public function getConsultants()
 {
     $product_name = trim(Convert::raw2sql($this->request->getVar('name')));
     $company_id = intval($this->request->getVar('company_id'));
     $sort = $this->request->getVar('sort');
     $query = new QueryObject(new CompanyService());
     $query_draft = new QueryObject(new CompanyServiceDraft());
     $query_draft->addAndCondition(QueryCriteria::equal('LiveServiceID', 0));
     //only drafts without live version
     $query->addAlias(QueryAlias::create('Company'));
     $query_draft->addAlias(QueryAlias::create('Company'));
     if (!empty($product_name)) {
         $query->addOrCondition(QueryCriteria::like('CompanyService.Name', $product_name));
         $query->addOrCondition(QueryCriteria::like('Company.Name', $product_name));
         $query_draft->addOrCondition(QueryCriteria::like('CompanyService.Name', $product_name));
         $query_draft->addOrCondition(QueryCriteria::like('Company.Name', $product_name));
     }
     if ($company_id > 0) {
         $query->addAndCondition(QueryCriteria::equal('Company.ID', $company_id));
         $query_draft->addAndCondition(QueryCriteria::equal('Company.ID', $company_id));
     }
     //set sorting
     if (!empty($sort)) {
         $dir = $this->getSortDir('consultants');
         $this->sortCompanyService($query, $sort, $dir);
         $this->sortCompanyService($query_draft, $sort, $dir);
     }
     //get consultants
     list($list1, $size1) = $this->consultant_repository->getAll($query, 0, 1000);
     list($list2, $size2) = $this->consultant_draft_repository->getAll($query_draft, 0, 1000);
     //return on view model
     return new ArrayList(array_merge($list1, $list2));
 }
コード例 #8
0
    /**
     * @param SS_HTTPRequest $request
     * @param string $template_class
     * @param string $ss_tpl_name
     * @return array
     */
    private function buildList(SS_HTTPRequest $request, $template_class = 'SurveyTemplate', $ss_tpl_name = 'SurveyBuilderListSurveys')
    {
        Requirements::javascript('themes/openstack/javascript/querystring.jquery.js');
        Requirements::javascript('survey_builder/js/survey.sangria.surveys.list.filter.js');
        $query_templates = new QueryObject(new SurveyTemplate());
        $query_templates->addAndCondition(QueryCriteria::equal('ClassName', $template_class));
        list($templates, $count) = $this->survey_template_repository->getAll($query_templates, 0, PHP_INT_MAX);
        $page = intval($request->getVar('page'));
        $survey_template_id = intval($request->getVar('survey_template_id'));
        $question_id = intval($request->getVar('question_id'));
        $question_value = Convert::raw2sql($request->getVar('question_value'));
        $question_value2 = Convert::raw2sql($request->getVar('question_value2'));
        $question_value = !empty($question_value) ? $question_value : $question_value2;
        $order = Convert::raw2sql($request->getVar('order'));
        $order_dir = Convert::raw2sql($request->getVar('dir'));
        if ($page === 0) {
            $page = 1;
        }
        $offset = ($page - 1) * self::SurveysPageSize;
        $sort_fields = ['id' => 'ID', 'created' => 'Created', 'updated' => 'LastEdited'];
        $query_surveys = new QueryObject(new Survey());
        $selected_template = $survey_template_id > 0 ? $this->survey_template_repository->getById($survey_template_id) : $templates[0];
        if ($survey_template_id === 0) {
            Controller::curr()->redirect($request->getURL(true) . '?survey_template_id=' . $selected_template->ID);
        }
        $query_surveys->addAndCondition(QueryCriteria::id('Survey.TemplateID', $selected_template->getIdentifier()))->addAndCondition(QueryCriteria::id('Survey.IsTest', 0));
        if ($question_id > 0 && !empty($question_value)) {
            // filter by question ...
            $query_surveys->addAlias(QueryAlias::create('Steps')->addAlias(QueryAlias::create('Answers')->addAlias(QueryAlias::create('Question'))));
            $query_surveys->addAndCondition(QueryCompoundCriteria::compoundAnd([QueryCriteria::id('SurveyQuestionTemplate.ID', $question_id), QueryCriteria::like('SurveyAnswer.Value', $question_value)]));
        }
        if (empty($order)) {
            $query_surveys->addOrder(QueryOrder::asc('ID'));
        } else {
            if ($order_dir === 'ASC') {
                $query_surveys->addOrder(QueryOrder::asc($sort_fields[$order]));
            } else {
                $query_surveys->addOrder(QueryOrder::desc($sort_fields[$order]));
            }
        }
        list($surveys, $count_surveys) = $this->survey_repository->getAll($query_surveys, $offset, self::SurveysPageSize);
        // build pager
        $pages = '';
        $max_page = intval(ceil($count_surveys / self::SurveysPageSize));
        for ($i = 1; $i < $max_page; $i++) {
            $pages .= sprintf("<li %s ><a href=\"%s?%s\">%s</a></li>", $page === $i ? "class=\"active\"" : "", $this->owner->Link($ss_tpl_name), $this->getPagerLink($i), $i);
        }
        $pager = <<<HTML
<nav>
    <ul class="pagination pagination-sm">
        {$pages}
    </ul>
</nav>
HTML;
        $result = ['Templates' => new ArrayList($templates), 'Surveys' => new ArrayList($surveys), 'Questions' => new ArrayList($selected_template->getAllFilterableQuestions()), 'Pager' => $pager];
        return $result;
    }