diff --git a/bootstrap.php b/bootstrap.php index 8985717d43a30697bbb4f67033880b6225cab6e6..354c9bd208acc4ecde10f0d75df299d53c0e4357 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -187,6 +187,7 @@ class Bootstrap { require_once INCLUDE_DIR.'class.util.php'; require_once INCLUDE_DIR.'class.translation.php'; require(INCLUDE_DIR.'class.signal.php'); + require(INCLUDE_DIR.'class.model.php'); require(INCLUDE_DIR.'class.user.php'); require(INCLUDE_DIR.'class.auth.php'); require(INCLUDE_DIR.'class.pagenate.php'); //Pagenate helper! diff --git a/include/class.model.php b/include/class.model.php new file mode 100644 index 0000000000000000000000000000000000000000..7b8af26ab93d9056f3eb46fc8807e78b1658fc58 --- /dev/null +++ b/include/class.model.php @@ -0,0 +1,61 @@ +<?php +/********************************************************************* + class.model.php + + Peter Rotich <peter@osticket.com> + Copyright (c) 2006-2014 osTicket + http://www.osticket.com + + Released under the GNU General Public License WITHOUT ANY WARRANTY. + See LICENSE.TXT for details. + + vim: expandtab sw=4 ts=4 sts=4: +**********************************************************************/ + +// TODO: Make ObjectModel models base class and extend VerySimpleModel +class ObjectModel { + + const OBJECT_TYPE_TICKET = 'T'; + const OBJECT_TYPE_THREAD = 'H'; + const OBJECT_TYPE_USER = 'U'; + const OBJECT_TYPE_ORG = 'O'; + const OBJECT_TYPE_FAQ = 'K'; + const OBJECT_TYPE_FILE = 'F'; + + private function objects() { + static $objects = false; + if ($objects == false) { + $objects = array( + self::OBJECT_TYPE_TICKET => 'Ticket', + self::OBJECT_TYPE_THREAD => 'ThreadEntry', + self::OBJECT_TYPE_USER => 'User', + self::OBJECT_TYPE_ORG => 'Organization', + self::OBJECT_TYPE_FAQ => 'FAQ', + self::OBJECT_TYPE_FILE => 'AttachmentFile', + ); + } + + return $objects; + } + + static function getType($model) { + + foreach (self::objects() as $t => $c) { + if ($model instanceof $c) + return $t; + } + } + + static function lookup($id, $type) { + $model = null; + if ($id + && ($objects=self::objects()) + && ($class=$objects[$type]) + && class_exists($class) + && is_callable(array($class, 'lookup'))) + $model = $class::lookup($id); + + return $model; + } +} +?> diff --git a/include/class.search.php b/include/class.search.php index 87cabbbb968c201ac8ac67ccba8a9093f4f0aa20..86ebf80654aaaefe3fb23a6d71121414b5ca5855 100644 --- a/include/class.search.php +++ b/include/class.search.php @@ -92,7 +92,8 @@ class SearchInterface { $model->getBody()->getSearchable(), $new, array( 'title' => $model->getTitle(), - 'ticket_id' => $model->getTicketId(), + //TODO: send attribute of object_id + 'ticket_id' => $model->getThread()->getObjectId(), 'created' => $model->getCreateDate(), ) ); @@ -218,31 +219,15 @@ class MysqlSearchBackend extends SearchBackend { } function update($model, $id, $content, $new=false, $attrs=array()) { - switch (true) { - case $model instanceof ThreadEntry: - $type = 'H'; - break; - case $model instanceof Ticket: + + + if (!($type=ObjectModel::getType($model))) + return; + + if ($model instanceof Ticket) $attrs['title'] = $attrs['number'].' '.$attrs['title']; - $type = 'T'; - break; - case $model instanceof User: + elseif ($model instanceof User) $content .= implode("\n", $attrs['emails']); - $type = 'U'; - break; - case $model instanceof Organization: - $type = 'O'; - break; - case $model instanceof FAQ: - $type = 'K'; - break; - case $model instanceof AttachmentFile: - $type = 'F'; - break; - default: - // Not indexed - return; - } $title = $attrs['title'] ?: ''; diff --git a/include/class.thread.php b/include/class.thread.php index 81b9f49411a771cd9495a3a508e23ed31c418bd4..7b48da65d94b89c2bb6e761f8a5ccfb7af10c6e5 100644 --- a/include/class.thread.php +++ b/include/class.thread.php @@ -65,6 +65,15 @@ class Thread { return $this->ht['object_type']; } + function getObject() { + + if (!$this->_object) + $this->_object = ObjectModel::lookup( + $this->getObjectId(), $this->getObjectType()); + + return $this->_object; + } + function getNumAttachments() { return $this->ht['attachments']; }