/** * @param DOMNode $node * @param I2CE_Template $template * @param DOMNode $form_node * */ public function processDOMEditable_reportSelect($node, $template, $form_node) { $mf = I2CE_ModuleFactory::instance(); if (!$mf->isEnabled('CustomReports-Selector')) { return false; } $template->addHeaderLink("mootools-more.js"); $template->addHeaderLink("getElementsByClassName-1.0.1.js"); $template->addHeaderLink("I2CE_ClassValues.js"); $template->addHeaderLink("I2CE_Window.js"); $template->addHeaderLink("I2CE_ToggableWindow.js"); $template->addHeaderLink("I2CE_TreeSelect.js"); $template->addHeaderLink('Observer.js'); $template->addHeaderLink('Autocompleter.js'); $template->addHeaderLink('Autocompleter.css'); $template->addHeaderLink('I2CE_TreeSelectAutoCompleter.js'); $template->addHeaderLink("Tree.css"); $style = 'default'; if ($form_node->hasAttribute('show')) { $style = $this->ensureEditStyle($form_node->getAttribute('show')); } $styles = array($style); if ($style != 'default') { $styles[] = 'default'; } foreach ($styles as $style) { $edit_path = "meta/reportSelect/{$style}"; $report_path = "{$edit_path}/reportView"; if (!$this->optionsHasPath($edit_path) || !is_array($options = $this->getOptionsByPath($edit_path))) { continue; } if (!$this->optionsHasPath($report_path) || !is_scalar($reportView = $this->getOptionsByPath($report_path))) { continue; } $report = false; $relationship = false; $form = false; I2CE::getConfig()->setIfIsSet($report, "/modules/CustomReports/reportViews/{$reportView}/report"); if (!$report) { continue; } I2CE::getConfig()->setIfIsSet($relationship, "/modules/CustomReports/reports/{$report}/relationship"); if (!$relationship) { continue; } $form = false; $reportform_path = "meta/reportSelect/{$style}/reportform"; $reportform = 'primary_form'; if ($this->optionsHasPath($reportform_path)) { //we are not using the primary form in the relationship, instead we are using a named form. $reportform = $this->getOptionsByPath($reportform_path); if ($reportform == 'primary_form') { I2CE::getConfig()->setIfIsSet($form, "/modules/CustomReports/relationships/{$relationship}/form"); } else { try { $relObj = new I2CE_FormRelationship($relationship); } catch (Exception $e) { continue; } $form = $relObj->getForm($reportform); } } else { //we use the primary form I2CE::getConfig()->setIfIsSet($form, "/modules/CustomReports/relationships/{$relationship}/form"); } if (!$form) { continue; } if (!$this->canSelectAnyForm()) { $form_path = "meta/form"; if (!$this->optionsHasPath($form_path) || !is_array($forms = $this->getOptionsByPath($form_path))) { continue; } if (!in_array($form, $forms)) { continue; } } $printf_path = "meta/display/{$form}/{$style}/printf"; $printfargs_path = "meta/display/{$form}/{$style}/printf_args"; if (!$this->optionsHasPath($printf_path) || !is_string($printf = $this->getOptionsByPath($printf_path))) { continue; } if (!$this->optionsHasPath($printfargs_path) || !is_array($printfargs = $this->getOptionsByPath($printfargs_path))) { continue; } if (strlen($printf) == 0) { continue; } if (count($printfargs) == 0) { continue; } ksort($printfargs); $disp = $this->_getDisplayValue(null, $style); $node->setAttribute('id', $this->getHTMLName()); $options = array('reportview' => $reportView, 'printf' => $printf, 'printfargs' => $printfargs, 'display' => $disp, 'value' => $this->getDBValue(), 'reportform' => $reportform); $no_limits_path = "meta/display/{$form}/{$style}/no_limits"; if ($this->optionsHasPath($no_limits_path) && $this->getOptionsByPath($no_limits_path)) { $options['contentid'] = 'report_results'; } else { $options['contentid'] = 'report_results_with_limits'; } $options['multi_select'] = 1; if ($template->addReportSelector($node, $options)) { return true; } } return false; }
/** *Loads in the requeted data from the relationship * @returns boolean True on success */ protected function loadData($as_iterator = true) { $fields = $this->getFields(); $ordering = $this->getOrdering(); I2CE::longExecution(array("max_execution_time" => 1800)); if (!$as_iterator) { $this->data = $this->formRelationship->getFormData($this->primObj->getName(), $this->primObj->getId(), $fields, $ordering, false); if (!is_array($data)) { I2CE::raiseError("No Data"); return false; } } else { $data = $this->formRelationship->getFormData($this->primObj->getName(), $this->primObj->getId(), $fields, $ordering, true); $this->data = $this->sortIterator($data); } return true; }
protected function setHeaderVars($segment) { $rel_base = '/modules/CustomReports/relationships'; if (array_key_exists('relationship_base', $this->args) && is_scalar($this->args['relationship_base'])) { $rel_base = $this->args['relationship_base']; } $use_cache = I2CE_ModuleFactory::instance()->isEnabled('CachedForms'); if (array_key_exists('use_cache', $this->args)) { $use_cache = $this->args['use_cache']; } if ($use_cache) { $cache_callback = array('I2CE_CachedForm', 'getCachedTableName'); } else { $cache_callback = null; } try { if (!array_key_exists('header_relationship', $this->args) || !is_string($this->args['header_relationship']) || strlen($this->args['header_relationship']) == 0 || !($formRelationship = new I2CE_FormRelationship($this->args['header_relationship'], $rel_base, $cache_callback)) instanceof I2CE_FormRelationship || $formRelationship->getPrimaryForm() != $this->primObj->getName()) { return; } $fields = $this->getFields(); $data = $formRelationship->getFormData($this->primObj->getName(), $this->primObj->getId(), $fields, array(), true); $row = 0; foreach ($data as $formfields) { if (!$this->setData($segment, $row, $formfields, $formRelationship)) { I2CE::raiseError("Error setting data for row: {$row}"); return false; } break; //only do one row } } catch (Exception $e) { } }
public function streamRaw($ids = false, $last_modified = -1, $headers = false, $pre = '', $post = '', $wrap = true) { $ff = I2CE_FormFactory::instance(); $form_name = $this->relObj->getPrimaryForm(); I2CE::raiseError("Primary form = {$form_name}"); if (!is_array($ids)) { $ids = $ff->getRecords($form_name, $last_modified); } else { $t_ids = $ids; $ids = array(); foreach ($t_ids as $id) { list($form, $fid) = array_pad(explode("|", $id, 2), 2, ''); if ($fid != '' and $fid != '0') { $ids[] = $fid; } } } try { $formRelationship = new I2CE_FormRelationship($this->relationship); } catch (Exception $e) { I2CE::raiseError("Could not create form relationship : " . $this->args['relationship']); return false; } $formRelationship->useRawFields(); $formfields = array(); foreach ($formRelationship->getFormNames() as $formName) { if (!($form = $formRelationship->getForm($formName)) || !($formObj = $ff->createContainer(array($form, 0))) instanceof I2CE_Form) { continue; } $formfields[$formName] = array(); foreach ($formObj->getFieldNames() as $fieldName) { if (!($fieldObj = $formObj->getField($fieldName)) instanceof I2CE_FormField || !$fieldObj->isInDB()) { continue; } $formfields[$formName][] = $fieldName; } $cachefields = array("created", "last_modified", "parent"); foreach ($cachefields as $cachedfieldName) { $formfields[$formName][] = $cachedfieldName; } } I2CE::longExecution(array("max_execution_time" => 1800)); $results = $this->getCache($ids, $last_modified); if ($errors = I2CE_Dumper::cleanlyEndOutputBuffers()) { I2CE::raiseError("Got errors:\n{$errors}"); } if (array_key_exists('HTTP_HOST', $_SERVER)) { if (!is_array($headers)) { $headers = array('Content-Type: text/xml'); } foreach ($headers as $header) { header($header); } } echo "<?xml version='1.0'?>\n"; flush(); if ($pre) { echo $pre; flush(); } echo "<!-- Contains " . count($ids) . " records -->\n"; flush(); if ($wrap) { echo "<relationshipCollection name='" . $formRelationship->getPrimaryFormName() . "'>\n"; flush(); } $rec = 0; foreach ($ids as $id) { I2CE::longExecution(array("max_execution_time" => 1800)); $doc = new DOMDocument(); $doc->loadXML("<relationship/>"); $node = $doc->documentElement; $formRelationship->getFormData($form_name, $id, $formfields, array(), $node); echo "<!-- Record #: " . $rec . "-->"; echo $doc->saveXML($doc->documentElement) . "\n"; flush(); $rec++; } if ($wrap) { echo "</relationshipCollection>"; flush(); } if ($post) { echo $post; flush(); } flush(); }
protected function getLimitVars() { $limit_vars = array(); //$this->defaultOptions['nested_limits'][$field] = array($limit_styles=>$limit_values) { if (array_key_exists('nested_limits', $this->defaultOptions) && is_array($this->defaultOptions['nested_limits'])) { $limitValues = $this->defaultOptions['nested_limits']; } else { $limitValues = array(); } try { $relObj = new I2CE_FormRelationship($this->reportConfig->relationship); } catch (Exception $e) { I2CE::raiseError("Invalid relationship {$relationship}"); return false; } $reportform_ids = array(); $l_values = array(); foreach ($this->reportConfig->reporting_forms as $reportform => $formConfig) { if (!$formConfig instanceof I2CE_MagicDataNode) { continue; } $l_values[$reportform] = array(); foreach ($formConfig->fields as $field => $fieldConfig) { if (!$fieldConfig instanceof I2CE_MagicDataNode) { continue; } $enabled = false; $fieldConfig->setIfIsSet($enabled, "limits/equals/enabled"); if (!$enabled) { continue; } $rff = "{$reportform}+{$field}"; if (!array_key_exists($rff, $limitValues) || !is_array($limitValues[$rff]) || !array_key_exists('equals', $limitValues[$rff]) || !is_array($limitValues[$rff]['equals']) || !array_key_exists('value', $limitValues[$rff]['equals']) || !$limitValues[$rff]['equals']['value'] || $limitValues[$rff]['equals']['value'] == '|') { $l_values[$reportform][$field] = false; } else { $l_values[$reportform][$field] = $limitValues[$rff]['equals']['value']; } //example is $reportform_ids['position]['facility'] = 'facility|22'; } } $ff = I2CE_FormFactory::instance(); foreach ($l_values as $reportform => $fields) { if (!($form = $relObj->getForm($reportform))) { continue; } if (!($formObj = $ff->createContainer($form)) instanceof I2CE_Form) { continue; } foreach ($fields as $field => $value) { if (!($mapField = $formObj->getField($field)) instanceof I2CE_FormField_MAP) { continue; } if ($value) { $mapField->setFromDB($value); if (!($mFormObj = $mapField->getMappedFormObject()) instanceof I2CE_Form) { continue; } foreach ($mFormObj->getFieldNames() as $name) { if (!($fieldObj = $mFormObj->getField($name)) instanceof I2CE_FormField) { continue; } $limit_vars["++limit+" . $reportform . "+" . $field . '+' . $name] = $fieldObj->getDisplayValue(); //++limit+position+facility+name or //++limit+position+facility+facility_type } $limit_vars["++limit+" . $reportform . "+" . $field] = $mFormObj->name(); } else { //no value was set... try to blank out values. $sforms = $mapField->getSelectableForms(); if (count($sforms) != 1) { continue; } reset($sforms); $sform = current($sforms); if (!($sformObj = $ff->createContainer($sform)) instanceof I2CE_Form) { continue; } $limit_vars["++limit+" . $reportform . "+" . $field] = ''; foreach ($sformObj->getFieldNames() as $name) { $limit_vars["++limit+" . $reportform . "+" . $field . '+' . $name] = ''; } } //format is ++limit+scheduled_training_course+id+training_course for each of the 'equals' limits. for now this is only on formfields //now we add in the mapped field values (just to be nice) } } I2CE::raiseError(print_r($limit_vars, true)); return $limit_vars; }
public function hasPermission_userSatisfies($node, $args) { if (count($args) != 3) { I2CE::raiseError("Two few arguments for permision satosfoes() method"); return null; } if (!I2CE_MagicDataNode::checkKey($relationship = array_shift($args))) { I2CE::raiseError("No valid relationship specified"); return null; } try { $relationshipObj = new I2CE_FormRelationship($relationship); } catch (Exception $e) { I2CE::raiseError("Relationship {$relationship} is not valid"); return null; } if ($relationshipObj->getPrimaryForm() != 'person') { I2CE::raiseError("Relationship does not have user as its primary form"); return null; } array_unshift($args, new I2CE_User()); return call_user_func_array(array($relationshipObj, 'formSatisfiesRelationship'), $args); }