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 draft_pdf()
 {
     $html_inner = '';
     $marketplace_type = $this->request->param('MARKETPLACETYPE');
     $instance_id = intval($this->request->param('ID'));
     $base = Director::baseFolder();
     $query = new QueryObject();
     $query->addAndCondition(QueryCriteria::id('ID', $instance_id));
     switch (strtolower($marketplace_type)) {
         case 'distribution':
             $distribution = $this->distribution_draft_repository->getBy($query);
             if (!$distribution) {
                 throw new NotFoundEntityException('', '');
             }
             $render = new DistributionSapphireRender($distribution);
             $distribution->IsPreview = true;
             $html_inner = $render->pdf();
             $css = @file_get_contents($base . "/marketplace/code/ui/admin/css/pdf.css");
             break;
         case 'appliance':
             $appliance = $this->appliance_draft_repository->getBy($query);
             $appliance->IsPreview = true;
             $render = new ApplianceSapphireRender($appliance);
             $html_inner = $render->pdf();
             $css = @file_get_contents($base . "/marketplace/code/ui/admin/css/pdf.css");
             break;
         case 'public_cloud':
             $public_cloud = $this->public_clouds_draft_repository->getBy($query);
             $public_cloud->IsPreview = true;
             if (!$public_cloud) {
                 throw new NotFoundEntityException('', '');
             }
             $render = new PublicCloudSapphireRender($public_cloud);
             $html_inner = $render->pdf();
             $css = @file_get_contents($base . "/marketplace/code/ui/admin/css/pdf.css");
             break;
         case 'private_cloud':
             $private_cloud = $this->private_clouds_draft_repository->getBy($query);
             $private_cloud->IsPreview = true;
             $render = new PrivateCloudSapphireRender($private_cloud);
             $html_inner = $render->pdf();
             $css = @file_get_contents($base . "/marketplace/code/ui/admin/css/pdf.css");
             break;
         case 'consultant':
             $consultant = $this->consultant_draft_repository->getBy($query);
             if (!$consultant) {
                 throw new NotFoundEntityException('', '');
             }
             $consultant->IsPreview = true;
             $render = new ConsultantSapphireRender($consultant);
             $html_inner = $render->pdf();
             $css = @file_get_contents($base . "/marketplace/code/ui/admin/css/pdf.css");
             break;
         default:
             $this->httpError(404);
             break;
     }
     //create pdf
     $file = FileUtils::convertToFileName('preview') . '.pdf';
     $html_outer = sprintf("<html><head><style>%s</style></head><body><div class='container'>%s</div></body></html>", str_replace("@host", $base, $css), $html_inner);
     try {
         $html2pdf = new HTML2PDF('P', 'A4', 'en', true, 'UTF-8', array(15, 5, 15, 5));
         //$html2pdf->addFont('Open Sans', '', $base.'/themes/openstack/assets/fonts/PT-Sans/PTC75F-webfont.ttf');
         $html2pdf->setTestIsImage(false);
         $html2pdf->WriteHTML($html_outer);
         //clean output buffer
         ob_end_clean();
         $html2pdf->Output($file, "D");
     } catch (HTML2PDF_exception $e) {
         $message = array('errno' => '', 'errstr' => $e->__toString(), 'errfile' => 'UserStory.php', 'errline' => '', 'errcontext' => '');
         SS_Log::log($message, SS_Log::ERR);
         $this->httpError(404, 'There was an error on PDF generation!');
     }
 }
 /**
  * Test if current user can administrate a particular program
  * use should be training admin of program owner company
  * @param $training_id
  * @return bool
  */
 public function canEditTraining($training_id)
 {
     $managed_companies = $this->owner->ManagedCompanies();
     foreach ($managed_companies as $company) {
         $groups = $company->getAdminGroupsByMember($this->getIdentifier());
         if (is_null($groups) || count($groups) == 0) {
             continue;
         }
         if (array_key_exists(ITraining::MarketPlaceGroupSlug, $groups)) {
             $query = new QueryObject(new TrainingService());
             $query->addAndCondition(QueryCriteria::equal('ClassName', 'TrainingService'));
             $query->addAndCondition(QueryCriteria::id('ID', (int) $training_id));
             $training = $company->Services((string) $query);
             if ($training && count($training) > 0) {
                 return true;
             }
         }
     }
     return false;
 }
 /**
  * @return INews[]
  */
 public function getNewsByID($articleID)
 {
     $query = new QueryObject(new News());
     $query->addAndCondition(QueryCriteria::id('ID', $articleID));
     return $this->getBy($query);
 }
    /**
     * @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;
    }