/** *Get the array of function details at the specified for the specified function at the speci * @var I2CE_MagicDataNode $funcConfig * @var array $dependents A list of functions this function depends on */ protected function _getFunctionDetails($funcConfig, $dependents) { if (!$funcConfig instanceof I2CE_MagicDataNode) { I2CE::raiseError("Bad function config"); return false; } $qry = ''; if (!$funcConfig->setIfIsSet($qry, 'qry')) { I2CE::raiseError("Function {$function} is not defined"); return false; } $qry = trim($qry); if (!$qry) { //no query set so skip it I2CE::raiseError("Function {$function} is empty"); return false; } $function = $funcConfig->getName(); if (!$funcConfig->setIfIsSet($formfield, 'formfield') || !($fieldObj = I2CE_FormField::createField($funcConfig->formfield, $function)) instanceof I2CE_FormField) { I2CE::raiseError("Function {$function} cannot be associated to a form field:\n" . print_r($funcConfig->getAsArray(), true)); return false; } preg_match_all('/`([a-zA-Z0-9\\_\\-]+\\+[a-zA-Z0-9\\_\\-]+)`/', $qry, $required_fields); $aggregate = false; $funcConfig->setIfIsSet($aggregate, 'aggregate'); return array('qry' => $qry, 'type' => $fieldObj->getDBType(), 'required_fields' => array_unique($required_fields[1]), 'field' => $fieldObj, 'aggregate' => $aggregate, 'dependents' => $dependents); }
/** * Adds a field to this form. * @param string $name * @param array $args The arguments for this field * @returns mixed I2CE_FormField or false on failure */ public function addField($name, $args) { if (!array_key_exists('formfield', $args) || !is_scalar($args['formfield'])) { I2CE::raiseError("No formfield passed to addField in container {$this->name} with field {$name}\n" . print_r($args, true), E_USER_WARNING); return false; } $this->preProcessFieldArgs($name, $args); $field = I2CE_FormField::createField($args['formfield'], $name, $args); if (!$field instanceof I2CE_FormField) { I2CE::raiseError("Could not create field {$name} in {$this->name} in container {$this->name}"); return false; } $name = $field->getName(); if (!$name || $name == "") { I2CE::raiseError("Invalid field name for I2CE_Form::addField.", E_USER_NOTICE); return false; } $field->setContainer($this); $this->fields[$name] = $field; return $field; }
/** * Displays any report limits in the content node * @param DOMNode $contentNode */ protected function _displayReportFormLimit($reportform, $field, $limit, $contentNode, $rv_config, $reportConfig, $limitValues, $excludes, $merge = '') { $report = $reportConfig->getName(); $reportformfield = "{$merge}{$reportform}+{$field}"; $reportformfieldlimit = $reportformfield . "+" . $limit; if (in_array($reportformfieldlimit, $this->displayed_limits) || in_array($limit, $excludes)) { return; } $this->displayed_limits[] = $reportformfieldlimit; list($formObj, $fieldObj) = $this->getFormFieldObjects("{$reportform}+{$field}", $report); if (!$formObj instanceof I2CE_Form || !$fieldObj instanceof I2CE_FormField || !($limitConfig = $reportConfig->traverse("reporting_forms/{$reportform}/fields/{$field}/limits/{$limit}")) instanceof I2CE_MagicDataNode || !isset($limitConfig->enabled) || !$limitConfig->enabled) { return; } if ($field == 'id' && $formObj instanceof I2CE_List && ($fieldConfig = $reportConfig->traverse("reporting_forms/{$reportform}/fields/{$field}")) instanceof I2CE_MagicDataNode && isset($fieldConfig->form_display) && $fieldConfig->form_display) { $idFieldConf = array('meta' => array('form' => array($formObj->getName()))); if (isset($fieldConfig->form_display_fields) && $fieldConfig->form_display_fields) { $idFieldConf['meta']['display'] = array('default' => array('fields' => $fieldConfig->form_display_fields)); } $fieldObj = I2CE_FormField::createField("MAP", "id", $idFieldConf); } if (array_key_exists($reportformfield, $limitValues)) { $fieldLimitValues = $limitValues[$reportformfield]; } else { $fieldLimitValues = array(); } if (array_key_exists($limit, $fieldLimitValues) && is_array($fieldLimitValues[$limit])) { $limitLimitValues = $fieldLimitValues[$limit]; } else { $limitLimitValues = array(); } //now we should have a valid limit $limit_default = 'default'; $reportConfig->setIfIsSet($limit_default, "reporting_forms/{$reportform}/fields/{$field}/limit_default"); $method = 'processLimitMenu_' . $limit; $data = $fieldObj->{$method}($limitLimitValues, false); $method = 'getLimitMenu_' . $limit; $node = $fieldObj->{$method}($this->template, "limits:{$merge}{$reportformfield}:{$limit}", $data, $limit_default); if (!$node instanceof DOMNode) { return; } $limitDesc = $fieldObj->describeLimit($limit, $data); if ($limitDesc && $limitDesc != "") { if ($limitConfig->is_scalar('header')) { $limitDescHeader = $limitConfig->header; } else { $limitDescHeader = $limitConfig->getName(); } $this->limitDescText[] = $limitDescHeader . ": " . $limitDesc; } $this->displayReportLimit($contentNode, $node, $limitConfig); }