<?php /** * Handles the assigning of a ticket to a user. This is being used to make someone responsible for the handling and solving of a ticket. * The idea is that someone can easily assign a ticket to himself and by doing that, he makes aware to the other moderators that he will deal with the ticket in the future. * @author Daan Janssens, mentored by Matthew Lagoe */ class Assigned{ private $user; /**< The id of the user being assigned */ private $ticket; /**< The id of the ticket being assigned */ ////////////////////////////////////////////Functions//////////////////////////////////////////////////// /** * Assigns a ticket to a user or returns an error message. * It will first check if the ticket isn't already assigned, if not, it will create a new 'assigned' entry. * @param $user_id the id of the user we want to assign to the ticket * @param $ticket_id the id of the ticket. * @return A string, if assigning succeedded "SUCCESS_ASSIGNED" will be returned, else "ALREADY_ASSIGNED" will be returned. */ public static function assignTicket( $user_id, $ticket_id) { $dbl = new DBLayer("lib"); //check if ticket is already assigned, if so return "ALREADY ASSIGNED" if(! Assigned::isAssigned($ticket_id)){ $assignation = new Assigned(); $assignation->set(array('User' => $user_id, 'Ticket' => $ticket_id)); $assignation->create(); return "SUCCESS_ASSIGNED"; }else{ return "ALREADY_ASSIGNED"; } } /** * Unassign a ticket being coupled to a user or return an error message. * It will first check if the ticket is assigned, if this is indeed the case it will delete the 'assigned' entry. * @param $user_id the id of the user we want to unassign from the ticket * @param $ticket_id the id of the ticket. * @return A string, if unassigning succeedded "SUCCESS_UNASSIGNED" will be returned, else "NOT_ASSIGNED" will be returned. */ public static function unAssignTicket( $user_id, $ticket_id) { $dbl = new DBLayer("lib"); //check if ticket is really assigned to that user if( Assigned::isAssigned($ticket_id, $user_id)){ $assignation = new Assigned(); $assignation->set(array('User' => $user_id, 'Ticket' => $ticket_id)); $assignation->delete(); return "SUCCESS_UNASSIGNED"; }else{ return "NOT_ASSIGNED"; } } /** * Get the (external) id of the user assigned to a ticket * @param $ticket_id the Id of the ticket that's being queried * @return The (external)id of the user being assigned to the ticket */ public static function getUserAssignedToTicket($ticket_id) { $dbl = new DBLayer("lib"); $statement = $dbl->execute("SELECT ticket_user.ExternId FROM `assigned` JOIN `ticket_user` ON assigned.User = ticket_user.TUserId WHERE `Ticket` = :ticket_id", Array('ticket_id' => $ticket_id)); $user_id = $statement->fetch(); return $user_id['ExternId']; } /** * Check if a ticket is already assigned (in case the user_id param is used, it will check if it's assigned to that user) * @param $ticket_id the Id of the ticket that's being queried * @param $user_id the id of the user, default parameter = 0, by using a user_id, it will check if that user is assigned to the ticket. * @return true in case it's assigned, false in case it isn't. */ public static function isAssigned( $ticket_id, $user_id = 0) { $dbl = new DBLayer("lib"); //check if ticket is already assigned if($user_id == 0 && $dbl->select("`assigned`", array('ticket_id' => $ticket_id), "`Ticket` = :ticket_id")->rowCount() ){ return true; }else if( $dbl->select("`assigned`", array('ticket_id' => $ticket_id, 'user_id' => $user_id), "`Ticket` = :ticket_id and `User` = :user_id")->rowCount() ){ return true; }else{ return false; } } ////////////////////////////////////////////Methods//////////////////////////////////////////////////// /** * A constructor. * Empty constructor */ public function __construct() { } /** * sets the object's attributes. * @param $values should be an array of the form array('User' => user_id, 'Ticket' => ticket_id). */ public function set($values) { $this->setUser($values['User']); $this->setTicket($values['Ticket']); } /** * creates a new 'assigned' entry. * this method will use the object's attributes for creating a new 'assigned' entry in the database. */ public function create() { $dbl = new DBLayer("lib"); $dbl->insert("`assigned`", Array('User' => $this->getUser(), 'Ticket' => $this->getTicket())); } /** * deletes an existing 'assigned' entry. * this method will use the object's attributes for deleting an existing 'assigned' entry in the database. */ public function delete() { $dbl = new DBLayer("lib"); $dbl->delete("`assigned`", array('user_id' => $this->getUser() ,'ticket_id' => $this->getTicket()), "`User` = :user_id and `Ticket` = :ticket_id"); } /** * loads the object's attributes. * loads the object's attributes by giving a ticket_id, it will put the matching user_id and the ticket_id into the attributes. * @param $ticket_id the id of the ticket that should be loaded */ public function load($ticket_id) { $dbl = new DBLayer("lib"); $statement = $dbl->select("`assigned`", Array('ticket_id' => $ticket_id), "`Ticket` = :ticket_id"); $row = $statement->fetch(); $this->set($row); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// /** * get user attribute of the object. */ public function getUser(){ return $this->user; } /** * get ticket attribute of the object. */ public function getTicket(){ return $this->ticket; } ////////////////////////////////////////////Setters//////////////////////////////////////////////////// /** * set user attribute of the object. * @param $u integer id of the user */ public function setUser($u){ $this->user = $u; } /** * set ticket attribute of the object. * @param $t integer id of the ticket */ public function setTicket($t){ $this->ticket = $t; } }