コード例 #1
0
 /**
  *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);
 }
コード例 #2
0
 /**
  * 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;
 }
コード例 #3
0
 /**
  * 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);
 }