function search() { // $this->requireLogin(); global $params; $params = $_REQUEST; global $MJob, $MStudent, $MCompany, $MRecruiter; // Function for processing results and showing them function process($res) { global $MCompany; // Processing results $jobs = array(); foreach ($res as $job) { $company = $MCompany->get($job['company']); $job['company'] = $company['name']; $job['desc'] = strmax($job['desc'], 300); $job['logophoto'] = $company['logophoto']; array_push($jobs, $job); } return $jobs; } // Predefined searches $showSearch = true; $showCompany = null; if (isset($_GET['byrecruiter'])) { $params = $this->dataSearchEmpty(); $params['recruiter'] = $_GET['byrecruiter']; $showSearch = false; } if (isset($_GET['bycompany'])) { $params = $this->dataSearchEmpty(); $params['company'] = $_GET['bycompany']; $showCompany = $MCompany->getByName($_GET['bycompany']); $showSearch = false; } if ($showSearch and !isset($params['search'])) { // If not searching for anything, then return last 6 entries $showMore = isset($_GET['showMore']); if ($showMore) { if (isset($_SESSION['showMoreJobs'])) { $_SESSION['showMoreJobs'] += 6; } else { $_SESSION['showMoreJobs'] = 12; } $showMore = $_SESSION['showMoreJobs']; } else { $_SESSION['showMoreJobs'] = 6; } $res = $MJob->last($_SESSION['showMoreJobs']); $jobs = process($res); $recent = count($jobs) < JobModel::getSize(); self::render('jobs/search/form', $this->dataSearchSetup()); self::render('jobs/search/results', array('jobs' => $jobs, 'recent' => $recent, 'search' => 'jobs', 'showMore' => $showMore)); return; } // Params to vars extract($data = $this->dataSearch($params)); // Validations $this->startValidations(); $this->validate(!MongoId::isValid($recruiter) or !is_null(RecruiterModel::getById(new MongoId($recruiter))), $err, 'unknown recruiter'); // Code if ($this->isValid()) { // Searching for companies $companyquery = array(); if (strlen($company) > 0) { $companyquery['name'] = array('$regex' => keywords2mregex($company)); } if (strlen($industry) > 0) { $companyquery['industry'] = array('$regex' => keywords2mregex($industry)); } if (strlen($city) > 0) { $companyquery['location'] = array('$regex' => keywords2mregex($city)); } $cs = $MCompany->find($companyquery); // Search query building $query = array(); if (strlen($recruiter) > 0) { $query['recruiter'] = new MongoId($recruiter); } if (strlen($title) > 0) { $query['title'] = array('$regex' => keywords2mregex($title)); } $companies = array(); foreach ($cs as $c) { array_push($companies, $c['_id']); } $query['company'] = array('$in' => $companies); // Performing search $res = $MJob->find($query); $jobs = process($res); if ($showSearch) { self::render('jobs/search/form', $data); } self::render('jobs/search/results', array('jobs' => $jobs, 'showCompany' => $showCompany, 'search' => 'jobs')); // Send email notification of search to us // $this->sendrequestreport("Search for jobs:", $jobs); // Save search to db global $MApp; $MApp->recordSearch('jobs'); return; } $this->error($err); self::render('jobs/search/form', array_merge($data, array('search' => 'jobs'))); }