/**
* Returns the attribute values and names of a ticket.
*
* @param integer|array $ticket_id One or more ticket IDs.
*
* @return array If requesting a single ticket, an attribute name =>
* attribute value hash. If requesting multiple tickets, a
* list of hashes with ticket ID, attribute ID, attribute
* name, and attribute value.
* @throws Whups_Exception
*/
public function getTicketAttributesWithNames($ticket_id)
{
if (is_array($ticket_id)) {
// No need to run a query for an empty array, and it would result
// in an invalid SQL query anyway.
if (!count($ticket_id)) {
return array();
}
try {
$attributes = $this->_db->selectAll('SELECT ticket_id AS id, d.attribute_name, ' . 'a.attribute_id, a.attribute_value ' . 'FROM whups_attributes a INNER JOIN ' . 'whups_attributes_desc d ' . 'ON (d.attribute_id = a.attribute_id)' . 'WHERE a.ticket_id IN (' . str_repeat('?, ', count($ticket_id) - 1) . '?)', $ticket_id);
} catch (Horde_Db_Exception $e) {
throw new Whups_Exception($e);
}
$attributes = $this->_fromBackend($attributes);
foreach ($attributes as &$ticket) {
if (is_string($ticket['attribute_value']) && defined('JSON_BIGINT_AS_STRING')) {
$ticket['attribute_value'] = json_decode($ticket['attribute_value'], true, 512, constant('JSON_BIGINT_AS_STRING'));
} else {
try {
$ticket['attribute_value'] = Horde_Serialize::unserialize($ticket['attribute_value'], Horde_Serialize::JSON);
} catch (Horde_Serialize_Exception $e) {
}
}
}
} else {
try {
$attributes = $this->_db->selectAssoc('SELECT d.attribute_name, a.attribute_value ' . 'FROM whups_attributes a INNER JOIN ' . 'whups_attributes_desc d ' . 'ON (d.attribute_id = a.attribute_id)' . 'WHERE a.ticket_id = ? ORDER BY d.attribute_name', array((int) $ticket_id));
} catch (Horde_Db_Exception $e) {
throw new Whups_Exception($e);
}
$attributes = $this->_fromBackend($attributes);
foreach ($attributes as &$attribute) {
try {
$attribute = Horde_Serialize::unserialize($attribute, Horde_Serialize::JSON);
} catch (Horde_Serialize_Exception $e) {
}
}
}
return $attributes;
}