public function editAction()
 {
     if (!$this->hasACL('edit_employee')) {
         $this->doNoAccessError();
     }
     $db = $this->dbfunc();
     $status = ValidationContainer::instance();
     $params = $this->getAllParams();
     $id = $params['id'];
     #// restricted access?? only show partners by organizers that we have the ACL to view
     #$org_allowed_ids = allowed_org_access_full_list($this);
     #if ($org_allowed_ids && $this->view->mode != 'add') { // doesnt have acl 'training_organizer_option_all'
     #	$validID = $db->fetchCol("SELECT partner.id FROM partner WHERE partner.id = $id AND partner.organizer_option_id in ($org_allowed_ids)"); // check for both
     #	if(empty($validID))
     #		$this->doNoAccessError ();
     #}
     if ($this->getRequest()->isPost()) {
         //validate then save
         $params['location_id'] = regionFiltersGetLastID('', $params);
         $params['dob'] = $this->_date_to_sql($params['dob']);
         $params['agreement_end_date'] = $this->_date_to_sql($params['agreement_end_date']);
         $params['transition_date'] = $this->_date_to_sql($params['transition_date']);
         $params['transition_complete_date'] = $this->_date_to_sql($params['transition_complete_date']);
         $params['site_id'] = $params['facilityInput'];
         $params['option_nationality_id'] = $params['lookup_nationalities_id'];
         $params['facility_type_option_id'] = $params['employee_site_type_option_id'];
         $status->checkRequired($this, 'first_name', t('Frist Name'));
         $status->checkRequired($this, 'last_name', t('Last Name'));
         $status->checkRequired($this, 'last_name', t('Name'));
         $status->checkRequired($this, 'dob', t('Name'));
         if ($this->setting('display_employee_nationality')) {
             $status->checkRequired($this, 'lookup_nationalities_id', t('Employee Nationality'));
         }
         $status->checkRequired($this, 'employee_qualification_option_id', t('Staff Cadre'));
         if ($this->setting('display_employee_salary')) {
             $status->checkRequired($this, 'salary', t('Salary'));
         }
         if ($this->setting('display_employee_benefits')) {
             $status->checkRequired($this, 'benefits', t('Benefits'));
         }
         if ($this->setting('display_employee_additional_expenses')) {
             $status->checkRequired($this, 'additional_expenses', t('Additional Expenses'));
         }
         if ($this->setting('display_employee_stipend')) {
             $status->checkRequired($this, 'stipend', t('Stipend'));
         }
         if ($this->setting('display_employee_partner')) {
             $status->checkRequired($this, 'partner_id', t('Partner'));
         }
         if ($this->setting('display_employee_sub_partner')) {
             $status->checkRequired($this, 'subpartner_id', t('Sub Partner'));
         }
         if ($this->setting('display_employee_intended_transition')) {
             $status->checkRequired($this, 'employee_transition_option_id', t('Intended Transition'));
         }
         if ($this->setting('display_employee_base') && !$params['employee_base_option_id'] || !$this->setting('display_employee_base')) {
             // either one is OK, javascript disables regions if base is on & has a value choice
             $status->checkRequired($this, 'province_id', t('Region A (Province)'));
         }
         if ($this->setting('display_employee_base')) {
             $status->checkRequired($this, 'employee_base_option_id', t('Employee Based at'));
         }
         if (!$status->hasError()) {
             $id = $this->_findOrCreateSaveGeneric('employee', $params);
             if (!$id) {
                 $status->setStatusMessage(t('That person could not be saved.'));
             } else {
                 # converted to optionlist, link table not needed TODO. marking for removal.
                 #MultiOptionList::updateOptions ( 'employee_to_role', 'employee_role_option', 'employee_id', $id, 'employee_role_option_id', $params['employee_role_option_id'] );
                 $status->setStatusMessage(t('The person was saved.'));
                 $this->_redirect("employee/edit/id/{$id}");
             }
         } else {
             $status->setStatusMessage(t('That person could not be saved.'));
         }
     }
     if ($id && !$status->hasError()) {
         // read data from db
         $sql = 'SELECT * FROM employee WHERE employee.id = ' . $id;
         $row = $db->fetchRow($sql);
         if ($row) {
             $params = $row;
         } else {
             $status->setStatusMessage(t('Error finding that record in the database.'));
         }
         $region_ids = Location::getCityInfo($params['location_id'], $this->setting('num_location_tiers'));
         $region_ids = Location::regionsToHash($region_ids);
         $params = array_merge($params, $region_ids);
         #$params['roles'] = $db->fetchCol("SELECT employee_role_option_id FROM employee_to_role WHERE employee_id = $id");
     }
     // assign form drop downs
     $params['dob'] = formhelperdate($params['dob']);
     $params['agreement_end_date'] = formhelperdate($params['agreement_end_date']);
     $params['transition_date'] = formhelperdate($params['transition_date']);
     $params['transition_complete_date'] = formhelperdate($params['transition_complete_date']);
     $params['courses'] = $this->getCourses($id);
     $params['lookup_nationalities_id'] = $params['option_nationality_id'];
     $params['employee_site_type_option_id'] = $params['facility_type_option_id'];
     $this->viewAssignEscaped('employee', $params);
     $validCHWids = $db->fetchCol("select id from employee_qualification_option qual\r\n\t\t\t\t\t\t\t\t\t\tinner join (select id as success from employee_qualification_option where qualification_phrase in ('Community Based Worker','Community Health Worker','NC02 -Community health workers')) parentIDs\r\n\t\t\t\t\t\t\t\t\t\ton (parentIDs.success = qual.id)");
     $this->view->assign('validCHWids', $validCHWids);
     $this->view->assign('expandCHWFields', !(array_search($params['employee_qualification_option_id'], $validCHWids) === false));
     // i.e $validCHWids.contains($employee[qualification])
     $this->view->assign('status', $status);
     $this->view->assign('pageTitle', $this->view->mode == 'add' ? t('Add Employee') : t('Edit Employee'));
     $this->viewAssignEscaped('locations', Location::getAll());
     $titlesArray = OptionList::suggestionList('person_title_option', 'title_phrase', false, 9999);
     $this->view->assign('titles', DropDown::render('title_option_id', $this->translation['Title'], $titlesArray, 'title_phrase', 'id', $params['title_option_id']));
     $this->view->assign('partners', DropDown::generateHtml('partner', 'partner', $params['partner_id'], false, $this->view->viewonly, false));
     $this->view->assign('subpartners', DropDown::generateHtml('partner', 'partner', $params['subpartner_id'], false, $this->view->viewonly, false, false, array('name' => 'subpartner_id'), true));
     $this->view->assign('bases', DropDown::generateHtml('employee_base_option', 'base_phrase', $params['employee_base_option_id']));
     $this->view->assign('site_types', DropDown::generateHtml('employee_site_type_option', 'site_type_phrase', $params['facility_type_option_id']));
     $this->view->assign('cadres', DropDown::generateHtml('employee_qualification_option', 'qualification_phrase', $params['employee_qualification_option_id']));
     $this->view->assign('categories', DropDown::generateHtml('employee_category_option', 'category_phrase', $params['employee_category_option_id'], false, $this->view->viewonly, false));
     $this->view->assign('fulltime', DropDown::generateHtml('employee_fulltime_option', 'fulltime_phrase', $params['employee_fulltime_option_id'], false, $this->view->viewonly, false));
     $this->view->assign('roles', DropDown::generateHtml('employee_role_option', 'role_phrase', $params['employee_role_option_id'], false, $this->view->viewonly, false));
     #$this->view->assign ( 'roles',       CheckBoxes::generateHtml ( 'employee_role_option', 'role_phrase', $this->view, $params['roles'] ) );
     $this->view->assign('transitions', DropDown::generateHtml('employee_transition_option', 'transition_phrase', $params['employee_transition_option_id'], false, $this->view->viewonly, false));
     $this->view->assign('transitions_complete', DropDown::generateHtml('employee_transition_option', 'transition_phrase', $params['employee_transition_complete_option_id'], false, $this->view->viewonly, false, false, array('name' => 'employee_transition_complete_option_id'), true));
     $helper = new Helper();
     $this->viewAssignEscaped('facilities', $helper->getFacilities());
     $this->view->assign('relationships', DropDown::generateHtml('employee_relationship_option', 'relationship_phrase', $params['employee_relationship_option_id'], false, $this->view->viewonly, false));
     $this->view->assign('referrals', DropDown::generateHtml('employee_referral_option', 'referral_phrase', $params['employee_referral_option_id'], false, $this->view->viewonly, false));
     $this->view->assign('provided', DropDown::generateHtml('employee_training_provided_option', 'training_provided_phrase', $params['employee_training_provided_option_id'], false, $this->view->viewonly, false));
     $employees = OptionList::suggestionList('employee', array('first_name', 'CONCAT(first_name, CONCAT(" ", last_name)) as name'), false, 99999);
     $this->view->assign('supervisors', DropDown::render('supervisor_id', $this->translation['Supervisor'], $employees, 'name', 'id', $params['supervisor_id']));
     $this->view->assign('nationality', DropDown::generateHtml('lookup_nationalities', 'nationality', $params['lookup_nationalities_id'], false, $this->view->viewonly, false));
     $this->view->assign('race', DropDown::generateHtml('person_race_option', 'race_phrase', $params['race_option_id'], false, $this->view->viewonly, false));
 }
 public function editAction()
 {
     if (!$this->hasACL('edit_employee')) {
         $this->doNoAccessError();
     }
     $db = $this->dbfunc();
     $status = ValidationContainer::instance();
     $params = $this->getAllParams();
     $id = $params['id'];
     #// restricted access?? only show partners by organizers that we have the ACL to view // - removed 5/1/13, they dont want this, its used by site-rollup (datashare), and user-restrict by org.
     #$org_allowed_ids = allowed_org_access_full_list($this); // doesnt have acl 'training_organizer_option_all'
     #$site_orgs = allowed_organizer_in_this_site($this); // for sites to host multiple training organizers on one domain
     #$siteOrgsClause = $site_orgs ? " AND partner.organizer_option_id IN ($site_orgs)" : "";
     #if ($org_allowed_ids && $this->view->mode != 'add') {
     #	$validID = $db->fetchCol("SELECT partner.id FROM partner WHERE partner.id = $id AND partner.organizer_option_id in ($org_allowed_ids) $siteOrgsClause");
     #	if(empty($validID))
     #		$this->doNoAccessError ();
     #
     #}
     if ($this->getRequest()->isPost()) {
         //validate then save
         $status->checkRequired($this, 'partner', t('Partner'));
         if ($this->setting('display_partner_type')) {
             $status->checkRequired($this, 'partner_type_option_id', t('Type of Partner'));
         }
         $status->checkRequired($this, 'address1', t('Address 1'));
         $status->checkRequired($this, 'address2', t('Address 2'));
         $status->checkRequired($this, 'province_id', t('Region A (Province)'));
         $status->checkRequired($this, 'phone', t('Phone'));
         $status->checkRequired($this, 'fax', t('Fax'));
         if ($this->setting('display_employee_funder')) {
             $status->checkRequired($this, 'partner_funder_option_id[]', t('Funder'));
         }
         #$status->checkRequired ( $this, 'funding_end_date[]',             t ( 'Funding End Date' ) );
         #if ($this->setting('display_employee_intended_transition'))
         #	$status->checkRequired ( $this, 'employee_transition_option_id',  t ( 'Intended Transition' ) );
         if ($this->setting('display_employee_agreement_end_date')) {
             $status->checkRequired($this, 'agreement_end_date', t('Agreement End Date'));
         }
         if ($this->setting('display_employee_importance')) {
             $status->checkRequired($this, 'partner_importance_option_id', t('Importance'));
         }
         #$status->checkRequired ( $this, 'comments',                       t ( 'Partner Comments' ) );
         #$status->checkRequired ( $this, 'subpartner_id[]',                t ( 'Sub Partner' ) );
         $params['funding_end_date'] = $this->_array_me($params['funding_end_date']);
         foreach ($params['funding_end_date'] as $i => $value) {
             $params['funding_end_date'][$i] = $this->_date_to_sql($value);
         }
         $params['transition_confirmed'] = $params['transition_confirmed'] == 'on' ? 1 : 0;
         $params['agreement_end_date'] = $this->_date_to_sql($params['agreement_end_date']);
         $params['subpartner_id'] = $this->_array_me($params['subpartner_id']);
         foreach ($params['subpartner_id'] as $i => $value) {
             // strip empty values (it breaks MultiOptionList apparently)
             if (empty($value)) {
                 unset($params['subpartner_id'][$i]);
             }
         }
         //location save stuff
         $params['location_id'] = regionFiltersGetLastID(null, $params);
         // formprefix, criteria
         if ($params['city']) {
             $params['location_id'] = Location::insertIfNotFound($params['city'], $params['location_id'], $this->setting('num_location_tiers'));
         }
         if (!$status->hasError()) {
             $id = $this->_findOrCreateSaveGeneric('partner', $params);
             if (!$id) {
                 $status->setStatusMessage(t('That partner could not be saved.'));
             } else {
                 MultiOptionList::updateOptions('partner_to_funder', 'partner_funder_option', 'partner_id', $id, 'partner_funder_option_id', $params['partner_funder_option_id'], 'funder_end_date', $params['funding_end_date']);
                 $db->query("DELETE FROM partner_to_subpartner WHERE partner_id = {$id}");
                 // updateOptions is not clearing the old options, I dont know why... todo
                 MultiOptionList::updateOptions('partner_to_subpartner', 'partner', 'partner_id', $id, 'subpartner_id', $params['subpartner_id']);
                 $status->setStatusMessage(t('The partner was saved.'));
                 $this->_redirect("partner/edit/id/{$id}");
             }
         }
     }
     if ($id) {
         // read data from db
         #// restricted access?? only show partners by organizers that we have the ACL to view
         #$org_allowed_ids = allowed_org_access_full_list($this); // doesnt have acl 'training_organizer_option_all'
         #$orgWhere = ($org_allowed_ids) ? " AND partner.organizer_option_id in ($org_allowed_ids) " : "";
         #// restricted access?? only show organizers that belong to this site if its a multi org site
         #$site_orgs = allowed_organizer_in_this_site($this); // for sites to host multiple training organizers on one domain
         #$allowedWhereClause .= $site_orgs ? " AND partner.organizer_option_id in ($site_orgs) " : "";
         // continue reading data
         $sql = 'SELECT * FROM partner WHERE id = ' . $id . space . $orgWhere;
         $row = $db->fetchRow($sql);
         if (!$row) {
             $status->setStatusMessage(t('Error finding that record in the database.'));
         } else {
             $params = $row;
             // reassign form data
             $region_ids = Location::getCityInfo($params['location_id'], $this->setting('num_location_tiers'));
             $params['city'] = $region_ids[0];
             $region_ids = Location::regionsToHash($region_ids);
             $params = array_merge($params, $region_ids);
             //get linked table data from option tables
             $sql = "SELECT partner_funder_option_id,funder_end_date FROM partner_to_funder WHERE partner_id = {$id}";
             $params['funder'] = $db->fetchAll($sql);
             $sql = "SELECT subpartner_id FROM partner_to_subpartner WHERE partner_id = {$id}";
             $params['subpartners'] = $db->fetchCol($sql);
         }
     }
     // make sure form data is valid for display
     if (empty($params['funder'])) {
         $params['funder'] = array(array());
     }
     if (empty($params['subpartners'])) {
         $params['subpartners'] = array(' ');
     }
     // assign form drop downs
     $this->view->assign('status', $status);
     $this->view->assign('pageTitle', $this->view->mode == 'add' ? t('Add Partner') : t('View Partner'));
     $this->viewAssignEscaped('partner', $params);
     $this->viewAssignEscaped('locations', Location::getAll());
     $this->view->assign('partners', DropDown::generateHtml('partner', 'partner', $params['partner_type_option_id'], false, $this->view->viewonly, false));
     //table, col, selected_value
     $this->view->assign('subpartners', DropDown::generateHtml('partner', 'partner', 0, false, $this->view->viewonly, false, true, array('name' => 'subpartner_id[]'), true));
     $this->view->assign('types', DropDown::generateHtml('partner_type_option', 'type_phrase', $params['partner_type_option_id'], false, $this->view->viewonly, false));
     $this->view->assign('importance', DropDown::generateHtml('partner_importance_option', 'importance_phrase', $params['partner_importance_option_id'], false, $this->view->viewonly, false));
     $this->view->assign('transitions', DropDown::generateHtml('employee_transition_option', 'transition_phrase', $params['employee_transition_option_id'], false, $this->view->viewonly, false));
     $this->view->assign('incomingPartners', DropDown::generateHtml('partner', 'partner', $params['incoming_partner'], false, $this->view->viewonly, false, true, array('name' => 'incoming_partner'), true));
     $this->view->assign('organizers', DropDown::generateHtml('training_organizer_option', 'training_organizer_phrase', $params['organizer_option_id'], false, $this->view->viewonly, false, true, array('name' => 'organizer_option_id'), true));
     $helper = new Helper();
     $this->viewAssignEscaped('facilities', $helper->getFacilities());
 }
 public function personsAction()
 {
     try {
         require_once 'models/table/Person.php';
         $personTable = new Person();
         $select = $personTable->select()->from('person', array('*'))->setIntegrityCheck(false);
         $rowRay = $personTable->fetchAll($select);
         $rowRay = @$rowRay->toArray();
         //sort by id
         $sorted = array();
         foreach ($rowRay as $row) {
             unset($row['suffix_option_id']);
             unset($row['title_option_id']);
             $sorted[$row['id']] = $row;
         }
         /*
         $sorted = $personTable->_fill_lookup($sorted, 'location_city', 'home_city_id', 'city_name');
         $sorted = $personTable->_fill_lookup($sorted, 'location_district', 'home_district_id', 'district_name');
         $sorted = $personTable->_fill_lookup($sorted, 'location_province', 'home_province_id', 'province_name');
         */
         $locations = Location::getAll();
         foreach ($sorted as $id => $row) {
             $city_info = Location::getCityInfo($row['home_location_id'], $this->setting('num_location_tiers'), $locations);
             if (count($city_info)) {
                 if ($city_info[0]) {
                     $sorted[$id]['city_name'] = $city_info[0];
                 }
                 if ($city_info[1]) {
                     $sorted[$id]['province_name'] = $locations[$city_info[1]]['name'];
                 }
                 if ($city_info[2]) {
                     $sorted[$id]['district_name'] = $locations[$city_info[2]]['name'];
                 }
                 if ($city_info[3]) {
                     $sorted[$id]['region_c_name'] = $locations[$city_info[3]]['name'];
                 }
                 if ($city_info[4]) {
                     $sorted[$id]['region_d_name'] = $locations[$city_info[4]]['name'];
                 }
                 if ($city_info[5]) {
                     $sorted[$id]['region_e_name'] = $locations[$city_info[5]]['name'];
                 }
                 if ($city_info[6]) {
                     $sorted[$id]['region_f_name'] = $locations[$city_info[6]]['name'];
                 }
                 if ($city_info[7]) {
                     $sorted[$id]['region_g_name'] = $locations[$city_info[7]]['name'];
                 }
                 if ($city_info[8]) {
                     $sorted[$id]['region_h_name'] = $locations[$city_info[8]]['name'];
                 }
                 if ($city_info[9]) {
                     $sorted[$id]['region_i_name'] = $locations[$city_info[9]]['name'];
                 }
             }
             unset($sorted[$id]['home_location_id']);
         }
         $sorted = $personTable->_fill_lookup($sorted, 'person_qualification_option', 'primary_qualification_option_id', 'qualification_phrase');
         $sorted = $personTable->_fill_lookup($sorted, 'person_primary_responsibility_option', 'primary_responsibility_option_id', 'responsibility_phrase');
         $sorted = $personTable->_fill_lookup($sorted, 'person_secondary_responsibility_option', 'secondary_responsibility_option_id', 'responsibility_phrase');
         $sorted = $personTable->_fill_lookup($sorted, 'person_custom_1_option', 'person_custom_1_option_id', 'custom1_phrase');
         $sorted = $personTable->_fill_lookup($sorted, 'person_custom_2_option', 'person_custom_2_option_id', 'custom2_phrase');
         $sorted = $personTable->_fill_lookup($sorted, 'facility', 'facility_id', 'facility_name');
         //fill participants
         $select = $personTable->select()->from('person', array('id'))->setIntegrityCheck(false)->join(array('pt' => 'person_to_training'), "pt.person_id = person.id", array('training_id'))->join(array('t' => 'training'), "pt.training_id = t.id", array())->join(array('tt' => 'training_title_option'), "t.training_title_option_id = tt.id", array('training_title_phrase'));
         $rows = $personTable->fetchAll($select);
         foreach ($rows as $row) {
             $pid = $row->id;
             $ra = $row->toArray();
             unset($ra['id']);
             $sorted[$pid]['courses'][] = $ra;
         }
         //fill trainers
         $select = $personTable->select()->from('trainer', array('person_id'))->setIntegrityCheck(false)->join(array('pt' => 'training_to_trainer'), "pt.trainer_id = trainer.person_id", array('training_id'))->join(array('t' => 'training'), "pt.training_id = t.id", array())->join(array('tt' => 'training_title_option'), "t.training_title_option_id = tt.id", array('training_title_phrase'));
         $rows = $personTable->fetchAll($select);
         foreach ($rows as $row) {
             $pid = $row->person_id;
             $ra = $row->toArray();
             unset($ra['person_id']);
             $sorted[$pid]['trained'][] = $ra;
         }
         if ($this->getSanParam('outputType') == 'csv') {
             $this->sendData($this->reportHeaders(false, $sorted));
         }
         $this->view->assign('data', $sorted);
     } catch (Exception $e) {
         echo $e->getMessage() . "<br>" . PHP_EOL;
     }
 }
 function viewlocationAction()
 {
     if (!$this->hasACL('edit_course')) {
         $this->view->assign('viewonly', 'disabled="disabled"');
     }
     require_once 'models/table/TrainingLocation.php';
     $this->view->assign('id', $this->_getParam('id'));
     if ($this->_getParam('id')) {
         require_once 'views/helpers/DropDown.php';
         $rowLocation = TrainingLocation::selectLocation($this->_getParam('id'))->toArray();
         //locations
         list($cname, $prov, $dist, $regc) = Location::getCityInfo($rowLocation['location_id'], $this->setting('num_location_tiers'));
         $rowLocation['city_name'] = $cname;
         $rowLocation['region_c_id'] = $regc;
         $rowLocation['district_id'] = $dist;
         $rowLocation['province_id'] = $prov;
         $this->viewAssignEscaped('rowLocation', $rowLocation);
         //see if it is referenced anywhere
         $this->view->assign('okToDelete', !TrainingLocation::isReferenced($this->_getParam('id')));
     }
     // location drop-down
     $locations = TrainingLocation::selectAllLocations($this->setting('num_location_tiers'));
     $this->viewAssignEscaped('tlocations', $locations);
 }
 /**
  * Training Roster
  */
 public function rosterAction()
 {
     $training_id = $this->_getParam('id');
     $this->view->assign('url', Settings::$COUNTRY_BASE_URL . "/training/roster/id/{$training_id}");
     $tableObj = new Training();
     $rowRay = $tableObj->getTrainingInfo($training_id);
     // calculate end date
     switch ($rowRay['training_length_interval']) {
         case 'week':
             $days = $rowRay['training_length_value'] * 7;
             break;
         case 'day':
             $days = $rowRay['training_length_value'] - 1;
             // start day counts as a day?
             break;
         default:
             $days = false;
             break;
     }
     if ($days) {
         $rowRay['training_end_date'] = strtotime("+{$days} day", strtotime($rowRay['training_start_date']));
         $rowRay['training_end_date'] = date('Y-m-d', $rowRay['training_end_date']);
     } else {
         $rowRay['training_end_date'] = $rowRay['training_start_date'];
     }
     $rowRay['duration'] = $rowRay['training_length_value'] . ' ' . $rowRay['training_length_interval'] . ($rowRay['training_length_value'] == 1 ? "" : "s");
     $this->viewAssignEscaped('row', $rowRay);
     // trainer/person tables
     require_once 'views/helpers/EditTableHelper.php';
     /* Trainers */
     $trainers = TrainingToTrainer::getTrainers($training_id)->toArray();
     $trainerFields = array('last_name' => $this->tr('Last Name'), 'first_name' => $this->tr('First Name'), 'duration_days' => t('Days'));
     $colStatic = array_keys($trainerFields);
     // all
     $editLinkInfo = array('disabled' => 1);
     // no edit/remove links
     $html = EditTableHelper::generateHtmlTraining('Trainer', $trainers, $trainerFields, $colStatic, array(), $editLinkInfo);
     $this->view->assign('tableTrainers', $html);
     /* Participants */
     $persons = PersonToTraining::getParticipants($training_id)->toArray();
     $personsFields = array('last_name' => $this->tr('Last Name'), 'first_name' => $this->tr('First Name'));
     if ($this->setting('module_attendance_enabled')) {
         if (strtotime($rowRay['training_start_date']) < time()) {
             $personsFields = array_merge($personsFields, array('duration_days' => t('Days')));
             // already had class(es) - show the days attended
         }
         $personsFields['award_phrase'] = $this->tr('Complete');
     }
     $personsFields = array_merge($personsFields, array('birthdate' => t('Date of Birth'), 'facility_name' => t('Facility')));
     if ($this->setting('display_viewing_location')) {
         $personsFields['location_phrase'] = $this->tr('Viewing Location');
     }
     if ($this->setting('display_budget_code')) {
         $personsFields['budget_code_phrase'] = $this->tr('Budget Code');
     }
     //if ($this->setting ( 'display_region_b' ))
     $personsFields['location_name'] = t('Location');
     //add location
     $locations = Location::getAll();
     foreach ($persons as $pid => $person) {
         $region_ids = Location::getCityInfo($person['location_id'], $this->setting('num_location_tiers'));
         $ordered_l = array($region_ids['cityname']);
         foreach ($region_ids as $key => $value) {
             if (!empty($value) && isset($locations[$value]['name'])) {
                 $ordered_l[] = $locations[$value]['name'];
             } else {
                 break;
             }
         }
         $persons[$pid]['location_name'] = implode(', ', $ordered_l);
     }
     $colStatic = array_keys($personsFields);
     // all
     $editLinkInfo = array('disabled' => 1);
     // no edit/remove links
     $html = EditTableHelper::generateHtmlTraining('Persons', $persons, $personsFields, $colStatic, array(), $editLinkInfo);
     $this->view->assign('tablePersons', $html);
     if ($this->_getParam('outputType') && $this->_getParam('trainers')) {
         $this->sendData($trainers);
     }
     if ($this->_getParam('outputType') && $this->_getParam('persons')) {
         $this->sendData($persons);
     }
 }
 private function _attach_locations($rowArray)
 {
     if ($rowArray) {
         $num_tiers = $this->setting('num_location_tiers');
         $locations = Location::getAll();
         foreach ($rowArray as $id => $row) {
             $region_ids = Location::getCityInfo($row['location_id'], $num_tiers);
             //todo rUserious? ::getcityinfo is such an expensive call(I think), it loads the entire Location table every call... todo investigate
             $rowArray[$id]['province_name'] = $locations[$region_ids['province_id']]['name'];
             $rowArray[$id]['district_name'] = $locations[$region_ids['district_id']]['name'];
             $rowArray[$id]['region_c_name'] = $locations[$region_ids['region_c_id']]['name'];
             $rowArray[$id]['region_d_name'] = $locations[$region_ids['region_d_id']]['name'];
             $rowArray[$id]['region_e_name'] = $locations[$region_ids['region_e_id']]['name'];
             $rowArray[$id]['region_f_name'] = $locations[$region_ids['region_f_id']]['name'];
             $rowArray[$id]['region_g_name'] = $locations[$region_ids['region_g_id']]['name'];
             $rowArray[$id]['region_h_name'] = $locations[$region_ids['region_h_id']]['name'];
             $rowArray[$id]['region_i_name'] = $locations[$region_ids['region_i_id']]['name'];
         }
     }
     return $rowArray;
 }
 public function psFacilityReportAction()
 {
     $db = Zend_Db_Table_Abstract::getDefaultAdapter();
     //locations
     $this->viewAssignEscaped('locations', Location::getAll());
     $helper = new Helper();
     $this->view->assign('mode', 'id');
     $this->view->assign('institutions', $helper->getInstitutions());
     $this->view->assign('cadres', $helper->getCadres());
     $this->view->assign('institutiontypes', $helper->AdminInstitutionTypes());
     $this->view->assign('cohorts', $helper->getCohorts());
     $this->view->assign('nationalities', $helper->getNationalities());
     $this->view->assign('funding', $helper->getFunding());
     $this->view->assign('tutors', $helper->getTutors());
     $this->view->assign('facilities', $helper->getFacilities());
     $this->view->assign('facilitytypes', $helper->getFacilityTypes());
     $this->view->assign('sponsors', $helper->getOldSponsors());
     $this->view->assign('coursetypes', $helper->AdminCourseTypes());
     $this->view->assign('degrees', $helper->getDegrees());
     $this->view->assign('tutortypes', $helper->AdminTutortypes());
     if ($this->getSanParam('process')) {
         // INITIALIZING ARRAYS
         $headers = array();
         $select = array();
         $from = array();
         $join = array();
         //
         //	$join[] = array(
         // 		"type"   => "inner",
         //		"table"  => "tablename t",
         //		"field1" => "t.field1",
         //		"field2" => "t2.field2",
         //	);
         //
         $where = array();
         $sort = array();
         $locations = Location::getAll();
         $translation = Translation::getAll();
         $showfacility = isset($_GET['showfacility']);
         $showProvince = isset($_GET['showProvince']);
         $showDistrict = isset($_GET['showDistrict']);
         $showRegionC = isset($_GET['showRegionC']);
         $showfacilitytype = isset($_GET['showfacilitytype']);
         $showinstitutionsponsors = isset($_GET['showinstitutionsponsors']);
         $showcadre = isset($_GET['showcadre']);
         $showgraduates = isset($_GET['showgraduates']);
         $showgraduatesyear = isset($_GET['showgraduatesyear']);
         $showpatients = isset($_GET['showpatients']);
         $startday = isset($_GET['startday']);
         $facility = $this->getSanParam('facility');
         $province_id = $this->getSanParam('province_id');
         $district_id = $this->getSanParam('district_id');
         $region_c_id = $this->getSanParam('region_c_id');
         $facilitytype = $this->getSanParam('facilitytype');
         $institutionsponsors = $this->getSanParam('institutionsponsors');
         $cadre = $this->getSanParam('cadre');
         $from[] = "facility f";
         //if ($showfacility){
         $headers[] = "Facility";
         $select[] = "f.facility_name";
         $sort[] = "f.facility_name";
         //}
         if ($facility != "") {
             $where[] = "f.id = " . $facility;
         }
         if ($showfacilitytype || $facilitytype) {
             // Need join on facility type to show OR filter
             if ($showfacilitytype) {
                 // Only add header and select if showing field
                 $headers[] = "Facility type";
                 $select[] = "fto.facility_type_phrase";
             }
             $join[] = array("type" => "inner", "table" => "facility_type_option fto", "field1" => "fto.id", "field2" => "f.type_option_id");
             if ($facilitytype) {
                 $where[] = "fto.id = " . $facilitytype;
             }
             $sort[] = "fto.facility_type_phrase";
         }
         if ($showinstitutionsponsors || $institutionsponsors) {
             // Need join on facility type to show OR filter
             if ($showinstitutionsponsors) {
                 // Only add header and select if showing field
                 $headers[] = "Sponsor";
                 $select[] = "fso.facility_sponsor_phrase";
             }
             // OPTIONAL LINK - LEFT JOINING
             $join[] = array("type" => "left", "table" => "facility_sponsor_option fso", "field1" => "fso.id", "field2" => "f.sponsor_option_id");
             if ($institutionsponsors) {
                 $where[] = "fso.id = " . $institutionsponsors;
             }
             $sort[] = "fso.facility_sponsor_phrase";
         }
         // INCLUDING LOCATION IDENTIFYER, IF NECESSARY
         if ($region_c_id != "" || $district_id != "" || $province_id != "" || $showProvince != "" || $showDistrict != "" || $showRegionC != "") {
             $select[] = "f.location_id";
         }
         if ($showcadre || $cadre) {
             $join[] = array("type" => "left", "table" => "person_qualification_option pqo", "field1" => "pqo.id", "field2" => "f.sponsor_option_id");
         }
         $query = "SELECT ";
         $query .= implode(", ", $select);
         $query .= " FROM ";
         $query .= implode(", ", $from) . " ";
         if (count($join) > 0) {
             foreach ($join as $j) {
                 $query .= strtoupper($j['type']) . " JOIN " . $j['table'] . " ON " . $j['field1'] . " = " . $j['field2'] . " ";
             }
         }
         if (count($where) > 0) {
             $query .= " WHERE " . implode(" AND ", $where);
         }
         if (count($sort) > 0) {
             $query .= " ORDER BY " . implode(", ", $sort);
         }
         //echo $query . "<br>";
         $rows = $db->fetchAll($query);
         $regions = array();
         #			var_dump ($rows);
         // Filtering by locations
         if ($region_c_id != "" || $district_id != "" || $province_id != "") {
             $__rows = array();
             if ($region_c_id != "") {
                 // 3 levels selected. Going with this one first
                 $regions = explode("_", $region_c_id[0]);
             } elseif ($district_id != "") {
                 // 2 levels selected
                 $regions = explode("_", $district_id[0]);
             } elseif ($province_id != "") {
                 // 1 level selected
                 $regions = explode("_", $province_id[0]);
             }
             // Include headers once
             if ($showProvince) {
                 $headers[] = @$translation['Region A (Province)'];
             }
             if ($showDistrict) {
                 $headers[] = @$translation['Region B (Health District)'];
             }
             if ($showRegionC) {
                 $headers[] = @$translation['Region C (Local Region)'];
             }
             foreach ($rows as $row) {
                 list($cname, $prov, $dist, $regc) = Location::getCityInfo($row['location_id'], $this->setting('num_location_tiers'));
                 if ($showProvince) {
                     $loc = $locations[$prov];
                     $row[@$translation['Region A (Province)']] = $loc['name'];
                 }
                 if ($showDistrict) {
                     $loc = $locations[$dist];
                     $row[@$translation['Region B (Health District)']] = $loc['name'];
                 }
                 if ($showRegionC) {
                     $loc = $locations[$regc];
                     $row[@$translation['Region C (Local Region)']] = $loc['name'];
                 }
                 unset($row['location_id']);
                 $userow = true;
                 if (count($regions) > 0) {
                     switch (count($regions)) {
                         case 1:
                             // Selected province
                             if ($prov != $regions[0]) {
                                 $userow = false;
                             }
                             break;
                         case 2:
                             // Selected province, district
                             if ($prov != $regions[0] || $dist != $regions[1]) {
                                 $userow = false;
                             }
                             break;
                         case 3:
                             // Selected province, district, regionc
                             if ($prov != $regions[0] || $dist != $regions[1] || $regc != $regions[2]) {
                                 $userow = false;
                             }
                             break;
                     }
                 }
                 if ($userow) {
                     $__rows[] = $row;
                 }
             }
             $rows = $__rows;
         } elseif ($showProvince != "" || $showDistrict != "" || $showRegionC != "") {
             // NOT FILTERING, BUT STILL INCLUDING LOCATION COLUMNS
             // Include headers once
             if ($showProvince) {
                 $headers[] = @$translation['Region A (Province)'];
             }
             if ($showDistrict) {
                 $headers[] = @$translation['Region B (Health District)'];
             }
             if ($showRegionC) {
                 $headers[] = @$translation['Region C (Local Region)'];
             }
             $__rows = array();
             foreach ($rows as $row) {
                 list($cname, $prov, $dist, $regc) = Location::getCityInfo($row['location_id'], $this->setting('num_location_tiers'));
                 if ($showProvince) {
                     $loc = $locations[$prov];
                     $row[@$translation['Region A (Province)']] = $loc['name'];
                 }
                 if ($showDistrict) {
                     $loc = $locations[$dist];
                     $row[@$translation['Region B (Health District)']] = $loc['name'];
                 }
                 if ($showRegionC) {
                     $loc = $locations[$regc];
                     $row[@$translation['Region C (Local Region)']] = $loc['name'];
                 }
                 unset($row['location_id']);
                 $__rows[] = $row;
             }
             $rows = $__rows;
         }
         #			var_dump ($head);
         #			var_dump ($rows);
         /*
         		//locations
         		$this->viewAssignEscaped ( 'locations', $locations );
         		list ( $cname, $prov, $dist, $regc ) = Location::getCityInfo ( $facilityRow->location_id, $this->setting ( 'num_location_tiers' ) );
         		$facilityArray ['facility_city'] = $cname;
         		$facilityArray ['region_c_id'] = $regc;
         		$facilityArray ['district_id'] = $dist;
         		$facilityArray ['province_id'] = $prov;
         */
         $this->viewAssignEscaped("headers", $headers);
         $this->viewAssignEscaped("output", $rows);
     }
 }
 function viewlocationAction()
 {
     if (!$this->hasACL('edit_course')) {
         $this->view->assign('viewonly', 'disabled="disabled"');
     }
     require_once 'models/table/TrainingLocation.php';
     $this->view->assign('id', $this->_getParam('id'));
     if ($this->_getParam('id')) {
         require_once 'views/helpers/DropDown.php';
         $rowLocation = TrainingLocation::selectLocation($this->_getParam('id'))->toArray();
         //locations
         $this->viewAssignEscaped('locations', Location::getAll());
         $region_ids = Location::getCityInfo($rowLocation['location_id'], $this->setting('num_location_tiers'));
         $rowLocation['city_name'] = $region_ids[0];
         $region_ids = Location::regionsToHash($region_ids);
         $rowLocation = array_merge($rowLocation, $region_ids);
         $this->viewAssignEscaped('rowLocation', $rowLocation);
         //see if it is referenced anywhere
         $this->view->assign('okToDelete', !TrainingLocation::isReferenced($this->_getParam('id')));
     }
     // location drop-down
     $locations = TrainingLocation::selectAllLocations($this->setting('num_location_tiers'));
     $this->viewAssignEscaped('tlocations', $locations);
 }