/** * If no training associations, delete course. */ public static function deleteIfNotFound($training_title_option_id, $training_id = 0) { $tableObj = new Course(); $select = $tableObj->select()->from('training', array('COUNT(id) AS training_count'))->setIntegrityCheck(false)->where("course_id = {$training_title_option_id} AND id != {$training_id}"); $row = $tableObj->fetchRow($select); if (!$row->training_count) { $tableObj = new Course(); $tableObj->delete("training_title_option_id = {$training_title_option_id}"); $tableObj = new ITechTable(array('name' => 'training_title_option')); $tableObj->delete("id = {$training_title_option_id}"); } }
/** * Saves recommended topics for person */ public function saveRecommendedforPerson($person_id, $training_ids) { if (!is_array($training_ids) || !$training_ids) { return; } $training_ids = array_unique($training_ids); $tableObj = new ITechTable(array('name' => 'person_to_training_topic_option')); $tableObj->delete("person_id={$person_id}", true); foreach ($training_ids as $id) { if ($id) { $createRow = $tableObj->createRow(); $createRow->person_id = $person_id; $createRow->training_topic_option_id = $id; $createRow->save(); } } }
public static function updateQuestions($parent_id, $text_array, $type_array, $id_array = null, $optionalCustomAnswer_array = null) { $q_table = new ITechTable(array('name' => 'evaluation_question')); $a_table = new ITechTable(array('name' => 'evaluation_custom_answers')); $existing = $q_table->fetchAll($q_table->select()->where("evaluation_id = {$parent_id}")); foreach ($text_array as $i => $q) { if (!empty($text_array[$i]) && !empty($type_array[$i])) { // find row $q_row = null; if ($id_array[$i] && $id_array[$i] != -1) { $q_row = $q_table->find($id_array[$i])->current(); } if ($q_row == null) { $q_row = $q_table->createRow(); } // populate and save $q_row->evaluation_id = $parent_id; $q_row->question_text = $text_array[$i]; $q_row->question_type = $type_array[$i]; $q_row->weight = $i; $id = $q_row->save(); if ($id && isset($optionalCustomAnswer_array[$i]) && is_array($optionalCustomAnswer_array[$i]) && count($optionalCustomAnswer_array)) { $num_rows_deleted = $a_table->delete("evaluation_id={$parent_id} and question_id={$id}"); // remove old answers linked to the evaluation, not sure of a proper way to reuse the rows, seek() seems broken in this version of zend which makes it rather difficult, #TODO foreach ($optionalCustomAnswer_array[$i] as $answer) { if (trim($answer) === '') { continue; } $a_row = $a_table->createRow(); $a_row->evaluation_id = $parent_id; $a_row->question_id = $id; $a_row->answer_phrase = $answer; $a_row->save(); } } } else { // delete (empty text, and an id, should delete this question) if ($id_array[$i] && $id_array[$i] != -1) { $q_table->find($id_array[$i])->current()->delete(); } } } return true; }
/** * JSON course add/delete/edit function for employee_edit * * see: employee_course_table.phtml */ public function coursesAction() { try { if (!$this->hasACL('edit_employee')) { if ($this->_getParam('outputType') == 'json') { $this->sendData(array('msg' => 'Not Authorized')); exit; return; } $this->doNoAccessError(); } $ret = array(); $params = $this->getAllParams(); if ($params['mode'] == 'addedit') { // add or update a record based on $params[id] if (empty($params['id'])) { unset($params['id']); } // unset ID (primary key) for Zend if 0 or '' (insert new record) $id = $this->_findOrCreateSaveGeneric('employee_to_course', $params); // wrapper for find or create $params['id'] = $id; if ($id) { // saved // reload the data $db = $this->dbfunc(); $ret = $db->fetchRow("select * from employee_to_course where id = {$id}"); $ret['msg'] = 'ok'; } else { $ret['errored'] = true; $ret['msg'] = t('Error creating record.'); } } else { if ($params['mode'] == 'delete' && $params['id']) { // delete a record try { $course_link_table = new ITechTable(array('name' => 'employee_to_course')); $num_rows = $course_link_table->delete('id = ' . $params['id']); if (!$num_rows) { $ret['msg'] = t('Error finding that record in the database.'); } $ret['num_rows'] = $num_rows; } catch (Exception $e) { $ret['errored'] = true; $ret['msg'] = t('Error finding that record in the database.'); } } } if (strtolower($params['outputType']) == 'json') { $this->sendData($ret); // probably always json no need to check for output } } catch (Exception $e) { if ($this->_getParam('outputType') == 'json') { $this->sendData(array('errored' => true, 'msg' => 'Error: ' . $e->getMessage())); return; } else { echo $e->getMessage(); } } }
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); }
public function trainingApproversAction() { // ajax handler if ($this->getRequest()->isPost() && $this->getSanParam('ajax')) { // Update db $table = new ITechTable(array('name' => 'user_to_acl')); $msg = ''; $success = false; $proceed = true; $id = $this->getSanParam('id'); if (!trim($id) || !is_numeric($id)) { $proceed = false; } if ($this->getSanParam('ajaxAction') == 'elevate' && $proceed) { $user_acl = $table->createRow(); $user_acl->acl_id = 'master_approver'; $user_acl->user_id = $id; $user_acl = $user_acl->save(); $msg = $user_acl ? t('That user is now a master approver') : t('Unable to make that user a master approver'); if ($user_acl) { $success = true; } } if ($this->getSanParam('ajaxAction') == 'deelevate' && $proceed) { $user_acl = $table->delete("acl_id = 'master_approver' and user_id = {$id}"); $msg = $user_acl ? t('That user is now a regular approver') : t('Unable to remove that user as a master approver'); if ($user_acl) { $success = true; } } if ($this->getSanParam('ajaxAction') == 'remove' && $proceed) { $user_acl = $table->delete("acl_id = 'approve_trainings' and user_id = {$id}"); $msg = $user_acl ? t('That user is no longer an approver') : t('Unable to delete that approver'); if ($user_acl) { $success = true; } } // done $_SESSION['status'] = $msg; $this->setNoRenderer(); $output = array('success' => $success, 'msg' => $msg); echo json_encode($output); exit; // no view now } require_once 'models/table/System.php'; require_once 'models/table/Translation.php'; $sysTable = new System(); $labelNames = array(); // input name => key_phrase (changes translation table) $checkboxFields = array('master_approver' => 'allow_multi_approvers'); // field => key phrase (changes _system table) // edit table & data require_once 'views/helpers/EditTableHelper.php'; $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $hideMasterLinks = false; $noDelete = array(); $fieldDefs = array('fullname' => t('Name')); $fieldDefs['approver'] = t('Approver'); if ($this->getSanParam('master_approver') || $this->setting('allow_multi_approvers')) { $fieldDefs['master_approver'] = t('Master Approver'); $hideMasterLinks = true; } $fieldDefs['lnks'] = t('Actions'); $rows = $db->fetchAll("select *,\r\n\t\t\tCONCAT(first_name, CONCAT(' ', last_name)) as fullname, '" . t('Yes') . "' as approver, m1.id as master_approver, user.id as id\r\n\t\t\tfrom user\r\n\t\t\tinner join user_to_acl acl on (acl.user_id = user.id and acl.acl_id = 'approve_trainings')\r\n\t\t\tleft join user_to_acl m1 on (m1.user_id = user.id and m1.acl_id = 'master_approver')\r\n\t\t\twhere user.is_blocked = 0 limit 100"); foreach ($rows as $i => $row) { // lets add some data to the resultset to show in the EditTable $noDelete[] = $row['id']; // add to nodelete array $rows[$i]['fullname'] = htmlspecialchars(ucwords($rows[$i]['fullname']), ENT_QUOTES); // format name if (empty($rows[$i]['master_approver'])) { $rows[$i]['master_approver'] = t('No'); // master approver? $rows[$i]['lnks'] = "<a href='#' onclick='ajaxApprover(\"remove\", {$row['id']});return false'>" . t('Remove') . "</a>"; // links if ($hideMasterLinks) { $rows[$i]['lnks'] = " <a href='#' onclick='ajaxApprover(\"elevate\", {$row['id']});return false'>" . t('Make Master') . '</a>'; } } else { $rows[$i]['master_approver'] = t('Yes'); // is approver? if ($hideMasterLinks) { $rows[$i]['lnks'] = "<a href='#' onclick='ajaxApprover(\"deelevate\", {$row['id']});return false'>" . t('Make Low Level Approver') . '</a>'; } else { $rows[$i]['lnks'] = "<a href='#' onclick='ajaxApprover(\"remove\", {$row['id']});return false'>" . t('Remove') . "</a>"; } // same as first 'remove' link above } } // print a edit table $html = EditTableHelper::generateHtml('Approvers', $rows, $fieldDefs, array(), $noDelete, true); // array(1) and select 1 as id = bugfix: remove delete col $this->view->assign('editTable', $html); // done // process form (copied from other pages) if ($this->getRequest()->isPost()) { // Update db $updateData = array(); // update translation labels $tranTable = new Translation(); foreach ($labelNames as $input_key => $db_key) { if ($this->_getParam($input_key)) { try { $tranTable->update(array('phrase' => $this->_getParam($input_key)), "key_phrase = '{$db_key}'"); $this->viewAssignEscaped($input_key, $this->_getParam($input_key)); } catch (Zend_Exception $e) { error_log($e); } } } // update _system (checkboxes) foreach ($checkboxFields as $input_key => $db_field) { $value = $this->_getParam($input_key) == NULL ? 0 : 1; $updateData[$db_field] = $value; $this->view->assign($input_key, $value); } $sysTable->update($updateData, ''); } else { // view // checkboxes $sysRows = $sysTable->fetchRow($sysTable->select()->limit(1)); foreach ($checkboxFields as $input_key => $field_key) { if (isset($sysRows->{$field_key})) { $this->view->assign($input_key, $sysRows->{$field_key}); } } // labels $t = Translation::getAll(); foreach ($labelNames as $input_key => $db_key) { $this->viewAssignEscaped($input_key, $t[$db_key]); } } // redirect to next page if ($this->_getParam('redirect')) { header("Location: " . $this->_getParam('redirect')); exit; } else { if ($this->_getParam('saveonly')) { $status = ValidationContainer::instance(); $status->setStatusMessage(t('Your settings have been updated.')); } } }