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'];
         $region = @$search_params['region_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) || !empty($region)) {
             $query->addAlias(QueryAlias::create('ServicesOffered'));
             if (!empty($service)) {
                 $query->addAndCondition(QueryCriteria::like("ConsultantServiceOfferedType.Type", $service));
             }
             if (!empty($region)) {
                 $region_id = Region::get()->filter('Name', $region)->first()->ID;
                 $query->addAndCondition(QueryCriteria::id("Consultant_ServicesOffered.RegionID", $region_id));
             }
         }
         if (is_array($location) && !empty($location[0])) {
             $query->addAlias(QueryAlias::create('Offices'));
             $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;
 }
 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($this->getCloudTypeClass());
         $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)) {
             $service = explode('-', $service);
             $query->addAlias(QueryAlias::create('Capabilities')->addAlias(QueryAlias::create('ReleaseSupportedApiVersion')->addAlias(QueryAlias::create('OpenStackComponent'))));
             $query->addAndCondition(QueryCompoundCriteria::compoundOr(array(QueryCriteria::like('OpenStackComponent.Name', trim($service[0])), QueryCriteria::like('OpenStackComponent.CodeName', trim($service[1])))));
         }
         $query->addAlias(QueryAlias::create('DataCenters', QueryAlias::LEFT));
         if (is_array($location) && !empty($location[0])) {
             $query->addAndCondition(QueryCriteria::like("DataCenterLocation.City", trim($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("DataCenterLocation.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("DataCenterLocation.Country", $countries[$country]));
                 }
                 if (!empty($state)) {
                     $query->addAndCondition(QueryCriteria::like("DataCenterLocation.State", $state));
                 }
             }
         }
         list($list, $size) = $this->cloud_repository->getAll($query, 0, 1000);
         foreach ($list as $public_cloud) {
             $output .= $public_cloud->renderWith('CloudsDirectoryPage_CloudBox', array('CloudLink' => $this->Link()));
         }
     } catch (Exception $ex) {
         return $this->httpError(500, 'Server Error');
     }
     return empty($output) ? $this->httpError(404, '') : $output;
 }
 public function getDistributions()
 {
     if (!$this->canAdmin('implementations')) {
         return $this->httpError(401, 'Unauthorized: you do not have the proper rights to access this page.');
     }
     $product_name = trim(Convert::raw2sql($this->request->getVar('name')));
     $implementation_type_id = intval($this->request->getVar('implementation_type_id'));
     $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));
     if (!empty($product_name)) {
         $query->addAndCondition(QueryCriteria::like('Name', $product_name));
         $query_draft->addAndCondition(QueryCriteria::like('Name', $product_name));
     }
     if ($implementation_type_id > 0) {
         $query->addAndCondition(QueryCriteria::equal('MarketPlaceType.ID', $implementation_type_id));
         $query_draft->addAndCondition(QueryCriteria::equal('MarketPlaceType.ID', $implementation_type_id));
     }
     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('distributions');
         $this->sortCompanyService($query, $sort, $dir);
         $this->sortCompanyService($query_draft, $sort, $dir);
     }
     //get distributions
     $list1 = array();
     $list2 = array();
     $list3 = array();
     $list4 = array();
     if ($this->canAdmin('distributions')) {
         list($list1, $size1) = $this->distribution_repository->getAll($query, 0, 1000);
         list($list2, $size2) = $this->distribution_draft_repository->getAll($query_draft, 0, 1000);
     }
     if ($this->canAdmin('appliances')) {
         list($list3, $size3) = $this->appliance_repository->getAll($query, 0, 1000);
         list($list4, $size4) = $this->appliance_draft_repository->getAll($query_draft, 0, 1000);
     }
     //return on view model
     return new ArrayList(array_merge($list1, $list2, $list3, $list4));
 }
 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;
 }