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')));
 }