diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php index 93e90758c2963eebcefa43518b757e5c473d8eef..c9c98b04001d05cf428c14c6600de8df2952ddae 100644 --- a/include/ajax.tickets.php +++ b/include/ajax.tickets.php @@ -457,34 +457,23 @@ class TicketsAjaxAPI extends AjaxController { || !$ticket->checkStaffAccess($thisstaff)) Http::response(404, 'No such ticket'); - //If not a post then assume new collaborator form - if(!$_POST) - return self::_addcollaborator($ticket); - - $user = $form = null; - if (isset($_POST['id']) && $_POST['id']) { //Existing user/ - $user = User::lookup($_POST['id']); - } else { //We're creating a new user! - $form = UserForm::getUserForm()->getForm($_POST); - $user = User::fromForm($form); - } - $errors = $info = array(); + $user = null; + $form = UserForm::getInstance(); + if ($form->isValid()) + $user = User::fromForm($form->getClean()); + if ($user && ($c=$ticket->addCollaborator($user, $errors))) { - $info =array('msg' => sprintf('%s added as a collaborator', + $info +=array('msg' => sprintf('%s added as a collaborator', $c->getName())); - - return self::_collaborators($ticket, $info); - } - - if($errors && $errors['err']) { - $info +=array('error' => $errors['err']); + $form = null; + } elseif($errors && $errors['err']) { + $info +=array('add_error' => $errors['err']); } else { - $info +=array('error' =>'Unable to add collaborator - try again'); + $info +=array('add_error' =>'Errors occurred - try again'); } - - return self::_addcollaborator($ticket, $user, $form, $info); + return self::_collaborators($ticket, $form, $info); } function updateCollaborator($cid) { @@ -504,7 +493,7 @@ class TicketsAjaxAPI extends AjaxController { $info = array('msg' => sprintf('%s updated successfully', $c->getName())); - return self::_collaborators($ticket, $info); + return self::_collaborators($ticket, null, $info); } function viewCollaborator($cid) { @@ -525,22 +514,7 @@ class TicketsAjaxAPI extends AjaxController { || !$ticket->checkStaffAccess($thisstaff)) Http::response(404, 'No such ticket'); - if($ticket->getCollaborators()) - return self::_collaborators($ticket); - - return self::_addcollaborator($ticket); - } - - - - function _addcollaborator($ticket, $user=null, $form=null, $info=array()) { - - $info += array( - 'title' => sprintf('Ticket #%s: Add a collaborator', $ticket->getNumber()), - 'action' => sprintf('#tickets/%d/add-collaborator', $ticket->getId()) - ); - - return self::_userlookup($user, $form, $info); + return self::_collaborators($ticket); } @@ -558,26 +532,22 @@ class TicketsAjaxAPI extends AjaxController { $info +=array('error' => $errors['err']); } - return self::_collaborators($ticket, $info); + return self::_collaborators($ticket, null, $info); } - function _collaborator($collaborator, $form=null, $info=array()) { - - $info += array('action' => '#collaborators/'.$collaborator->getId()); - - $user = $collaborator->getUser(); + function _collaborator($collaborator, $form=null, $errors=array()) { ob_start(); - include(STAFFINC_DIR . 'templates/user.tmpl.php'); + include(STAFFINC_DIR . 'templates/collaborator.tmpl.php'); $resp = ob_get_contents(); ob_end_clean(); return $resp; } - function _collaborators($ticket, $info=array()) { + function _collaborators($ticket, $form=null, $info=array()) { ob_start(); include(STAFFINC_DIR . 'templates/collaborators.tmpl.php'); @@ -586,86 +556,5 @@ class TicketsAjaxAPI extends AjaxController { return $resp; } - - function viewUser($tid) { - global $thisstaff; - - if(!$thisstaff - || !($ticket=Ticket::lookup($tid)) - || !$ticket->checkStaffAccess($thisstaff)) - Http::response(404, 'No such ticket'); - - - if(!($user = $ticket->getOwner())) - Http::response(404, 'Unknown user'); - - - $info = array( - 'title' => sprintf('Ticket #%s: %s', $ticket->getNumber(), $user->getName()) - ); - - ob_start(); - include(STAFFINC_DIR . 'templates/user.tmpl.php'); - $resp = ob_get_contents(); - ob_end_clean(); - return $resp; - - } - - function updateUser($tid) { - - global $thisstaff; - - if(!$thisstaff - || !($ticket=Ticket::lookup($tid)) - || !$ticket->checkStaffAccess($thisstaff) - || ! ($user = $ticket->getOwner())) - Http::response(404, 'No such ticket/user'); - - $errors = array(); - if($user->updateInfo($_POST, $errors)) - Http::response(201, $user->to_json()); - - $forms = $user->getForms(); - - $info = array( - 'title' => sprintf('Ticket #%s: %s', $ticket->getNumber(), $user->getName()) - ); - - ob_start(); - include(STAFFINC_DIR . 'templates/user.tmpl.php'); - $resp = ob_get_contents(); - ob_end_clean(); - return $resp; - } - - function changeUserForm($tid) { - global $thisstaff; - - if(!$thisstaff - || !($ticket=Ticket::lookup($tid)) - || !$ticket->checkStaffAccess($thisstaff)) - Http::response(404, 'No such ticket'); - - - $user = $ticket->getOwner(); - - $info = array( - 'title' => sprintf('Change user for ticket #%s', $ticket->getNumber()) - ); - - return self::_userlookup($user, $info); - } - - function _userlookup($user, $form, $info) { - - ob_start(); - include(STAFFINC_DIR . 'templates/user-lookup.tmpl.php'); - $resp = ob_get_contents(); - ob_end_clean(); - return $resp; - - } - } ?> diff --git a/include/api.tickets.php b/include/api.tickets.php index e0a761e270d23a20a71a7aeb2204d4dc726084f1..45cbc2db97eccb120b0f22f7f47ba97ec8026ced 100644 --- a/include/api.tickets.php +++ b/include/api.tickets.php @@ -40,7 +40,7 @@ class TicketApiController extends ApiController { $supported = array_merge($supported, array('header', 'mid', 'emailId', 'ticketId', 'reply-to', 'reply-to-name', 'in-reply-to', 'references', - 'collaborators' => array("*" => array("name", "email")) + 'recipients' => array("*" => array("name", "email")) )); $supported['attachments']['*'][] = 'cid'; diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php index 97805cd527064c6458d0fa14ec120796e7188f30..2b05c3a593fbaef7620f5259bc1728f065834153 100644 --- a/include/class.mailfetch.php +++ b/include/class.mailfetch.php @@ -290,10 +290,10 @@ class MailFetcher { if($headerinfo->cc) $tolist = array_merge($tolist, $headerinfo->cc); - $header['collaborators'] = array(); + $header['recipients'] = array(); foreach($tolist as $addr) { if(!($emailId=Email::getIdByEmail(strtolower($addr->mailbox).'@'.$addr->host))) { - $header['collaborators'][] = array( + $header['recipients'][] = array( 'name' => $this->mime_decode(@$addr->personal), 'email' => strtolower($addr->mailbox).'@'.$addr->host); } elseif(!$header['emailId']) { @@ -303,12 +303,12 @@ class MailFetcher { //BCCed? if(!$header['emailId']) { - unset($header['collaborators']); //Nuke the recipients - we were bcced - if($headerinfo->bcc) + unset($header['recipients']); //Nuke the recipients - we were bcced + if ($headerinfo->bcc) { foreach($headerinfo->bcc as $addr) - if(!$header['emailId'] - && ($emailId=Email::getIdByEmail(strtolower($addr->mailbox).'@'.$addr->host))) - $header['emailId'] = $emailId; + if (($header['emailId'] = Email::getIdByEmail(strtolower($addr->mailbox).'@'.$addr->host))) + break; + } } // Ensure we have a message-id. If unable to read it out of the diff --git a/include/class.mailparse.php b/include/class.mailparse.php index c1f4700c4cce5e9b5ab92ca234eac81527a7eeef..dfc4c6b3f2932f2a97ca0b7234215b2ba70cbfca 100644 --- a/include/class.mailparse.php +++ b/include/class.mailparse.php @@ -386,7 +386,7 @@ class EmailDataParser { //TO Address:Try to figure out the email address... associated with the incoming email. $data['emailId'] = 0; - $data['collaborators'] = array(); + $data['recipients'] = array(); $tolist = array(); if(($to = $parser->getToAddressList())) $tolist = array_merge($tolist, $to); @@ -396,7 +396,7 @@ class EmailDataParser { foreach ($tolist as $addr) { if(!($emailId=Email::getIdByEmail(strtolower($addr->mailbox).'@'.$addr->host))) { - $data['collaborators'][] = array( + $data['recipients'][] = array( 'name' => trim(@$addr->personal, '"'), 'email' => strtolower($addr->mailbox).'@'.$addr->host); } elseif(!$data['emailId']) { @@ -406,7 +406,7 @@ class EmailDataParser { //maybe we got BCC'ed?? if(!$data['emailId']) { - unset($data['collaborators']); + unset($data['recipients']); $emailId = 0; if($bcc = $parser->getBccAddressList()) foreach ($bcc as $addr) { diff --git a/include/class.ticket.php b/include/class.ticket.php index e61bdf05d954bbd77c6bee69e40f59af16f7a817..648424ca61cd8d4f2df4856629745875f64cffbb 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -1456,6 +1456,13 @@ class Ticket { $this->setLastMsgId($message->getId()); + //Add email recipients as collaborators + if($vars['recipients']) { + foreach($vars['recipients'] as $recipient) + if(($user=User::fromVars($recipient))) + $this->addCollaborator($user, $errors); + } + if(!$alerts) return $message; //Our work is done... $autorespond = true;