/** * Return the metadata for the table. * * @return array An array of the table metadata. * @throws Hermes_Exception */ public function getMetaData() { if (is_null($this->_metaData)) { list($app, $name) = explode('/', $this->_config['name']); $args = array($name, $this->_config['params']); $this->_metaData = $GLOBALS['registry']->callByPackage($app, 'getTableMetaData', $args); // We need to make vars for the columns. foreach ($this->_metaData['sections'] as $secname => $section) { foreach ($section['columns'] as $col) { $title = isset($col['title']) ? $col['title'] : ''; $typename = isset($col['type']) ? $col['type'] : 'text'; $params = isset($col['params']) ? $col['params'] : array(); // Column types which begin with % are pseudo-types handled // directly. if (substr($typename, 0, 1) != '%') { // This type needs to be assigned by reference! $type =& Horde_Form::getType($typename, $params); $var = new Horde_Form_Variable($title, $col['name'], $type, false, true, ''); $this->_formVars[$secname][$col['name']] = $var; } } } } return $this->_metaData; }
/** * Fetch ticket history * * @param integer $ticket_id The ticket to fetch history for. * * @return array */ public function getHistory($ticket_id, Horde_Form $form = null) { $rows = $this->_getHistory($ticket_id); $attributes = $attributeDetails = array(); foreach ($rows as $row) { if ($row['log_type'] == 'attribute' && strpos($row['log_value'], ':')) { $attributes[(int) $row['log_value']] = $row['attribute_name']; } if ($row['log_type'] == 'type') { $attributeDetails += $this->getAttributesForType($row['log_value']); } } $renderer = new Horde_Core_Ui_VarRenderer_Html(); $history = array(); foreach ($rows as $row) { $label = null; $human = $value = $row['log_value']; $type = $row['log_type']; $transaction = $row['transaction_id']; $history[$transaction]['timestamp'] = $row['timestamp']; $history[$transaction]['user_id'] = $row['user_id']; $history[$transaction]['ticket_id'] = $row['ticket_id']; switch ($type) { case 'comment': $history[$transaction]['comment'] = $row['comment_text']; $history[$transaction]['changes'][] = array('type' => 'comment', 'value' => $row['log_value'], 'comment' => $row['comment_text']); continue 2; case 'queue': $label = $row['queue_name']; break; case 'version': $label = $row['version_name']; break; case 'type': $label = $row['type_name']; break; case 'state': $label = $row['state_name']; break; case 'priority': $label = $row['priority_name']; break; case 'attribute': continue 2; case 'due': $label = $row['log_value_num']; break; default: if (strpos($type, 'attribute_') === 0) { try { $value = Horde_Serialize::unserialize($value, Horde_Serialize::JSON); } catch (Horde_Serialize_Exception $e) { } $attribute = substr($type, 10); if (isset($attributes[$attribute])) { $label = $attributes[$attribute]; if ($form) { if (isset($form->attributes[$attribute])) { /* Attribute is part of the current type, so we * have the form field in the current form. */ $field = $form->attributes[$attribute]; } else { /* Attribute is from a different type, create * the form field manually. */ $detail = $attributeDetails[$attribute]; $field = new Horde_Form_Variable($detail['human_name'], $type, $form->getType($detail['type'], $detail['params']), $detail['required'], $detail['readonly'], $detail['desc']); } $human = $renderer->render($form, $field, new Horde_Variables(array($type => $value))); } $type = 'attribute'; } else { $label = sprintf(_("Attribute %d"), $attribute); } } break; } $history[$transaction]['changes'][] = array('type' => $type, 'value' => $value, 'human' => $human, 'label' => $label); } return $history; }