public function doMySearch()
    {
        $helper = new Helper();
        require_once 'models/table/Person.php';
        if (!$this->hasACL('view_people') and !$this->hasACL('edit_people')) {
            $this->doNoAccessError();
        }
        $criteria = array();
        list($criteria, $location_tier, $location_id) = $this->getLocationCriteriaValues($criteria);
        $criteria['facility_name'] = $this->getSanParam('facility_name');
        $criteria['facilityInput'] = $this->getSanParam('facilityInput');
        $criteria['first_name'] = $this->getSanParam('first_name');
        $criteria['last_name'] = $this->getSanParam('last_name');
        $criteria['training_title_option_id'] = $this->getSanParam('training_title_option_id');
        $criteria['persal'] = $this->getSanParam('persal');
        $criteria['person_type'] = $this->getSanParam('person_type');
        $criteria['is_complete'] = $this->getSanParam('is_complete');
        if (!$criteria['person_type']) {
            $criteria['person_type'] = 'is_participant';
        }
        // $criteria['type_id'] = $this->getSanParam('trainer_type_id');
        $criteria['qualification_id'] = $this->getSanParam('qualification_id');
        $criteria['outputType'] = $this->getSanParam('outputType');
        // $criteria['language_id'] = $this->getSanParam('trainer_language_id');
        $criteria['go'] = $this->getSanParam('go');
        if ($criteria['go']) {
            $db = Zend_Db_Table_Abstract::getDefaultAdapter();
            $num_locs = $this->setting('num_location_tiers');
            list($field_name, $location_sub_query) = Location::subquery($num_locs, $location_tier, $location_id, true);
            if ($criteria['person_type'] == 'is_everyone') {
                // left join instead of inner for everyone
                $sql = '
				SELECT DISTINCT p.id, p.last_name, p.middle_name, p.first_name, p.gender, p.birthdate, q.qualification_phrase, ' . implode(',', $field_name) . '
				,q.parent_id, (SELECT COUNT(`comp`.`id`) FROM `comp` WHERE `comp`.`person` = `p`.`id` AND `comp`.`active` = \'Y\') `cmp`,p.comments as "persal",IFNULL(cmpr.res,10) `res` FROM person as p
				LEFT JOIN person_qualification_option as q ON p.primary_qualification_option_id = q.id
				LEFT JOIN facility as f ON p.facility_id = f.id
				LEFT JOIN compres as cmpr ON cmpr.person = p.id AND cmpr.active=\'Y\'
				LEFT JOIN (' . $location_sub_query . ') as l ON f.location_id = l.id  ';
            } else {
                # removing from query, filtering happens on front-end
                #if($criteria ['is_complete']=='is_complete'){
                #	$sql = 'select DISTINCT p.id, p.last_name, p.middle_name, p.first_name, p.gender, p.birthdate, q.qualification_phrase, '.implode(',',$field_name).',q.parent_id, (SELECT COUNT(`comp`.`id`) FROM `comp` WHERE `comp`.`person` = `p`.`id` AND `comp`.`active` = \'Y\') `cmp`,p.comments as "persal", cmpr.res from person as p, person_qualification_option as q, facility as f, ('.$location_sub_query.') as l, compres as cmpr';
                #} else {
                $sql = 'select DISTINCT p.id, p.last_name, p.middle_name, p.first_name, p.gender, p.birthdate, q.qualification_phrase, ' . implode(',', $field_name) . ',q.parent_id, (SELECT COUNT(`comp`.`id`) FROM `comp` WHERE `comp`.`person` = `p`.`id` AND `comp`.`active` = \'Y\') `cmp`,p.comments as "persal", IFNULL((SELECT `res` FROM `compres` WHERE `compres`.`person` = `p`.`id` AND `compres`.`active` = \'Y\'),10) `res` from person as p, person_qualification_option as q, facility as f, (' . $location_sub_query . ') as l';
                #}
            }
            if ($criteria['person_type'] == 'is_participant') {
                $sql .= ', person_to_training as ptt ';
            }
            if ($criteria['person_type'] == 'is_trainer') {
                $sql .= ', trainer as trn';
                if ($criteria['training_title_option_id']) {
                    $sql .= ', training_to_trainer as ttt ';
                }
            }
            $where = array('p.is_deleted = 0');
            /* 'f.location_id = l.id'); */
            // bugfix - is shrinkings results
            if ($criteria['person_type'] != 'is_everyone') {
                // was left joined (see above)
                $where[] = 'p.primary_qualification_option_id = q.id and p.facility_id = f.id and f.location_id = l.id ';
            }
            $locationWhere = $this->getLocationCriteriaWhereClause($criteria, '', 'pt');
            if ($locationWhere) {
                $where[] = $locationWhere;
            }
            # removing from query, filtering happens on front-end
            #if($criteria ['is_complete']=='is_complete'){
            #	$where []= 'cmpr.person = p.id';
            #}
            if ($criteria['person_type'] == 'is_participant') {
                $where[] = 'p.id = ptt.person_id ';
            }
            if ($criteria['person_type'] == 'is_trainer') {
                $where[] = 'p.id = trn.person_id ';
            }
            if ($criteria['person_type'] == 'is_unattached_person') {
                $where[] = 'p.id NOT IN (SELECT person_id FROM trainer) AND  p.id NOT IN (SELECT person_id FROM person_to_training)  ';
            }
            if ($criteria['facilityInput']) {
                $where[] = ' p.facility_id = "' . $criteria['facilityInput'] . '"';
            }
            if ($criteria['training_title_option_id'] or $criteria['training_title_option_id'] === '0') {
                $sql .= ', training as tr  ';
                if ($criteria['person_type'] == 'is_participant') {
                    $where[] = ' p.id = ptt.person_id AND ptt.training_id = tr.id AND tr.training_title_option_id = ' . $criteria['training_title_option_id'] . ' ';
                }
                if ($criteria['person_type'] == 'is_trainer') {
                    $where[] = ' p.id = trn.person_id AND trn.person_id = ttt.trainer_id AND ttt.training_id = tr.id AND tr.training_title_option_id = ' . $criteria['training_title_option_id'] . ' ';
                }
            }
            if ($criteria['qualification_id'] or $criteria['qualification_id'] === '0') {
                $where[] = '(primary_qualification_option_id = ' . $criteria['qualification_id'] . ' OR primary_qualification_option_id IN (SELECT id FROM person_qualification_option WHERE parent_id = ' . $criteria['qualification_id'] . ')) ';
            }
            if ($criteria['first_name']) {
                $where[] = 'p.first_name LIKE "' . $criteria['first_name'] . '%"';
            }
            if ($criteria['last_name']) {
                $where[] = 'p.last_name LIKE "' . $criteria['last_name'] . '%"';
            }
            # removing from query, filtering happens on front-end
            #if($criteria ['is_complete']=='is_complete'){
            #	$where []= 'cmpr.active = \'Y\'';
            #}
            #if($criteria ['is_complete']=='is_complete'){
            #	$where []= 'cmpr.res = 0';
            #}
            if ($where) {
                $sql .= ' WHERE ' . implode(' AND ', $where);
            }
            $sql .= " ORDER BY " . " `p`.`last_name` ASC, " . " `p`.`first_name` ASC";
            #echo "Search query = " . $sql . "<br>";
            $rowArray = $db->fetchAll($sql);
            foreach ($rowArray as $key => $row) {
                if (strpos($rowArray[$key]['qualification_phrase'], "_Ot") == 1) {
                    $rowArray[$key]['qualification_phrase'] = substr($rowArray[$key]['qualification_phrase'], 2);
                }
                if (strpos(strrev($rowArray[$key]['qualification_phrase']), "_") == 1) {
                    $rowArray[$key]['qualification_phrase'] = strrev(substr(strrev($rowArray[$key]['qualification_phrase']), 2));
                }
            }
            $_arr = array();
            foreach ($rowArray as $key => $row) {
                $comps = $helper->getPersonCompetencies($row['id'], true);
                $row['comps'] = $comps;
                $_arr[$key] = $row;
            }
            $rowArray = $_arr;
            foreach ($rowArray as $key => $row) {
                $splt = split("§", $rowArray[$key]['persal']);
                if (strlen($splt[1]) > 0) {
                    $rowArray[$key]['persal'] = $splt[1];
                    if (strlen($criteria['persal']) > 0) {
                        if (strcasecmp($splt[1], $criteria['persal']) == 0) {
                        } else {
                            unset($rowArray[$key]);
                        }
                    }
                } else {
                    $rowArray[$key]['persal'] = '';
                }
            }
            if ($criteria['outputType']) {
                foreach ($rowArray as $key => $row) {
                    unset($rowArray[$key]['cmp']);
                    unset($rowArray[$key]['parent_id']);
                }
                $this->sendData($rowArray);
            }
            foreach ($rowArray as $key => $row) {
                if (isset($row['gender']) and $row['gender']) {
                    $rowArray[$key]['gender'] = t(trim($row['gender']));
                }
            }
            $this->viewAssignEscaped('results', $rowArray);
            $this->view->assign('count', count($rowArray));
        }
        $this->view->assign('criteria', $criteria);
        //locations
        $this->viewAssignEscaped('locations', Location::getAll());
        //training titles
        require_once 'models/table/TrainingTitleOption.php';
        $titleArray = TrainingTitleOption::suggestionList(false, 10000);
        $this->viewAssignEscaped('courses', $titleArray);
        //types
        $qualificationsArray = OptionList::suggestionListHierarchical('person_qualification_option', 'qualification_phrase', false, false);
        $this->viewAssignEscaped('qualifications', $qualificationsArray);
        //facilities list
        $rowArray = OptionList::suggestionList('facility', array('facility_name', 'id'), false, 9999);
        $facilitiesArray = array();
        foreach ($rowArray as $key => $val) {
            if ($val['id'] != 0) {
                $facilitiesArray[] = $val;
            }
        }
        $this->viewAssignEscaped('facilities', $facilitiesArray);
    }
    public function peopleNewPeopleAction()
    {
        $db = Zend_Db_Table_Abstract::getDefaultAdapter();
        $rows = $db->fetchAll('select
			person.*,qualification_phrase,facility.facility_name,location.location_name,user.username as created_by from person
			left join person_qualification_option on person_qualification_option.id = primary_qualification_option_id
			left join facility on facility_id = facility.id
			left join location on facility.location_id = location.id
			left join user on user.id=person.created_by
			where person.approved is null and person.is_deleted = 0');
        $this->viewAssignEscaped('primary_results', $rows);
        $go = $this->getSanParam('go');
        if ($go) {
            require_once 'PersonController.php';
            $c = new PersonController($this->getRequest(), $this->getResponse());
            $c->searchAction();
            $this->viewAssignEscaped('primary_results', $rows);
        }
        // fill form dropdowns
        $this->viewAssignEscaped('locations', Location::getAll());
        //training titles
        require_once 'models/table/TrainingTitleOption.php';
        $titleArray = TrainingTitleOption::suggestionList(false, 10000);
        $this->viewAssignEscaped('courses', $titleArray);
        //types
        $qualificationsArray = OptionList::suggestionListHierarchical('person_qualification_option', 'qualification_phrase', false, false);
        $this->viewAssignEscaped('qualifications', $qualificationsArray);
        //facilities list
        $rowArray = OptionList::suggestionList('facility', array('facility_name', 'id'), false, 9999);
        $facilitiesArray = array();
        foreach ($rowArray as $key => $val) {
            if ($val['id'] != 0) {
                $facilitiesArray[] = $val;
            }
        }
        $this->viewAssignEscaped('facilities', $facilitiesArray);
    }
 public function ssProfAction()
 {
     if (!$this->hasACL('view_people') and !$this->hasACL('edit_people')) {
         $this->doNoAccessError();
     }
     $criteria = array();
     list($criteria, $location_tier, $location_id) = $this->getLocationCriteriaValues($criteria);
     $criteria['facilityInput'] = $this->getSanParam('facilityInput');
     $criteria['training_title_option_id'] = $this->getSanParam('training_title_option_id');
     $criteria['qualification_id'] = $this->getSanParam('qualification_id');
     $criteria['ques'] = $this->getSanParam('ques');
     $criteria['go'] = $this->getSanParam('go');
     $criteria['all'] = $this->getSanParam('all');
     if ($criteria['go']) {
         #			var_dump ($_GET);
         #			exit;
         if ($criteria['all']) {
             $db = Zend_Db_Table_Abstract::getDefaultAdapter();
             $num_locs = $this->setting('num_location_tiers');
             list($field_name, $location_sub_query) = Location::subquery($num_locs, $location_tier, $location_id);
             $sql = 'select DISTINCT cmp.person, cmp.question, cmp.option from person as p, person_qualification_option as q, facility as f, (' . $location_sub_query . ') as l, comp as cmp, compres as cmpr';
             if ($criteria['training_title_option_id']) {
                 $sql .= ', person_to_training as ptt ';
                 $sql .= ', training as tr  ';
             }
             $where = array('p.is_deleted = 0');
             $where[] = 'cmpr.person = p.id';
             $where[] = 'cmp.person = p.id';
             $where[] = ' p.primary_qualification_option_id = q.id and p.facility_id = f.id and f.location_id = l.id ';
             if ($criteria['facilityInput']) {
                 $where[] = ' p.facility_id = "' . $criteria['facilityInput'] . '"';
             }
             if ($criteria['training_title_option_id']) {
                 $where[] = ' p.id = ptt.person_id AND ptt.training_id = tr.id AND tr.training_title_option_id = ' . $criteria['training_title_option_id'] . ' ';
             }
             $where[] = ' primary_qualification_option_id IN (SELECT id FROM person_qualification_option WHERE parent_id IN (6, 7, 8, 9) ) ';
             $where[] = 'cmpr.active = \'Y\'';
             $where[] = 'cmpr.res = 1';
             $where[] = 'cmp.active = \'Y\'';
             $sql .= ' WHERE ' . implode(' AND ', $where);
             die(__LINE__ . " - " . $sql);
             $rowArray = $db->fetchAll($sql);
             $qss = array();
             $nmss = array();
             $qss = split(",", "0,1,2,3,4,5,6,7");
             $nmss = split("~", "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,200~01,02,03,04,05,06,07,08,09~31,32,33,34,35,36,37,38~41,42,43,44,45~51,52,53,54,55,56,57,58,59,510,511,512,513,514,515,516,517,518~61,62,63,64,65,66,67~71,72,73,74,75,76,77,78,79,710,711~21,22,23");
             $ct;
             $ct = 0;
             $rssA = array();
             $rssB = array();
             $rssC = array();
             $rssD = array();
             $rssE = array();
             $ctt;
             foreach ($qss as $kys => $vls) {
                 $rssA[$ct] = 0;
                 $rssB[$ct] = 0;
                 $rssC[$ct] = 0;
                 $rssD[$ct] = 0;
                 $rssE[$ct] = 0;
                 $ctt = 0;
                 $wss = split(",", $nmss[$vls]);
                 foreach ($wss as $kyss => $vlss) {
                     foreach ($rowArray as $kss => $vss) {
                         if ($vlss . " " == $vss['question'] . " ") {
                             if ($vss['option'] == "A") {
                                 $rssA[$ct] = $rssA[$ct] + 1;
                             } else {
                                 if ($vss['option'] == "B") {
                                     $rssB[$ct] = $rssB[$ct] + 1;
                                 } else {
                                     if ($vss['option'] == "C") {
                                         $rssC[$ct] = $rssC[$ct] + 1;
                                     } else {
                                         if ($vss['option'] == "D") {
                                             $rssD[$ct] = $rssD[$ct] + 1;
                                         } else {
                                             if ($vss['option'] == "E") {
                                                 $rssE[$ct] = $rssE[$ct] + 1;
                                             }
                                         }
                                     }
                                 }
                             }
                             $ctt = $ctt + 1;
                         }
                     }
                 }
                 if ($ctt > 0) {
                     $rssA[$ct] = number_format($rssA[$ct] / $ctt * 100, 2);
                     $rssB[$ct] = number_format($rssB[$ct] / $ctt * 100, 2);
                     $rssC[$ct] = number_format($rssC[$ct] / $ctt * 100, 2);
                     $rssD[$ct] = number_format($rssD[$ct] / $ctt * 100, 2);
                     $rssE[$ct] = number_format($rssE[$ct] / $ctt * 100, 2);
                 }
                 $ct = $ct + 1;
             }
             $this->viewAssignEscaped('results', $rowArray);
             $this->viewAssignEscaped('rssA', $rssA);
             $this->viewAssignEscaped('rssB', $rssB);
             $this->viewAssignEscaped('rssC', $rssC);
             $this->viewAssignEscaped('rssD', $rssD);
             $this->viewAssignEscaped('rssE', $rssE);
         } else {
             $db = Zend_Db_Table_Abstract::getDefaultAdapter();
             $num_locs = $this->setting('num_location_tiers');
             list($field_name, $location_sub_query) = Location::subquery($num_locs, $location_tier, $location_id);
             $sql = 'select DISTINCT cmp.person, cmp.question, cmp.option from person as p, person_qualification_option as q, facility as f, (' . $location_sub_query . ') as l, comp as cmp, compres as cmpr';
             if ($criteria['training_title_option_id']) {
                 $sql .= ', person_to_training as ptt ';
                 $sql .= ', training as tr  ';
             }
             $where = array('p.is_deleted = 0');
             $whr = array();
             $where[] = 'cmpr.person = p.id';
             $where[] = 'cmp.person = p.id';
             $where[] = ' p.primary_qualification_option_id = q.id and p.facility_id = f.id and f.location_id = l.id ';
             if ($criteria['facilityInput']) {
                 $where[] = ' p.facility_id = "' . $criteria['facilityInput'] . '"';
             }
             if ($criteria['training_title_option_id']) {
                 $where[] = ' p.id = ptt.person_id AND ptt.training_id = tr.id AND tr.training_title_option_id = ' . $criteria['training_title_option_id'] . ' ';
             }
             $where[] = ' primary_qualification_option_id IN (SELECT id FROM person_qualification_option WHERE parent_id = ' . $criteria['qualification_id'] . ') ';
             $where[] = 'cmpr.active = \'Y\'';
             $where[] = 'cmpr.res = 1';
             $where[] = 'cmp.active = \'Y\'';
             $qry = "SELECT id FROM competencies_questions WHERE competencyid IN (" . implode(",", $_GET['competencyselect']) . ")";
             $questionresult = $db->fetchAll($qry);
             $_q = array();
             foreach ($questionresult as $qres) {
                 $_q[] = $qres['id'];
             }
             $whr[] = 'cmp.question IN (' . implode(",", $_q) . ')';
             #                if($criteria ['qualification_id']=="6"){
             #                    $whr []= 'cmp.question IN ('."'".str_replace(",","','",$this->getSanParam ( 'listcq' ))."'".')';
             #                }
             #                if($criteria ['qualification_id']=="7"){
             #                    $qs=split(",",$this->getSanParam ( 'ques' ));
             #                    $nms=split("~",$this->getSanParam ( 'listdq' ));
             #                    foreach ( $qs as $kys => $vls ) {
             #                        $whr []= 'cmp.question IN ('."'".str_replace(",","','",$nms[$vls])."'".')';
             #                    }
             #                }
             #                if($criteria ['qualification_id']=="8"){
             #                    $qs=split(",",$this->getSanParam ( 'ques' ));
             #                    $nms=split("~",$this->getSanParam ( 'listnq' ));
             #                    foreach ( $qs as $kys => $vls ) {
             #                        $whr []= 'cmp.question IN ('."'".str_replace(",","','",$nms[$vls])."'".')';
             #                    }
             #                }
             #                if($criteria ['qualification_id']=="9"){
             #                    $whr []= 'cmp.question IN ('."'".str_replace(",","','",$this->getSanParam ( 'listpq' ))."'".')';
             #                }
             if (!empty($where)) {
                 $sql .= ' WHERE ' . implode(' AND ', $where);
             }
             if (!empty($whr)) {
                 $sql .= ' AND (' . implode(' OR ', $whr) . ')';
             }
             //todo check everything same here!
             $rowArray = $db->fetchAll($sql);
             $qss = array();
             $nmss = array();
             if ($criteria['qualification_id'] == "6") {
                 $qss = split(",", $this->getSanParam('ques'));
                 $nmss = split("~", $this->getSanParam('listcq'));
             }
             if ($criteria['qualification_id'] == "7") {
                 $qss = split(",", $this->getSanParam('ques'));
                 $nmss = split("~", $this->getSanParam('listdq'));
             }
             if ($criteria['qualification_id'] == "8") {
                 $qss = split(",", $this->getSanParam('ques'));
                 $nmss = split("~", $this->getSanParam('listnq'));
             }
             if ($criteria['qualification_id'] == "9") {
                 $qss = split(",", $this->getSanParam('ques'));
                 $nmss = split("~", $this->getSanParam('listpq'));
             }
             $ct;
             $ct = 0;
             $rssA = array();
             $rssB = array();
             $rssC = array();
             $rssD = array();
             $rssE = array();
             $ctt;
             foreach ($qss as $kys => $vls) {
                 $rssA[$ct] = 0;
                 $rssB[$ct] = 0;
                 $rssC[$ct] = 0;
                 $rssD[$ct] = 0;
                 $rssE[$ct] = 0;
                 $ctt = 0;
                 $wss = split(",", $nmss[$vls]);
                 foreach ($wss as $kyss => $vlss) {
                     foreach ($rowArray as $kss => $vss) {
                         if ($vlss . " " == $vss['question'] . " ") {
                             if ($vss['option'] == "A") {
                                 $rssA[$ct] = $rssA[$ct] + 1;
                             } else {
                                 if ($vss['option'] == "B") {
                                     $rssB[$ct] = $rssB[$ct] + 1;
                                 } else {
                                     if ($vss['option'] == "C") {
                                         $rssC[$ct] = $rssC[$ct] + 1;
                                     } else {
                                         if ($vss['option'] == "D") {
                                             $rssD[$ct] = $rssD[$ct] + 1;
                                         } else {
                                             if ($vss['option'] == "E") {
                                                 $rssE[$ct] = $rssE[$ct] + 1;
                                             }
                                         }
                                     }
                                 }
                             }
                             $ctt = $ctt + 1;
                         }
                     }
                 }
                 if ($ctt > 0) {
                     $rssA[$ct] = number_format($rssA[$ct] / $ctt * 100, 2);
                     $rssB[$ct] = number_format($rssB[$ct] / $ctt * 100, 2);
                     $rssC[$ct] = number_format($rssC[$ct] / $ctt * 100, 2);
                     $rssD[$ct] = number_format($rssD[$ct] / $ctt * 100, 2);
                     $rssE[$ct] = number_format($rssE[$ct] / $ctt * 100, 2);
                 }
                 $ct = $ct + 1;
             }
             $this->viewAssignEscaped('results', $rowArray);
             $this->viewAssignEscaped('rssA', $rssA);
             $this->viewAssignEscaped('rssB', $rssB);
             $this->viewAssignEscaped('rssC', $rssC);
             $this->viewAssignEscaped('rssD', $rssD);
             $this->viewAssignEscaped('rssE', $rssE);
         }
     }
     $this->view->assign('criteria', $criteria);
     $this->viewAssignEscaped('locations', Location::getAll());
     require_once 'models/table/TrainingTitleOption.php';
     $titleArray = TrainingTitleOption::suggestionList(false, 10000);
     $this->viewAssignEscaped('courses', $titleArray);
     $qualificationsArray = OptionList::suggestionListHierarchical('person_qualification_option', 'qualification_phrase', false, false);
     $this->viewAssignEscaped('qualifications', $qualificationsArray);
     $rowArray = OptionList::suggestionList('facility', array('facility_name', 'id'), false, 9999);
     $facilitiesArray = array();
     foreach ($rowArray as $key => $val) {
         if ($val['id'] != 0) {
             $facilitiesArray[] = $val;
         }
     }
     $this->viewAssignEscaped('facilities', $facilitiesArray);
     $helper = new Helper();
     $this->viewAssignEscaped("competencies", $helper->getCompetencies());
     $this->viewAssignEscaped("compqualification", $helper->getQualificationCompetencies());
 }