718 lines
36 KiB
PHP
718 lines
36 KiB
PHP
|
|
<?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öglicherweise verursacht durch unvollstä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ünden zu lö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 ä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 ü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ö<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ür Anhä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ür '.Format::htmlchars($_POST['ip'].' erstellt.');
|
|||
|
|
elseif(!$errors['err'])
|
|||
|
|
$errors['err']='Fehler beim hinzufü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 Ändern des Passwortes. Bitte nochmals versuchen.';
|
|||
|
|
break;
|
|||
|
|
case 'mass_process':
|
|||
|
|
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
|
|||
|
|
$errors['err']='Sie müssen mindestens einen Eintrag auswä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ählten Key(s) aktualisiert";
|
|||
|
|
}else {
|
|||
|
|
$errors['err']='L6ouml;schen des Key nicht mö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ählten Key(s) gelöscht";
|
|||
|
|
}else{
|
|||
|
|
$errors['err']='Löschen des/der gewählten Key(s) nicht mö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üt';
|
|||
|
|
else
|
|||
|
|
$errors['err']='Hinzufügen zur Bannliste nicht möglich. Bitte erneut versuchen.';
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 'remove':
|
|||
|
|
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
|
|||
|
|
$errors['err']='Sie müssen mindestens eine E-Mail auswä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ählten Emails von Bannliste gelöscht.";
|
|||
|
|
else
|
|||
|
|
$errors['err']='Löschen von gewählten Emails nicht mö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ändert';
|
|||
|
|
elseif(!$errors['err'])
|
|||
|
|
$errors['err']='Fehler beim Ändern der Email';
|
|||
|
|
}else{
|
|||
|
|
$errors['err']='Interner Fehler';
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 'create':
|
|||
|
|
if(Email::create($_POST,$errors))
|
|||
|
|
$msg='Email erfolgreich hinzugefügt';
|
|||
|
|
elseif(!$errors['err'])
|
|||
|
|
$errors['err']='Hinzufügen nicht möglich. Interner Fehler';
|
|||
|
|
break;
|
|||
|
|
case 'mass_process':
|
|||
|
|
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
|
|||
|
|
$errors['err']='Sie müssen mindestens eine E-Mail auswä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ä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ählten Email(s) gelöscht";
|
|||
|
|
}else{
|
|||
|
|
$errors['err']='Löschen des/der gewählten Email(s) nicht mö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 Ä der Vorlage - bitte wiederholen';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 'mass_process':
|
|||
|
|
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
|
|||
|
|
$errors['err']='Sie müssen mindestens eine Vorlage wählen';
|
|||
|
|
}elseif(in_array($cfg->getDefaultTemplateId(),$_POST['ids'])){
|
|||
|
|
$errors['err']='Sie können die Standardvorlage nicht lö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ä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ählten Vorlagen gelöscht";
|
|||
|
|
else
|
|||
|
|
$errors['err']='Löschen der gewählten Vorlage(n) nicht mö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öglich. Internet Fehler';
|
|||
|
|
break;
|
|||
|
|
case 'mass_process':
|
|||
|
|
if(!$_POST['tids'] || !is_array($_POST['tids'])) {
|
|||
|
|
$errors['err']='Sie müssen mindestens ein Thema auswä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ählten Diensten aktiviert";
|
|||
|
|
else
|
|||
|
|
$errors['err']='Aktion wurde nicht vollständig durchgefü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ählten Themen deaktiviert";
|
|||
|
|
else
|
|||
|
|
$errors['err']='Deaktivieren der gewählten Themen nicht mö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öschen der gewählten Themen nicht mö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;hlten Gruppen aktiviert";
|
|||
|
|
}elseif(in_array($thisuser->getDeptId(),$_POST['grps'])) {
|
|||
|
|
$errors['err']="Der Versuch, Ihre Gruppe zu lö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;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;hlten Gruppen enthalten Nutzer. Nur leere Gruppen können gelöscht werden.';
|
|||
|
|
}else{
|
|||
|
|
db_query('DELETE FROM '.GROUP_TABLE.' WHERE group_id IN('.$ids.')');
|
|||
|
|
$msg=db_affected_rows()." von $selected gewäauml;auml;hlten Gruppen gelöscht.";
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
$errors['err']='Unbekannten Kommando!';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}else{
|
|||
|
|
$errors['err']='Keine Gruppen ausgewä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ügt';
|
|||
|
|
elseif(!$errors['err'])
|
|||
|
|
$errors['err']='Hinzufügen des Nutzers nicht mö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ä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ö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ä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ählten Nutzern gelö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ä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ügt';
|
|||
|
|
elseif(!$errors['err'])
|
|||
|
|
$errors['err']='Hinzufügen der Abteilung nicht möglich. Internet Fehler';
|
|||
|
|
break;
|
|||
|
|
case 'mass_process':
|
|||
|
|
if(!$_POST['ids'] || !is_array($_POST['ids'])) {
|
|||
|
|
$errors['err']='Sie müssen mindestens eine Abteilung auswählen';
|
|||
|
|
}elseif(!$_POST['public'] && in_array($cfg->getDefaultDeptId(),$_POST['ids'])) {
|
|||
|
|
$errors['err']='Sie können die Standardabteilung nicht löschen oder deaktivieren. Ä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ä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ählten Abteilungen wurden unsichtbar gemacht.";
|
|||
|
|
}else
|
|||
|
|
$errors['err']='Die gewä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öscht werden. Verschieben Sie erst die Mitarbeiter.';
|
|||
|
|
}elseif($topic){
|
|||
|
|
$errors['err']='Kann Abteilungen mit zugeordneten Hilfethemen nicht lö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ählten Abteilungen gelöscht.";
|
|||
|
|
}else{
|
|||
|
|
$errors['err']='Löschen der gewählten Abteilungen nicht mö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ä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ü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 ü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 ü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 ü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 ü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 ü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 ü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öglicherweise sind Sie fü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');
|
|||
|
|
?>
|