private function doAddEditView() { if (!$this->hasACL('edit_course')) { $this->view->assign('viewonly', 'disabled="disabled"'); $this->view->assign('pageTitle', t('View') . ' ' . t('Training')); } // edittable ajax (remove/update/etc) if ($this->_getParam('edittable')) { $this->ajaxeditTable(); return; } require_once 'models/table/MultiOptionList.php'; require_once 'models/table/TrainingLocation.php'; require_once 'models/table/Location.php'; require_once 'models/table/System.php'; require_once 'views/helpers/EditTableHelper.php'; require_once 'views/helpers/DropDown.php'; require_once 'views/helpers/FileUpload.php'; // allow multiple pepfars? if (!$this->setting('allow_multi_pepfar')) { $this->NUM_PEPFAR = 1; } // get translation labels // $this->view->assign('labels', Translation::getAll()); //validate $status = ValidationContainer::instance(); $request = $this->getRequest(); $validateOnly = $request->isXmlHttpRequest(); $training_id = $this->getSanParam('id'); $is_new = $this->getSanParam('new') || !$training_id; // new training -- use defaults $this->view->assign('is_new', $is_new); $trainingObj = new Training(); $row = $trainingObj->findOrCreate($training_id); $rowRay = @$row->toArray(); //filter training orgs by user access $allowIds = false; if (!$this->hasACL('training_organizer_option_all')) { $allowIds = array(); $user_id = $this->isLoggedIn(); $training_organizer_array = MultiOptionList::choicesList('user_to_organizer_access', 'user_id', $user_id, 'training_organizer_option', 'training_organizer_phrase', false, false); foreach ($training_organizer_array as $orgOption) { if ($orgOption['user_id']) { $allowIds[] = $orgOption['id']; } } } if ($this->_getParam('action') != 'add' and !$this->hasACL('training_organizer_option_all') and (!$allowIds or array_search($rowRay['training_organizer_option_id'], $allowIds) === false)) { $this->view->assign('viewonly', 'disabled="disabled"'); $this->view->assign('pageTitle', t('View') . ' ' . t('Training')); } if ($row->is_deleted) { $this->_redirect('training/deleted'); return; } $courseRow = $trainingObj->getCourseInfo($training_id); $rowRay['training_title'] = $courseRow ? $courseRow->training_title_phrase : ''; $rowRay['training_title_option_id'] = $courseRow ? $courseRow->training_title_option_id : 0; // does not exist if (!$row->id && $this->_getParam('action') != 'add') { $this->_redirect('training/index'); } if ($validateOnly) { $this->setNoRenderer(); } $age_opts = OptionList::suggestionList('age_range_option', array('id', 'age_range_phrase'), false, 100, false); if ($request->isPost() && !$this->getSanParam('edittabledelete')) { //$status->checkRequired($this, 'training_title_option_id',t('Training Name')); //$status->checkRequired($this, 'training_category_and_title_option_id',t('Training Name')); $status->checkRequired($this, 'training_length_value', t('Training') . ' ' . t('Length')); $status->checkRequired($this, 'training_length_interval', t('Training') . ' ' . t('Interval')); //$status->checkRequired($this, 'training_organizer_option_id',t('Training Organizer')); //$status->checkRequired($this, 'training_level_option_id',t('Training Level')); //$status->checkRequired($this, 'training_location_id',t('Training Location')); //$status->checkRequired($this, 'training_topic_option_id','Training Topic'); // May be "0" value if (!$this->getSanParam('training_length_value')) { $status->addError('training_length_value', t('Training length is required.')); } // validate score averages values if ($score = trim($this->getSanParam('pre'))) { if (!is_numeric($score)) { $status->addError('pre', $this->view->translation['Pre Test Score'] . ' ' . t('must be numeric.')); } elseif ($score < 0 || $score > 100) { $status->addError('pre', $this->view->translation['Pre Test Score'] . ' ' . t('must be between 1-100.')); } } if ($score = trim($this->getSanParam('post'))) { if (!is_numeric($score)) { $status->addError('post', $this->view->translation['Post Test Score'] . ' ' . t('must be numeric.')); } elseif ($score < 0 || $score > 100) { $status->addError('post', $this->view->translation['Post Test Score'] . ' ' . t('must be between 1-100.')); } } if ($this->getSanParam('start-year') == "" || $this->getSanParam('start-month') == "" || $this->getSanParam('start-day') == "") { $status->addError('start-day', t('Start date is required.')); } $training_start_date = @$this->getSanParam('start-year') . '-' . @$this->getSanParam('start-month') . '-' . @$this->getSanParam('start-day'); if ($training_start_date !== '--' and $training_start_date !== '0000-00-00') { $status->isValidDate($this, 'start-day', t('Training') . ' ' . t('start'), $training_start_date); } if ($this->setting('display_end_date')) { $training_end_date = @$this->getSanParam('end-year') . '-' . @$this->getSanParam('end-month') . '-' . @$this->getSanParam('end-day'); if ($training_end_date !== '--' and $training_end_date !== '0000-00-00') { $status->isValidDate($this, 'end-day', t('Training') . ' ' . t('end'), $training_end_date); } if ($training_end_date != '--') { if (strtotime($training_end_date) < strtotime($training_start_date)) { $status->addError('end-day', t('End date must be after start date.')); } } } $pepfarEnabled = @$this->setting('display_training_pepfar'); if ($training_id) { $pepfarCount = 0; $pepfar_array = $this->getSanParam('training_pepfar_categories_option_id'); if ($pepfar_array) { foreach ($pepfar_array as $p) { if ($p) { $pepfarCount++; } } } // if (!$pepfarCount) { // $status->addError('training_pepfar_categories_option',t('PEPFAR is required.')); // } // pepfar (multiple days) if ($this->getSanParam('pepfar_days') && $pepfarEnabled) { $pepfarTotal = 0; foreach ($this->getSanParam('pepfar_days') as $key => $value) { if (!is_numeric($value)) { $value = ereg_replace("/^[.0-9]", "", $value); } //$daysRay [$pepfar_array[$key]] = $value; //set the days key to the pepfar id $daysRay[$key] = $value; //set the days key to the pepfar id $pepfarTotal += $value; if ($pepfarCount > 1 && !$value && $pepfarEnabled) { $status->addError('training_pepfar_categories_option', t('Number of days is required.')); } if ($pepfarCount == $key + 1) { break; } } // calculate days switch ($this->getSanParam('training_length_interval')) { case 'week': $days = $this->getSanParam('training_length_value') * 7; break; case 'day': $days = $this->getSanParam('training_length_value'); // start day counts as a day? break; default: $days = 0.5; break; } // do days add up to match training length? if ($days != $pepfarTotal && $pepfarCount > 1 && $pepfarEnabled) { $status->addError('training_pepfar_categories_option', sprintf(t("Total") . ' ' . t('Training') . ' ' . t("length is %s, but PEPFAR category total is %d days. "), $days == 1 ? $days . ' ' . t('day') : $days . ' ' . t('days'), $pepfarTotal)); } } // custom fields if ($this->getSanParam('custom1_phrase')) { $tableCustom = new ITechTable(array('name' => 'training_custom_1_option')); $row->training_custom_1_option_id = $tableCustom->insertUnique('custom1_phrase', $this->getSanParam('custom1_phrase'), true); } if ($this->getSanParam('custom2_phrase')) { $tableCustom = new ITechTable(array('name' => 'training_custom_2_option')); $row->training_custom_2_option_id = $tableCustom->insertUnique('custom2_phrase', $this->getSanParam('custom2_phrase'), true); } $custom3 = $this->getSanParam('custom3_phrase'); $row->custom_3 = $custom3 ? $custom3 : ''; $custom4 = $this->getSanParam('custom4_phrase'); $row->custom_4 = $custom4 ? $custom4 : ''; // checkbox if (!$this->getSanParam('is_tot')) { $row->is_tot = 0; } if (!$this->getSanParam('is_refresher')) { $row->is_refresher = 0; } $training_refresher_option_id = $this->getSanParam('training_refresher_option_id'); if (!empty($training_refresher_option_id)) { $row->is_refresher = 1; } } if ($this->_getParam('action') == 'add' && $this->_countrySettings['module_unknown_participants_enabled'] && !$this->getSanParam('has_known_participants')) { $row->has_known_participants = 0; } else { if ($this->_getParam('action') == 'add') { $row->has_known_participants = 1; } } //approve by default if the approvals modules is not enabled if ($this->_getParam('action') == 'add' && $this->_countrySettings['module_approvals_enabled'] && !$this->hasACL('approve_trainings')) { $row->is_approved = 0; } else { if ($this->_getParam('action') == 'add') { $row->is_approved = 1; } } // delete training if ($this->getSanParam('specialAction') == 'delete') { $partys = PersonToTraining::getParticipants($training_id)->toArray(); $tranys = TrainingToTrainer::getTrainers($training_id)->toArray(); if (!$partys && !$tranys) { $row->is_deleted = 1; $trainingObj->delete('id = ' . $row->id); } else { $status->setStatusMessage(t('This') . ' ' . t('Training') . ' ' . t('session could not be deleted. Some participants or trainers may still be attached.')); } } if ($status->hasError() && !$row->is_deleted) { $status->setStatusMessage(t('This') . ' ' . t('Training') . ' ' . t('session could not be saved.')); } else { $row = self::fillFromArray($row, $this->_getAllParams()); // format: categoryid_titleid $ct_ids = $this->getSanParam('training_category_and_title_option_id'); // remove category id and underscore (unless dynamic title insert, which is numeric) $training_title_option_id = !is_numeric($ct_ids) ? substr($ct_ids, strpos($ct_ids, '_') + 1) : $ct_ids; $row->training_title_option_id = $training_title_option_id; $row->training_start_date = @$this->getSanParam('start-year') . '-' . @$this->getSanParam('start-month') . '-' . @$this->getSanParam('start-day'); if ($this->setting('display_end_date')) { $row->training_end_date = @$this->getSanParam('end-year') . '-' . @$this->getSanParam('end-month') . '-' . @$this->getSanParam('end-day'); } // cannot be null ... set defaults if (!$row->comments) { $row->comments = ''; } if (!$row->got_comments) { $row->got_comments = ''; } if (!$row->objectives) { $row->objectives = ''; } if (!$row->is_tot) { $row->is_tot = 0; } if (!$row->is_refresher) { $row->is_refresher = 0; } // update related tables if ($training_id) { // funding $amount_extra_col = ''; $amount_extra_vals = array(); $amount_extra_col = 'funding_amount'; if ($this->getSanParam('funding_id')) { foreach ($this->getSanParam('funding_id') as $funding_id) { $amount_extra_vals[] = $this->getSanParam('funding_id_amount_' . $funding_id); } } MultiOptionList::updateOptions('training_to_training_funding_option', 'training_funding_option', 'training_id', $training_id, 'training_funding_option_id', $this->getSanParam('funding_id'), $amount_extra_col, $amount_extra_vals); // pepfar if ($pepfarEnabled) { MultiOptionList::updateOptions('training_to_training_pepfar_categories_option', 'training_pepfar_categories_option', 'training_id', $training_id, 'training_pepfar_categories_option_id', $this->getSanParam('training_pepfar_categories_option_id'), 'duration_days', isset($daysRay) ? $daysRay : false); } // method if ($this->setting('display_training_method')) { $row->training_method_option_id = $this->getSanParam('training_method_option_id'); } // topics if (!$this->setting('allow_multi_topic')) { // drop-down -- set up faux checkbox array (since table schema uses multiple choices) $_GET['topic_id'][] = $this->getSanParam('training_topic_option_id'); } MultiOptionList::updateOptions('training_to_training_topic_option', 'training_topic_option', 'training_id', $training_id, 'training_topic_option_id', $this->getSanParam('topic_id')); // refresher course (if dropdownlist) if ($this->setting('multi_opt_refresher_course')) { MultiOptionList::updateOptions('training_to_training_refresher_option', 'training_refresher_option', 'training_id', $training_id, 'training_refresher_option_id', $this->getSanParam('training_refresher_option_id')); } //Qualifications for unknown participants if (!$row->has_known_participants) { //check for duplicates ///oooh, compound key = qual + age //DELETE EVERYTHING FOR THIS TRAINING //START OVER $quals = $this->getSanParam('person_qualification_option_id'); $quantities_na = $this->getSanParam('qualification_quantity_na'); $quantities_male = $this->getSanParam('qualification_quantity_male'); $quantities_female = $this->getSanParam('qualification_quantity_female'); $age_ranges = $this->getSanParam('age_range_option_id'); $qualPlusAgeArray = array(); //make array of qualifications + age range $qualRows = OptionList::suggestionListHierarchical('person_qualification_option', 'qualification_phrase', false, false); foreach ($qualRows as $qRow) { foreach (array_keys($age_opts) as $age_opt) { $qualPlusAgeArray[$qRow['id']][$age_opt] = array('na' => 0, 'male' => 0, 'female' => 0); } } foreach ($quals as $ix => $item) { if ($item) { $qualPlusAgeArray[$quals[$ix]][$age_ranges[$ix]]['na'] = $qualPlusAgeArray[$quals[$ix]][$age_ranges[$ix]]['na'] + $quantities_na[$ix]; $qualPlusAgeArray[$quals[$ix]][$age_ranges[$ix]]['male'] = $qualPlusAgeArray[$quals[$ix]][$age_ranges[$ix]]['male'] + $quantities_male[$ix]; $qualPlusAgeArray[$quals[$ix]][$age_ranges[$ix]]['female'] = $qualPlusAgeArray[$quals[$ix]][$age_ranges[$ix]]['female'] + $quantities_female[$ix]; } } $deleteTable = new ITechTable(array('name' => 'training_to_person_qualification_option')); $deleteTable->delete('training_id = ' . $training_id, true); foreach ($qualPlusAgeArray as $qkey => $ageRay) { foreach ($ageRay as $akey => $counts) { if ($counts['na'] || $counts['male'] || $counts['female']) { MultiOptionList::insertOption('training_to_person_qualification_option', 'training_id', $training_id, 'person_qualification_option_id', $qkey, array('age_range_option_id', 'person_count_na', 'person_count_male', 'person_count_female'), array('age_range_option_id' => $akey, 'person_count_na' => $counts['na'], 'person_count_male' => $counts['male'], 'person_count_female' => $counts['female'])); } } } } } //mark approval status $do_save_approval_history = false; if ($this->setting('module_approvals_enabled')) { if ($this->getSanParam('approval_status') == 'approved') { $row->is_approved = 1; if ($this->setting('allow_multi_approvers') && !$this->hasACL('master_approver')) { $row->is_approved = 2; // approved, but not approved by master approver, only that user can make this a 1 and have it display aproved! } $rowRay['is_approved'] = 1; $do_save_approval_history = true; } else { if ($this->getSanParam('approval_status') == 'rejected') { $row->is_approved = 0; $rowRay['is_approved'] = 0; if ($this->setting('allow_multi_approvers') && !$this->hasACL('master_approver')) { $row->is_approved = 1; // approved, but not approved by master approver, only that user can make this a 1 and have it display aproved! $rowRay['is_approved'] = 1; } $do_save_approval_history = true; } } if ($this->_getParam('action') == 'add' or !$this->hasACL('approve_trainings')) { $do_save_approval_history = true; } } if ($this->_getParam('action') == 'add') { $do_save_approval_history = true; } $row->training_refresher_option_id = 0; // refresher / bugfix - this col isnt used anymore if ($row->save()) { //save approval history if ($this->getSanParam('approval_comments') || $do_save_approval_history) { require_once 'models/table/TrainingApprovalHistory.php'; $history_table = new TrainingApprovalHistory(); $approval_status = $this->_countrySettings['module_approvals_enabled'] ? $this->getSanParam('approval_status') : 'approved'; if (!$this->hasACL('approve_trainings')) { $approval_status = 'resubmitted'; } $history_data = array('training_id' => $row->id, 'approval_status' => $approval_status, 'message' => $this->getSanParam('approval_comments')); $history_table->insert($history_data); } // redirects if ($this->_getParam('action') == 'add') { $status->redirect = Settings::$COUNTRY_BASE_URL . '/training/edit/id/' . $row->id . '/new/1'; } if ($this->_getParam('redirectUrl')) { $status->redirect = $this->_getParam('redirectUrl'); } // duplicate training if ($this->getSanParam('specialAction') == 'duplicate') { if ($this->hasACL('duplicate_training')) { $dupId = $trainingObj->duplicateTraining($row->id); $status->redirect = Settings::$COUNTRY_BASE_URL . '/training/edit/id/' . $dupId . '/msg/duplicate'; } } if (!$status->redirect) { $status->setStatusMessage(t('This') . ' ' . t('Training') . ' ' . t('session has been saved.')); } } else { error_log("Couldn't save training {$training_id}"); } } if ($validateOnly) { $this->sendData($status); } else { $this->view->assign('status', $status); } } // // Init view // $this->view->assign('custom3_phrase', $row->custom_3); $this->view->assign('custom4_phrase', $row->custom_4); //split start date fields if (!$row->training_start_date) { $row->training_start_date = '--'; } // empty $parts = explode(' ', $row->training_start_date); $parts = explode('-', $parts[0]); $rowRay['start-year'] = $parts[0]; $rowRay['start-month'] = $parts[1]; $rowRay['start-day'] = $parts[2]; //split end date fields if (!$row->training_end_date) { $row->training_end_date = '--'; } // empty $parts = explode(' ', $row->training_end_date); $parts = explode('-', $parts[0]); $rowRay['end-year'] = $parts[0]; $rowRay['end-month'] = $parts[1]; $rowRay['end-day'] = $parts[2]; // Drop downs //$this->view->assign('dropDownTitle', DropDown::generateHtml('training_title_option','training_title_phrase',$rowRay['training_title_option_id'],($this->hasACL('training_title_option_all')?'training/insert-table':false), $this->view->viewonly,false)); $this->view->assign('dropDownOrg', DropDown::generateHtml('training_organizer_option', 'training_organizer_phrase', $rowRay['training_organizer_option_id'], $this->hasACL('training_organizer_option_all') ? 'training/insert-table' : false, $this->view->viewonly, $this->view->viewonly ? false : $allowIds)); $this->view->assign('dropDownLevel', DropDown::generateHtml('training_level_option', 'training_level_phrase', $rowRay['training_level_option_id'], 'training/insert-table', $this->view->viewonly)); $this->view->assign('dropDownGotCir', DropDown::generateHtml('training_got_curriculum_option', 'training_got_curriculum_phrase', $rowRay['training_got_curriculum_option_id'], 'training/insert-table', $this->view->viewonly)); $this->view->assign('dropDownMethod', DropDown::generateHtml('training_method_option', 'training_method_phrase', $rowRay['training_method_option_id'], 'training/insert-table', $this->view->viewonly)); $this->view->assign('dropDownPrimaryLanguage', DropDown::generateHtml('trainer_language_option', 'language_phrase', $rowRay['training_primary_language_option_id'], false, $this->view->viewonly, false, false, array('name' => 'training_primary_language_option_id'))); $this->view->assign('dropDownSecondaryLanguage', DropDown::generateHtml('trainer_language_option', 'language_phrase', $rowRay['training_secondary_language_option_id'], false, $this->view->viewonly, false, false, array('name' => 'training_secondary_language_option_id'))); //$catTitleArray = OptionList::suggestionList('location_district',array('district_name','parent_province_id'),false,false); $this->view->assign('age_options', $age_opts); // training categories & titles $categoryTitle = MultiAssignList::getOptions('training_title_option', 'training_title_phrase', 'training_category_option_to_training_title_option', 'training_category_option'); $this->view->assign('categoryTitle', $categoryTitle); // add title link if ($this->hasACL('training_title_option_all')) { $this->view->assign('titleInsertLink', " <a href=\"#\" onclick=\"addToSelect('" . str_replace("'", "\\" . "'", t('Please enter your new')) . " " . strtolower($this->view->translation['Training'] . t('Name')) . ":', 'select_training_title_option', '" . Settings::$COUNTRY_BASE_URL . "/training/insert-table/table/training_title_option/column/training_title_phrase/outputType/json'); return false;\">" . t('Insert new') . "</a>"); } //get assigned evaluation $ev_id = null; $ev_to_t_id = null; if ($training_id) { $evtableObj = new ITechTable(array('name' => 'evaluation_to_training')); $evRow = $evtableObj->fetchRow($evtableObj->select(array('id', 'evaluation_id'))->where('training_id = ' . $training_id)); if ($evRow) { $ev_id = $evRow->evaluation_id; $ev_to_t_id = $evRow->id; } $this->view->assign('evaluation_id', $ev_id); $this->view->assign('evaluation_to_training_id', $ev_to_t_id); } //Qualifications for unknown participants if (!$row->has_known_participants) { //count primary qualifications. //add a dropdown for each $tableObj = new ITechTable(array('name' => 'person_qualification_option')); $qualRows = OptionList::suggestionListHierarchical('person_qualification_option', 'qualification_phrase', false, false); //get values for this training $selectedObj = new ITechTable(array('name' => 'training_to_person_qualification_option')); $selectedRows = null; if ($training_id) { $selectedRows = $selectedObj->fetchAll($selectedObj->select(array('person_qualification_option_id', 'id', 'person_count_na', 'person_count_male', 'person_count_female', 'age_range_option_id'))->where('training_id = ' . $training_id)); $unknownQualDropDowns = array(); $qual_row_count = 0; foreach ($selectedRows as $selectedRow) { $selector = array(); $selector['select'] = $this->_generate_hierarchical('select_person_qualification_option_' . $qual_row_count, $qualRows, 'qualification_phrase', $selectedRow->person_qualification_option_id); $selector['age_range_option_id'] = $selectedRow->age_range_option_id; $selector['quantity_na'] = $selectedRow->person_count_na; $selector['quantity_male'] = $selectedRow->person_count_male; $selector['quantity_female'] = $selectedRow->person_count_female; $unknownQualDropDowns[] = $selector; $qual_row_count++; } $max_rows = count($qualRows) * 3; //should be about 30 for ($i = $selectedRows->count(); $i < $max_rows; $i++) { $selector = array(); $selector['select'] = $this->_generate_hierarchical('select_person_qualification_option_' . $qual_row_count, $qualRows, 'qualification_phrase', -1); $selector['age_range_option_id'] = 1; $selector['quantity_na'] = 0; $selector['quantity_male'] = 0; $selector['quantity_female'] = 0; $unknownQualDropDowns[] = $selector; $qual_row_count++; } $this->view->assign('unknownQualDropDowns', $unknownQualDropDowns); } } // find category based on title $catId = 0; if ($courseRow && $courseRow->training_title_option_id) { foreach ($categoryTitle as $r) { if ($r['id'] == $courseRow->training_title_option_id && $r['training_category_option_id'] != 0) { $catId = $r['training_category_option_id']; break; } } } $this->view->assign('dropDownCategory', DropDown::generateHtml('training_category_option', 'training_category_phrase', $catId, false, $this->view->viewonly, false)); //echo '<pre>'; //print_r($catTitleArray); exit; // $this->view->assign('dropDownProvince', DropDown::generateHtml('location_province','province_name',false,false,$this->view->viewonly)); // $this->view->assign('dropDownDistrict', DropDown::generateHtml('location_district','district_name',false,false,$this->view->viewonly)); $this->viewAssignEscaped('locations', Location::getAll()); // Topic drop-down if ($training_id) { if (!$this->setting('allow_multi_topic')) { $training_topic_id = $trainingObj->getTrainingSingleTopic($training_id); if ($is_new) { $training_topic_id = false; } // use default $this->view->assign('dropDownTopic', DropDown::generateHtml('training_topic_option', 'training_topic_phrase', $training_topic_id, 'training/insert-table', $this->view->viewonly)); } else { // topic checkboxes $topicArray = MultiOptionList::choicesList('training_to_training_topic_option', 'training_id', $training_id, 'training_topic_option', 'training_topic_phrase'); $this->view->assign('topicArray', $topicArray); $this->view->assign('topicJsonUrl', Settings::$COUNTRY_BASE_URL . '/training/insert-table/table/training_topic_option/column/training_topic_phrase/outputType/json'); } } if ($this->hasACL('acl_editor_training_topic')) { $this->view->assign("topicInsertLink", ' <a href="#" onclick="addCheckbox(\'' . t('Please enter the name your new topic item') . '\', \'topic_id\', \'topicContainer\', \'' . $this->view->topicJsonUrl . '\'); return false;">' . t('Insert New') . '</a>'); } // get custom phrases (custom1_phrase, custom2_phrase) if ($training_id) { $rowRay = array_merge($rowRay, $trainingObj->getCustom($training_id)->toArray()); } // location drop-down $tlocations = TrainingLocation::selectAllLocations($this->setting('num_location_tiers')); $this->viewAssignEscaped('tlocations', $tlocations); if ($this->hasACL('edit_facility')) { $this->view->assign("insertLocationLink", '<a href="#" onclick="return false;" id="show">' . t(str_replace(' ', ' ', t('Insert new'))) . '</a>'); } // pepfar durations $pepfarEnabled = @$this->setting('display_training_pepfar'); if ($training_id && $pepfarEnabled) { $pepfarArray = MultiOptionList::choicesList('training_to_training_pepfar_categories_option', 'training_id', $training_id, 'training_pepfar_categories_option', 'pepfar_category_phrase', 'duration_days'); foreach ($pepfarArray as $item) { if (isset($item['training_id']) && $item['training_id']) { $pepfars[] = array('id' => $item['id'], 'duration' => $item['duration_days']); } } } // pepfar $this->view->assign('NUM_PEPFAR', $this->NUM_PEPFAR); // number of Pepfar drop-downs to display for ($j = 0; $j < $this->NUM_PEPFAR; $j++) { $pepfarid = isset($pepfars[$j]['id']) ? $pepfars[$j]['id'] : ''; if ($is_new) { $pepfarid = false; } // use default $pepfarHtml = DropDown::generateHtml('training_pepfar_categories_option', 'pepfar_category_phrase', $pepfarid, false, $this->view->viewonly, false, false, array(), $j == 0); $pepfarHtml = str_replace('training_pepfar_categories_option_id', 'training_pepfar_categories_option_id[]', $pepfarHtml); // use array $dropDownPepfars[] = $pepfarHtml; //$pepfarDurations[] = (isset($pepfars[$j]['duration']) && $pepfars[$j]['duration'] ? $pepfars[$j]['duration'] . ' day' . (($pepfars[$j]['duration'] <= 1) ? '' : 's') : ''); $pepfarDurations[] = isset($pepfars[$j]['duration']) && $pepfars[$j]['duration'] ? $pepfars[$j]['duration'] : ''; } $this->view->assign('dropDownPepfars', $dropDownPepfars); $this->view->assign('pepfarDurations', $pepfarDurations); // checkboxes $fundingArray = MultiOptionList::choicesList('training_to_training_funding_option', 'training_id', $training_id, 'training_funding_option', array('funding_phrase', 'is_default')); if ($training_id) { //lame to do another query, but it's easy $tableObj = new ITechTable(array('name' => 'training_to_training_funding_option')); $amountRows = $tableObj->fetchAll($tableObj->select(array('training_funding_option_id', 'id', 'funding_amount'))->where('training_id = ' . $training_id)); foreach ($amountRows as $amt_row) { foreach ($fundingArray as $k => $funding_row) { if ($funding_row['id'] == $amt_row->training_funding_option_id) { $fundingArray[$k]['funding_amount'] = $amt_row->funding_amount; } } } } $this->view->assign('fundingArray', $fundingArray); if ($this->hasACL('acl_editor_funding')) { $this->view->assign('fundingJsonUrl', Settings::$COUNTRY_BASE_URL . '/training/insert-table/table/training_funding_option/column/funding_phrase/outputType/json'); $this->view->assign("fundingInsertLink", ' <a href="#" onclick="addCheckbox(\'' . t('Please enter the name your new funding item:') . '\', \'funding_id\', \'fundingContainer\', \'' . $this->view->fundingJsonUrl . '\'); return false;">' . t('Insert New') . '</a>'); } // refresher (if multi) if ($training_id) { if ($this->setting('multi_opt_refresher_course')) { $training_refresher_id = $row->training_refresher_option_id; if ($is_new) { $training_refresher_id = false; } // use default #$this->view->assign ( 'dropDownRefresher', DropDown::generateHtml ( 'training_refresher_option', 'refresher_phrase_option', $training_refresher_id, 'training/insert-table', $this->view->viewonly ) ); $this->view->assign('refresherArray', MultiOptionList::choicesList('training_to_training_refresher_option', 'training_id', $training_id, 'training_refresher_option', 'refresher_phrase_option', false, false)); if ($this->hasACL('acl_editor_refresher_course')) { $this->view->assign('refresherJsonUrl', Settings::$COUNTRY_BASE_URL . '/training/insert-table/table/training_refresher_option/column/refresher_phrase_option/outputType/json'); $this->view->assign("refresherInsertLink", ' <a href="#" onclick="addCheckbox(\'' . t('Please enter the name your new refresher item') . '\', \'training_refresher_option_id\', \'refresherContainer\', \'' . $this->view->refresherJsonUrl . '\'); return false;">' . t('Insert New') . '</a>'); } } } /**************************************************************************************************************** * Trainers */ if ($training_id) { $trainers = TrainingToTrainer::getTrainers($training_id)->toArray(); } else { $trainers = array(); } if (!$this->setting('display_middle_name')) { $trainerFields = array('first_name' => $this->tr('First Name'), 'last_name' => $this->tr('Last Name')); $colStatic = array('first_name', 'last_name'); } else { if ($this->setting('display_middle_name_last')) { $trainerFields = array('first_name' => $this->tr('First Name'), 'last_name' => $this->tr('Last Name'), 'middle_name' => $this->tr('Middle Name')); $colStatic = array('first_name', 'last_name', 'middle_name'); } else { $trainerFields = array('first_name' => $this->tr('First Name'), 'middle_name' => $this->tr('Middle Name'), 'last_name' => $this->tr('Last Name')); $colStatic = array('first_name', 'middle_name', 'last_name'); } } if ($this->view->viewonly) { $editLinkInfo['disabled'] = 1; $linkInfo = array(); $colStatic = array_keys($trainerFields); } else { $linkInfo = array('linkFields' => $colStatic, 'linkId' => 'trainer_id', 'linkUrl' => Settings::$COUNTRY_BASE_URL . '/person/edit/id/%trainer_id%'); $linkInfo['linkUrl'] = "javascript:submitThenRedirect('{$linkInfo['linkUrl']}/trainingredirect/{$training_id}');"; $editLinkInfo = array(); } $html = EditTableHelper::generateHtmlTraining('Trainer', $trainers, $trainerFields, $colStatic, $linkInfo, $editLinkInfo); $this->view->assign('tableTrainers', $html); /**************************************************************************************************************** * Participants */ $locations = Location::getAll(); $customColDefs = array(); if ($training_id) { $persons = PersonToTraining::getParticipants($training_id)->toArray(); foreach ($persons as $pid => $p) { $region_ids = Location::getCityInfo($p['location_id'], $this->setting('num_location_tiers')); // todo expensive call, getcityinfo loads all locations each time?? $persons[$pid]['province_name'] = $region_ids[1] ? $locations[$region_ids['1']]['name'] : 'unknown'; if ($region_ids[2]) { $persons[$pid]['district_name'] = $locations[$region_ids[2]]['name']; } else { $persons[$pid]['district_name'] = 'unknown'; } if ($region_ids[3]) { $persons[$pid]['region_c_name'] = $locations[$region_ids[3]]['name']; } else { $persons[$pid]['region_c_name'] = 'unknown'; } if ($region_ids[4]) { $persons[$pid]['region_d_name'] = $locations[$region_ids[4]]['name']; } else { $persons[$pid]['region_d_name'] = 'unknown'; } if ($region_ids[5]) { $persons[$pid]['region_e_name'] = $locations[$region_ids[5]]['name']; } else { $persons[$pid]['region_e_name'] = 'unknown'; } if ($region_ids[6]) { $persons[$pid]['region_f_name'] = $locations[$region_ids[6]]['name']; } else { $persons[$pid]['region_f_name'] = 'unknown'; } if ($region_ids[7]) { $persons[$pid]['region_g_name'] = $locations[$region_ids[7]]['name']; } else { $persons[$pid]['region_g_name'] = 'unknown'; } if ($region_ids[8]) { $persons[$pid]['region_h_name'] = $locations[$region_ids[8]]['name']; } else { $persons[$pid]['region_h_name'] = 'unknown'; } if ($region_ids[9]) { $persons[$pid]['region_i_name'] = $locations[$region_ids[9]]['name']; } else { $persons[$pid]['region_i_name'] = 'unknown'; } } } else { $persons = array(); } if (!$this->setting('display_middle_name')) { $personsFields = array('first_name' => $this->tr('First Name'), 'last_name' => $this->tr('Last Name'), 'birthdate' => t('Date of Birth'), 'facility_name' => t('Facility')); } else { if ($this->setting('display_middle_name_last')) { $personsFields = array('first_name' => $this->tr('First Name'), 'last_name' => $this->tr('Last Name'), 'middle_name' => "..." . $this->tr('Middle Name'), 'birthdate' => t('Date of Birth'), 'facility_name' => t('Facility')); } else { $personsFields = array('first_name' => $this->tr('First Name'), 'middle_name' => "..." . $this->tr('Middle Name'), 'last_name' => $this->tr('Last Name'), 'birthdate' => t('Date of Birth'), 'facility_name' => t('Facility')); } } if ($this->setting('module_attendance_enabled')) { $personsFields['duration_days'] = $this->tr('Days Attended'); $personsFields['award_phrase'] = $this->tr('Complete'); $rowArray = OptionList::suggestionList('person_to_training_award_option', array('id', 'award_phrase'), false, 9999, false, false); $elements = array(0 => array('text' => ' ', 'value' => 0)); foreach ($rowArray as $i => $tablerow) { $elements[$i + 1]['text'] = $tablerow['award_phrase']; $elements[$i + 1]['value'] = $tablerow['id']; } $elements = json_encode($elements); // yui data table will enjoy spending time with a json encoded array $customColDefs['award_phrase'] = "editor:'dropdown', editorOptions: {dropdownOptions: {$elements} }"; } if ($this->setting('display_viewing_location')) { $personsFields['location_phrase'] = $this->tr('Viewing Location'); $vLocDropDown = OptionList::suggestionList('person_to_training_viewing_loc_option', array('id', 'location_phrase'), false, 9999, false, false); $elements = array(0 => array('text' => '', 'value' => 0)); foreach ($vLocDropDown as $i => $tablerow) { $elements[$i + 1]['text'] = $tablerow['location_phrase']; $elements[$i + 1]['value'] = $tablerow['id']; } $elements = json_encode($elements); $customColDefs['location_phrase'] = "editor:'dropdown', editorOptions: {dropdownOptions: {$elements} }"; } if ($this->setting('display_budget_code')) { $personsFields['budget_code_phrase'] = $this->tr('Budget Code'); $budgetDropDown = OptionList::suggestionList('person_to_training_budget_option', array('id', 'budget_code_phrase'), false, 9999, false, false); $elements = array(0 => array('text' => '', 'value' => 0)); foreach ($budgetDropDown as $i => $tablerow) { $elements[$i + 1]['text'] = $tablerow['budget_code_phrase']; $elements[$i + 1]['value'] = $tablerow['id']; } $elements = json_encode($elements); $customColDefs['budget_code_phrase'] = "editor: 'dropdown' , editorOptions:{dropdownOptions: {$elements}} "; } if ($this->setting('display_region_i')) { $personsFields['region_i_name'] = $this->tr('Region I'); } else { if ($this->setting('display_region_h')) { $personsFields['region_h_name'] = $this->tr('Region H'); } else { if ($this->setting('display_region_g')) { $personsFields['region_g_name'] = $this->tr('Region G'); } else { if ($this->setting('display_region_f')) { $personsFields['region_f_name'] = $this->tr('Region F'); } else { if ($this->setting('display_region_e')) { $personsFields['region_e_name'] = $this->tr('Region E'); } else { if ($this->setting('display_region_d')) { $personsFields['region_d_name'] = $this->tr('Region D'); } else { if ($this->setting('display_region_c')) { $personsFields['region_c_name'] = $this->tr('Region C (Local Region)'); } else { if ($this->setting('display_region_b')) { $personsFields['district_name'] = $this->tr('Region B (Health District)'); } else { $personsFields['province_name'] = $this->tr('Region A (Province)'); } } } } } } } } $colStatic = array_keys($personsFields); // static calumns (From field keys) if ($this->setting('module_attendance_enabled') || $this->setting('display_viewing_location') || $this->setting('display_budget_code')) { foreach ($colStatic as $i => $v) { if ($v == 'duration_days' || $v == 'award_phrase' || $v == 'budget_code_phrase' || $v == 'location_phrase') { unset($colStatic[$i]); } } // remove 1 so we can edit the field } if ($this->view->viewonly) { $editLinkInfo['disabled'] = 1; $linkInfo = array(); } else { $linkInfo = array('linkFields' => $colStatic, 'linkId' => 'person_id', 'linkUrl' => Settings::$COUNTRY_BASE_URL . '/person/edit/id/%person_id%'); $linkInfo['linkUrl'] = "javascript:submitThenRedirect('{$linkInfo['linkUrl']}/trainingredirect/{$training_id}');"; $editLinkInfo = array(); // add link next to "Remove" if ($this->setting('display_training_pre_test')) { $editLinkInfo[] = array('linkName' => t('Pre-Test'), 'linkId' => 'id', 'linkUrl' => "javascript:updateScore('Pre-Test', %id%, '" . Settings::$COUNTRY_BASE_URL . "/training/scores-update', '%score_pre%');"); // do not translate label/key } if ($this->setting('display_training_post_test')) { $editLinkInfo[] = array('linkName' => t('Post-Test'), 'linkId' => 'id', 'linkUrl' => "javascript:updateScore('Post-Test', %id%, '" . Settings::$COUNTRY_BASE_URL . "/training/scores-update', '%score_post%');"); // do not translate label/key } $editLinkInfo[] = array('linkName' => t('Scores'), 'linkId' => 'id', 'linkUrl' => "javascript:submitThenRedirect('" . Settings::$COUNTRY_BASE_URL . "/training/scores/ptt_id/%id%');"); // old //'linkUrl' => Settings::$COUNTRY_BASE_URL."/training/scores/training/$training_id/person/%person_id%", //$editLinkInfo['linkUrl'] = "javascript:submitThenRedirect('{$editLinkInfo['linkUrl']}');"; } $html = EditTableHelper::generateHtmlTraining('Persons', $persons, $personsFields, $colStatic, $linkInfo, $editLinkInfo, $customColDefs); $this->view->assign('tablePersons', $html); /****************************************************************************************************************/ /* Attached Files */ FileUpload::displayFiles($this, 'training', $row->id, !$this->view->viewonly); //$this->view->assign('files', 'x' . FileUpload::displayFiles($this, 'training', $row->id)); // File upload form if (!$this->view->viewonly) { $this->view->assign('filesForm', FileUpload::displayUploadForm('training', $row->id, FileUpload::$FILETYPES)); } /****************************************************************************************************************/ /* Approval status */ if ($this->setting('module_approvals_enabled')) { $canApprove = $this->hasACL('master_approver') && $row->is_approved == 2 || $this->hasACL('approve_trainings') && !$row->is_approved; $this->view->assign('can_approve', $canApprove); if ($canApprove) { $this->view->assign('approve_val', ''); } else { $this->view->assign('approve_val', $row->is_approved); } // disable control if (!$canApprove or !$this->hasACL('approve_trainings')) { $this->view->assign('approve_disable_str', 'disabled'); } else { $this->view->assign('approve_disable_str', ''); } } /****************************************************************************************************************/ /* Attached Files */ // mode $this->view->assign('mode', $this->_getParam('action')); switch ($this->_getParam('msg')) { case 'duplicate': $this->view->assign('msg', t('Training') . ' ' . t('session has been duplicated.<br>You can edit the duplicate session below.')); break; default: break; } // edit variables if ($this->_getParam('action') != 'add') { //audit history $creatorObj = new User(); $updaterObj = new User(); $creatorrow = $creatorObj->findOrCreate($row->created_by); $rowRay['creator'] = $creatorrow->first_name . ' ' . $creatorrow->last_name; $updaterrow = $updaterObj->findOrCreate($row->modified_by); $rowRay['updater'] = $updaterrow->first_name . ' ' . $updaterrow->last_name; } if (empty($trainers) || empty($persons)) { $this->view->assign('isIncomplete', true); } // default start date? if ($this->getSanParam('start-date')) { $parts = explode('/', $this->getSanParam('start-date')); if (count($parts) == 3) { $rowRay['start-day'] = $parts[0]; $rowRay['start-month'] = $parts[1]; $rowRay['start-year'] = $parts[2]; } } // row values $this->view->assign('row', $rowRay); }