コード例 #1
0
 /**
  * Streams to the browser the provided array of objects as a basic Excel document
  * with headers.  if the objects have an associated Map class, then footers will be
  * added to sum any numeric fields.  otherwise no footers are added
  * 
  * Note that PEAR Spreadsheet_Excel_Writer must be installed
  * @link http://pear.php.net/package/Spreadsheet_Excel_Writer
  * 
  * @param Array an array of Phreezable objects, obtained for example, using DataSet->ToObjectArray
  * @param Phreezer $phreezer is needed to get field maps
  * @param string (optional) The title of the report
  */
 static function OutputAsExcel(array $objects, Phreezer $phreezer, $reportTitle = "Data Export", $fileName = "export.xls")
 {
     require_once 'Spreadsheet/Excel/Writer.php';
     // create the workbook and worksheet
     $workbook = new Spreadsheet_Excel_Writer();
     $worksheet = $workbook->addWorksheet("Export");
     $BOLD_MED =& $workbook->addFormat();
     $BOLD_MED->setSize(16);
     $BOLD_MED->SetBold();
     $BOLD_REG =& $workbook->addFormat();
     $BOLD_REG->setSize(11);
     $BOLD_REG->SetBold();
     $NORMAL =& $workbook->addFormat();
     $NORMAL->setSize(11);
     $CURRENCY =& $workbook->addFormat();
     $CURRENCY->setNumFormat('0.00');
     $CURRENCY->setSize(11);
     $CURRENCY->setAlign('right');
     $worksheet->writeString(0, 0, $reportTitle, $BOLD_MED);
     // default to no columns
     $fields = array();
     $columns = array();
     $is_numeric = array();
     $fieldmap_exists = false;
     // print the headers
     // while we're looping, also parse the fields so we don't have to do
     // it repeatedly when looping through data
     if (isset($objects[0])) {
         try {
             // see if there is a fieldmap for this object
             $fields = $phreezer->GetFieldMaps(get_class($objects[0]));
             $fieldmap_exists = true;
             // these are the columns we'll use for enumeration from here on
             $columns = array_keys($fields);
         } catch (Exception $ex) {
             // no fieldmaps exist, so use the reflection class instead
             $reflect = new ReflectionClass($objects[0]);
             $publicAttributes = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
             $staticAttributes = $reflect->getStaticProperties();
             // only include non-static public properties
             $props = array_diff($publicAttributes, $staticAttributes);
             foreach ($props as $prop) {
                 $column = $prop->getName();
                 $columns[] = $column;
             }
         }
         $current_column = 0;
         foreach ($columns as $column) {
             // save this so we don't check it every time when looping through data
             $is_numeric[$column] = $fieldmap_exists ? $fields[$column]->IsNumeric() : false;
             $worksheet->writeString(2, $current_column, $column, $BOLD_REG);
             $current_column++;
         }
     }
     $current_row = 3;
     // loop through all of the data
     foreach ($objects as $object) {
         $current_column = 0;
         foreach ($columns as $column) {
             if ($fieldmap_exists == false || $is_numeric[$column] == true) {
                 $worksheet->write($current_row, $current_column, $object->{$column}, $NORMAL);
             } else {
                 $worksheet->writeString($current_row, $current_column, $object->{$column}, $NORMAL);
             }
             $current_column++;
         }
         $current_row++;
     }
     // lastly write to the footer to sum the numeric columns
     $current_column = 0;
     foreach ($columns as $column) {
         if ($is_numeric[$column]) {
             $columnLetter = ExportUtility::GetColumnLetter($current_column);
             $formula = "=SUM(" . $columnLetter . "3:" . $columnLetter . ($current_row - 1) . ")";
             // notice the @ sign in front because this will fire a deprecated warning due to use of "split"
             @$worksheet->write($current_row, $current_column, $formula, $BOLD_REG);
         }
         $current_column++;
     }
     $workbook->send($fileName);
     // this has errors suppressed due to strict mode
     @$workbook->close();
 }
コード例 #2
0
ファイル: CompaniesUI.php プロジェクト: rankinp/OpenCATS
 private function onSearch()
 {
     $wildCardCompanyName = '';
     $wildCardKeyTechnologies = '';
     /* Bail out to prevent an error if the GET string doesn't even contain
      * a field named 'wildCardString' at all.
      */
     if (!isset($_GET['wildCardString'])) {
         $this->listByView('No wild card string specified.');
         return;
     }
     $query = trim($_GET['wildCardString']);
     /* Set up sorting. */
     if ($this->isRequiredIDValid('page', $_GET)) {
         $currentPage = $_GET['page'];
     } else {
         $currentPage = 1;
     }
     $searchPager = new SearchPager(CANDIDATES_PER_PAGE, $currentPage, $this->_siteID, $_GET);
     if ($searchPager->isSortByValid('sortBy', $_GET)) {
         $sortBy = $_GET['sortBy'];
     } else {
         $sortBy = 'name';
     }
     if ($searchPager->isSortDirectionValid('sortDirection', $_GET)) {
         $sortDirection = $_GET['sortDirection'];
     } else {
         $sortDirection = 'ASC';
     }
     $baseURL = CATSUtility::getFilteredGET(array('sortBy', 'sortDirection', 'page'), '&');
     $searchPager->setSortByParameters($baseURL, $sortBy, $sortDirection);
     if (!eval(Hooks::get('CLIENTS_ON_SEARCH_PRE'))) {
         return;
     }
     /* Get our current searching mode. */
     $mode = $this->getTrimmedInput('mode', $_GET);
     /* Execute the search. */
     $search = new SearchCompanies($this->_siteID);
     switch ($mode) {
         case 'searchByName':
             $wildCardCompanyName = $query;
             $rs = $search->byName($query, $sortBy, $sortDirection);
             break;
         case 'searchByKeyTechnologies':
             $wildCardKeyTechnologies = $query;
             $rs = $search->byKeyTechnologies($query, $sortBy, $sortDirection);
             break;
         default:
             $this->listByView('Invalid search mode.');
             return;
             break;
     }
     foreach ($rs as $rowIndex => $row) {
         if ($row['isHot'] == 1) {
             $rs[$rowIndex]['linkClass'] = 'jobLinkHot';
         } else {
             $rs[$rowIndex]['linkClass'] = 'jobLinkCold';
         }
         if (!empty($row['ownerFirstName'])) {
             $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName($row['ownerFirstName'], $row['ownerLastName'], false, LAST_NAME_MAXLEN);
         } else {
             $rs[$rowIndex]['ownerAbbrName'] = 'None';
         }
     }
     $companyIDs = implode(',', ResultSetUtility::getColumnValues($rs, 'companyID'));
     $exportForm = ExportUtility::getForm(DATA_ITEM_COMPANY, $companyIDs, 40, 15);
     /* Save the search. */
     $savedSearches = new SavedSearches($this->_siteID);
     $savedSearches->add(DATA_ITEM_COMPANY, $query, $_SERVER['REQUEST_URI'], false);
     $savedSearchRS = $savedSearches->get(DATA_ITEM_COMPANY);
     $query = urlencode(htmlspecialchars($query));
     if (!eval(Hooks::get('CLIENTS_ON_SEARCH_POST'))) {
         return;
     }
     $this->_template->assign('savedSearchRS', $savedSearchRS);
     $this->_template->assign('active', $this);
     $this->_template->assign('subActive', 'Search Companies');
     $this->_template->assign('exportForm', $exportForm);
     $this->_template->assign('pager', $searchPager);
     $this->_template->assign('rs', $rs);
     $this->_template->assign('isResultsMode', true);
     $this->_template->assign('wildCardCompanyName', $wildCardCompanyName);
     $this->_template->assign('wildCardString', $query);
     $this->_template->assign('wildCardKeyTechnologies', $wildCardKeyTechnologies);
     $this->_template->assign('mode', $mode);
     $this->_template->display('./modules/companies/Search.tpl');
 }
コード例 #3
0
 /**
  * Streams to the browser the provided array of objects as a basic Excel document
  * with headers.  if the objects have an associated Map class, then footers will be
  * added to sum any numeric fields.  otherwise no footers are added
  * 
  * Note that PEAR PHPExcel must be installed
  * @link https://phpexcel.codeplex.com/
  * 
  * @param Array an array of Phreezable objects, obtained for example, using DataSet->ToObjectArray
  * @param Phreezer $phreezer is needed to get field maps
  * @param string (optional) The title of the report
  */
 static function OutputAsExcel(array $objects, Phreezer $phreezer, $reportTitle = "Data Export", $fileName = "export.xls", $creator = "Phreeze Library")
 {
     require_once "PEAR/PHPExcel.php";
     // create the workbook and worksheet
     $workbook = new PHPExcel();
     // set workbook properties
     $workbook->getProperties()->setCreator($creator)->setTitle($fileName);
     $workbook->setActiveSheetIndex(0);
     $worksheet = $workbook->getActiveSheet();
     $current_column = "A";
     $current_row = 1;
     $worksheet->setCellValue($current_column . $current_row, $reportTitle);
     $worksheet->getStyle($current_column . $current_row)->getFont()->setBold(true)->setSize(16);
     $worksheet->getStyle($current_column . $current_row)->getFont()->setName('Arial');
     // default to no columns
     $fields = array();
     $columns = array();
     $is_numeric = array();
     $fieldmap_exists = false;
     $current_row = 3;
     // print the headers
     // while we're looping, also parse the fields so we don't have to do
     // it repeatedly when looping through data
     if (isset($objects[0])) {
         try {
             // see if there is a fieldmap for this object
             $fields = $phreezer->GetFieldMaps(get_class($objects[0]));
             $fieldmap_exists = true;
             // these are the columns we'll use for enumeration from here on
             $columns = array_keys($fields);
         } catch (Exception $ex) {
             // no fieldmaps exist, so use the reflection class instead
             $reflect = new ReflectionClass($objects[0]);
             $publicAttributes = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
             $staticAttributes = $reflect->getStaticProperties();
             // only include non-static public properties
             $props = array_diff($publicAttributes, $staticAttributes);
             foreach ($props as $prop) {
                 $column = $prop->getName();
                 $columns[] = $column;
             }
         }
         foreach ($columns as $column) {
             // save this so we don't check it every time when looping through data
             $is_numeric[$column] = $fieldmap_exists ? $fields[$column]->IsNumeric() : false;
             $worksheet->setCellValue($current_column . $current_row, $column);
             $worksheet->getStyle($current_column . $current_row)->getFont()->setBold(true)->setSize(11);
             $worksheet->getStyle($current_column . $current_row)->getFont()->setName('Arial');
             $current_column++;
         }
     }
     $current_row = 4;
     // loop through all of the data
     foreach ($objects as $object) {
         $current_column = "A";
         foreach ($columns as $column) {
             if ($fieldmap_exists == false || $is_numeric[$column] == true) {
                 $worksheet->setCellValue($current_column . $current_row, $object->{$column});
             } else {
                 $worksheet->setCellValue($current_column . $current_row, $object->{$column});
             }
             $current_column++;
         }
         $current_row++;
     }
     // lastly write to the footer to sum the numeric columns
     $col = 0;
     foreach ($columns as $column) {
         if ($is_numeric[$column]) {
             $columnLetter = ExportUtility::GetColumnLetter($current_column);
             $formula = "=SUM(" . $columnLetter . "3:" . $columnLetter . ($current_row - 1) . ")";
             // notice the @ sign in front because this will fire a deprecated warning due to use of "split"
             @$worksheet->setCellValue($current_row, $current_column, $formula);
             $worksheet->getStyle($current_column . $current_row)->getFont()->setBold(true);
             $worksheet->getStyle($current_column . $current_row)->getFont()->setName('Arial');
         }
         $current_column++;
     }
     $workbook->getDefaultStyle()->getFont()->setName('Arial')->setSize(11);
     $workbook->setActiveSheetIndex(0);
     $writer = PHPExcel_IOFactory::createWriter($workbook, 'Excel5');
     // set headers to excel:
     header('Content-type: application/vnd.ms-excel');
     header('Content-Disposition: attachment; filename="' . $fileName . '"');
     header('Cache-Control: max-age=0');
     $writer->save('php://output');
 }
コード例 #4
0
ファイル: JobOrdersUI.php プロジェクト: Hassanj343/candidats
    public function onSearch()
    {
        $query_jobTitle = '';
        $query_companyName = '';

        /* Bail out to prevent an error if the GET string doesn't even contain
         * a field named 'wildCardString' at all.
         */
        if (!isset($_GET['wildCardString']))
        {
            $this->listByView('No wild card string specified.');
            return;
        }

        $query = trim($_GET['wildCardString']);

        /* Set up sorting. */
        if ($this->isRequiredIDValid('page', $_GET))
        {
            $currentPage = $_GET['page'];
        }
        else
        {
            $currentPage = 1;
        }

        $searchPager = new SearchPager(
            CANDIDATES_PER_PAGE, $currentPage, $this->_siteID, $_GET
        );

        if ($searchPager->isSortByValid('sortBy', $_GET))
        {
            $sortBy = $_GET['sortBy'];
        }
        else
        {
            $sortBy = 'title';
        }

        if ($searchPager->isSortDirectionValid('sortDirection', $_GET))
        {
            $sortDirection = $_GET['sortDirection'];
        }
        else
        {
            $sortDirection = 'ASC';
        }

        $baseURL = CATSUtility::getFilteredGET(
            array('sortBy', 'sortDirection', 'page'), '&'
        );
        $searchPager->setSortByParameters($baseURL, $sortBy, $sortDirection);

        /* Get our current searching mode. */
        $mode = $this->getTrimmedInput('mode', $_GET);

        /* Execute the search. */
        $search = new SearchJobOrders($this->_siteID);
        switch ($mode)
        {
            case 'searchByJobTitle':
                $query_jobTitle = $query;
                $rs = $search->byTitle($query, $sortBy, $sortDirection, false);
                break;

            case 'searchByCompanyName':
                $query_companyName = $query;
                $rs = $search->byCompanyName($query, $sortBy, $sortDirection, false);
                break;

            default:
                $this->listByView('Invalid search mode.');
                return;
                break;
        }

        foreach ($rs as $rowIndex => $row)
        {
            /* Convert '00-00-00' dates to empty strings. */
            $rs[$rowIndex]['startDate'] = DateUtility::fixZeroDate(
                $row['startDate']
            );

            if ($row['isHot'] == 1)
            {
                $rs[$rowIndex]['linkClass'] = 'jobLinkHot';
            }
            else
            {
                $rs[$rowIndex]['linkClass'] = 'jobLinkCold';
            }

            $rs[$rowIndex]['recruiterAbbrName'] = StringUtility::makeInitialName(
                $row['recruiterFirstName'],
                $row['recruiterLastName'],
                false,
                LAST_NAME_MAXLEN
            );

            $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName(
                $row['ownerFirstName'],
                $row['ownerLastName'],
                false,
                LAST_NAME_MAXLEN
            );
        }

        /* Save the search. */
        $savedSearches = new SavedSearches($this->_siteID);
        $savedSearches->add(
            DATA_ITEM_JOBORDER,
            $query,
            $_SERVER['REQUEST_URI'],
            false
        );

        $savedSearchRS = $savedSearches->get(DATA_ITEM_JOBORDER);

        $query = urlencode(htmlspecialchars($query));

        $jobOderIDs = implode(',', ResultSetUtility::getColumnValues($rs, 'jobOrderID'));
        $exportForm = ExportUtility::getForm(
            DATA_ITEM_JOBORDER, $jobOderIDs, 29, 5
        );

        $this->_template->assign('active', $this);
        $this->_template->assign('subActive', 'Search Job Orders');
        $this->_template->assign('pager', $searchPager);
        $this->_template->assign('exportForm', $exportForm);

        $this->_template->assign('wildCardString', $query);
        $this->_template->assign('wildCardString_jobTitle', $query_jobTitle);
        $this->_template->assign('wildCardString_companyName', $query_companyName);
        $this->_template->assign('savedSearchRS', $savedSearchRS);
        $this->_template->assign('rs', $rs);
        $this->_template->assign('isResultsMode', true);
        $this->_template->assign('mode', $mode);

        if (!eval(Hooks::get('JO_ON_SEARCH'))) return;

        $this->_template->display('./modules/joborders/Search.php');
    }
コード例 #5
0
 private function onSearch()
 {
     /* Bail out to prevent an error if the GET string doesn't even contain
      * a field named 'wildCardString' at all.
      */
     if (!isset($_GET['wildCardString'])) {
         $this->listByView('No wild card string specified.');
         return;
     }
     $query = trim($_GET['wildCardString']);
     /* Initialize stored wildcard strings to safe default values. */
     $resumeWildCardString = '';
     $keySkillsWildCardString = '';
     $phoneNumberWildCardString = '';
     $fullNameWildCardString = '';
     /* Set up sorting. */
     if ($this->isRequiredIDValid('page', $_GET)) {
         $currentPage = $_GET['page'];
     } else {
         $currentPage = 1;
     }
     $searchPager = new SearchPager(CANDIDATES_PER_PAGE, $currentPage, $this->_siteID);
     if ($searchPager->isSortByValid('sortBy', $_GET)) {
         $sortBy = $_GET['sortBy'];
     } else {
         $sortBy = 'lastName';
     }
     if ($searchPager->isSortDirectionValid('sortDirection', $_GET)) {
         $sortDirection = $_GET['sortDirection'];
     } else {
         $sortDirection = 'ASC';
     }
     $baseURL = CATSUtility::getFilteredGET(array('sortBy', 'sortDirection', 'page'), '&');
     $searchPager->setSortByParameters($baseURL, $sortBy, $sortDirection);
     $candidates = new Candidates($this->_siteID);
     /* Get our current searching mode. */
     $mode = $this->getTrimmedInput('mode', $_GET);
     /* Execute the search. */
     $search = new SearchCandidates($this->_siteID);
     switch ($mode) {
         case 'searchByFullName':
             $rs = $search->byFullName($query, $sortBy, $sortDirection);
             foreach ($rs as $rowIndex => $row) {
                 if (!empty($row['ownerFirstName'])) {
                     $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName($row['ownerFirstName'], $row['ownerLastName'], false, LAST_NAME_MAXLEN);
                 } else {
                     $rs[$rowIndex]['ownerAbbrName'] = 'None';
                 }
                 $rsResume = $candidates->getResumes($row['candidateID']);
                 if (isset($rsResume[0])) {
                     $rs[$rowIndex]['resumeID'] = $rsResume[0]['attachmentID'];
                 }
             }
             $isResumeMode = false;
             $fullNameWildCardString = $query;
             break;
         case 'searchByKeySkills':
             $rs = $search->byKeySkills($query, $sortBy, $sortDirection);
             foreach ($rs as $rowIndex => $row) {
                 if (!empty($row['ownerFirstName'])) {
                     $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName($row['ownerFirstName'], $row['ownerLastName'], false, LAST_NAME_MAXLEN);
                 } else {
                     $rs[$rowIndex]['ownerAbbrName'] = 'None';
                 }
                 $rsResume = $candidates->getResumes($row['candidateID']);
                 if (isset($rsResume[0])) {
                     $rs[$rowIndex]['resumeID'] = $rsResume[0]['attachmentID'];
                 }
             }
             $isResumeMode = false;
             $keySkillsWildCardString = $query;
             break;
         case 'searchByResume':
             $searchPager = new SearchByResumePager(20, $currentPage, $this->_siteID, $query, $sortBy, $sortDirection);
             $baseURL = 'm=candidates&a=search&getback=getback&mode=searchByResume&wildCardString=' . urlencode($query) . '&searchByResume=Search';
             $searchPager->setSortByParameters($baseURL, $sortBy, $sortDirection);
             $rs = $searchPager->getPage();
             $currentPage = $searchPager->getCurrentPage();
             $totalPages = $searchPager->getTotalPages();
             $pageStart = $searchPager->getThisPageStartRow() + 1;
             if ($searchPager->getThisPageStartRow() + 20 <= $searchPager->getTotalRows()) {
                 $pageEnd = $searchPager->getThisPageStartRow() + 20;
             } else {
                 $pageEnd = $searchPager->getTotalRows();
             }
             foreach ($rs as $rowIndex => $row) {
                 $rs[$rowIndex]['excerpt'] = SearchUtility::searchExcerpt($query, $row['text']);
                 if (!empty($row['ownerFirstName'])) {
                     $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName($row['ownerFirstName'], $row['ownerLastName'], false, LAST_NAME_MAXLEN);
                 } else {
                     $rs[$rowIndex]['ownerAbbrName'] = 'None';
                 }
             }
             $isResumeMode = true;
             $this->_template->assign('active', $this);
             $this->_template->assign('currentPage', $currentPage);
             $this->_template->assign('pageStart', $pageStart);
             $this->_template->assign('totalResults', $searchPager->getTotalRows());
             $this->_template->assign('pageEnd', $pageEnd);
             $this->_template->assign('totalPages', $totalPages);
             $resumeWildCardString = $query;
             break;
         case 'phoneNumber':
             $rs = $search->byPhone($query, $sortBy, $sortDirection);
             foreach ($rs as $rowIndex => $row) {
                 if (!empty($row['ownerFirstName'])) {
                     $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName($row['ownerFirstName'], $row['ownerLastName'], false, LAST_NAME_MAXLEN);
                 } else {
                     $rs[$rowIndex]['ownerAbbrName'] = 'None';
                 }
                 $rsResume = $candidates->getResumes($row['candidateID']);
                 if (isset($rsResume[0])) {
                     $rs[$rowIndex]['resumeID'] = $rsResume[0]['attachmentID'];
                 }
             }
             $isResumeMode = false;
             $phoneNumberWildCardString = $query;
             break;
         default:
             $this->listByView('Invalid search mode.');
             return;
             break;
     }
     $candidateIDs = implode(',', ResultSetUtility::getColumnValues($rs, 'candidateID'));
     $exportForm = ExportUtility::getForm(DATA_ITEM_CANDIDATE, $candidateIDs, 32, 9);
     if (!eval(Hooks::get('CANDIDATE_ON_SEARCH'))) {
         return;
     }
     /* Save the search. */
     $savedSearches = new SavedSearches($this->_siteID);
     $savedSearches->add(DATA_ITEM_CANDIDATE, $query, $_SERVER['REQUEST_URI'], false);
     $savedSearchRS = $savedSearches->get(DATA_ITEM_CANDIDATE);
     $this->_template->assign('savedSearchRS', $savedSearchRS);
     $this->_template->assign('exportForm', $exportForm);
     $this->_template->assign('active', $this);
     $this->_template->assign('rs', $rs);
     $this->_template->assign('pager', $searchPager);
     $this->_template->assign('isResultsMode', true);
     $this->_template->assign('isResumeMode', $isResumeMode);
     $this->_template->assign('wildCardString', $query);
     $this->_template->assign('resumeWildCardString', $resumeWildCardString);
     $this->_template->assign('keySkillsWildCardString', $keySkillsWildCardString);
     $this->_template->assign('fullNameWildCardString', $fullNameWildCardString);
     $this->_template->assign('phoneNumberWildCardString', $phoneNumberWildCardString);
     $this->_template->assign('mode', $mode);
     $this->_template->display('./modules/candidates/Search.tpl');
 }
コード例 #6
0
ファイル: CandidatesUI.php プロジェクト: Hassanj343/candidats
    public function onSearch($objSearchDS=null)
    {
        /* Bail out to prevent an error if the GET string doesn't even contain
         * a field named 'wildCardString' at all.
         */
        $arrInput=$_GET;
        if(!is_null($objSearchDS))
        {
            $arrInput=$objSearchDS->getAsArray();
        }
        if (!isset($arrInput['wildCardString']))
        {
            $this->listByView('No wild card string specified.');
            return;
        }

        $query = trim($arrInput['wildCardString']);

        /* Initialize stored wildcard strings to safe default values. */
        $resumeWildCardString      = '';
        $keySkillsWildCardString   = '';
        $phoneNumberWildCardString = '';
        $fullNameWildCardString    = '';

        /* Set up sorting. */
        if ($this->isRequiredIDValid('page', $arrInput))
        {
            $currentPage = $arrInput['page'];
        }
        else
        {
            $currentPage = 1;
        }

        $searchPager = new SearchPager(
            CANDIDATES_PER_PAGE, $currentPage, $this->_siteID
        );

        if ($searchPager->isSortByValid('sortBy', $arrInput))
        {
            $sortBy = $arrInput['sortBy'];
        }
        else
        {
            $sortBy = 'lastName';
        }

        if ($searchPager->isSortDirectionValid('sortDirection', $arrInput))
        {
            $sortDirection = $arrInput['sortDirection'];
        }
        else
        {
            $sortDirection = 'ASC';
        }
        
        $_siteID = $_SESSION['CATS']->getSiteID();;
        $_db = DatabaseConnection::getInstance();
        $sql="Select * from settings where setting='filtergrouping' and site_id='{$_siteID}'";
        $arrData=$_db->getAssoc($sql);
        $isFilterGrouping=false;
        if(isset($arrData["value"]) && $arrData["value"]>0)
        {
            $isFilterGrouping=true;
        }

        $baseURL = CATSUtility::getFilteredGET(
            array('sortBy', 'sortDirection', 'page'), '&amp;'
        );
        $searchPager->setSortByParameters($baseURL, $sortBy, $sortDirection);

        $candidates = new Candidates($this->_siteID);

        /* Get our current searching mode. */
        $mode = $this->getTrimmedInput('mode', $arrInput);

        /* Execute the search. */
        $search = new SearchCandidates($this->_siteID);
        switch ($mode)
        {
            case 'searchByFullName':
                $rs = $search->byFullName($query, $sortBy, $sortDirection);

                foreach ($rs as $rowIndex => $row)
                {
                    if (!empty($row['ownerFirstName']))
                    {
                        $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName(
                            $row['ownerFirstName'],
                            $row['ownerLastName'],
                            false,
                            LAST_NAME_MAXLEN
                        );
                    }
                    else
                    {
                        $rs[$rowIndex]['ownerAbbrName'] = 'None';
                    }

                    $rsResume = $candidates->getResumes($row['candidateID']);
                    if (isset($rsResume[0]))
                    {
                        $rs[$rowIndex]['resumeID'] = $rsResume[0]['attachmentID'];
                    }
                }

                $isResumeMode = false;

                $fullNameWildCardString = $query;
                break;

            case 'searchByKeySkills':
                $rs = $search->byKeySkills($query, $sortBy, $sortDirection);

                foreach ($rs as $rowIndex => $row)
                {
                    if (!empty($row['ownerFirstName']))
                    {
                        $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName(
                            $row['ownerFirstName'],
                            $row['ownerLastName'],
                            false,
                            LAST_NAME_MAXLEN
                        );
                    }
                    else
                    {
                        $rs[$rowIndex]['ownerAbbrName'] = 'None';
                    }

                    $rsResume = $candidates->getResumes($row['candidateID']);
                    if (isset($rsResume[0]))
                    {
                        $rs[$rowIndex]['resumeID'] = $rsResume[0]['attachmentID'];
                    }
                }

                $isResumeMode = false;

                $keySkillsWildCardString = $query;

                break;

            case 'searchByResume':
                $searchPager = new SearchByResumePager(
                    20,
                    $currentPage,
                    $this->_siteID,
                    $query,
                    $sortBy,
                    $sortDirection
                );

                $baseURL = 'm=candidates&amp;a=search&amp;getback=getback&amp;mode=searchByResume&amp;wildCardString='
                    . urlencode($query)
                    . '&amp;searchByResume=Search';
                if(isset($_REQUEST["fldfilter"]))
                foreach($_REQUEST["fldfilter"] as $ind=>$filter)
                {
                    $condition=$_REQUEST["condition"][$ind];
                    $data=$_REQUEST["data"][$ind];
                    $boolean=$_REQUEST["boolean"][$ind];
                    $baseURL=$baseURL."&fldfilter[{$ind}]={$filter}&condition[{$ind}]={$condition}";
                    $baseURL=$baseURL."&data[{$ind}]={$data}&boolean[{$ind}]={$boolean}";
                    if($isFilterGrouping)
                    {
                        $group=$_REQUEST["group"][$ind];
                        $baseURL=$baseURL."&group[{$ind}]={$group}";
                    }
                }
                $searchPager->setSortByParameters(
                    $baseURL, $sortBy, $sortDirection
                );

                $rs = $searchPager->getPage();

                $currentPage = $searchPager->getCurrentPage();
                $totalPages  = $searchPager->getTotalPages();

                $pageStart = $searchPager->getThisPageStartRow() + 1;

                if (($searchPager->getThisPageStartRow() + 20) <= $searchPager->getTotalRows())
                {
                    $pageEnd = $searchPager->getThisPageStartRow() + 20;
                }
                else
                {
                    $pageEnd = $searchPager->getTotalRows();
                }
                
                foreach ($rs as $rowIndex => $row)
                {
                    $rs[$rowIndex]['excerpt'] = SearchUtility::searchExcerpt(
                        $query, $row['text']
                    );

                    if (!empty($row['ownerFirstName']))
                    {
                        $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName(
                            $row['ownerFirstName'],
                            $row['ownerLastName'],
                            false,
                            LAST_NAME_MAXLEN
                        );
                    }
                    else
                    {
                        $rs[$rowIndex]['ownerAbbrName'] = 'None';
                    }
                }
                
                $isResumeMode = true;
                
                $this->_template->assign('active', $this);
                $this->_template->assign('currentPage', $currentPage);
                $this->_template->assign('pageStart', $pageStart);
                $this->_template->assign('totalResults', $searchPager->getTotalRows());
                $this->_template->assign('pageEnd', $pageEnd);
                $this->_template->assign('totalPages', $totalPages);

                $resumeWildCardString = $query;
                break;

            case 'phoneNumber':
                $rs = $search->byPhone($query, $sortBy, $sortDirection);

                foreach ($rs as $rowIndex => $row)
                {
                    if (!empty($row['ownerFirstName']))
                    {
                        $rs[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName(
                            $row['ownerFirstName'],
                            $row['ownerLastName'],
                            false,
                            LAST_NAME_MAXLEN
                        );
                    }
                    else
                    {
                        $rs[$rowIndex]['ownerAbbrName'] = 'None';
                    }

                    $rsResume = $candidates->getResumes($row['candidateID']);
                    if (isset($rsResume[0]))
                    {
                        $rs[$rowIndex]['resumeID'] = $rsResume[0]['attachmentID'];
                    }
                }

                $isResumeMode = false;

                $phoneNumberWildCardString = $query;
                break;

            default:
                $this->listByView('Invalid search mode.');
                return;
                break;
        }
        /**
         * if request comes from program return the id else process display
         */
        if(!is_null($objSearchDS))
        {
            return ResultSetUtility::getColumnValues($rs, 'candidateID');
        }
        $candidateIDs = implode(',', ResultSetUtility::getColumnValues($rs, 'candidateID'));
        
        $exportForm = ExportUtility::getForm(
            DATA_ITEM_CANDIDATE, $candidateIDs, 32, 9
        );

        if (!eval(Hooks::get('CANDIDATE_ON_SEARCH'))) return;

        /* Save the search. */
        $savedSearches = new SavedSearches($this->_siteID);
        $savedSearches->add(
            DATA_ITEM_CANDIDATE,
            $query,
            $_SERVER['REQUEST_URI'],
            false
        );
        $savedSearchRS = $savedSearches->get(DATA_ITEM_CANDIDATE);

        $this->_template->assign('savedSearchRS', $savedSearchRS);
        $this->_template->assign('exportForm', $exportForm);
        $this->_template->assign('active', $this);
        $this->_template->assign('rs', $rs);
        $this->_template->assign('pager', $searchPager);
        $this->_template->assign('isResultsMode', true);
        $this->_template->assign('isResumeMode', $isResumeMode);
        $this->_template->assign('wildCardString', $query);
        $this->_template->assign('resumeWildCardString', $resumeWildCardString);
        $this->_template->assign('keySkillsWildCardString', $keySkillsWildCardString);
        $this->_template->assign('fullNameWildCardString', $fullNameWildCardString);
        $this->_template->assign('phoneNumberWildCardString', $phoneNumberWildCardString);
        $this->_template->assign('mode', $mode);
        $this->_template->display('./modules/candidates/Search.php');
    }