diff --git a/include/class.config.php b/include/class.config.php index 03fe8891c0acfbabe2ea41c750f926a606225277..aae5a2a7e8eb8d98bc0a234fbe5b1e4d84d94995 100644 --- a/include/class.config.php +++ b/include/class.config.php @@ -610,6 +610,10 @@ class OsticketConfig extends Config { return ($this->get('message_alert_dept_manager')); } + function alertAcctManagerONNewMessage() { + return ($this->get('message_alert_acct_manager')); + } + function alertONNewNote() { return ($this->get('note_alert_active')); } @@ -642,6 +646,10 @@ class OsticketConfig extends Config { return ($this->get('ticket_alert_dept_members')); } + function alertAcctManagerONNewTicket() { + return ($this->get('ticket_alert_acct_manager')); + } + function alertONTransfer() { return ($this->get('transfer_alert_active')); } @@ -1061,13 +1069,15 @@ class OsticketConfig extends Config { if($vars['ticket_alert_active'] && (!isset($vars['ticket_alert_admin']) && !isset($vars['ticket_alert_dept_manager']) - && !isset($vars['ticket_alert_dept_members']))) { + && !isset($vars['ticket_alert_dept_members']) + && !isset($vars['ticket_alert_acct_manager']))) { $errors['ticket_alert_active']='Select recipient(s)'; } if($vars['message_alert_active'] && (!isset($vars['message_alert_laststaff']) && !isset($vars['message_alert_assigned']) - && !isset($vars['message_alert_dept_manager']))) { + && !isset($vars['message_alert_dept_manager']) + && !isset($vars['message_alert_acct_manager']))) { $errors['message_alert_active']='Select recipient(s)'; } @@ -1106,10 +1116,12 @@ class OsticketConfig extends Config { 'ticket_alert_admin'=>isset($vars['ticket_alert_admin'])?1:0, 'ticket_alert_dept_manager'=>isset($vars['ticket_alert_dept_manager'])?1:0, 'ticket_alert_dept_members'=>isset($vars['ticket_alert_dept_members'])?1:0, + 'ticket_alert_acct_manager'=>isset($vars['ticket_alert_acct_manager'])?1:0, 'message_alert_active'=>$vars['message_alert_active'], 'message_alert_laststaff'=>isset($vars['message_alert_laststaff'])?1:0, 'message_alert_assigned'=>isset($vars['message_alert_assigned'])?1:0, 'message_alert_dept_manager'=>isset($vars['message_alert_dept_manager'])?1:0, + 'message_alert_acct_manager'=>isset($vars['message_alert_acct_manager'])?1:0, 'note_alert_active'=>$vars['note_alert_active'], 'note_alert_laststaff'=>isset($vars['note_alert_laststaff'])?1:0, 'note_alert_assigned'=>isset($vars['note_alert_assigned'])?1:0, diff --git a/include/class.organization.php b/include/class.organization.php index 5592aa95f8799a19067e79cb8f79ae9562f5ac29..4f55f290b3d08d038c07c2d97552095d80932633 100644 --- a/include/class.organization.php +++ b/include/class.organization.php @@ -32,6 +32,8 @@ class OrganizationModel extends VerySimpleModel { const COLLAB_PRIMARY_CONTACT = 0x0002; const ASSIGN_AGENT_MANAGER = 0x0004; + var $_manager; + function getId() { return $this->id; } @@ -40,8 +42,18 @@ class OrganizationModel extends VerySimpleModel { return $this->name; } + function getAccountManager() { + if (!isset($this->_manager)) { + if ($this->manager[0] == 't') + $this->_manager = Team::lookup(substr($this->manager, 1)); + if ($this->manager[0] == 's') + $this->_manager = Staff::lookup(substr($this->manager, 1)); + } + return $this->_manager; + } + function getAccountManagerId() { - return $this->staff_id; + return $this->manager; } function autoAddCollabs() { @@ -195,8 +207,19 @@ class Organization extends OrganizationModel { } } - if ($vars['staff_id'] && (!$staff = Staff::lookup($vars['staff_id']))) - $errors['staff_id'] = 'Select a staff member from the list'; + if ($vars['manager']) { + switch ($vars['manager'][0]) { + case 's': + if ($staff = Staff::lookup(substr($vars['manager'], 1))) + break; + case 't': + if ($vars['manager'][0] == 't' + && $team = Team::lookup(substr($vars['manager'], 1))) + break; + default: + $errors['manager'] = 'Select a staff member or team from the list'; + } + } if (!$valid || $errors) return false; @@ -225,7 +248,7 @@ class Organization extends OrganizationModel { // Set staff and primary contacts $this->set('domain', $vars['domain']); - $this->set('staff_id', $staff ? $staff->getId() : 0); + $this->set('manager', $vars['manager'] ?: ''); if ($vars['contacts'] && is_array($vars['contacts'])) { foreach ($this->allMembers() as $u) { $u->setPrimaryContact(array_search($u->id, $vars['contacts']) !== false); diff --git a/include/class.ticket.php b/include/class.ticket.php index 663ecc57ff633a3a49ff5af83d7701330310ed51..a5c48d99c3b7c260425dfd94902ae4826e3a77a2 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -937,6 +937,16 @@ class Ticket { if($cfg->alertDeptManagerONNewTicket() && $dept && ($manager=$dept->getManager())) $recipients[]= $manager; + // Account manager + if ($cfg->alertAcctManagerONNewMessage() + && ($org = $this->getOwner()->getOrganization()) + && ($acct_manager = $org->getAcctManager())) { + if ($acct_manager instanceof Team) + $recipients = array_merge($recipients, $acct_manager->getMembers()); + else + $recipients[] = $acct_manager; + } + foreach( $recipients as $k=>$staff) { if(!is_object($staff) || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue; $alert = $this->replaceVars($msg, array('recipient' => $staff)); @@ -1620,6 +1630,16 @@ class Ticket { if($cfg->alertDeptManagerONNewMessage() && $dept && ($manager=$dept->getManager())) $recipients[]=$manager; + // Account manager + if ($cfg->alertAcctManagerONNewMessage() + && ($org = $this->getOwner()->getOrganization()) + && ($acct_manager = $org->getAcctManager())) { + if ($acct_manager instanceof Team) + $recipients = array_merge($recipients, $acct_manager->getMembers()); + else + $recipients[] = $acct_manager; + } + $sentlist=array(); //I know it sucks...but..it works. foreach( $recipients as $k=>$staff) { if(!$staff || !$staff->getEmail() || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue; @@ -2334,9 +2354,12 @@ class Ticket { } // Auto assignment to organization account manager - if (($org = $user->getOrganization()) && $org->getAccountManagerId()) { - if (!isset($vars['staffId'])) - $vars['staffId'] = $org->getAccountManagerId(); + if (($org = $user->getOrganization()) + && ($code = $org->getAccountManagerId())) { + if (!isset($vars['staffId']) && $code[0] == 's') + $vars['staffId'] = substr($code, 1); + elseif (!isset($vars['teamId']) && $code[0] == 't') + $vars['teamId'] = substr($code, 1); } // Intenal mapping magic...see if we need to override anything diff --git a/include/staff/settings-alerts.inc.php b/include/staff/settings-alerts.inc.php index 0ab5cb689367ca713400a67af17613d261eec4b8..c0dbc628e38bae07c38eac2da5a83258229e56c3 100644 --- a/include/staff/settings-alerts.inc.php +++ b/include/staff/settings-alerts.inc.php @@ -36,6 +36,11 @@ <input type="checkbox" name="ticket_alert_dept_members" <?php echo $config['ticket_alert_dept_members']?'checked':''; ?>> Department Members <em>(spammy)</em> </td> </tr> + <tr> + <td> + <input type="checkbox" name="ticket_alert_acct_manager" <?php echo $config['ticket_alert_acct_manager']?'checked':''; ?>> Organization Account Manager + </td> + </tr> <tr><th><em><b>New Message Alert</b>: <i class="help-tip icon-question-sign" href="#new_message"></i> </em></th></tr> @@ -61,6 +66,11 @@ <input type="checkbox" name="message_alert_dept_manager" <?php echo $config['message_alert_dept_manager']?'checked':''; ?>> Department Manager <em>(spammy)</em> </td> </tr> + <tr> + <td> + <input type="checkbox" name="message_alert_acct_manager" <?php echo $config['message_alert_acct_manager']?'checked':''; ?>> Organization Account Manager + </td> + </tr> <tr><th><em><b>New Internal Note Alert</b>: <i class="help-tip icon-question-sign" href="#new_activity"></i> </em></th></tr> @@ -72,11 +82,6 @@ <font class="error"> <?php echo $errors['note_alert_active']; ?></font> </td> </tr> - <tr> - <td> - <input type="checkbox" name="note_alert_laststaff" <?php echo $config['note_alert_laststaff']?'checked':''; ?>> Last Respondent - </td> - </tr> <tr> <td> <input type="checkbox" name="note_alert_assigned" <?php echo $config['note_alert_assigned']?'checked':''; ?>> Assigned Staff diff --git a/include/staff/templates/org-profile.tmpl.php b/include/staff/templates/org-profile.tmpl.php index f8a8c1e56058eec3ed598917dd14dd7df29920b5..3dda76484b0a7e0432957b2045eff10b83580f9f 100644 --- a/include/staff/templates/org-profile.tmpl.php +++ b/include/staff/templates/org-profile.tmpl.php @@ -47,16 +47,29 @@ if ($ticket && $ticket->getOwnerId() == $user->getId()) Account Manager: </td> <td> - <select name="staff_id"> + <select name="manager"> <option value="0" selected="selected">— None —</option><?php - if (($agents=Staff::getAvailableStaffMembers())) { - foreach($agents as $id => $name) { + if ($users=Staff::getAvailableStaffMembers()) { ?> + <optgroup label="Staff Members (<?php echo count($users); ?>)"> +<?php foreach($users as $id => $name) { + $k = "s$id"; echo sprintf('<option value="%s" %s>%s</option>', - $id,(($info['staff_id']==$id)?'selected="selected"':''),$name); + $k,(($info['manager']==$k)?'selected="selected"':''),$name); } + echo '</optgroup>'; + } + + if ($teams=Team::getActiveTeams()) { ?> + <optgroup label="Teams (<?php echo count($teams); ?>)"> +<?php foreach($teams as $id => $name) { + $k="t$id"; + echo sprintf('<option value="%s" %s>%s</option>', + $k,(($info['manager']==$k)?'selected="selected"':''),$name); + } + echo '</optgroup>'; } ?> </select> - <br/><span class="error"><?php echo $errors['staff_id']; ?></span> + <br/><span class="error"><?php echo $errors['manager']; ?></span> </td> </tr> <tr>