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