* @version DS-E V/2
*/
// modded by talion (t@ssilo.de) für den Drachenserver (lotgd.drachenserver.de):
// kategorien, webmail, floskeln, Priorität, Permanente Kommentare, versch. Kleinigkeiten
//Dieser Part wird nur durch einen asynchronen HTTP REQUEST aufgerufen
//und gibt alle User zurück die mit der übergebenen IP/ID assoziiert sind
if (isset($_REQUEST['show_closed_petitions']))
{
$DONT_OVERWRITE_NAV = true;
$BOOL_JS_HTTP_REQUEST = true;
require_once('common.php');
$str_output = render_closed_petitions();
//Führt implizit ein die() aus und gibt den Text zurück der ausgegeben wird
jslib_http_text_output(appoencode($str_output));
}
$str_filename = basename(__FILE__);
require_once('common.php');
$access_control->su_check(access_control::SU_RIGHT_PETITION,true);
page_header('Petition Viewer');
// Standard-Navs
addnav('Zurück');
grotto_nav();
addnav('Aktionen');
addnav('.?`qKnowledge Base`0', 'su_kbase.php', false, true);
// END Standard-Navs
output('`c`b`&'.getsetting('townname','Atrahor').'-Callcenter : )`0`b`c`n');
// Kommentare dauerhaft in Anfrage einfügen
if ( !empty($_POST['comment']) ) {
$comment = str_replace('`n','',soap($_POST['comment']));
$comment = preg_replace("'([^[:space:]]{45,45})([^[:space:]])'","\\1 \\2",$comment);
//$comment = str_replace('/me','',$comment);
$comment = '`n`b`#'.addslashes($session['user']['login']).' : `0`b`3'.$comment.'`0';
$sql = 'UPDATE petitions SET lastact=NOW(),commentcount=commentcount+1,comments=CONCAT(comments,"'.$comment.'") WHERE petitionid="'.(int)$_GET['id'].'"';
db_query($sql);
}
// Zustandsbezeichnungen
$statuses=array(0=>"`bUngel.`b","Gel.","Geschl.");
$str_op = (!empty($_REQUEST['op']) ? $_REQUEST['op'] : '');
switch($str_op) {
// Anfrage löschen
case 'del':
{
$pid = (int)$_GET['id'];
$sql = 'DELETE FROM petitions WHERE petitionid='.$pid;
db_query($sql);
$sql = 'DELETE FROM petitionmail WHERE petitionid='.$pid;
db_query($sql);
// Alte Mails löschen
$sql = 'DELETE FROM mail WHERE body LIKE "%Anfrage (Nummer '.$pid.')%" AND msgfrom=0';
$res = db_query($sql);
redirect($str_filename);
break;
}
// Zu bearbeiten von setzen
case 'setfor':
{
$pid = (int)$_GET['pid'];
$str_val = '';
$arr_grp = null;
if(isset($_POST['p_for'])) {
if((int)$_POST['p_for'] == 0)
{
$str_val = $_POST['p_for'];
}
else
{
// Rausfinden, welche Gruppe das ist
if(($arr_grp = user_get_sugroups((int)$_POST['p_for'])) !== false)
{
// Hat Gruppe überhaupt Anfragen-Recht?
if($arr_grp[2][access_control::SU_RIGHT_PETITION])
{
$str_val = strip_appoencode($arr_grp[1],3);
}
else
{
$arr_grp = null;
}
}
}
$sql = 'UPDATE petitions SET p_for="'.addstripslashes($str_val).'" WHERE petitionid='.$pid;
db_query($sql);
if(getsetting('petition_mail_assignment_message',1) == 1)
{
// Alte Mails löschen
$sql = 'DELETE FROM mail WHERE body LIKE "%Anfrage (Nummer '.$pid.')%" AND msgfrom=0';
$res = db_query($sql);
// Wenn an User
if(is_null($arr_grp))
{
$db_result = db_query('SELECT acctid FROM accounts WHERE login="'.addstripslashes($_POST['p_for']).'"');
$arr_result = db_fetch_assoc($db_result);
if(count($arr_result)>0)
{
$str_body = '
`tHallo!
Dir wurde eine Anfrage (Nummer '.$pid.') in der Grotte zugeteilt. Es scheint, als wärest Du als einzige(r)
in der Lage, diese verfahrene Situation zu lösen, die sich dort den Augen der versammelten Grottenolme präsentiert.
Beehre uns mit Deiner Weisheit und Güte und der Dank einer ganzen Welt sei Dir gewiss...
oder lies den Scheiss einfach kurz durch und schick den Mist an jemand anders weiter ;-)
';
systemmail($arr_result['acctid'],'`$Eine Anfrage wurde Dir zugeteilt`0',$str_body,0,true);
}
}
// Wenn an Gruppe
else
{
$db_result = db_query('SELECT acctid FROM accounts WHERE superuser="'.(int)$_POST['p_for'].'" AND superuser > 0');
while($arr_result = db_fetch_assoc($db_result))
{
$str_body = '
`tHallo!
Deiner Superusergruppe ('.$arr_grp[1].'`t) wurde eine Anfrage (Nummer '.$pid.') in der Grotte zugeteilt. Es scheint, als wäret Ihr als einzige
in der Lage, diese verfahrene Situation zu lösen, die sich dort den Augen der versammelten Grottenolme präsentiert.
Beehre uns mit Deiner Weisheit und Güte und der Dank einer ganzen Welt sei Dir gewiss...
oder lies den Scheiss einfach kurz durch und schick den Mist an jemand anders weiter ;-)
';
systemmail($arr_result['acctid'],'`$Eine Anfrage wurde '.$arr_grp[1].'`$ zugeteilt`0',$str_body,0,true);
}
}
unset($db_result,$arr_result);
}
}
redirect($str_filename.'?op=view&id='.$pid);
break;
}
// Kurzbeschreibung setzen
case 'setdesc':
{
$pid = (int)$_GET['pid'];
$str_val=htmlentities(strip_appoencode($_POST['short_desc'],3));
$sql = 'UPDATE petitions SET short_desc="'.addstripslashes($str_val).'" WHERE petitionid='.$pid;
db_query($sql);
redirect($str_filename.'?op=view&id='.$pid);
break;
}
// Navs eines Spielers reparieren
case 'repairnavs':
{
$pid = (int)$_GET['pid'];
$uid = (int)$_GET['userid'];
user_update(
array
(
'allowednavs'=>'',
'output'=>'',
'restorepage'=>'',
'specialinc'=>'',
'pqtemp'=>'',
'specialmisc'=>'',
),
$uid
);
redirect($str_filename.'?op=view&id='.$pid);
break;
}
// Spieleraccount aktivieren
case 'validate_mail':
{
$pid = (int)$_GET['pid'];
$uid = (int)$_GET['userid'];
user_update(
array
(
'emailvalidation'=>'',
),
$uid
);
redirect($str_filename.'?op=view&id='.$pid);
break;
}
// AntwortYeOlde versenden
case 'sendmessage':
{
$pid = (int)$_GET['id'];
$sql = 'SELECT author,body FROM petitions WHERE petitionid='.$pid;
$row = db_fetch_assoc(db_query($sql));
$_POST['subject'] = 'RE: Hilfeanfrage';
$_POST['body']=str_replace("`n","\n",$_POST['body']);
$_POST['body']=str_replace("\r\n","\n",$_POST['body']);
$_POST['body']=str_replace("\r","\n",$_POST['body']);
$_POST['body']=substr($_POST['body'],0,(int)getsetting("mailsizelimit",1024));
$_POST['body'] = closetags($_POST['body'],'`c`i`b');
systemmail($row['author'],$_POST['subject'],$_POST['body']);
petitionmail($_POST['subject'],$_POST['body'],$pid,$session['user']['acctid'],1,$row['author'],db_insert_id(LINK));
redirect($str_filename.'?op=view&id='.$pid);
break;
}
// AntwortEMail versenden
case 'sendmail':
{
$pid = (int)$_GET['id'];
$sql = 'SELECT body FROM petitions WHERE petitionid='.$pid;
$row = db_fetch_assoc(db_query($sql));
$subject = 'RE: Hilfeanfrage';
$body=str_replace("`n","\n",$_POST['body']);
$body=str_replace("\r\n","\n",$body);
$body=str_replace("\r","\n",$body);
$body=substr($body,0,(int)getsetting("mailsizelimit",1024));
$body = closetags($body,'`c`i`b');
petitionmail($subject,$body,$pid,$session['user']['acctid'],1,0,0);
$body = "\n( ACHTUNG : Evtl. Antworten auf diese Mail bitte wieder per Anfrage! )\n\n
".$body."\n\n
( ACHTUNG : Evtl. Antworten auf diese Mail bitte wieder per Anfrage! )";
$mail = urldecode($_POST['mail']);
$mails_sent = getsetting('petitionemailsent',0);
//Verwendung von Spamgourmet als Absender
//$mails_nr = ceil($mails_sent/20);
//$from_mail = 'lotgd'.$mails_nr.'.30.lotgd@spamgourmet.com';
//savesetting('petitionemail',$from_mail);
$from_mail = getsetting('petitionemail','postmaster@localhost');
savesetting('petitionemailsent',$mails_sent+1);
$headers = 'From: '.$from_mail;
send_mail($mail,$subject,$body,$headers);
redirect($str_filename.'?op=view&id='.$pid);
break;
// END Antwort-EMail
}
// Alle Anfragen als gelesen markieren
case 'mark_read':
{
$sql = 'SELECT petitionid, lastact FROM petitions';
$res = db_query($sql,false,true);
while($p = db_fetch_assoc($res)) {
$session['petitions'][$p['petitionid']] = date('Y-m-d H:i:s');
}
user_set_aei(array('seenpetitions'=>addslashes(serialize($session['petitions']))));
redirect($str_filename);
break;
}
// Einzelne Anfrage
case 'view':
{
require_once(LIB_PATH.'browser.lib.php');
require_once(LIB_PATH.'kbase.lib.php');
// Farben in Anfrage zeigen?
$bool_show_colors = false;
if(isset($_GET['toggle_colors']))
{
if(!isset($session['su_petitions_show_colors']))
{
$session['su_petitions_show_colors'] = null;
}
$session['su_petitions_show_colors'] = ($session['su_petitions_show_colors'] === true ? false : true);
}
if(isset($session['su_petitions_show_colors']) && $session['su_petitions_show_colors'] == true)
{
$bool_show_colors = true;
}
// Gruß
$str_greets = str_replace('`n',"\n",get_extended_text('petition_greetings','*',false,false));
$int_pid = (int)$_GET['id'];
$sql = 'SELECT a.name,a.login,a.acctid,a.loggedin,a.laston,a.activated,a.emailvalidation,
p.*, a_s.browser, a_s.browser_version
FROM petitions p
LEFT JOIN accounts a
ON a.acctid = p.author
LEFT JOIN account_stats a_s
ON a_s.acctid = p.author
WHERE p.petitionid='.$int_pid;
$result = db_query($sql);
$row = db_fetch_assoc($result);
addnav('Navdebug',$str_filename.'?op=navdebug&pid='.$row['petitionid']);
// In Session markieren, dass angeschaut
if($session['petitions'][$int_pid]<$row['lastact'])
{
$session['petitions'][$int_pid] = date('Y-m-d H:i:s');
user_set_aei(array('seenpetitions'=>addslashes(serialize($session['petitions']))));
}
$str_out = '';
// Navi erstellen
if ($_GET['viewpageinfo']==1){
addnav('Details ausblenden',$str_filename.'?op=view&id='.$int_pid);
}
else{
addnav('D?Details einblenden',$str_filename.'?op=view&id='.$int_pid.'&viewpageinfo=1');
}
addnav('Anfragen anzeigen',$str_filename.'?kat='.$_GET['kat']);
addnav('Operationen');
addnav('Anfrage schließen',$str_filename.'?setstat=2&id='.$int_pid,false,false,false,false,'Möchtest Du die Anfrage wirklich schließen?');
addnav('U?Als Ungelesen markieren',$str_filename.'?setstat=0&id='.$int_pid);
addnav('S?Als GeleSen markieren',$str_filename.'?setstat=1&id='.$int_pid);
if($row['prio'] == 0) {
addnav('P?Hohe Prio',$str_filename.'?setprio=1&id='.$int_pid);
}
else {
addnav('N?Normale Prio',$str_filename.'?setprio=0&id='.$int_pid);
}
addnav('Eintrag in ToDo','todolist.php?op=newtask');
if ($row['acctid']>0){
addnav('Account - '.$row['login']);
if($access_control->su_check(access_control::SU_RIGHT_EDITORUSER)) {
addnav('Usereintrag bearbeiten','user.php?op=edit&userid='.$row['acctid'].'&returnpetition='.$int_pid);
}
if($access_control->su_check(access_control::SU_RIGHT_DEBUGLOG)) {
addnav('Debuglog','su_logs.php?op=search&type=debuglog&account_id='.$row['acctid'].'&ret='.urlencode(calcreturnpath()) );
}
if ($access_control->su_check(access_control::SU_RIGHT_UPLOADCONTROL))
{
addnav('Uploads','su_pic_control.php?op=single&id='.$row['acctid'].'&ret='.urlencode(calcreturnpath()));
}
if ($access_control->su_check(access_control::SU_RIGHT_DONATIONS))
{
addnav('DP vergeben','su_donation.php?op=new_dp&what=add&id='.$row['acctid']);
}
addnav('Bio','bio.php?id='.$row['acctid'],false,true);
addnav('Navs reparieren',$str_filename.'?op=repairnavs&userid='.$row['acctid'].'&pid='.$_GET['id']);
if(!empty($row['emailvalidation'])) {
addnav('Account aktivieren',$str_filename.'?op=validate_mail&userid='.$row['acctid'].'&pid='.$_GET['id']);
}
if($access_control->su_check(access_control::SU_RIGHT_USERDISCU))
{
addnav('Userdiskussion','su_userdiscu.php?op=new&id='.$row['acctid'].'&r='.urlencode(calcreturnpath()));
}
$loggedin = user_get_online(0,$row);
}
else {
$sql = 'SELECT login,acctid,uniqueid,lastip,emailvalidation FROM accounts WHERE lastip = "'.addslashes($row['IP']).'" OR uniqueid = "'.addslashes($row['ID']).'" ORDER BY login, acctid';
$res = db_query($sql);
$sec_info = '';
while($r = db_fetch_assoc($res) ) {
addnav('Account - '.$r['login']);
if($access_control->su_check(access_control::SU_RIGHT_EDITORUSER)) {
addnav('Usereintrag bearbeiten','user.php?op=edit&userid='.$r['acctid'].'&returnpetition='.$int_pid);
}
if($access_control->su_check(access_control::SU_RIGHT_DEBUGLOG)) {
addnav('Debuglog','su_logs.php?op=search&type=debuglog&account_id='.$r['acctid'].'&ret='.urlencode(calcreturnpath()) );
}
addnav('Bio','bio.php?id='.$r['acctid'],false,true);
addnav('Navs reparieren',$str_filename.'?op=repairnavs&userid='.$r['acctid'].'&pid='.$_GET['id']);
if(!empty($r['emailvalidation'])) {
addnav('Account aktivieren',$str_filename.'?op=validate_mail&userid='.$r['acctid'].'&pid='.$_GET['id']);
}
if($access_control->su_check(access_control::SU_RIGHT_USERDISCU))
{
addnav('Userdiskussion','su_userdiscu.php?op=new&id='.$r['acctid'].'&r='.urlencode(calcreturnpath()));
}
$sec_info .= '`n'.$r['login'].' (AcctID '.$r['acctid'].', IP '.$r['lastip'].', ID '.$r['uniqueid'].')';
}
}
addnav("Zu Kategorie:");
foreach($ARR_PETITION_KATS as $k=>$v) {
addnav($v,$str_filename.'?setkat='.$k.'&id='.$int_pid,false,false,false,false);
}
// END Navi erstellen
$row['body'] = stripslashes($row['body']);
// HTML-Tags encoden, um Kuddlmuddl zu vermeiden
$row['body'] = htmlspecialchars($row['body']);
// Nur wenn aktiviert: Formatierungscodes in Anfrage anzeigen
if(!$bool_show_colors)
{
$row['body'] = str_replace('`','`',$row['body']);
}
else
{
// & vermeiden
$row['body'] = str_replace('&','&',$row['body']);
}
$str_out .= '
`i(Geschlossene Anfragen werden nach 7 Tagen automatisch gelöscht)`i`n
`n`bLegende:`b`n`&Ungelesen:`0 Frisch reingekommen. Niemand arbeitet bisher an diesem Problem.
`n`&Gelesen:`0 Die Anfrage wurde gelesen und (hoffentlich) zugeteilt.
`n`&Geschlossen:`0 Diese Anfrage wurde bearbeitet. Es sollte keine weitere Arbeit mehr nötig sein.`n`n
`tWenn eine Anfrage gelesen wird`0, wird sie automatisch als gelesen markiert, wenn sie nicht schon als geschlossen markiert war.`n
`tWenn du ein Problem nicht lösen kannst`0 und das Problem neu ist, markiere die Anfrage wieder als ungelesen, damit ein anderer dem Spieler helfen kann. Falls du weißt wer dafür zuständig ist, teile die Anfrage demjenigen zu, der Ungelesen-Status braucht in dem Fall nicht erneut gesetzt werden.`n
`tWenn du eine Anfrage übernimmst`0, mache das irgendwie kenntlich, z.B. indem du sie dir selbst zuteilst.`n
Wenn du eine `tzugeteilte Aufgabe nicht lösen`0 kannst, reiche sie möglichst zielgenau weiter.`n
`tWenn eine Anfrage erfolgreich bearbeitet wurde`0, markiere sie als geschlossen. Sie wird dann nach 7 Tagen automatisch gelöscht. `tFalls der User nochmal antwortet`0 wird eine geschlossene Anfrage automatisch wieder geöffnet.';
output($str_out);
break;
// END Anfragenliste
}
}
page_footer();
function render_closed_petitions()
{
global $ARR_PETITION_KATS, $session,$statuses;
$sql = 'SELECT p.petitionid,p.prio,p.charname,p.date, p.status,p.lastact,p.kat,p.p_for,p.commentcount,p.short_desc,
a.name,
IF(petitionmail.petitionid > 0,COUNT(*),0) AS petmails
FROM petitions p
LEFT JOIN petitionmail
USING (petitionid)
LEFT JOIN accounts a
ON a.acctid = p.author
WHERE p.status = 2
GROUP BY p.petitionid
ORDER BY p.status ASC, p.prio DESC, p.lastact DESC, p.date DESC';
$result = db_query($sql, false, true);
$str_trclass = 'trdark';
$str_out = '