Exemplo n.º 1
0
 /**
  * Get the display name associated to a role's shortname
  * @param string $name the shortname of the role
  * @returns string
  */
 static function getRoleNameFromShortName($name)
 {
     $disp = I2CE_FormStorage::lookupField('role', $name);
     if ($disp === false) {
         I2CE::raiseError("Invalid shortname  for getRoleNameFromShortName: {$name}.");
         return null;
     }
     return $disp;
 }
 protected function loadPrimary()
 {
     if ($this->request_exists('student_id') && in_array('person', $this->formRelationship->getFormNames()) && ($student_id = $this->request('student_id')) && ($pos = strpos($student_id, '|')) !== false && ($id = substr($student_id, $pos + 1)) != '' && ($stc_id = I2CE_FormStorage::lookupField('person_scheduled_training_course', $id, array('scheduled_training_course'), '')) != '' && ($person_id = I2CE_FormStorage::lookupField('person_scheduled_training_course', $id, array('parent'), '')) != '') {
         $formFactory = I2CE_FormFactory::instance();
         if (!($this->primObj = $formFactory->createContainer($stc_id)) instanceof I2CE_Form || $this->formRelationship->getPrimaryForm() != $this->primObj->getName()) {
             I2CE::raiseError("invalid form id :" . print_r($this->request(), true) . "\ndoes not match " . $this->formRelationship->getPrimaryForm());
             return false;
         }
         $this->primObj->populate();
         $this->person_id = $person_id;
     } else {
         return parent::loadPrimary();
     }
 }
 /**
  * Init form storage options
  * @param string $form 
  */
 protected function init_data($form)
 {
     if (in_array($form, $this->init_status)) {
         //already done
         return true;
     }
     if (!parent::init_data($form)) {
         return false;
     }
     $options = $this->getStorageOptions($form);
     if (!$options instanceof I2CE_MagicDataNode) {
         I2CE::raiseError("Invalid storage options for {$form}");
         return false;
     }
     $options = $this->getStorageOptions($form);
     if (!$options instanceof I2CE_MagicDataNode) {
         I2CE::raiseError("Invalid storage options for {$form}");
         return false;
     }
     $directory = false;
     if (!$options->setIfIsSet($directory, 'csd_directory') || !in_array($directory, array('provider', 'service', 'facility', 'organization'))) {
         I2CE::raiseError("No valid defined for {$form}");
         return false;
     }
     if (!is_array($remote_services = I2CE::getConfig()->getAsArray("/modules/forms/storage_options/CSD/remote_services")) || !array_key_exists($directory, $remote_services) || !is_scalar($selected = $remote_services[$directory])) {
         I2CE::raiseError("No remote service directory selected in global CSD  options");
         return false;
     }
     list($t_form, $id) = array_pad(explode('|', $selected, 2), 2, '');
     if ($t_form != 'csd_info_manager' || $id == '0' || !is_array($urls = I2CE_FormStorage::lookupField('csd_info_manager', $id, array('url'), false)) || !array_key_exists('url', $urls) || !$urls['url']) {
         I2CE::raiseError("Invalid connection details from selected service: {$selected}");
     }
     if (!array_key_exists('csd', $this->namespaces[$form])) {
         $this->namespaces[$form]['csd'] = "urn:ihe:iti:csd:2013";
     }
     $cache_time = 0;
     if (is_array($this->global_options) && array_key_exists('cache_time', $this->global_options) && is_scalar($this->global_options['cache_time'])) {
         $cache_time = (int) $this->global_options['cache_time'];
     }
     $options->setIfIsSet($cache_time, "cache_time");
     $cache_time = (int) $cache_time;
     if (!array_key_exists('populate', $this->services[$form])) {
         $this->services[$form]['populate'] = array();
     }
     $populate = array('url' => $urls['url'], 'curl_opts' => array('HEADER' => 0, 'POST' => 1, 'HTTPHEADER' => array('content-type' => 'content-type: text/xml')), 'cache_time' => $cache_time);
     I2CE_Util::merge_recursive($this->services[$form]['populate'], $populate);
     return true;
 }
 public function generate($node)
 {
     if ($this->options['task'] && I2CE_PermissionParser::taskExists($this->options['task']) && !$this->page->hasPermission("task(" . $this->options['task'] . ")", $node) || !($linkedNode = $this->template->appendFileByNode($this->options['template'], 'div', $node)) instanceof DOMNode || !($pageDispNode = $this->template->getElementByName('pager_display', 0, $linkedNode)) instanceof DOMNode || !($pageResultsNode = $this->template->getElementByName('pager_results', 0, $linkedNode)) instanceof DOMNode || !($tbodyNode = $this->template->getElementByName('link_fields', 0, $node)) instanceof DOMNode) {
         return;
     }
     $arg_walker = array();
     $printf_args = $this->options['printf_args'];
     foreach ($printf_args as $i => &$arg) {
         $t_arg = explode(":", $arg);
         if (count($t_arg) > 1) {
             $arg_walker[$i] = $t_arg;
             $arg = $t_arg[0];
         }
     }
     unset($arg);
     $dispData = I2CE_FormStorage::listDisplayFields($this->options['form'], $printf_args, false, $this->options['where'], $this->options['orders'], $this->options['limit']);
     if (count($dispData) == 0) {
         return;
     }
     $pageDispNode->setAttribute('id', 'linked_' . $this->options['form'] . '_pager_display');
     $pageResultsNode->setAttribute('id', 'linked_' . $this->options['form'] . '_results');
     $dispData = $this->paginateList($dispData, array('form' => $this->options['form']), 'linked_' . $this->options['form']);
     $this->template->setDisplayDataImmediate('link_title', $this->options['title']);
     foreach ($dispData as $id => $r_dispData) {
         $dispData = array();
         foreach ($printf_args as $i => $arg) {
             $dispData[$i] = $r_dispData[$arg];
         }
         foreach ($arg_walker as $i => $fields) {
             $val = $dispData[$i];
             $count = 0;
             foreach ($fields as $field) {
                 $count++;
                 if ($count == 1) {
                     continue;
                 }
                 list($wform, $wid) = array_pad(explode('|', $val, 2), 2, '');
                 $val = I2CE_FormStorage::lookupField($wform, $wid, array($field), '');
             }
             $dispData[$i] = $val;
         }
         $text = @vsprintf($this->options['printf'], $dispData);
         //form = person_position
         $linkid = $this->options['form'] . '|' . $id;
         foreach ($this->options['link_field'] as $lfield) {
             list($lform, $lid) = array_pad(explode('|', $linkid, 2), 2, '');
             $linkid = I2CE_FormStorage::lookupField($lform, $lid, array($lfield), '');
         }
         $attrs = array('href' => $this->options['link'] . $linkid);
         $tbodyNode->appendChild($trNode = $this->template->createElement('tr', array('colspan' => 2)));
         $trNode->appendChild($tdNode = $this->template->createElement('td', array('colspan' => 2)));
         $tdNode->appendChild($this->template->createElement('a', $attrs, $text));
     }
 }
 protected function displayResults($semester, $academic_year, $courses, $semester_node)
 {
     $display_GPA = true;
     $accObj = $this->ff->createContainer($academic_year);
     $accObj->populate();
     $acc_year_name = $accObj->getField("name")->getDBValue();
     $this->template->setDisplayDataImmediate("student_results_header", "{$acc_year_name} Semester " . $this->getSemesterName($semester) . " Results", $semester_node);
     $counter = 1;
     $courses = explode(",", $courses);
     foreach ($courses as $course) {
         $row_node = $this->template->appendFileByName("student_view_results_row.html", "tr", "student_results_rows", 0, $semester_node);
         $mark = 0;
         $status = "";
         $grade = "";
         $this->template->setDisplayDataImmediate("results_row_counter", $counter, $row_node);
         list($course_form, $course_id) = array_pad(explode("|", $course, 2), 2, '');
         $field_data = I2CE_FormStorage::lookupField($course_form, $course_id, array('name', 'code', 'training_course_exam_type'), false);
         $this->template->setDisplayDataImmediate("results_row_code", $field_data["code"], $row_node);
         $this->template->setDisplayDataImmediate("results_row_name", $field_data["name"], $row_node);
         $exam_types_array = explode(",", $field_data["training_course_exam_type"]);
         $has_final_exam = $this->has_final_exam($course);
         //if course has final exam,check if is approved,otherwise it is approved
         if ($has_final_exam) {
             $is_approved = $this->is_approved($academic_year, $course);
             if (!$is_approved) {
                 $display_GPA = false;
             }
         } else {
             $is_approved = true;
         }
         foreach ($exam_types_array as $exam_type) {
             $total_marks = "";
             $this->persObj->populateChildren("students_results_grade");
             foreach ($this->persObj->getChildren("students_results_grade") as $resultsObj) {
                 $training = $resultsObj->getField("training")->getDBValue();
                 $results_acc_year = $resultsObj->getField("academic_year")->getDBValue();
                 if ($resultsObj->getField("enroll_course")->getDBValue() != $enroll_id or $training != $course) {
                     continue;
                 }
                 $status = $resultsObj->getField("status")->getDBValue();
                 $grade = $resultsObj->getField("grade")->getDBValue();
                 $total_marks = $resultsObj->getField("total_marks")->getDBValue();
                 $id = $resultsObj->getField("id")->getDBValue();
                 $assessparentObj = $this->ff->createContainer($id);
                 $assessparentObj->populateChildren("students_results");
                 foreach ($assessparentObj->getChildren("students_results") as $assessObj) {
                     $mark = $assessObj->getField("score")->getDBValue();
                     $assessment = $assessObj->getField("training_course_exam_type")->getDBValue();
                     if ($assessment != $exam_type) {
                         continue;
                     }
                     if ($mark == "") {
                         $mark = "-";
                     }
                     $examtypeObj = $this->ff->createContainer($exam_type);
                     $examtypeObj->populate();
                     $exam_type_name = $examtypeObj->getField("name")->getDBValue();
                     $type_node = $this->template->appendFileByName("student_view_results_row_exam_types.html", "div", "results_row_exam_types", 0, $row_node);
                     if ($exam_type == "training_course_exam_type|final" and !$is_approved) {
                         $mark = "-";
                     }
                     $this->template->setDisplayDataImmediate("exam_types_name", $exam_type_name . ": " . $mark, $type_node);
                 }
             }
         }
         if ($status == "") {
             $status = "-";
         }
         if ($grade == "") {
             $grade = "-";
         }
         if ($total_marks == "") {
             $total_marks = "-";
         }
         if (!$is_approved) {
             $status = "-";
             $grade = "-";
             $total_marks = "Waiting Approval";
         }
         $this->template->setDisplayDataImmediate("results_row_total", $total_marks, $row_node);
         $this->template->setDisplayDataImmediate("results_row_grade", $grade, $row_node);
         $this->template->setDisplayDataImmediate("results_row_status", $status, $row_node);
         $counter++;
     }
     $this->persObj->populateChildren("semester_GPA");
     foreach ($this->persObj->getChildren("semester_GPA") as $semGPAObj) {
         if ($semGPAObj->getFIeld("semester")->getDBValue() == $semester and $semGPAObj->getField("registration")->getDBValue() == $this->student_registration["id"]) {
             $GPA = $semGPAObj->getField("GPA")->getDBValue();
         }
     }
     if ($GPA == "") {
         $GPA = "-";
     }
     if (!$display_GPA) {
         $GPA = "-";
     }
     $this->template->setDisplayDataImmediate("semester_gpa", "Semester " . $this->getSemesterName($semester) . " GPA " . $GPA, $semester_node);
     return $counter;
 }
 /**
  * Init form storage options
  * @param string $form 
  */
 protected function init_data($form)
 {
     if (in_array($form, $this->init_status)) {
         //already done
         return true;
     }
     if (!parent::init_data($form)) {
         return false;
     }
     if (!array_key_exists('csd', $this->namespaces[$form])) {
         $this->namespaces[$form]['csd'] = "urn:ihe:iti:csd:2013";
     }
     $options = $this->getStorageOptions($form);
     if (!$options instanceof I2CE_MagicDataNode) {
         I2CE::raiseError("Invalid storage options for {$form}");
         return false;
     }
     $directory = false;
     if (!$options->setIfIsSet($directory, 'csd_directory') || !in_array($directory, array('provider', 'service', 'facility', 'organization'))) {
         I2CE::raiseError("No valid defined for {$form}");
         return false;
     }
     if (!is_array($this->global_options) || !array_key_exists('remote_services', $this->global_options) || !is_array($remote_services = $this->global_options['remote_services']) || !array_key_exists($directory, $remote_services) || !is_scalar($selected = $remote_services[$directory])) {
         I2CE::raiseError("No remote service directory selected in global CSD  options");
         return false;
     }
     list($t_form, $id) = array_pad(explode('|', $selected, 2), 2, '');
     if ($t_form != 'csd_info_manager' || $id == '0' || !is_array($urls = I2CE_FormStorage::lookupField('csd_info_manager', $id, array('url', 'url_updating'), false)) || !array_key_exists('url', $urls) || !$urls['url'] || !array_key_exists('url_updating', $urls)) {
         I2CE::raiseError("Invalid connection details from selected service: {$selected}");
     }
     $curl_opts = array('HEADER' => 0, 'POST' => 1, 'HTTPHEADER' => array('content-type' => 'content-type: text/xml'));
     if (is_array($auth = I2CE_FormStorage::lookupField('csd_info_manager', $id, array('user', 'password'), false)) && array_key_exists('user', $auth) && $auth['user']) {
         $curl_opts['USERPWD'] = $auth['password'];
         $curl_opts['USERAGENT'] = $auth['user'];
     }
     if (is_array($ssl = I2CE_FormStorage::lookupField('csd_info_manager', $id, array('ssl_version'), false)) && array_key_exists('ssl_version', $ssl) && $ssl['ssl_version']) {
         $curl_opts['SSLVERSION'] = $ssl['ssl_version'];
         $curl_opts['SSL_VERIFYPEER'] = false;
         $curl_opts['SSL_VERIFYHOST'] = false;
         //or 2?
     }
     $cache_time = 0;
     if (is_array($this->global_options) && array_key_exists('cache_time', $this->global_options) && is_scalar($this->global_options['cache_time'])) {
         $cache_time = (int) $this->global_options['cache_time'];
     }
     $options->setIfIsSet($cache_time, "cache_time");
     $cache_time = (int) $cache_time;
     $updating = array('delete', 'create', 'update');
     $reading = array('getRecords', 'populate');
     foreach ($reading as $endpoint) {
         if (!array_key_exists($endpoint, $this->services[$form])) {
             $this->services[$form][$endpoint] = array();
         }
     }
     if ($urls['url_updating']) {
         foreach ($updating as $endpoint) {
             if (!array_key_exists($endpoint, $this->services[$form])) {
                 $this->services[$form][$endpoint] = array();
             }
         }
     }
     foreach ($this->services[$form] as $endpoint => &$data) {
         if (in_array($endpoint, $updating)) {
             if ($urls['url_updating']) {
                 $data['url'] = $urls['url_updating'];
             }
         } else {
             if ($urls['url']) {
                 $data['url'] = $urls['url'];
             }
         }
         I2CE_Util::merge_recursive($data['curl_opts'], $curl_opts);
         if ($cache_time && in_array($endpoint, $reading) && !array_key_exists('cache_time', $data)) {
             $data['cache_time'] = $cache_time;
         }
     }
     return true;
 }
 public function generate($node)
 {
     if (!$node instanceof DOMNode || !$this->primaryObject instanceof I2CE_Form || I2CE_PermissionParser::taskExists($this->options['task']) && !$this->page->hasPermission("task(" . $this->options['task'] . ")", $node) || !($linkedNode = $this->template->appendFileByNode($this->options['template'], 'div', $node)) instanceof DOMNode || !($tbodyNode = $this->template->getElementByName('child_fields', 0, $node)) instanceof DOMNode) {
         return false;
     }
     $added = 0;
     if (count($this->options['action_links']) > 0 && ($ulNode = $this->template->getElementByName('child_links', 0, $linkedNode)) instanceof DOMNode) {
         $added = $this->addLinks('li', $this->options['action_links'], $ulNode);
     }
     if ($added == 0 && ($containerNode = $this->template->getElementByName('child_actions', 0, $linkedNode)) instanceof DOMNode) {
         $this->template->removeNode($containerNode);
     }
     $this->template->setDisplayDataImmediate('child_title', $this->options['title'], $linkedNode);
     $dispDatas = array();
     $arg_walker = array();
     if ($this->options['printf'] && is_array($this->options['printf_args'])) {
         foreach ($this->options['printf_args'] as $i => &$arg) {
             $t_arg = explode(":", $arg);
             if (count($t_arg) > 1) {
                 $arg_walker[$i] = $t_arg;
                 $arg = $t_arg[0];
             }
         }
         unset($arg);
         $dispDatas = I2CE_FormStorage::listDisplayFields($this->options['form'], $this->options['printf_args'], $this->primaryObject->getNameId(), $this->options['where'], $this->options['orders'], $this->options['limit']);
         $ids = array_keys($dispDatas);
     } else {
         $ids = I2CE_FormStorage::search($this->options['form'], $this->primaryObject->getNameId(), $this->options['where'], $this->options['orders'], $this->options['limit']);
     }
     if (count($ids) == 0) {
         return false;
     }
     foreach ($ids as $id) {
         $text = $this->options['title'];
         //default text for child in case printf wasn't set.
         if (array_key_exists($id, $dispDatas) && is_array($dispDatas)) {
             $dispFields = $dispDatas[$id];
             foreach ($this->options['printf_args'] as $i => $arg) {
                 $dispData[$i] = $dispFields[$arg];
             }
             foreach ($arg_walker as $i => $fields) {
                 $val = $dispData[$i];
                 $count = 0;
                 foreach ($fields as $field) {
                     $count++;
                     if ($count == 1) {
                         continue;
                     }
                     list($wform, $wid) = array_pad(explode('|', $val, 2), 2, '');
                     $val = I2CE_FormStorage::lookupField($wform, $wid, array($field), '');
                 }
                 $dispData[$i] = $val;
             }
             $text = @vsprintf($this->options['printf'], $dispData);
         }
         $this->generateAjaxLink($id, $text, $tbodyNode);
     }
 }
Exemplo n.º 8
0
 static function generateRegistrationNumber($program, $inst_id)
 {
     list($form, $prog_id) = array_pad(explode("|", $program, 2), 2, "");
     $program_name = I2CE_FormStorage::lookupField($form, $prog_id, array("name"), false);
     $program_name = $program_name["name"];
     list($institution_form, $institution_id) = array_pad(explode("|", $inst_id), 2, "");
     $where = array("operator" => "FIELD_LIMIT", "field" => "id", "style" => "equals", "data" => array("value" => $institution_id));
     $last_reg_num = I2CE_FormStorage::lookupField($institution_form, $institution_id, array("last_reg_num", "code"), false);
     $inst_code = $last_reg_num["code"];
     $last_reg_num = $last_reg_num["last_reg_num"];
     $reg_num = ++$last_reg_num;
     $year = date("Y");
     $st_reg_num = $year . "-" . $inst_code . "-" . $reg_num;
     return $st_reg_num;
 }
 /**
  * Gets the list (in the format of {I2CE_FormStorage::listFields()} of allowed confirmations for the indicated person
  * @param iHRIS_Person $person
  * @param boolean $only_new.  Defaults to false.  it true, we only check for confirmations that this person does not already have
  * @returns array
  */
 public function getAllowedConfirmations($person, $only_new = false)
 {
     if (!$person instanceof iHRIS_Person) {
         return array();
     }
     $allowed = array();
     $conf_type_fields = array('name', 'job', 'probation_period');
     $confirmations = I2CE_FormStorage::listFields('confirmation_type', $conf_type_fields);
     if (count($confirmations) == 0) {
         return array();
     }
     foreach ($confirmations as $id => $vals) {
         $job = false;
         if (array_key_exists('job', $vals) && $vals['job']) {
             $job = $vals['job'];
         }
         //there is no job associted to this confirmation, all positions are valid.
         $where = array('operator' => 'FIELD_LIMIT', 'field' => 'start_date', 'style' => 'not_null');
         if ($job) {
             $pers_positions = I2CE_FormStorage::listFields('person_position', array('start_date', 'position'), $person->getNameId(), $where, 'start_date');
             if (!is_array($pers_positions) || count($pers_positions) == 0) {
                 continue;
             }
             $position = false;
             foreach ($pers_positions as $pp_id => $pp_data) {
                 //we need to check if this posiiton has the correct job
                 $pos_id = substr($pp_data['position'], 9);
                 if (!$pos_id || !($pos_job = I2CE_FormStorage::lookupField('position', $pos_id, 'job'))) {
                     continue;
                 }
                 if ($pos_job != $job) {
                     continue;
                 }
                 $position = $pp_data;
                 break;
             }
             if (!$position) {
                 //no mathching posiiton
                 continue;
             }
         } else {
             $positions = I2CE_FormStorage::listFields('person_position', array('start_date'), $person->getNameId(), $where, 'start_date', 1);
             if (!is_array($positions) || count($positions) == 0) {
                 //person has no valid positions
                 continue;
             }
             reset($positions);
             $position = current($positions);
         }
         if (array_key_exists('probation_period', $vals) && $vals['probation_period'] > 0) {
             if (!array_key_exists('start_date', $position) || !$position['start_date']) {
                 //there was never a position for which can consider this person valid
                 continue;
             }
             //now we need to check the probationary period
             $pos_start_date = I2CE_Date::fromDB($position['start_date']);
             if (!$pos_start_date->isValid()) {
                 continue;
             }
             //probation period is measure in months.  this is an approximation.  we really need to use the php 5.3 date time class.
             $prob_valid_month = mktime(0, 0, 0, date("m") - (int) $vals['probation_period'], date("d"), date("Y"));
             if ($prob_valid_month === false) {
                 I2CE::raiseError("Difficulty in calculating date offest");
                 continue;
             }
             $prob_valid = I2CE_Date::now(I2CE_Date::DATE, $prob_valid_month);
             if (!$prob_valid->isValid() || $prob_valid->before($pos_start_date)) {
                 //comprare returns -1 if  $prob_valid is before $pos_start_data
                 continue;
             }
             //we have a position which is  valid for this confirmation type
         }
         if ($only_new) {
             $confirm_where = array('operator' => 'FIELD_LIMIT', 'field' => 'confirmation_type', 'style' => 'equals', 'data' => array('value' => 'confirmation_type|' . $id));
             if (count(I2CE_FormStorage::search('confirmation', $person->getNameId(), $confirm_where)) > 0) {
                 continue;
             }
         }
         //we made it to here, then the confirmation type is allowed
         $allowed[$id] = $vals;
     }
     return $allowed;
 }
Exemplo n.º 10
0
 /**
  * Walk up a form/linked  field path until. Return the id of the top form.
  * $param mixed. Either an array of string or a colon-sepearted string.  (imploded) values is a string of the form:
  *    form1(+field1):...:formM(+fieldM):..:fieldN     
  *    there needs to be at least one colon/array needs to be at least two in length
  * @param string $formid  string of the form "$form|$id".  the starting value.  $form should be one of formX above (e.g. the dbvalue of a map field)
  * @returns mixed. False on failure, string of the form "$form|$id" on success
  */
 public static function walkupFieldPath($field_path, $formid)
 {
     if (is_string($field_path)) {
         $field_path = explode(':', $field_path);
     }
     if (!is_array($field_path) || count($field_path) < 2) {
         return false;
     }
     list($form, $form_id) = array_pad(explode('|', $formid, 2), 2, '');
     if (strlen($form_id) == 0 || strlen($form_id) == 0) {
         return false;
     }
     $form_path = array();
     $link_field_path = array();
     $len = count($field_path);
     for ($i = $len - 1; $i >= 0; $i--) {
         $data = explode('+', $field_path[$i], 2);
         if (count($data) == 2) {
             list($form, $link_field) = $data;
         } else {
             $link_field = $form;
             $form = $field_path[$i];
         }
         $form_path[$i] = $form;
         $link_field_path[$i] = $link_field;
     }
     //ksort($form_path);
     //ksort($link_field_path);
     //now we need to see if we can find the form.
     if (($form_index = array_search($form, $form_path)) === false) {
         //the resitrcted form is not among the forms in the form path.
         return false;
     }
     //now we need to walk up the form path until we get to the id of the top most form (e.g. country) for the resitrcted field
     //example:  formid = country|10.  stop this is the top
     //example:  formid = region|10
     //          get dbvalue country field in region|10.  this is the top
     //example:  formid = distrct|10
     //          get dbvalue region field in district|10.  suppose it is refgion|10
     //          get dbvalue country field in region|10.  this is the top
     for ($i = $form_index; $i < $len - 1; $i++) {
         //if (($form_id = I2CE_FormStorage::search($form_path[$i],false,$where,array(),1)) === false) {
         if (($formid = I2CE_FormStorage::lookupField($form_path[$i], $form_id, $link_field_path[$i])) === false) {
             //could not walk up the path.
             return false;
         }
         list($form, $form_id) = array_pad(explode('|', $formid, 2), 2, '');
         if ($form != $link_field_path[$i] || strlen($form_id) == 0 || strlen($form_id) == 0) {
             //be extra sutre that no invalid id received
             return false;
         }
     }
     //$formid is now the id of the top form.
     return $formid;
 }
 /**
  * Get the forms ids for joining on a given field of  a named child form's with the named parent form on a given field
  * @param string $childFormName the name of the child form in the relationship
  * @param string $parentForm
  * @param string $parentId
  * @param array $joinData The array containg the join data
  * @param array $where
  * @param array $limit
  * @param array $fields keys are relationship formnames, values are array of fields we want returned
  * @param array $ordering keys are relationship formnames, values are array of fields we want ordered by
  * @return mixed. An array of form ids
  */
 public function getFormDataJoiningByID_fields($childFormName, $parentForm, $parentId, $joinData, $where, $limit, $fields, $ordering)
 {
     if (!is_array($joinData)) {
         I2CE::raiseError("Join data  specified for parent_form/{$childFormName}");
         return array();
     }
     foreach (array('parent', 'child') as $field) {
         if (!array_key_exists($field, $joinData) || !is_string($joinData[$field]) || strlen($joinData[$field]) == 0) {
             I2CE::raiseError("Join {$field} field not specified for parent_form/{$childFormName}");
             return array();
         }
     }
     $form = $this->getForm($childFormName);
     $pfield = $joinData['parent'];
     $cfield = $joinData['child'];
     $pData = I2CE_FormStorage::lookupField($parentForm, $parentId, array($pField), '');
     list($pForm, $pId) = array_pad(explode("|", $pData, 2), 2, '');
     //this will give the linked form and id
     if (!array_key_exists($childFormName, $fields) || !is_array($fields[$childFormName])) {
         $fields[$childFormName] = array();
     }
     if (!array_key_exists($childFormName, $ordering)) {
         $ordering[$childFormName] = array();
     }
     $sub_where = array('operator' => 'FIELD_LIMIT', 'field' => $cfield, 'style' => 'equals', 'data' => array('value' => $pForm . '|' . $pId));
     if (count($where) > 0) {
         $where = array('operator' => 'AND', 'operand' => array($sub_where, $where));
     } else {
         $where = $sub_where;
     }
     if ($this->use_disp_fields) {
         return I2CE_FormStorage::listFields($form, $fields[$childFormName], false, $where, $ordering[$childFormName], $limit, -1, $this->use_cache);
     } else {
         return I2CE_FormStorage::listDisplayFields($form, $fields[$childFormName], false, $where, $ordering[$childFormName], $limit, -1, $this->use_cache);
     }
     //return " JOIN $refChildForm AS `$childFormName` ON `$childFormName`.`{$joinData['child']}` = `parent_form`.`{$joinData['parent']}` " ;
 }
Exemplo n.º 12
0
 protected function actionDisplayList_row($list, $listConfig)
 {
     $odd = false;
     if ($listConfig['type']) {
         $link = 'auto_list?type=' . $listConfig['type'];
     } else {
         $link = 'auto_list?form=' . $listConfig['form'];
     }
     $imported = $this->template->loadFile("lists_type_row.html", "tr", "lists_body");
     if (!$imported instanceof DOMNode) {
         I2CE::raiseError("Could not find lists_type_row.html");
         return false;
     }
     $remaped = $this->template->loadFile("lists_type_row_remapped.html", "tr", "lists_body");
     if (!$remaped instanceof DOMNode) {
         $remaped = $imported;
     }
     $append = $this->template->getElementById('lists_body');
     if (!$append instanceof DOMNode) {
         I2CE::raiseError("Don't know where to append list rows");
         return false;
     }
     foreach ($list as $data) {
         $id = substr($data['value'], strlen($listConfig['form']) + 1);
         if (in_array($id, $this->remap_ids) && ($remap = I2CE_FormStorage::lookupField($listConfig['form'], $id, 'remap', ''))) {
             $imported_row = $remaped->cloneNode(true);
             if ($listConfig['type']) {
                 $url = 'index.php/auto_list?type=' . $listConfig['type'];
             } else {
                 $url = 'index.php/auto_list?form=' . $listConfig['type'];
             }
             $url .= '&id=' . $listConfig['form'] . '|' . $id;
             $this->template->setDisplayDataImmediate('remapped_link', $url, $imported_row);
             list($rform, $rid) = array_pad(explode('|', $remap, 2), 2, '');
             $this->template->setDisplayDataImmediate('remapped_value', I2CE_List::lookup($rid, $rform), $imported_row);
         } else {
             $imported_row = $imported->cloneNode(true);
         }
         $this->template->appendNode($imported_row, $append);
         if ($odd) {
             $this->template->setNodeAttribute("class", "even", $imported_row);
         }
         $odd = !$odd;
         $this->template->setDisplayDataImmediate("lists_row_link", $link . '&id=' . $data['value'], $imported_row);
         $this->template->setDisplayDataImmediate("lists_row_name", $data['display'], $imported_row);
     }
     return true;
 }
 protected function showStudents()
 {
     if (!($listNode = $this->template->getElementByID("existing_student_list")) instanceof DOMNode) {
         return;
     }
     foreach ($this->students as $formid => $data) {
         list($form, $id) = array_pad(explode("|", $formid, 2), 2, "");
         if ($form != "person" || !$id) {
             continue;
         }
         $student_name = I2CE_FormStorage::lookupField("person", $id, array('firstname', 'surname'), " ");
         $aNode = $this->template->createElement("a", array(href => "view?id=" . $formid), $student_name);
         $liNode = $this->template->createElement("li");
         $this->template->appendNode($aNode, $liNode);
         $this->template->appendNode($liNode, $listNode);
     }
 }
 public function getEnrolledStudents()
 {
     if ($this->id == 0) {
         return array();
     }
     $where = array('operator' => 'AND', 'operand' => array(0 => array('operator' => 'FIELD_LIMIT', 'field' => 'scheduled_training_course', 'style' => 'equals', 'data' => array('value' => $this->getNameId())), 1 => array('operator' => 'OR', 'operand' => array(0 => array('operator' => 'FIELD_LIMIT', 'field' => 'attending', 'style' => 'equals', 'data' => array('value' => 1)), 1 => array('operator' => 'FIELD_LIMIT', 'field' => 'attending', 'style' => 'null', 'data' => array())))));
     $pstcs = I2CE_FormStorage::listFields('person_scheduled_training_course', array(), true, $where);
     $list = array();
     foreach ($pstcs as $pstc_id => $pstc) {
         if (strpos($pstc['parent'], '|') === false) {
             continue;
         }
         list($parent, $id) = explode('|', $pstc['parent'], 2);
         if ($parent != 'person') {
             continue;
         }
         $list[$pstc['parent']] = I2CE_FormStorage::lookupField('person', $id, array('surname', 'firstname'), false);
         $list[$pstc['parent']]['person_scheduled_training_course'] = 'person_scheduled_training_course|' . $pstc_id;
     }
     uasort($list, array($this, 'surnameSort'));
     return $list;
 }
 protected function appendExamTypesHeaders($tr)
 {
     list($form, $id) = array_pad(explode("|", $this->course_id, 2), 2, '');
     $field_data = I2CE_FormStorage::lookupField($form, $id, array('training_course_exam_type'), false);
     $this->exam_types = explode(",", $field_data["training_course_exam_type"]);
     foreach ($this->exam_types as $exam_type) {
         list($form, $id) = array_pad(explode("|", $exam_type, 2), 2, '');
         $field_data = I2CE_FormStorage::lookupField($form, $id, array('name'), false);
         $th = $this->template->createElement("th", array("width" => "10", "align" => "center"), $field_data["name"]);
         $this->template->appendNode($th, $tr);
     }
 }
 protected function action()
 {
     $role = $this->getUser()->role;
     if ($role != "student") {
         $this->userMessage("Only A Student Can Enroll Into Courses");
         $this->setRedirect("view?id=" . $this->Get("parent"));
         return false;
     }
     iHRIS_AcademicYear::ensureAcademicYear();
     $this->person_id = $this->Get("parent");
     $this->getProgramAndSemester();
     ############Deny Course Registration For A Student Dropped Out Of Semester###################
     $persObj = I2CE_FormFactory::instance()->createContainer($this->person_id);
     $persObj->populateChildren("drop_semester");
     foreach ($persObj->getChildren("drop_semester") as $dropSemObj) {
         //check to insure that this drop semester is the one that belongs to the current registration
         if ($dropSemObj->getField("registration")->getDBValue() != $this->student_registration["id"]) {
             continue;
         }
         $dropSemObj->populateChildren("resume_semester");
         $resSemObj = $dropSemObj->getChildren("resume_semester");
         if (count($resSemObj) == 0) {
             $this->userMessage("You Are Currently Dropped From A Semester,Course Enrollment Not Allowed");
             $this->setRedirect("view?id=" . $this->person_id);
             return;
         }
     }
     ############End Of Denying Course Registration For A Student Dropped Out Of Semester###################
     ############checking if course enrollment closed#################
     $username = $this->getUser()->username;
     $this->training_institution = iHRIS_PageFormLecturer::fetch_institution($username);
     $where = array("operator" => "FIELD_LIMIT", "field" => "training_institution", "style" => "equals", "data" => array("value" => $this->training_institution));
     $fields = I2CE_FormStorage::listFields("schedule_course_enrollment", array("start_date", "end_date"), false, $where);
     foreach ($fields as $id => $field) {
         $start_date = $field["start_date"];
         $end_date = $field["end_date"];
     }
     if (count($fields) == 0) {
         $this->userMessage("Course Registration Closed");
         $this->setRedirect("view?id=" . self::$person_id);
         return false;
     } else {
         $start_date = strtotime($start_date);
         $end_date = strtotime($end_date);
         $today = strtotime(date("Y-m-d"));
         if ($today > $end_date) {
             $this->userMessage("Course Registration Closed");
             $this->setRedirect("view?id=" . self::$person_id);
             return false;
         }
     }
     ########### End checking of course enrollment deadline #####################
     ########### Check if this student is not discontinued  #####################
     if ($this->check_discontinue($this->person_id)) {
         $this->userMessage("You have discontinued from this program!!!");
         $this->setRedirect("view?id=" . $this->person_id);
         return false;
     }
     ########### End of checking if a student has discontinued #################
     ########### If its a new semester then increment the semester and level ################
     ######get total number of semesters######
     list($prog_form, $prog_id) = array_pad(explode("|", $this->program, 2), 2, "");
     $total_sems = I2CE_FormStorage::lookupField("training_program", $prog_id, array("total_semesters"), false);
     $total_semesters = $total_sems["total_semesters"];
     ######end of getting total number of semesters######
     ######get passing score######
     list($inst_form, $inst_id) = array_pad(explode("|", $this->training_institution, 2), 2, "");
     $pass_score = I2CE_FormStorage::lookupField("training_institution", $inst_id, array("passing_score"), false);
     $this->passing_score = $pass_score["passing_score"];
     ######end of getting passing score######
     $semester_name = self::getSemesterName($this->curr_semester);
     $where_GPA = array("operator" => "AND", "operand" => array(0 => array("operator" => "FIELD_LIMIT", "field" => "parent", "style" => "equals", "data" => array("value" => $this->person_id)), 1 => array("operator" => "FIELD_LIMIT", "field" => "semester", "style" => "equals", "data" => array("value" => $this->curr_semester))), 2 => array("operator" => "FIELD_LIMIT", "field" => "registration", "style" => "equals", "data" => array("value" => $this->student_registration["id"])));
     ######if GPA for current semester available then increment the semester######
     $sem_GPA = I2CE_FormStorage::Search("semester_GPA", false, $where_GPA);
     if (count($sem_GPA) > 0 and $semester_name < $total_semesters) {
         $regObj = $this->factory->createContainer($this->student_registration["id"]);
         list($form, $level) = array_pad(explode("|", $this->curr_level, 2), 2, "");
         $semester_name = ++$semester_name;
         if ($semester_name % 2 != 0) {
             $new_level = ++$level;
         }
         $new_semester = "semester|" . $semester_name;
         $user = new I2CE_User();
         $regObj->populate();
         $regObj->getField("semester")->setFromDB($new_semester);
         if ($semester_name % 2 != 0) {
             $regObj->getField("academic_level")->setFromDB("academic_level|" . $new_level);
         }
         $regObj->save($user);
     }
     ########### End of incrementing the semester and level ############
     $this->getProgramCourses($this->curr_semester);
     $this->getElectiveCourses($this->curr_semester);
     $this->getPreviousSemesterCourses($this->curr_semester);
     if (count($this->subject_courses) == 0 and count($this->elective_courses) == 0) {
         $this->userMessage("No courses defined into the system,try later on!!!");
         $this->setRedirect("view?id=" . $this->person_id);
     }
     $this->displayCourses($this->subject_courses, "subject", "Subject Courses");
     if (count($this->elective_courses) > 0) {
         $this->displayCourses($this->elective_courses, "elective", "Elective Courses");
     }
     //append hidden values to be used on the onload
     if (!($hidden = $this->template->getElementByID("hidden_values")) instanceof DOMNode) {
         return;
     }
     $input = $this->template->createElement("input", array("type" => "hidden", "name" => "person_id", "value" => $this->person_id));
     $this->template->appendNode($input, $hidden);
     $input = $this->template->createElement("input", array("type" => "hidden", "name" => "curr_semester", "value" => $this->curr_semester));
     $this->template->appendNode($input, $hidden);
     if (!($div = $this->template->getElementByID("button")) instanceof DOMNode) {
         return;
     }
     $input = $this->template->createElement("input", array("type" => "submit", "value" => "Save"));
     $this->template->appendNode($input, $div);
 }
 protected function addToDiscontinued($reason, $discoForm)
 {
     if (!($discoObj = $this->ff->createContainer($discoForm)) instanceof I2CE_Form) {
         I2CE::raiseError("invalid Object");
         return false;
     }
     $discoObj->populate();
     $id = explode("|", $discoForm);
     if (count($id) == 2) {
         $id = $id[1];
         $fields = I2CE_FormStorage::lookupField("discontinued", $id, array("reason"), false);
         $reason = $reason . "," . $fields["reason"];
         $reasons_array = explode(",", $reason);
         $reasons = array_unique($reasons_array);
         $reason = implode(",", $reasons);
     }
     $date_disco = date("Y-m-d");
     $discoObj->getField("date_discontinued")->setFromDB($date_disco);
     $discoObj->getField("registration_number")->setFromPost($this->reg_num);
     $discoObj->getField("registration")->setFromDB($this->student_registration["id"]);
     $discoObj->getField("reason")->setFromDB($reason);
     $discoObj->getField("recommendations")->setFromDB("recommendations|FD");
     $discoObj->getField("parent")->setFromPost($this->person_id);
     $discoObj->getField("academic_year")->setFromDB($this->academic_year_id);
     $discoObj->save($this->user);
 }