Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?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 __toString() {
return Format::htmlchars(sprintf('%s <%s>', $this->getName(),
$this->getEmail()));
}
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;
}
function remove() {
$sql='DELETE FROM '.TICKET_COLLABORATOR_TABLE
.' WHERE id='.db_input($this->getId())
.' LIMIT 1';
return (db_query($sql) && db_affected_rows());
}
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 forTicket($tid, $criteria=array()) {
$collaborators = array();
$sql='SELECT id FROM '.TICKET_COLLABORATOR_TABLE
.' WHERE ticket_id='.db_input($tid);
if(isset($criteria['isactive']))
$sql.=' AND isactive='.db_input($criteria['isactive']);
//TODO: sort by name of the user
if(($res=db_query($sql)) && db_num_rows($res))
while(list($id)=db_fetch_row($res))
$collaborators[] = self::lookup($id);
return $collaborators;
}
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;
}
}
?>