Newer
Older
<?php
/*********************************************************************
class.nav.php
Navigation helper classes. Pointless BUT helps keep navigation clean and free from errors.
Peter Rotich <peter@osticket.com>
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
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:
**********************************************************************/
class StaffNav {
var $tabs=array();
var $submenus=array();
var $activetab;
var $activemenu;
var $panel;
var $staff;
function StaffNav($staff, $panel='staff'){
$this->staff=$staff;
$this->panel=strtolower($panel);
$this->tabs=$this->getTabs();
$this->submenus=$this->getSubMenus();
}
function getPanel(){
return $this->panel;
}
function isAdminPanel(){
return (!strcasecmp($this->getPanel(),'admin'));
}
function isStaffPanel() {
return (!$this->isAdminPanel());
}
Kelli Shaver
committed
Peter Rotich
committed
function setTabActive($tab, $menu=''){
Kelli Shaver
committed
if($this->tabs[$tab]){
$this->tabs[$tab]['active']=true;
if($this->activetab && $this->activetab!=$tab && $this->tabs[$this->activetab])
$this->tabs[$this->activetab]['active']=false;
$this->activetab=$tab;
Peter Rotich
committed
if($menu) $this->setActiveSubMenu($menu, $tab);
Kelli Shaver
committed
Peter Rotich
committed
function setActiveTab($tab, $menu=''){
return $this->setTabActive($tab, $menu);
}
function getActiveTab(){
return $this->activetab;
}
Peter Rotich
committed
function setActiveSubMenu($mid, $tab='') {
if(is_numeric($mid))
$this->activeMenu = $mid;
elseif($mid && $tab && ($subNav=$this->getSubNav($tab))) {
foreach($subNav as $k => $menu) {
if(strcasecmp($mid, $menu['href'])) continue;
$this->activeMenu = $k+1;
break;
}
}
}
function getActiveMenu() {
return $this->activeMenu;
}
Kelli Shaver
committed
Kelli Shaver
committed
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
$this->submenus[$this->getPanel().'.'.$this->activetab][]=$item;
if($active)
$this->activeMenu=sizeof($this->submenus[$this->getPanel().'.'.$this->activetab]);
}
function getTabs(){
if(!$this->tabs) {
$this->tabs=array();
$this->tabs['dashboard']=array('desc'=>'Dashboard','href'=>'dashboard.php','title'=>'Staff Dashboard');
$this->tabs['tickets']=array('desc'=>'Tickets','href'=>'tickets.php','title'=>'Ticket Queue');
$this->tabs['kbase']=array('desc'=>'Knowledgebase','href'=>'kb.php','title'=>'Knowledgebase');
}
return $this->tabs;
}
function getSubMenus(){ //Private.
$staff = $this->staff;
$submenus=array();
foreach($this->getTabs() as $k=>$tab){
$subnav=array();
switch(strtolower($k)){
case 'tickets':
$subnav[]=array('desc'=>'Tickets','href'=>'tickets.php','iconclass'=>'Ticket', 'droponly'=>true);
if($staff) {
if(($assigned=$staff->getNumAssignedTickets()))
Kelli Shaver
committed
$subnav[]=array('desc'=>"My Tickets ($assigned)",
'href'=>'tickets.php?status=assigned',
'iconclass'=>'assignedTickets',
'droponly'=>true);
if($staff->canCreateTickets())
$subnav[]=array('desc'=>'New Ticket',
'title' => 'Open New Ticket',
'href'=>'tickets.php?a=open',
'iconclass'=>'newTicket',
'droponly'=>true);
}
break;
case 'dashboard':
$subnav[]=array('desc'=>'Dashboard','href'=>'dashboard.php','iconclass'=>'logs');
$subnav[]=array('desc'=>'Staff Directory','href'=>'directory.php','iconclass'=>'teams');
$subnav[]=array('desc'=>'My Profile','href'=>'profile.php','iconclass'=>'users');
break;
case 'kbase':
$subnav[]=array('desc'=>'FAQs','href'=>'kb.php', 'urls'=>array('faq.php'), 'iconclass'=>'kb');
$subnav[]=array('desc'=>'Categories','href'=>'categories.php','iconclass'=>'faq-categories');
$subnav[]=array('desc'=>'Canned Responses','href'=>'canned.php','iconclass'=>'canned');
}
break;
}
if($subnav)
$submenus[$this->getPanel().'.'.strtolower($k)]=$subnav;
}
Kelli Shaver
committed
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
return $submenus;
}
function getSubMenu($tab=null){
$tab=$tab?$tab:$this->activetab;
return $this->submenus[$this->getPanel().'.'.$tab];
}
function getSubNav($tab=null){
return $this->getSubMenu($tab);
}
}
class AdminNav extends StaffNav{
function AdminNav($staff){
parent::StaffNav($staff, 'admin');
}
function getTabs(){
if(!$this->tabs){
$tabs=array();
$tabs['dashboard']=array('desc'=>'Dashboard','href'=>'logs.php','title'=>'Admin Dashboard');
$tabs['settings']=array('desc'=>'Settings','href'=>'settings.php','title'=>'System Settings');
$tabs['manage']=array('desc'=>'Manage','href'=>'helptopics.php','title'=>'Manage Options');
$tabs['emails']=array('desc'=>'Emails','href'=>'emails.php','title'=>'Email Settings');
$tabs['staff']=array('desc'=>'Staff','href'=>'staff.php','title'=>'Manage Staff');
Kelli Shaver
committed
return $this->tabs;
}
function getSubMenus(){
$submenus=array();
foreach($this->getTabs() as $k=>$tab){
$subnav=array();
switch(strtolower($k)){
case 'dashboard':
$subnav[]=array('desc'=>'System Logs','href'=>'logs.php','iconclass'=>'logs');
$subnav[]=array('desc'=>'Information','href'=>'system.php','iconclass'=>'preferences');
$subnav[]=array('desc'=>'Company','href'=>'settings.php?t=pages','iconclass'=>'pages');
$subnav[]=array('desc'=>'System','href'=>'settings.php?t=system','iconclass'=>'preferences');
$subnav[]=array('desc'=>'Tickets','href'=>'settings.php?t=tickets','iconclass'=>'ticket-settings');
$subnav[]=array('desc'=>'Emails','href'=>'settings.php?t=emails','iconclass'=>'email-settings');
$subnav[]=array('desc'=>'Access','href'=>'settings.php?t=access','iconclass'=>'users');
$subnav[]=array('desc'=>'Knowledgebase','href'=>'settings.php?t=kb','iconclass'=>'kb-settings');
$subnav[]=array('desc'=>'Autoresponder','href'=>'settings.php?t=autoresp','iconclass'=>'email-autoresponders');
$subnav[]=array('desc'=>'Alerts & Notices','href'=>'settings.php?t=alerts','iconclass'=>'alert-settings');
break;
case 'manage':
$subnav[]=array('desc'=>'Help Topics','href'=>'helptopics.php','iconclass'=>'helpTopics');
$subnav[]=array('desc'=>'Ticket Filters','href'=>'filters.php',
'title'=>'Ticket Filters','iconclass'=>'ticketFilters');
$subnav[]=array('desc'=>'SLA Plans','href'=>'slas.php','iconclass'=>'sla');
$subnav[]=array('desc'=>'API Keys','href'=>'apikeys.php','iconclass'=>'api');
$subnav[]=array('desc'=>'Pages', 'href'=>'pages.php','title'=>'Pages','iconclass'=>'pages');
$subnav[]=array('desc'=>'Forms','href'=>'forms.php','iconclass'=>'forms');
$subnav[]=array('desc'=>'Lists','href'=>'lists.php','iconclass'=>'lists');
$subnav[]=array('desc'=>'Plugins','href'=>'plugins.php','iconclass'=>'api');
$subnav[]=array('desc'=>'Emails','href'=>'emails.php', 'title'=>'Email Addresses', 'iconclass'=>'emailSettings');
$subnav[]=array('desc'=>'Banlist','href'=>'banlist.php',
'title'=>'Banned Emails','iconclass'=>'emailDiagnostic');
$subnav[]=array('desc'=>'Templates','href'=>'templates.php','title'=>'Email Templates','iconclass'=>'emailTemplates');
$subnav[]=array('desc'=>'Diagnostic','href'=>'emailtest.php', 'title'=>'Email Diagnostic', 'iconclass'=>'emailDiagnostic');
break;
case 'staff':
$subnav[]=array('desc'=>'Staff Members','href'=>'staff.php','iconclass'=>'users');
$subnav[]=array('desc'=>'Teams','href'=>'teams.php','iconclass'=>'teams');
$subnav[]=array('desc'=>'Groups','href'=>'groups.php','iconclass'=>'groups');
$subnav[]=array('desc'=>'Departments','href'=>'departments.php','iconclass'=>'departments');
break;
}
if($subnav)
$submenus[$this->getPanel().'.'.strtolower($k)]=$subnav;
}
return $submenus;
}
}
class UserNav {
Kelli Shaver
committed
var $navs=array();
var $activenav;
var $user;
Kelli Shaver
committed
function UserNav($user=null, $active=''){
$this->user=$user;
$this->navs=$this->getNavs();
if($active)
$this->setActiveNav($active);
}
function setActiveNav($nav){
if($nav && $this->navs[$nav]){
$this->navs[$nav]['active']=true;
if($this->activenav && $this->activenav!=$nav && $this->navs[$this->activenav])
$this->navs[$this->activenav]['active']=false;
$this->activenav=$nav;
return true;
}
return false;
}
function getNavLinks(){
global $cfg;
Kelli Shaver
committed
//Paths are based on the root dir.
if(!$this->navs){
$navs = array();
$user = $this->user;
$navs['home']=array('desc'=>'Support Center Home','href'=>'index.php','title'=>'');
if($cfg && $cfg->isKnowledgebaseEnabled())
$navs['kb']=array('desc'=>'Knowledgebase','href'=>'kb/index.php','title'=>'');
$navs['new']=array('desc'=>'Open New Ticket','href'=>'open.php','title'=>'');
if($user && $user->isValid()) {
$navs['tickets']=array('desc'=>sprintf('Tickets (%d)',$user->getNumTickets()),
'href'=>'tickets.php',
'title'=>'Show all tickets');
} else {
$navs['tickets']=array('desc'=>'View Ticket Thread',
'href'=>sprintf('tickets.php?id=%d',$user->getTicketId()),
'title'=>'View ticket status');
}
} else {
$navs['status']=array('desc'=>'Check Ticket Status','href'=>'view.php','title'=>'');