help.verua.ch/scp/admin.php
2026-01-05 08:46:20 +01:00

718 lines
36 KiB
PHP
Raw Blame History

<?php
/*********************************************************************
admin.php
Handles all admin related pages....everything admin!
Peter Rotich <peter@osticket.com>
Copyright (c) 2006-2010 osTicket
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:
$Id: $
**********************************************************************/
require('staff.inc.php');
//Make sure the user is admin type LOCKDOWN BABY!
if(!$thisuser or !$thisuser->isadmin()){
header('Location: index.php');
require('index.php'); // just in case!
exit;
}
//Some security related warnings - bitch until fixed!!! :)
if(defined('THIS_VERSION') && strcasecmp($cfg->getVersion(),THIS_VERSION)) {
$sysnotice=sprintf('Das Script hat die Version %s und die Datenbankversion %s.',THIS_VERSION,$cfg->getVersion());
if(file_exists('../setup/'))
$sysnotice.=' M&ouml;glicherweise verursacht durch unvollst&auml;ndiges <a href="../setup/upgrade.php">Upgrade</a>.';
$errors['err']=$sysnotice;
}elseif(!$cfg->isHelpDeskOffline()) {
if(file_exists('../setup/')){
$sysnotice='Bitte nehmen Sie sich kurz etwas Zeit um das Verzeichnis <strong>setup/install</strong> aus Sicherheitsgr&uuml;nden zu l&ouml;schen.';
}else{
if(CONFIG_FILE && file_exists(CONFIG_FILE) && is_writable(CONFIG_FILE)) {
//Confirm for real that the file is writable by group or world.
clearstatcache(); //clear the cache!
$perms = @fileperms(CONFIG_FILE);
if(($perms & 0x0002) || ($perms & 0x0010)) {
#$sysnotice=sprintf('Bitte &auml;nmdern Sie die Rechte der Konfig.-Datei (%s) und entfernen das Schreibrecht. e.g <i>chmod 644 %s</i>',
#basename(CONFIG_FILE),basename(CONFIG_FILE));
}
}
}
if(!$sysnotice && ini_get('register_globals'))
$sysnotice='Beachten Sie, dass das Ausschalten von registerGlobals empfohlen wird.';
}
//Access checked out OK...lets do the do
define('OSTADMININC',TRUE); //checked by admin include files
define('ADMINPAGE',TRUE); //Used by the header to swap menus.
//Files we might need.
//TODO: Do on-demand require...save some mem.
require_once(INCLUDE_DIR.'class.ticket.php');
require_once(INCLUDE_DIR.'class.dept.php');
require_once(INCLUDE_DIR.'class.email.php');
require_once(INCLUDE_DIR.'class.mailfetch.php');
//Handle a POST.
if($_POST && $_REQUEST['t'] && !$errors):
//print_r($_POST);
//WELCOME TO THE HOUSE OF PAIN.
$errors=array(); //do it anyways.
switch(strtolower($_REQUEST['t'])):
case 'pref':
//Do the dirty work behind the scenes.
if($cfg->updatePref($_POST,$errors)){
$msg='Einstellungen erfolgreich &uuml;bernommen';
$cfg->reload();
}else{
$errors['err']=$errors['err']?$errors['err']:'Interner Fehler';
}
break;
case 'attach':
if($_POST['allow_attachments'] or $_POST['upload_dir']) {
if($_POST['upload_dir']) //get the real path.
$_POST['upload_dir'] = realpath($_POST['upload_dir']);
if(!$_POST['upload_dir'] or !is_writable($_POST['upload_dir'])) {
$errors['upload_dir']='Verzeichnis muss vorhanden und beschreibar sein';
if($_POST['allow_attachments'])
$errors['allow_attachments']='Fehlerhaftes Upload-Verzeichnis';
}elseif(!ini_get('file_uploads')) {
$errors['allow_attachments']='Die \'file_uploads\' Variable ist in der php.ini deaktiviert';
}
if(!is_numeric($_POST['max_file_size']))
$errors['max_file_size']='Maximale Dateigr&ouml;<3B>e erfoderlich';
if(!$_POST['allowed_filetypes'])
$errors['allowed_filetypes']='Erlaubte Dateitypen erforderlich';
}
if(!$errors) {
$sql= 'UPDATE '.CONFIG_TABLE.' SET allow_attachments='.db_input(isset($_POST['allow_attachments'])?1:0).
',upload_dir='.db_input($_POST['upload_dir']).
',max_file_size='.db_input($_POST['max_file_size']).
',allowed_filetypes='.db_input(strtolower(preg_replace("/\n\r|\r\n|\n|\r/", '',trim($_POST['allowed_filetypes'])))).
',email_attachments='.db_input(isset($_POST['email_attachments'])?1:0).
',allow_email_attachments='.db_input(isset($_POST['allow_email_attachments'])?1:0).
',allow_online_attachments='.db_input(isset($_POST['allow_online_attachments'])?1:0).
',allow_online_attachments_onlogin='.db_input(isset($_POST['allow_online_attachments_onlogin'])?1:0).
' WHERE id='.$cfg->getId();
//echo $sql;
if(db_query($sql)) {
$cfg->reload();
$msg='Einstellungen f&uuml;r Anh&auml;nge aktualisiert';
}else{
$errors['err']='Fehler beim Update!';
}
}else {
$errors['err']='Fehler aufgetreten. Siehe Fehlermeldungen unten.';
}
break;
case 'api':
include_once(INCLUDE_DIR.'class.api.php');
switch(strtolower($_POST['do'])) {
case 'add':
if(Api::add(trim($_POST['ip']),$errors))
$msg='Key erfolgreich f&uuml;r '.Format::htmlchars($_POST['ip'].' erstellt.');
elseif(!$errors['err'])
$errors['err']='Fehler beim hinzuf&uuml;gen der IP. Bitte nochmals versuchen.';
break;
case 'update_phrase':
if(Api::setPassphrase(trim($_POST['phrase']),$errors))
$msg='API Passwort erfolgreich aktualisiert.';
elseif(!$errors['err'])
$errors['err']='Fehler beim &Auml;ndern des Passwortes. Bitte nochmals versuchen.';
break;
case 'mass_process':
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
$errors['err']='Sie m&uuml;ssen mindestens einen Eintrag ausw&auml;hlen, um fortzufahren';
}else{
$count=count($_POST['ids']);
$ids=implode(',',$_POST['ids']);
if($_POST['enable'] || $_POST['disable']) {
$resp=db_query('UPDATE '.API_KEY_TABLE.' SET isactive='.db_input($_POST['enable']?1:0).' WHERE id IN ('.$ids.')');
if($resp && ($i=db_affected_rows())){
$msg="$i von $count augew&auml;hlten Key(s) aktualisiert";
}else {
$errors['err']='L6ouml;schen des Key nicht m&ouml;glich.';
}
}elseif($_POST['delete']){
$resp=db_query('DELETE FROM '.API_KEY_TABLE.' WHERE id IN ('.$ids.')');
if($resp && ($i=db_affected_rows())){
$msg="$i von $count gew&auml;hlten Key(s) gel&ouml;scht";
}else{
$errors['err']='L&ouml;schen des/der gew&auml;hlten Key(s) nicht m&ouml;glich. Bitte nochmals versuchen.';
}
}else {
$errors['err']='Unbekanntes Kommando';
}
}
break;
default:
$errors['err']='Unbekannte Aktion '.$_POST['do'];
}
break;
case 'banlist': //BanList.
require_once(INCLUDE_DIR.'class.banlist.php');
switch(strtolower($_POST['a'])) {
case 'add':
if(!$_POST['email'] || !Validator::is_email($_POST['email']))
$errors['err']='Bitte geben Sie eine korrekte E-Mail-Adresse ein.';
elseif(BanList::isbanned($_POST['email']))
$errors['err']='Email ist bereits gesperrt';
else{
if(BanList::add($_POST['email'],$thisuser->getName()))
$msg='Email wurde zur Bannliste hinzugef&uuml;t';
else
$errors['err']='Hinzuf&uuml;gen zur Bannliste nicht m&ouml;glich. Bitte erneut versuchen.';
}
break;
case 'remove':
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
$errors['err']='Sie m&uuml;ssen mindestens eine E-Mail ausw&auml;hlen';
}else{
//TODO: move mass remove to Banlist class when needed elsewhere...at the moment this is the only place.
$sql='DELETE FROM '.BANLIST_TABLE.' WHERE id IN ('.implode(',',$_POST['ids']).')';
if(db_query($sql) && ($num=db_affected_rows()))
$msg="$num von $count gew&auml;hlten Emails von Bannliste gel&ouml;scht.";
else
$errors['err']='L&ouml;schen von gew&auml;hlten Emails nicht m&ouml;glich. Bitte erneut versuchen.';
}
break;
default:
$errors['err']='Unbekannter Befehl!';
}
break;
case 'email':
require_once(INCLUDE_DIR.'class.email.php');
$do=strtolower($_POST['do']);
switch($do){
case 'update':
$email = new Email($_POST['email_id']);
if($email && $email->getId()) {
if($email->update($_POST,$errors))
$msg='Email erfolgreich ge&auml;ndert';
elseif(!$errors['err'])
$errors['err']='Fehler beim &Auml;ndern der Email';
}else{
$errors['err']='Interner Fehler';
}
break;
case 'create':
if(Email::create($_POST,$errors))
$msg='Email erfolgreich hinzugef&uuml;gt';
elseif(!$errors['err'])
$errors['err']='Hinzuf&uuml;gen nicht m&ouml;glich. Interner Fehler';
break;
case 'mass_process':
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
$errors['err']='Sie m&uuml;ssen mindestens eine E-Mail ausw&auml;hlen, um fortzufahren';
}else{
$count=count($_POST['ids']);
$ids=implode(',',$_POST['ids']);
$sql='SELECT count(dept_id) FROM '.DEPT_TABLE.' WHERE email_id IN ('.$ids.') OR autoresp_email_id IN ('.$ids.')';
list($depts)=db_fetch_row(db_query($sql));
if($depts>0){
$errors['err']='Eine oder mehrer der gew&auml;hlten Emails wird von einer Abteilung verwendet. Entfernen Sie diese Zuordnung bevor sie fortfahren.';
}elseif($_POST['delete']){
$i=0;
foreach($_POST['ids'] as $k=>$v) {
if(Email::deleteEmail($v)) $i++;
}
if($i>0){
$msg="$i von $count gew&auml;hlten Email(s) gel&ouml;scht";
}else{
$errors['err']='L&ouml;schen des/der gew&auml;hlten Email(s) nicht m&ouml;glich. Bitte nochmals versuchen.';
}
}else{
$errors['err']='Unbekanntes Kommando';
}
}
break;
default:
$errors['err']='Unbekannte Themenaktion!';
}
break;
case 'templates':
include_once(INCLUDE_DIR.'class.msgtpl.php');
$do=strtolower($_POST['do']);
switch($do){
case 'add':
case 'create':
if(($tid=Template::create($_POST,$errors))){
$msg='Vorlage erfolgreich erstellt';
}elseif(!$errors['err']){
$errors['err']='Fehler beim Erstellen der Vorlage - bitte wiederholen';
}
break;
case 'update':
$template=null;
if($_POST['id'] && is_numeric($_POST['id'])) {
$template= new Template($_POST['id']);
if(!$template || !$template->getId()) {
$template=null;
$errors['err']='Unbekannte Vorlage'.$id;
}elseif($template->update($_POST,$errors)){
$msg='Template erfolgreich aktualisiert';
}elseif(!$errors['err']){
$errors['err']='Fehler beim &Auml; der Vorlage - bitte wiederholen';
}
}
break;
case 'mass_process':
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
$errors['err']='Sie m&uuml;ssen mindestens eine Vorlage w&auml;hlen';
}elseif(in_array($cfg->getDefaultTemplateId(),$_POST['ids'])){
$errors['err']='Sie k&ouml;nnen die Standardvorlage nicht l&ouml;schen';
}else{
$count=count($_POST['ids']);
$ids=implode(',',$_POST['ids']);
$sql='SELECT count(dept_id) FROM '.DEPT_TABLE.' WHERE tpl_id IN ('.$ids.')';
list($tpl)=db_fetch_row(db_query($sql));
if($tpl>0){
$errors['err']='Eine oder mehrere der gew&auml;hlten Vorlagen wird von einer Abteilung verwendet. Entfernen Sie diese Zuordnung bevor sie fortfahren.';
}elseif($_POST['delete']){
$sql='DELETE FROM '.EMAIL_TEMPLATE_TABLE.' WHERE tpl_id IN ('.$ids.') AND tpl_id!='.db_input($cfg->getDefaultTemplateId());
if(($result=db_query($sql)) && ($i=db_affected_rows()))
$msg="$i von $count gew&auml;hlten Vorlagen gel&ouml;scht";
else
$errors['err']='L&ouml;schen der gew&auml;hlten Vorlage(n) nicht m&ouml;glich. Bitte nochmals versuchen.';
}else{
$errors['err']='Unbekanntes Kommando';
}
}
break;
default:
$errors['err']='Unbekannte Aktion';
//print_r($_POST);
}
break;
case 'topics':
require_once(INCLUDE_DIR.'class.topic.php');
$do=strtolower($_POST['do']);
switch($do){
case 'update':
$topic = new Topic($_POST['topic_id']);
if($topic && $topic->getId()) {
if($topic->update($_POST,$errors))
$msg='Thema erfolgreich aktualisiert';
elseif(!$errors['err'])
$errors['err']='Fehler beim Aktualisieren des Themas';
}else{
$errors['err']='Internet Fehler';
}
break;
case 'create':
if(Topic::create($_POST,$errors))
$msg='Hilfethema erfolgreich erstellt';
elseif(!$errors['err'])
$errors['err']='Erstellen des Themas nicht m&ouml;glich. Internet Fehler';
break;
case 'mass_process':
if(!$_POST['tids'] || !is_array($_POST['tids'])) {
$errors['err']='Sie m&uuml;ssen mindestens ein Thema ausw&auml;hlen.';
}else{
$count=count($_POST['tids']);
$ids=implode(',',$_POST['tids']);
if($_POST['enable']){
$sql='UPDATE '.TOPIC_TABLE.' SET isactive=1, updated=NOW() WHERE topic_id IN ('.$ids.') AND isactive=0 ';
if(db_query($sql) && ($num=db_affected_rows()))
$msg="$num von $count gew&auml;hlten Diensten aktiviert";
else
$errors['err']='Aktion wurde nicht vollst&auml;ndig durchgef&uuml;hrt.';
}elseif($_POST['disable']){
$sql='UPDATE '.TOPIC_TABLE.' SET isactive=0, updated=NOW() WHERE topic_id IN ('.$ids.') AND isactive=1 ';
if(db_query($sql) && ($num=db_affected_rows()))
$msg="$num von $count gew&auml;hlten Themen deaktiviert";
else
$errors['err']='Deaktivieren der gew&auml;hlten Themen nicht m&ouml;glich';
}elseif($_POST['delete']){
$sql='DELETE FROM '.TOPIC_TABLE.' WHERE topic_id IN ('.$ids.')';
if(db_query($sql) && ($num=db_affected_rows()))
$msg="$num of $count selected topics deleted!";
else
$errors['err']='L&ouml;schen der gew&auml;hlten Themen nicht m&ouml;glich';
}
}
break;
default:
$errors['err']='Unbekannte Themenaktion!';
}
break;
case 'groups':
include_once(INCLUDE_DIR.'class.group.php');
$do=strtolower($_POST['do']);
switch($do){
case 'update':
if(Group::update($_POST['group_id'],$_POST,$errors)){
$msg='Gruppe '.Format::htmlchars($_POST['group_name']).' erfolgreich aktualisiert';
}elseif(!$errors['err']) {
$errors['err']='Fehler sind aufgetreten. Bitte nochmals versuchen.';
}
break;
case 'create':
if(($gID=Group::create($_POST,$errors))){
$msg='Gruppe '.Format::htmlchars($_POST['group_name']).' erfolgreich erstellt';
}elseif(!$errors['err']) {
$errors['err']='Fehler sind aufgetreten. Bitte nochmals versuchen.';
}
break;
default:
//ok..at this point..look WMA.
if($_POST['grps'] && is_array($_POST['grps'])) {
$ids=implode(',',$_POST['grps']);
$selected=count($_POST['grps']);
if(isset($_POST['activate_grps'])) {
$sql='UPDATE '.GROUP_TABLE.' SET group_enabled=1,updated=NOW() WHERE group_enabled=0 AND group_id IN('.$ids.')';
db_query($sql);
$msg=db_affected_rows()." von $selected gew&auml;auml;auml;hlten Gruppen aktiviert";
}elseif(in_array($thisuser->getDeptId(),$_POST['grps'])) {
$errors['err']="Der Versuch, Ihre Gruppe zu l&ouml;schen oder deaktivieren macht keinen Sinn!";
}elseif(isset($_POST['disable_grps'])) {
$sql='UPDATE '.GROUP_TABLE.' SET group_enabled=0, updated=NOW() WHERE group_enabled=1 AND group_id IN('.$ids.')';
db_query($sql);
$msg=db_affected_rows()." von $selected gew&auml;auml;auml;hlten Gruppen deaktiviert";
}elseif(isset($_POST['delete_grps'])) {
$res=db_query('SELECT staff_id FROM '.STAFF_TABLE.' WHERE group_id IN('.$ids.')');
if(!$res || db_num_rows($res)) { //fail if any of the selected groups has users.
$errors['err']='Eine oder mehrere der gew&auml;auml;auml;hlten Gruppen enthalten Nutzer. Nur leere Gruppen k&ouml;nnen gel&ouml;scht werden.';
}else{
db_query('DELETE FROM '.GROUP_TABLE.' WHERE group_id IN('.$ids.')');
$msg=db_affected_rows()." von $selected gew&auml;auml;auml;hlten Gruppen gel&ouml;scht.";
}
}else{
$errors['err']='Unbekannten Kommando!';
}
}else{
$errors['err']='Keine Gruppen ausgew&auml;auml;auml;hlt.';
}
}
break;
case 'staff':
include_once(INCLUDE_DIR.'class.staff.php');
$do=strtolower($_POST['do']);
switch($do){
case 'update':
$staff = new Staff($_POST['staff_id']);
if($staff && $staff->getId()) {
if($staff->update($_POST,$errors))
$msg='Mitarbeiterprofil erfolgreich aktualisiert';
elseif(!$errors['err'])
$errors['err']='Fehler beim Aktualisieren des Nutzers';
}else{
$errors['err']='Internet Fehler';
}
break;
case 'create':
if(($uID=Staff::create($_POST,$errors)))
$msg=Format::htmlchars($_POST['firstname'].' '.$_POST['lastname']).' erfolgreich hinzugef&uuml;gt';
elseif(!$errors['err'])
$errors['err']='Hinzuf&uuml;gen des Nutzers nicht m&ouml;glich. Internet Fehler';
break;
case 'mass_process':
//ok..at this point..look WMA.
if($_POST['uids'] && is_array($_POST['uids'])) {
$ids=implode(',',$_POST['uids']);
$selected=count($_POST['uids']);
if(isset($_POST['enable'])) {
$sql='UPDATE '.STAFF_TABLE.' SET isactive=1,updated=NOW() WHERE isactive=0 AND staff_id IN('.$ids.')';
db_query($sql);
$msg=db_affected_rows()." von $selected gew&auml;hlten Nutzern aktiviert";
}elseif(in_array($thisuser->getId(),$_POST['uids'])) {
//sucker...watch what you are doing...why don't you just DROP the DB?
$errors['err']='Man ey... . Du kannst dich doch selber nicht l&ouml;schen! HONK!';
}elseif(isset($_POST['disable'])) {
$sql='UPDATE '.STAFF_TABLE.' SET isactive=0, updated=NOW() '.
' WHERE isactive=1 AND staff_id IN('.$ids.') AND staff_id!='.$thisuser->getId();
db_query($sql);
$msg=db_affected_rows()." von $selected gew&auml;hlten Nutzern gesperrt.";
//Release tickets assigned to the user?? NO? could be a temp thing
// May be auto-release if not logged in for X days?
}elseif(isset($_POST['delete'])) {
db_query('DELETE FROM '.STAFF_TABLE.' WHERE staff_id IN('.$ids.') AND staff_id!='.$thisuser->getId());
$msg=db_affected_rows()." von $selected gew&auml;hlten Nutzern gel&ouml;scht";
//Demote the user
db_query('UPDATE '.DEPT_TABLE.' SET manager_id=0 WHERE manager_id IN('.$ids.') ');
db_query('UPDATE '.TICKET_TABLE.' SET staff_id=0 WHERE staff_id IN('.$ids.') ');
}else{
$errors['err']='Unbekanntes Kommando!';
}
}else{
$errors['err']='Keine Nutzer ausgew&auml;hlt.';
}
break;
default:
$errors['err']='Unbekanntes Kommando!';
}
break;
case 'dept':
include_once(INCLUDE_DIR.'class.dept.php');
$do=strtolower($_POST['do']);
switch($do){
case 'update':
$dept = new Dept($_POST['dept_id']);
if($dept && $dept->getId()) {
if($dept->update($_POST,$errors))
$msg='Abteilung erfolgreich aktualisiert';
elseif(!$errors['err'])
$errors['err']='Fehler beim Aktualisieren der Abteilung';
}else{
$errors['err']='Internet Fehler';
}
break;
case 'create':
if(($deptID=Dept::create($_POST,$errors)))
$msg=Format::htmlchars($_POST['dept_name']).' erfolgreich hinzugef&uuml;gt';
elseif(!$errors['err'])
$errors['err']='Hinzuf&uuml;gen der Abteilung nicht m&ouml;glich. Internet Fehler';
break;
case 'mass_process':
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
$errors['err']='Sie m&uuml;ssen mindestens eine Abteilung ausw&auml;hlen';
}elseif(!$_POST['public'] && in_array($cfg->getDefaultDeptId(),$_POST['ids'])) {
$errors['err']='Sie k&ouml;nnen die Standardabteilung nicht l&ouml;schen oder deaktivieren. &Auml;ndern Sie erst die Standardabteilung und versuchen Sie es dann wiederholt.';
}else{
$count=count($_POST['ids']);
$ids=implode(',',$_POST['ids']);
if($_POST['public']){
$sql='UPDATE '.DEPT_TABLE.' SET ispublic=1 WHERE dept_id IN ('.$ids.')';
if(db_query($sql) && ($num=db_affected_rows()))
$warn="$num von $count gew&auml;hlten Abteilungen wurden sichbar gemacht.";
else
$errors['err']='Abteilung konnte nicht sichtbar gemacht werden.';
}elseif($_POST['private']){
$sql='UPDATE '.DEPT_TABLE.' SET ispublic=0 WHERE dept_id IN ('.$ids.') AND dept_id!='.db_input($cfg->getDefaultDeptId());
if(db_query($sql) && ($num=db_affected_rows())) {
$warn="$num von $count gew&auml;hlten Abteilungen wurden unsichtbar gemacht.";
}else
$errors['err']='Die gew&auml;hlten Abteilungen konnten nicht unsichbar gemacht werden. Diese sind bereit unsichtbar!';
}elseif($_POST['delete']){
//Deny all deletes if one of the selections has members in it.
$sql='SELECT count(staff_id) FROM '.STAFF_TABLE.' WHERE dept_id IN ('.$ids.')';
list($members)=db_fetch_row(db_query($sql));
$sql='SELECT count(topic_id) FROM '.TOPIC_TABLE.' WHERE dept_id IN ('.$ids.')';
list($topics)=db_fetch_row(db_query($sql));
if($members){
$errors['err']='Abteilung mit Mitarbeitern kann nicht gel&ouml;scht werden. Verschieben Sie erst die Mitarbeiter.';
}elseif($topic){
$errors['err']='Kann Abteilungen mit zugeordneten Hilfethemen nicht l&ouml;schen. Entfernen SIe erst die Zuordnung.';
}else{
//We have to deal with individual selection because of associated tickets and users.
$i=0;
foreach($_POST['ids'] as $k=>$v) {
if($v==$cfg->getDefaultDeptId()) continue; //Don't delete default dept. Triple checking!!!!!
if(Dept::delete($v)) $i++;
}
if($i>0){
$warn="$i von $count gew&auml;hlten Abteilungen gel&ouml;scht.";
}else{
$errors['err']='L&ouml;schen der gew&auml;hlten Abteilungen nicht m&ouml;glich.';
}
}
}
}
break;
default:
$errors['err']='Unbekannte Aktion bei Abteilungen';
}
break;
default:
$errors['err']='Unbekanntes Kommando!';
endswitch;
endif;
//================ADMIN MAIN PAGE LOGIC==========================
//Process requested tab.
$thistab=strtolower($_REQUEST['t']?$_REQUEST['t']:'dashboard');
$inc=$page=''; //No outside crap please!
$submenu=array();
switch($thistab){
//Preferences & settings
case 'settings':
case 'pref':
case 'attach':
case 'api':
$nav->setTabActive('settings');
$nav->addSubMenu(array('desc'=>'Einstellungen','href'=>'admin.php?t=pref','iconclass'=>'preferences'));
$nav->addSubMenu(array('desc'=>'Anh&auml;nge','href'=>'admin.php?t=attach','iconclass'=>'attachment'));
$nav->addSubMenu(array('desc'=>'API','href'=>'admin.php?t=api','iconclass'=>'api'));
switch($thistab):
case 'settings':
case 'pref':
$page='preference.inc.php';
break;
case 'attach':
$page='attachment.inc.php';
break;
case 'api':
$page='api.inc.php';
endswitch;
break;
case 'dashboard':
case 'syslog':
$nav->setTabActive('dashboard');
$nav->addSubMenu(array('desc'=>'Systemlogs','href'=>'admin.php?t=syslog','iconclass'=>'syslogs'));
$page='syslogs.inc.php';
break;
case 'email':
case 'templates':
case 'banlist':
$nav->setTabActive('emails');
$nav->addSubMenu(array('desc'=>'Email Adressen','href'=>'admin.php?t=email','iconclass'=>'emailSettings'));
$nav->addSubMenu(array('desc'=>'Neue Email hinzuf&uuml;gen','href'=>'admin.php?t=email&a=new','iconclass'=>'newEmail'));
$nav->addSubMenu(array('desc'=>'Vorlagen','href'=>'admin.php?t=templates','title'=>'Emailvorlagen','iconclass'=>'emailTemplates'));
$nav->addSubMenu(array('desc'=>'Sperrlisten','href'=>'admin.php?t=banlist','title'=>'Gesperrte Email','iconclass'=>'banList'));
switch(strtolower($_REQUEST['t'])){
case 'templates':
$page='templates.inc.php';
$template=null;
if(($id=$_REQUEST['id']?$_REQUEST['id']:$_POST['email_id']) && is_numeric($id)) {
include_once(INCLUDE_DIR.'class.msgtpl.php');
$template= new Template($id);
if(!$template || !$template->getId()) {
$template=null;
$errors['err']='Kann keine Informationen &uuml;ber Vorlage holen. ID# '.$id;
}else {
$page='template.inc.php';
}
}
break;
case 'banlist':
$page='banlist.inc.php';
break;
case 'email':
default:
include_once(INCLUDE_DIR.'class.email.php');
$email=null;
if(($id=$_REQUEST['id']?$_REQUEST['id']:$_POST['email_id']) && is_numeric($id)) {
$email= new Email($id,false);
if(!$email->load()) {
$email=null;
$errors['err']='Kann keine Informationen &uuml;ber Email holen ID#'.$id;
}
}
$page=($email or ($_REQUEST['a']=='new' && !$emailID))?'email.inc.php':'emails.inc.php';
}
break;
case 'topics':
require_once(INCLUDE_DIR.'class.topic.php');
$topic=null;
$nav->setTabActive('topics');
$nav->addSubMenu(array('desc'=>'Hilfethemen','href'=>'admin.php?t=topics','iconclass'=>'helpTopics'));
$nav->addSubMenu(array('desc'=>'Neues Thema','href'=>'admin.php?t=topics&a=new','iconclass'=>'newHelpTopic'));
if(($id=$_REQUEST['id']?$_REQUEST['id']:$_POST['topic_id']) && is_numeric($id)) {
$topic= new Topic($id);
if(!$topic->load() && $topic->getId()==$id) {
$topic=null;
$errors['err']='Kann keine Informationen &uuml;ber Thema holen ID#'.$id;
}
}
$page=($topic or ($_REQUEST['a']=='new' && !$topicID))?'topic.inc.php':'helptopics.inc.php';
break;
//Staff (users, groups and teams)
case 'grp':
case 'groups':
case 'staff':
$group=null;
//Tab and Nav options.
$nav->setTabActive('staff');
$nav->addSubMenu(array('desc'=>'Mitarbeiter','href'=>'admin.php?t=staff','iconclass'=>'users'));
$nav->addSubMenu(array('desc'=>'Neuer Mitarbeiter','href'=>'admin.php?t=staff&a=new','iconclass'=>'newuser'));
$nav->addSubMenu(array('desc'=>'Gruppen','href'=>'admin.php?t=groups','iconclass'=>'groups'));
$nav->addSubMenu(array('desc'=>'Neue Gruppe','href'=>'admin.php?t=groups&a=new','iconclass'=>'newgroup'));
$page='';
switch($thistab){
case 'grp':
case 'groups':
if(($id=$_REQUEST['id']?$_REQUEST['id']:$_POST['group_id']) && is_numeric($id)) {
$res=db_query('SELECT * FROM '.GROUP_TABLE.' WHERE group_id='.db_input($id));
if(!$res or !db_num_rows($res) or !($group=db_fetch_array($res)))
$errors['err']='Kann keine Informationen &uuml;ber Gruppe holen ID#'.$id;
}
$page=($group or ($_REQUEST['a']=='new' && !$gID))?'group.inc.php':'groups.inc.php';
break;
case 'staff':
$page='staffmembers.inc.php';
if(($id=$_REQUEST['id']?$_REQUEST['id']:$_POST['staff_id']) && is_numeric($id)) {
$staff = new Staff($id);
if(!$staff || !is_object($staff) || $staff->getId()!=$id) {
$staff=null;
$errors['err']='Kann keine Informationen &uuml;ber Mitarbeiter holen ID#'.$id;
}
}
$page=($staff or ($_REQUEST['a']=='new' && !$uID))?'staff.inc.php':'staffmembers.inc.php';
break;
default:
$page='staffmembers.inc.php';
}
break;
//Departments
case 'dept': //lazy
case 'depts':
$dept=null;
if(($id=$_REQUEST['id']?$_REQUEST['id']:$_POST['dept_id']) && is_numeric($id)) {
$dept= new Dept($id);
if(!$dept || !$dept->getId()) {
$dept=null;
$errors['err']='Kann keine Informationen &uuml;ber Abteilung holent ID#'.$id;
}
}
$page=($dept or ($_REQUEST['a']=='new' && !$deptID))?'dept.inc.php':'depts.inc.php';
$nav->setTabActive('depts');
$nav->addSubMenu(array('desc'=>'Abteilungen','href'=>'admin.php?t=depts','iconclass'=>'departments'));
$nav->addSubMenu(array('desc'=>'Neue Abteilung','href'=>'admin.php?t=depts&a=new','iconclass'=>'newDepartment'));
break;
// (default)
default:
$page='pref.inc.php';
}
//========================= END ADMIN PAGE LOGIC ==============================//
$inc=($page)?STAFFINC_DIR.$page:'';
//Now lets render the page...
require(STAFFINC_DIR.'header.inc.php');
?>
<div>
<?if($errors['err']) {?>
<p align="center" id="errormessage"><?=$errors['err']?></p>
<?}elseif($msg) {?>
<p align="center" id="infomessage"><?=$msg?></p>
<?}elseif($warn) {?>
<p align="center" id="warnmessage"><?=$warn?></p>
<?}?>
</div>
<table width="100%" border="0" cellspacing="0" cellpadding="1">
<tr><td>
<div style="margin:0 5px 5px 5px;">
<?
if($inc && file_exists($inc)){
require($inc);
}else{
?>
<p align="center">
<font class="error">Probleme beim Laden der Administrationsseite. (<?=Format::htmlchars($thistab)?>)</font>
<br>M&ouml;glicherweise sind Sie f&uuml;r den Zugang nicht zugelassen, wenn Sie glauben, dass dies ein Irrtum ist, nehmen Sie bitte den technischen Support in Anspruch.
</p>
<?}?>
</div>
</td></tr>
</table>
<?
include_once(STAFFINC_DIR.'footer.inc.php');
?>