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
$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['users'] = array('desc' => 'Users', 'href' => 'users.php', 'title' => 'User Directory');
$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 'users':
$subnav[] = array('desc' => 'User Directory', 'href' => 'users.php', 'iconclass' => 'teams');
$subnav[] = array('desc' => 'Organizations', 'href' => 'orgs.php', 'iconclass' => 'departments');
break;
$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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
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'=>'');
// Show the "Open New Ticket" link unless BOTH client
// registration is disabled and client login is required for new
// tickets. In such a case, creating a ticket would not be
// possible for web clients.
if ($cfg->getClientRegistrationMode() != 'disabled'
|| !$cfg->isClientLoginRequired())
$navs['new']=array('desc'=>'Open New Ticket','href'=>'open.php','title'=>'');
$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'=>'');