From 77df040b25f80c75209335dcb7978c6bf49c0332 Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@enhancesoft.com>
Date: Mon, 11 Nov 2013 20:09:43 +0000
Subject: [PATCH] Add collaborator class

---
 include/class.collaborator.php | 132 +++++++++++++++++++++++++++++++++
 1 file changed, 132 insertions(+)
 create mode 100644 include/class.collaborator.php

diff --git a/include/class.collaborator.php b/include/class.collaborator.php
new file mode 100644
index 000000000..18cae5f41
--- /dev/null
+++ b/include/class.collaborator.php
@@ -0,0 +1,132 @@
+<?php
+/*********************************************************************
+    class.collaborator.php
+
+    Ticket collaborator
+
+    Peter Rotich <peter@osticket.com>
+    Copyright (c)  2006-2013 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:
+**********************************************************************/
+require_once(INCLUDE_DIR . 'class.user.php');
+
+class Collaborator {
+
+    var $ht;
+
+    var $user;
+    var $ticket;
+
+    function __construct($id) {
+
+        $this->load($id);
+    }
+
+    function load($id) {
+
+        if(!$id && !($id=$this->getId()))
+            return;
+
+        $sql='SELECT * FROM '.TICKET_COLLABORATOR_TABLE
+            .' WHERE id='.db_input($id);
+
+        $this->ht = db_fetch_array(db_query($sql));
+        $this->ticket = $this->user = null;
+    }
+
+    function reload() {
+        return $this->load();
+    }
+
+    function __call($name, $args) {
+
+        if(!($user=$this->getUser()) || !method_exists($user, $name))
+            return null;
+
+        if($args)
+            return  call_user_func_array(array($user, $name), $args);
+
+        return call_user_func(array($user, $name));
+    }
+
+    function getId() {
+        return $this->ht['id'];
+    }
+
+    function isActive() {
+        return ($this->ht['isactive']);
+    }
+
+    function getTicketId() {
+        return $this->ht['ticket_id'];
+    }
+
+    function getTicket() {
+        if(!$this->ticket && $this->getTicketId())
+            $this->ticket = Ticket::lookup($this->getTicketId());
+
+        return $this->ticket;
+    }
+
+    function getUserId() {
+        return $this->ht['user_id'];
+    }
+
+    function getUser() {
+
+        if(!$this->user && $this->getUserId())
+            $this->user = User::lookup($this->getUserId());
+
+        return $this->user;
+    }
+
+    static function add($info, &$errors) {
+
+        if(!$info || !$info['ticketId'] || !$info['userId'])
+            $errors['err'] = 'Invalid or missing information';
+        elseif(($c=self::lookup($info)))
+            $errors['err'] = sprintf('%s is already a collaborator',
+                    $c->getName());
+
+        if($errors) return false;
+
+        $sql='INSERT INTO '.TICKET_COLLABORATOR_TABLE
+            .' SET isactive=1, updated=NOW() '
+            .' ,ticket_id='.db_input($info['ticketId'])
+            .' ,user_id='.db_input($info['userId']);
+
+        if(db_query($sql) && ($id=db_insert_id()))
+            return self::lookup($id);
+
+        $errors['err'] = 'Unable to add collaborator. Internal error';
+
+        return false;
+    }
+
+    static function getIdByInfo($info) {
+
+        $sql='SELECT id FROM '.TICKET_COLLABORATOR_TABLE
+            .' WHERE ticket_id='.db_input($info['ticketId'])
+            .' AND user_id='.db_input($info['userId']);
+
+        list($id) = db_fetch_row(db_query($sql));
+
+        return $id;
+    }
+
+    static function lookup($criteria) {
+        $id = is_numeric($criteria)
+            ? $criteria : self::getIdByInfo($criteria);
+
+        return ($id
+                && ($c = new Collaborator($id))
+                && $c->getId() == $id)
+            ? $c : null;
+    }
+}
+?>
-- 
GitLab