2017-03-15 19:29:34 +00:00
< ? php
/**
* groups moderators & admins together . A Support Group is a group of people with the same skills or knowledge . A typical example will be the ( Developers group , webteam group , management , etc .. )
* The idea is that tickets can be forwarded to a group of persons that might be able to answer that specific question . Support Groups are also the key of handling the emails , because the email addresses
* of the support groups will be used by the Mail_Handler class .
* @ author Daan Janssens , mentored by Matthew Lagoe
*/
class Support_Group {
private $sGroupId ; /**< The id of the support group */
private $name ; /**< The name of the support group */
private $tag ; /**< The tag of the support group, a tag is max 4 letters big, and will be used in the future as easy reference to indicate what group it is refered to (eg [DEV]) */
private $groupEmail ; /**< The email address of the group */
private $iMAP_MailServer ; /**< The imap server connection string */
private $iMAP_Username ; /**< The imap username of the account */
private $iMAP_Password ; /**< The imap matching password*/
////////////////////////////////////////////Functions////////////////////////////////////////////////////
/**
* return a specific support_group object .
* @ param $id the id of the support group that we want to return
* @ return a support_group object .
*/
public static function getGroup ( $id ) {
$dbl = new DBLayer ( " lib " );
$statement = $dbl -> select ( " support_group " , array ( 'id' => $id ), " SGroupId = :id " );
$row = $statement -> fetch ();
$instanceGroup = new self ();
$instanceGroup -> set ( $row );
return $instanceGroup ;
}
/**
* return all support_group objects .
* @ return an array containing all support_group objects .
*/
public static function getGroups () {
$dbl = new DBLayer ( " lib " );
$statement = $dbl -> executeWithoutParams ( " SELECT * FROM support_group ORDER BY Name ASC " );
$rows = $statement -> fetchAll ();
$result = Array ();
foreach ( $rows as $group ){
$instanceGroup = new self ();
$instanceGroup -> set ( $group );
$result [] = $instanceGroup ;
}
return $result ;
}
/**
* Wrapper for creating a support group .
* It will check if the support group doesn ' t exist yet , if the tag or name already exists then NAME_TAKEN or TAG_TAKEN will be returned .
* If the name is bigger than 20 characters or smaller than 4 and the tag greater than 7 or smaller than 2 a SIZE_ERROR will be returned .
* Else it will return SUCCESS
* @ return a string that specifies if it was a success or not ( SUCCESS , SIZE_ERROR , NAME_TAKEN or TAG_TAKEN )
*/
public static function createSupportGroup ( $name , $tag , $groupemail , $imap_mailserver , $imap_username , $imap_password ) {
//error_log( "Error at line " . __LINE__ . " in file " . __FILE__);
if ( strlen ( $name ) <= 21 && strlen ( $name ) >= 4 && strlen ( $tag ) <= 8 && strlen ( $tag ) >= 2 ){
$notExists = self :: supportGroup_EntryNotExists ( $name , $tag );
//error_log( "Error at line " . __LINE__ . " in file " . __FILE__);
if ( $notExists == " SUCCESS " ){
$sGroup = new self ();
$values = array ( 'Name' => $name , 'Tag' => $tag , 'GroupEmail' => $groupemail , 'IMAP_MailServer' => $imap_mailserver , 'IMAP_Username' => $imap_username , 'IMAP_Password' => $imap_password );
$sGroup -> setName ( $values [ 'Name' ]);
$sGroup -> setTag ( $values [ 'Tag' ]);
$sGroup -> setGroupEmail ( $values [ 'GroupEmail' ]);
$sGroup -> setIMAP_MailServer ( $values [ 'IMAP_MailServer' ]);
$sGroup -> setIMAP_Username ( $values [ 'IMAP_Username' ]);
//encrypt password!
global $cfg ;
$crypter = new MyCrypt ( $cfg [ 'crypt' ]);
$enc_password = $crypter -> encrypt ( $values [ 'IMAP_Password' ]);
$sGroup -> setIMAP_Password ( $enc_password );
$sGroup -> create ();
//error_log( "Error at line " . __LINE__ . " in file " . __FILE__);
} else {
//error_log( "Error at line " . __LINE__ . " in file " . __FILE__);
//return NAME_TAKEN or TAG_TAKEN
return $notExists ;
}
} else {
//error_log( "Error at line " . __LINE__ . " in file " . __FILE__);
//RETURN ERROR that indicates SIZE
return " SIZE_ERROR " ;
}
}
/**
* check if support group name / tag doesn ' t exist yet .
* @ param $name the name of the group we want to check
* @ param $tag the tag of the group we want to check
* @ return if name is already taken return NAME_TAKEN , else if tag is already taken return TAG_TAKEN , else return success .
*/
public static function supportGroup_EntryNotExists ( $name , $tag ) {
$dbl = new DBLayer ( " lib " );
//check if name is already used
if ( $dbl -> select ( " support_group " , array ( 'name' => $name ), " Name = :name " ) -> rowCount () ){
return " NAME_TAKEN " ;
}
else if ( $dbl -> select ( " support_group " , array ( 'tag' => $tag ), " Tag = :tag " ) -> rowCount () ){
return " TAG_TAKEN " ;
} else {
return " SUCCESS " ;
}
}
/**
* check if support group entry coupled to a given id exist or not .
* @ param $id the id of the group we want to check
* @ return true or false .
*/
public static function supportGroup_Exists ( $id ) {
$dbl = new DBLayer ( " lib " );
//check if supportgroup id exist
if ( $dbl -> select ( " support_group " , array ( 'id' => $id ), " SGroupId = :id " ) -> rowCount () ){
return true ;
} else {
return false ;
}
}
/**
* construct an object based on the SGroupId .
* @ param $id the id of the group we want to construct
* @ return the constructed support group object
*/
public static function constr_SGroupId ( $id ) {
$instance = new self ();
$instance -> setSGroup ( $id );
return $instance ;
}
/**
* get list of all users that are enlisted to a support group .
* @ param $group_id the id of the group we want to query
* @ return an array of ticket_user objects that are in the support group .
*/
public static function getAllUsersOfSupportGroup ( $group_id ) {
$dbl = new DBLayer ( " lib " );
$statement = $dbl -> execute ( " SELECT * FROM `in_support_group` INNER JOIN `ticket_user` ON ticket_user.TUserId = in_support_group.User WHERE in_support_group.Group=:id " , array ( 'id' => $group_id ));
$rows = $statement -> fetchAll ();
$result = Array ();
foreach ( $rows as $row ){
$userInstance = new Ticket_User ();
$userInstance -> setTUserId ( $row [ 'TUserId' ]);
$userInstance -> setPermission ( $row [ 'Permission' ]);
$userInstance -> setExternId ( $row [ 'ExternId' ]);
$result [] = $userInstance ;
}
return $result ;
}
/**
* wrapper for deleting a support group .
* We will first check if the group really exists , if not than " GROUP_NOT_EXISING " will be returned .
* @ param $group_id the id of the group we want to delete
* @ return an array of ticket_user objects that are in the support group .
*/
public static function deleteSupportGroup ( $group_id ) {
//check if group id exists
if ( self :: supportGroup_Exists ( $group_id )){
$sGroup = new self ();
$sGroup -> setSGroupId ( $group_id );
$sGroup -> delete ();
} else {
//return that group doesn't exist
return " GROUP_NOT_EXISTING " ;
}
}
/**
* wrapper for deleting a user that ' s in a specified support group .
* We will first check if the group really exists , if not than " GROUP_NOT_EXISING " will be returned .
* Afterwards we will check if the user exists in the support group , if not " USER_NOT_IN_GROUP " will be returned .
* Else the users entry in the in_support_group table will be deleted and " SUCCESS " will be returned .
* @ param $user_id the id of the user we want to remove out of the group .
* @ param $group_id the id of the group the user should be in
* @ return a string ( SUCCESS , USER_NOT_IN_GROUP or GROUP_NOT_EXISTING )
*/
public static function deleteUserOfSupportGroup ( $user_id , $group_id ) {
//check if group id exists
if ( self :: supportGroup_Exists ( $group_id )){
//check if user is in supportgroup
//if so, delete entry and return SUCCESS
if ( In_Support_Group :: userExistsInSGroup ( $user_id , $group_id ) ){
//delete entry
$inSGroup = new In_Support_Group ();
$inSGroup -> setUser ( $user_id );
$inSGroup -> setGroup ( $group_id );
$inSGroup -> delete ();
return " SUCCESS " ;
}
else {
//else return USER_NOT_IN_GROUP
return " USER_NOT_IN_GROUP " ;
}
} else {
//return that group doesn't exist
return " GROUP_NOT_EXISTING " ;
}
}
/**
* wrapper for adding a user to a specified support group .
* We will first check if the group really exists , if not than " GROUP_NOT_EXISING " will be returned .
* Afterwards we will check if the user exists in the support group , if so " ALREADY_ADDED " will be returned .
* Else the user will be added to the in_support_group table and " SUCCESS " will be returned .
* @ param $user_id the id of the user we want to add to the group .
* @ param $group_id the id of the group the user wants to be in
* @ return a string ( SUCCESS , ALREADY_ADDED or GROUP_NOT_EXISTING )
*/
public static function addUserToSupportGroup ( $user_id , $group_id ) {
//check if group id exists
if ( self :: supportGroup_Exists ( $group_id )){
//check if user isn't in supportgroup yet
//if not, create entry and return SUCCESS
if ( ! In_Support_Group :: userExistsInSGroup ( $user_id , $group_id ) ){
//create entry
$inSGroup = new In_Support_Group ();
$inSGroup -> setUser ( $user_id );
$inSGroup -> setGroup ( $group_id );
$inSGroup -> create ();
return " SUCCESS " ;
}
else {
//else return ALREADY_ADDED
return " ALREADY_ADDED " ;
}
} else {
//return that group doesn't exist
return " GROUP_NOT_EXISTING " ;
}
}
/**
* return all support_group objects .
* @ return an array containing all support_group objects .
* @ deprecated should be removed in the future , because getGroups does the same .
*/
public static function getAllSupportGroups () {
$dbl = new DBLayer ( " lib " );
$statement = $dbl -> executeWithoutParams ( " SELECT * FROM `support_group` " );
$row = $statement -> fetchAll ();
$result = Array ();
foreach ( $row as $group ){
$instance = new self ();
$instance -> set ( $group );
$result [] = $instance ;
}
return $result ;
}
////////////////////////////////////////////Methods////////////////////////////////////////////////////
/**
* A constructor .
* Empty constructor
*/
public function __construct () {
}
/**
* sets the object ' s attributes .
* @ param $values should be an array of the form array ( 'SGroupId' => groupid , 'Name' => name , 'Tag' => tag , 'GroupEmail' => mail , 'IMAP_MailServer' => server , 'IMAP_Username' => username , 'IMAP_Password' => pass ) .
*/
public function set ( $values ) {
$this -> setSGroupId ( $values [ 'SGroupId' ]);
$this -> setName ( $values [ 'Name' ]);
$this -> setTag ( $values [ 'Tag' ]);
$this -> setGroupEmail ( $values [ 'GroupEmail' ]);
$this -> setIMAP_MailServer ( $values [ 'IMAP_MailServer' ]);
$this -> setIMAP_Username ( $values [ 'IMAP_Username' ]);
$this -> setIMAP_Password ( $values [ 'IMAP_Password' ]);
}
/**
* creates a new 'support_group' entry .
* this method will use the object 's attributes for creating a new ' support_group ' entry in the database .
*/
public function create () {
$dbl = new DBLayer ( " lib " );
$dbl -> insert ( " support_group " , Array ( 'Name' => $this -> getName (), 'Tag' => $this -> getTag (), 'GroupEmail' => $this -> getGroupEmail (), 'IMAP_MailServer' => $this -> getIMAP_MailServer (), 'IMAP_Username' => $this -> getIMAP_Username (), 'IMAP_Password' => $this -> getIMAP_Password ()));
}
/**
* loads the object ' s attributes .
* loads the object ' s attributes by giving a group id , it will put the matching groups attributes in the object .
* @ param $id the id of the support group that should be loaded
*/
public function load_With_SGroupId ( $id ) {
$dbl = new DBLayer ( " lib " );
$statement = $dbl -> select ( " `support_group` " , array ( 'id' => $id ), " `SGroupId` = :id " );
$row = $statement -> fetch ();
$this -> set ( $row );
}
/**
* update the objects attributes to the db .
*/
public function update (){
$dbl = new DBLayer ( " lib " );
$dbl -> update ( " `support_group` " , Array ( 'Name' => $this -> getName (), 'Tag' => $this -> getTag (), 'GroupEmail' => $this -> getGroupEmail (), 'IMAP_MailServer' => $this -> getIMAP_MailServer (), 'IMAP_Username' => $this -> getIMAP_Username (), 'IMAP_password' => $this -> getIMAP_Password ()), " `SGroupId` = " . $this -> getSGroupId ());
}
/**
* deletes an existing 'support_group' entry .
* this method will use the object 's attributes for deleting an existing ' support_group ' entry in the database .
*/
public function delete (){
$dbl = new DBLayer ( " lib " );
$dbl -> delete ( " `support_group` " , Array ( 'id' => $this -> getSGroupId ()), " `SGroupId` = :id " );
}
////////////////////////////////////////////Getters////////////////////////////////////////////////////
/**
* get sGroupId attribute of the object .
*/
public function getSGroupId (){
return $this -> sGroupId ;
}
/**
* get name attribute of the object .
*/
public function getName (){
return $this -> name ;
}
/**
* get tag attribute of the object .
*/
public function getTag (){
return $this -> tag ;
}
/**
* get groupEmail attribute of the object .
*/
public function getGroupEmail (){
return $this -> groupEmail ;
}
/**
* get iMAP_MailServer attribute of the object .
*/
public function getIMAP_MailServer (){
return $this -> iMAP_MailServer ;
}
/**
* get iMAP_Username attribute of the object .
*/
public function getIMAP_Username (){
return $this -> iMAP_Username ;
}
/**
* get iMAP_Password attribute of the object .
*/
public function getIMAP_Password (){
return $this -> iMap_Password ;
}
////////////////////////////////////////////Setters////////////////////////////////////////////////////
/**
* set sGroupId attribute of the object .
* @ param $id integer id of the group
*/
public function setSGroupId ( $id ){
$this -> sGroupId = $id ;
}
/**
* set name attribute of the object .
* @ param $n name of the group
*/
public function setName ( $n ){
$this -> name = $n ;
}
/**
* set tag attribute of the object .
* @ param $t tag of the group
*/
public function setTag ( $t ){
$this -> tag = $t ;
}
/**
* set groupEmail attribute of the object .
* @ param $ge email of the group
*/
public function setGroupEmail ( $ge ){
$this -> groupEmail = $ge ;
}
/**
* set iMAP_MailServer attribute of the object .
* @ param $ms mailserver of the group
*/
public function setIMAP_MailServer ( $ms ){
$this -> iMAP_MailServer = $ms ;
}
/**
* set iMAP_Username attribute of the object .
* @ param $u imap username of the group
*/
public function setIMAP_Username ( $u ){
$this -> iMAP_Username = $u ;
}
/**
* set iMAP_Password attribute of the object .
* @ param $p imap password of the group
*/
public function setIMAP_Password ( $p ){
$this -> iMap_Password = $p ;
}
}