/**
  * Get the forms that satisfy a relationship for the given primary form id
  * @param string $id the id of the primary form
  * @param array $fields keys are relationship formnames, values are array of fields we wan returned
  * @param array $ordering keys are relationship formnames, values are array of fields we want ordered by
  * @returns array of mixed.  The array may be empty if the $form_id  does not satisfy the relationship.  It is indexed by the named form and the form objects
  * are already populated.  If there was no matching form for a given named form, then the value of the array elemet will be false
  */
 public function getFormData($form, $id, $fields = array(), $ordering = array(), $as_iterator = true)
 {
     if ($this->use_cache) {
         $cforms = $this->getRequiredForms();
         I2CE::raiseError("Attempting to cache the required forms for the relationhip " . implode(",", $cforms));
         $failures = array();
         foreach ($cforms as $cform) {
             try {
                 $cachedForm = new I2CE_CachedForm($cform);
             } catch (Exception $e) {
                 if (array_key_exists('HTTP_HOST', $_SERVER)) {
                     //we don't need to check here, b/c it won't error out.  we are doing it to keep the log file clean
                     $msgs = array('not_cached' => 'Unable to setup cached form');
                     foreach ($msgs as $k => &$v) {
                         I2CE::getConfig()->setIfIsSet($v, "/modules/CustomReports/text/user_messages/{$k}");
                     }
                 }
                 $failures[] = $cform;
                 continue;
             }
             if (!$cachedForm->generateCachedTable()) {
                 $failures[] = $cform;
                 continue;
             }
         }
         if (count($failures) > 0) {
             I2CE::raiseError("Warning data may be out of date for relationsjip -- could not cache forms:\n\t" . implode(',', $failures));
         } else {
             I2CE::raiseError("Cached all forms");
         }
     }
     $results = array();
     if ($form != $this->getPrimaryForm()) {
         I2CE::raiseError("The given form ({$form}) does not match the primary form: " . $this->getPrimaryForm());
         return $results;
     }
     if (strlen($id) == 0 || $id == '0') {
         I2CE::raiseError("Passed empty id");
         return $results;
     }
     $this->_walkSatisfyingForms('primary_form', $form, $id, $fields, $ordering, $results);
     if (!array_key_exists($form, $fields) || !is_array($fields[$form])) {
         $fields[$form] = array();
     }
     if (!array_key_exists($form, $ordering)) {
         $ordering[$form] = array();
     }
     if ($this->use_disp_fields) {
         $data = I2CE_FormStorage::lookupDisplayField($form, $id, $fields['primary_form'], false);
     } else {
         $data = I2CE_FormStorage::lookupField($form, $id, $fields['primary_form'], false);
     }
     $data = array('primary_form' => array("{$form}|{$id}" => array('fields' => $data, 'joins' => $results)));
     if ($as_iterator) {
         return new I2CE_RelationshipData($this, $data);
     } else {
         return $data;
     }
 }
Example #2
0
 /**
  * Looks up the description of the item based on the code.
  * 
  * This is the default method that most implementations of {@link lookup()} use.  It finds the description of
  * the object based on the code and saves it in the {@link cache} and returns it.
  * @param integer $id The code of the entry to lookup.
  * @param string $form_name The name of the form in the database.
  * @return string
  */
 public static function lookup($id, $form_name)
 {
     if (!$id || $id == "") {
         return "";
     }
     if (!self::isCached($form_name, $id)) {
         $value_arr = I2CE_FormStorage::lookupDisplayField($form_name, $id, self::getDisplayFields($form_name), false);
         if (count($value_arr) > 0) {
             $value = @vsprintf(self::getDisplayString($form_name), $value_arr);
         } else {
             $value = false;
         }
         if ($value) {
             self::addCache($form_name, $id, $value);
             return $value;
         }
     }
     return self::getCache($form_name, $id);
 }
 /**
  * Get the forms that satisfy a relationship for the given primary form id
  * @param string $id the id of the primary form
  * @param array $fields keys are relationship formnames, values are array of fields we wan returned
  * @param array $ordering keys are relationship formnames, values are array of fields we want ordered by
  * @returns array of mixed.  The array may be empty if the $form_id  does not satisfy the relationship.  It is indexed by the named form and the form objects
  * are already populated.  If there was no matching form for a given named form, then the value of the array elemet will be false
  */
 public function getFormData($form, $id, $fields = array(), $ordering = array(), $as_iterator = true)
 {
     if ($this->use_cache && !$this->already_cached) {
         $this->already_cached = true;
         $cforms = $this->getRequiredForms();
         I2CE::raiseError("Attempting to cache the required forms for the relationhip " . implode(",", $cforms));
         $failures = array();
         foreach ($cforms as $cform) {
             try {
                 $cachedForm = new I2CE_CachedForm($cform);
             } catch (Exception $e) {
                 if (array_key_exists('HTTP_HOST', $_SERVER)) {
                     //we don't need to check here, b/c it won't error out.  we are doing it to keep the log file clean
                     $msgs = array('not_cached' => 'Unable to setup cached form');
                     foreach ($msgs as $k => &$v) {
                         I2CE::getConfig()->setIfIsSet($v, "/modules/CustomReports/text/user_messages/{$k}");
                     }
                 }
                 $failures[] = $cform;
                 continue;
             }
             if (!$cachedForm->generateCachedTable()) {
                 $failures[] = $cform;
                 continue;
             }
         }
         if (count($failures) > 0) {
             I2CE::raiseError("Warning data may be out of date for relationsjip -- could not cache forms:\n\t" . implode(',', $failures));
         } else {
             I2CE::raiseError("Cached all forms");
         }
     }
     $results = array();
     if ($form != $this->getPrimaryForm()) {
         I2CE::raiseError("The given form ({$form}) does not match the primary form: " . $this->getPrimaryForm());
         if ($as_iterator instanceof DOMElement) {
             return false;
         } else {
             return $results;
         }
     }
     if (strlen($id) == 0 || $id == '0') {
         I2CE::raiseError("Passed empty id");
         if ($as_iterator instanceof DOMElement) {
             return false;
         } else {
             return $results;
         }
     }
     if ($as_iterator instanceof DOMElement) {
         if (!array_key_exists('primary_form', $fields) || !is_array($fields['primary_form'])) {
             $fields['primary_form'] = array();
         }
         if (!array_key_exists('primary_form', $this->object_cache)) {
             if (!($this->object_cache['primary_form'] = $this->getContainer($form)) instanceof I2CE_Form) {
                 return false;
             }
         }
         $this->object_cache['primary_form']->resetDefaultValues();
         $this->object_cache['primary_form']->setID($id);
         $data = I2CE_FormStorage::lookupField($form, $id, $fields['primary_form'], false);
         foreach ($fields['primary_form'] as $field) {
             if (!($fieldObj = $this->object_cache['primary_form']->getField($field)) instanceof I2CE_FormField || !array_key_exists($field, $data) || !is_scalar($data[$field])) {
                 continue;
             }
             $fieldObj->setFromDB($data[$field]);
         }
         //            I2CE::raiseError(print_r($fields,true));
         if (!($primary_node = $this->object_cache['primary_form']->getXMLRepresentation(true, $as_iterator, $fields['primary_form'])) instanceof DOMElement) {
             I2CE::raiseError("Couldn't get XML representation of primary form");
             return false;
         }
         $as_iterator->setAttribute('form', $form);
         $as_iterator->setAttribute('name', $this->relationship);
         $as_iterator->setAttribute('id', $id);
         //            $joined_forms = $as_iterator->ownerDocument->createElement('joinedForms');
         //            $as_iterator->appendChild($joined_forms);
         //            $this->_walkSatisfyingForms('primary_form',$form,$id,$fields,$ordering,$joined_forms);
         $this->_walkSatisfyingForms('primary_form', $form, $id, $fields, $ordering, $as_iterator);
         return true;
     } else {
         if (!array_key_exists($form, $fields) || !is_array($fields[$form])) {
             $fields[$form] = array();
         }
         if (!array_key_exists($form, $ordering)) {
             $ordering[$form] = array();
         }
         $this->_walkSatisfyingForms('primary_form', $form, $id, $fields, $ordering, $results);
         if ($this->use_disp_fields) {
             $data = I2CE_FormStorage::lookupDisplayField($form, $id, $fields['primary_form'], false);
         } else {
             $data = I2CE_FormStorage::lookupField($form, $id, $fields['primary_form'], false);
         }
         $data = array('primary_form' => array("{$form}|{$id}" => array('fields' => $data, 'joins' => $results)));
         if ($as_iterator) {
             return new I2CE_RelationshipData($this, $data);
         } else {
             return $data;
         }
     }
 }