Quellcode der Dragonslayer-Edition
Quellcode der Dragonslayer-Edition: 0.9.7(DS V3) Ithil-Edition


Anmerkung: Dies ist nur ein Auszug aus dem Source. Ein etwas älteres, abgespecktes Release der Dragonslayer-Edition ist für jeden Interessenten frei zum Download verfügbar. Was wir uns unbedingt verbitten, ist Diebstahl unserer Arbeit ohne Nennung des Copyrights.
Falls beim Lesen des Source ein Bug entdeckt werden sollte, bitten wir um sofortige Meldung per Anfrage!


./user.php

zurück
1:
2:
3:
4:
5:
6:
7:
8:
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:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
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:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
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:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877:
878:
879:
880:
881:
882:
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
908:
909:
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936:
937:
938:
939:
940:
941:
942:
943:
944:
945:
946:
947:
948:
949:
950:
951:
952:
953:
954:
955:
956:
957:
958:
959:
960:
961:
962:
963:
964:
965:
966:
967:
968:
969:
970:
971:
972:
973:
974:
975:
976:
977:
978:
979:
980:
981:
982:
983:
984:
985:
986:
987:
988:
989:
990:
991:
992:
993:
994:
995:
996:
997:
998:
999:
1000:
1001:
1002:
1003:
1004:
1005:
1006:
1007:
1008:
1009:
1010:
1011:
1012:
1013:
1014:
1015:
1016:
1017:
1018:
1019:
1020:
1021:
1022:
1023:
1024:
1025:
1026:
1027:
1028:
1029:
1030:
1031:
1032:
1033:
1034:
1035:
1036:
1037:
1038:
1039:
1040:
1041:
1042:
1043:
1044:
1045:
1046:
1047:
1048:
1049:
1050:
1051:
1052:
1053:
1054:
1055:
1056:
1057:
1058:
1059:
1060:
1061:
1062:
1063:
1064:
1065:
1066:
1067:
1068:
1069:
1070:
1071:
1072:
1073:
1074:
1075:
1076:
1077:
1078:
1079:
1080:
1081:
1082:
1083:
1084:
1085:
1086:
1087:
1088:
1089:
1090:
1091:
1092:
1093:
1094:
1095:
1096:
1097:
1098:
1099:
1100:
1101:
1102:
1103:
1104:
1105:
1106:
1107:
1108:
1109:
1110:
1111:
1112:
1113:
1114:
1115:
1116:
1117:
1118:
1119:
1120:
1121:
1122:
1123:
1124:
1125:
1126:
1127:
1128:
1129:
1130:
1131:
1132:
1133:
1134:
1135:
1136:
1137:
1138:
1139:
1140:
1141:
1142:
1143:
1144:
1145:
1146:
1147:
1148:
1149:
1150:
1151:
1152:
1153:
1154:
1155:
1156:
1157:
1158:
1159:
1160:
1161:
1162:
1163:
1164:
1165:
1166:
1167:
1168:
1169:
1170:
1171:
1172:
1173:
1174:
1175:
1176:
1177:
1178:
1179:
1180:
1181:
1182:
1183:
1184:
1185:
1186:
1187:
1188:
1189:
1190:
1191:
1192:
1193:
1194:
1195:
1196:
1197:
1198:
1199:
1200:
1201:
1202:
1203:
1204:
1205:
1206:
1207:
1208:
1209:
1210:
1211:
1212:
1213:
1214:
1215:
1216:
1217:
1218:
1219:
1220:
1221:
1222:
1223:
1224:
1225:
1226:
1227:
1228:
1229:
1230:
1231:
1232:
1233:
1234:
1235:
1236:
1237:
1238:
<?php
/**
* user.php: Zentrales Werkzeug für Superuser, um Spieleraccounts zu bearbeiten und zu verwalten
* @author Standardrelease by MightyE / Anpera, überarbeitet by talion <t [-[at]-] ssilo.de>
* @version DS-E V/2
*/

require_once 'common.php';
require_once(
LIB_PATH.'dg_funcs.lib.php');
require_once(
LIB_PATH.'profession.lib.php');

$access_control->su_check(access_control::SU_RIGHT_EDITORUSER,true);

function 
editnav ()
{
    global 
$row$access_control;

    
addnav('Aktionen');
    if (
$_GET['returnpetition']!='')
    {
        
addnav('Zurück zur Anfrage','su_petitions.php?op=view&id='.$_GET['returnpetition']);
    }
    
//addnav('In memoriam: 2. Aktualisieren-Button');
    //addnav('Aktualisieren','user.php?op=edit&userid='.$_GET['userid']);

    //addnav('Kontrolle');
    
addnav('Verbannen','su_bans.php?op=edit_ban&ids[]='.$row['acctid']);
    
addnav('Letzten Output anzeigen','user.php?op=lasthit&userid='.$_GET['userid'],false,true);
    if(
$access_control->su_check(access_control::SU_RIGHT_DEBUGLOG))
    {
        
addnav('Debug-Log anzeigen','su_logs.php?op=search&type=debuglog&account_id='.$_GET['userid']);
    }
    if(
$access_control->su_check(access_control::SU_RIGHT_MAILBOX)) {
        
addnav('Mailbox zeigen','su_mails.php?op=search&to_id='.$_GET['userid']);
    }
    if(
$access_control->su_check(access_control::SU_RIGHT_COMMENT)) {
        
addnav('Kommentare','su_comment.php?account_id='.$_GET['userid'],false,true);
    }
    if(
$access_control->su_check(access_control::SU_RIGHT_EDITORITEMS)) {
        
addnav('Inventar','su_item.php?what=items&acctid='.$_GET['userid']);
    }
    if (
$row['house'] && $access_control->su_check(access_control::SU_RIGHT_EDITORHOUSES) ){
        
addnav("Zum Hausmeister","su_houses.php?op=edit&id=".$row['house']);
    }
    if(
$access_control->su_check(access_control::SU_RIGHT_UPLOADCONTROL)) {
        
addnav('Uploads','su_pic_control.php?op=single&id='.$_GET['userid']);
    }
    
addnav('Knappeneditor','user.php?op=disciple&userid='.$_GET['userid']);
    
addnav('Runeneditor','user.php?op=runes&userid='.$_GET['userid']);
    
addnav('Specialseditor','user_special.php?op=edit&userid='.$_GET['userid']);

    
//Ein User kann nur dann übertragen/geupdated werden wenn ein Standard Passwort existiert
    //Und die CI angeschaltet wurde
    
if(getsetting('ci_active',0) == true && getsetting('ci_std_pw_active',0) == true)
    {
        if( 
$row['incommunity'] == )
        {
            
addnav('Ins Forum übertragen''user.php?op=forum&userid='.$_GET['userid'].'&name='.urlencode($row['login']).'&pass='.urlencode(getsetting('ci_std_pw','')).'&mail='.urlencode($row['emailaddress']));
        }
        else
        {
            
addnav('Forendaten aktualisieren',"user.php?op=forum_update&userid=".$_GET['userid']."&ci_id=".$row['incommunity']."&name=".urlencode($row['login'])."&pass=".urlencode(getsetting('ci_std_pw',''))."&mail=".urlencode($row['emailaddress']));
        }
    }
    else
    {
        
addnav('Forum nicht aktiv oder kein standard Passwort vorhanden');
    }
}

page_header('Usereditor');
$_SESSION['last_user_editor_edit'] = ((int)$_SESSION['last_user_editor_edit']>0)?(int)$_SESSION['last_user_editor_edit']:$session['user']['acctid'];
$output .= '
    <form action="user.php?op=search" method="POST">
        Suche in allen Feldern: ' 
        
//. '<input name="q" id="q">' 
        
.'<br />'
        
jslib_autocomplete_name('q'truetrue)
        
//. '<input type="submit" class="button">
    
.'</form>
    <br />
    <div class="trhead">'
.plu_mi('petition_search',0,false).'Spezialoptionen:</div>
    <div id="'
.plu_mi_unique_id('petition_search').'" style="display:none;">
        <ul>
            <li>'
.create_lnk('Selbst editieren','user.php?op=edit&userid='.$session['user']['acctid'],true,true).'
            <li>'
.create_lnk('Letzten Eintrag erneut editieren (Acctid: '.(int)$_SESSION['last_user_editor_edit'].')','user.php?op=edit&userid='.(int)$_SESSION['last_user_editor_edit']).'
        </ul>
    </div>
    <hr />
'
;
define('JSLIB_NO_FOCUS_NEEDED',1);
$output .=
    
'<script type="text/javascript">
        LOTGD.m_on_document_loaded.push( function(){document.getElementById("q").focus();} );
    </script>'
;
addnav('','user.php?op=search');
grotto_nav();
if (
$access_control->su_check(access_control::SU_RIGHT_EDITORUSER))
{
    
//addnav('Mechanik');
    //addnav("Account-Tabellen abgleichen","user.php?op=extratable");
    //addnav("bestdragonage kopieren","user.php?op=copydata");
    //addnav("Überflüssige Tabellen löschen","user.php?op=delextra");
    //addnav("Benutzereditor","user.php");
    //if($session['user']['acctid'] == 2310) {addnav('Forum','user.php?op=forum_all');}
    //addnav('Seiten');
    /*$sql = "SELECT count(*) AS count FROM accounts";
    $result = db_query($sql);
    $row = db_fetch_assoc($result);
    $page=0;
    while ($row[count]>0){
        $page++;
    //    addnav("$page Seite $page","user.php?page=".($page-1)."&sort=$_GET[sort]");
        $row[count]-=100;
    }*/
}

$str_op = ($_REQUEST['op'] ? $_REQUEST['op'] : '');

switch(
$str_op) {

    case 
'search':

        if(
is_int($_POST['q']))
        {
            
$_POST['q'] = str_create_search_string($_POST['q']);
            
$sql "SELECT acctid FROM accounts WHERE ";
            
$where="            
            lastip LIKE '"
.$_POST['q']."' OR
            acctid LIKE '"
.$_POST['q']."'";
            
$result db_query($sql.$where);
        }
        else 
        {
            
$_POST['q'] = str_create_search_string($_POST['q']);
            
$sql "SELECT acctid FROM accounts WHERE ";
            
$where="
            login LIKE '"
.$_POST['q']."' OR
            acctid LIKE '"
.$_POST['q']."' OR
            name LIKE '"
.$_POST['q']."%' OR
            emailaddress LIKE '"
.$_POST['q']."' OR
            lastip LIKE '"
.$_POST['q']."' OR
            uniqueid LIKE '"
.$_POST['q']."'";
            
$result db_query($sql.$where);
        }
        

        
$int_count db_num_rows($result);
        if (
$int_count<=0)
        {
            
output('`$Keine Ergebnisse gefunden`0');

            
$where='';
        }
        elseif (
$int_count>100){
            
output('`$Zu viele Ergebnisse gefunden. Bitte Suche einengen.`0');

            
$where='';
        }
        elseif (
$int_count==1){
            
//$row = db_fetch_assoc($result);
            //redirect('user.php?op=edit&userid=$row[acctid]');

            
$_GET['page']=0;
        }
        else{
            
$_GET['page']=0;
        }

    break;    
// END search

    
case 'lasthit':

        
$output='';
        
$sql "SELECT output FROM accounts WHERE acctid=".(int)$_GET['userid'];
        
$result db_query($sql);
        
$row db_fetch_assoc($result);

        
//Kein Javascript im iFrame und keine verschachtelten iframes!
        
$row['output'] = strip_selected_tags($row['output'],array('script','iframe'),true,true);
        echo 
$row['output'];

        exit();

    break; 
// END lasthit

    
case 'logout_all':

        if(
$_GET['act'] == 'ok') {

            
user_update(
                array
                (
                    
'loggedin'=>0,
                    
'where'=>'superuser=0 AND loggedin=1'
                
)
            );
            
//GESAMTEN Memorycache leeren!
            
$mem_cache->flush();
            
output(db_affected_rows().' Spieler erfolgreich ausgeloggt!');

        }
        else {

            
$sql "SELECT COUNT(*) AS a FROM accounts WHERE loggedin=1 AND superuser=0";
            
$count mysql_fetch_row(db_query($sql));

            
output($count[0].' Spieler wirklich ausloggen?`n`n'.create_lnk('Ab ins Körbchen!','user.php?op=logout_all&act=ok'),true);

        }

    break;    
// END logout all

    
case 'edit':

        
$_SESSION['last_user_editor_edit'] = (int)$_GET['userid'];
        
$result db_query("SELECT * FROM accounts WHERE acctid=".(int)$_GET['userid']);
        
$row db_fetch_assoc($result);
        
        
$result2 db_query("SELECT * FROM account_extra_info WHERE acctid=".(int)$_GET['userid']);
        
$row2 db_fetch_assoc($result2);
        
// FORMULAR-ARRAY erstellen

        
if($access_control->su_check(access_control::SU_RIGHT_RIGHTS)) {
            
$arr_grps user_get_sugroups();

            
$sugroups '';
            if(
is_array($arr_grps)) {
                foreach(
$arr_grps as $lvl=>$grp) {

                    
$sugroups .= ','.$lvl.','.$grp[0].'/'.$grp[1].(== $lvl ' (Standard-Spieler)' '');

                }
            }

            
$ugrp = array();

            
// Wenn dieser User einer Gruppe angehört
            
if(isset($arr_grps[$row['superuser']])) {
                
$ugrp $arr_grps[$row['superuser']];
                
$ugrp_rights $ugrp[2];
            }

            
$surights = array('Superuser-Rechte,title');
            
$str_dependence '';
            foreach(
$access_control as $r=>$v) {

                
$str_dependence '';

                
// Titel
                
if(is_string($v)) {
                    
$surights[] = $v.',title,2';
                }
                else {

                    if(!empty(
$v['dependent'])) {
                        
$str_dependence '|?(Abhängig von: '.$access_control[$v['dependent']]['desc'].')';
                    }

                    
$surights['surights['.$r.']'] = $v['desc'].($ugrp[0] ? '`nGruppe: '.($ugrp_rights[$r] ? '`@Ja`0' '`$Nein`0') : '').',enum,-1,Gruppeneinstellung,0,Nein,1,Ja'.$str_dependence;
                }

            }

        }

        
$mounts=',0,Keins';
        
$sql 'SELECT mountid,mountname,mountcategory FROM mounts ORDER BY mountcategory';
        
$result db_query($sql);
        while (
$m db_fetch_assoc($result)){
            
$mounts.=','.$m['mountid'].','.$m['mountcategory'].': '.strip_appoencode($m['mountname'],3);
        }

        
$specialties=',0,Keins';
        
$sql 'SELECT specname,category,specid FROM specialty ORDER BY category, specname';
        
$result db_query($sql);
        while (
$m db_fetch_assoc($result)){
            
$specialties.=','.$m['specid'].','.$m['category'].': '.strip_appoencode($m['specname'],3);
        }

        
$professions ',0,Keiner';
        
$joblist ',0,Keiner';

        foreach(
$profs as $k=>$p) {

            
$professions .= ','.$k.','.$p[0].'/'.$p[1];

        }


        
$guildfuncs '';

        foreach(
$dg_funcs as $k=>$f) {

            
$guildfuncs .= ','.$k.','.$f[0].'/'.$f[1];

        }

        
$races=',,Unbekannt';
        
$sql 'SELECT name,id FROM races WHERE active=1 ORDER BY name ASC';
        
$result db_query($sql);
        while (
$m db_fetch_assoc($result)){
            
$races.=','.$m['id'].','.$m['name'];
        }

        
$userinfo = array(
            
'Accountdaten &amp; Namen,title',
            
'acctid'=>'User ID,viewonly|?Die Accountid, unter der der Account in der DB gespeichert ist.',
            
'name'=>'Voller Name,viewonly|?Zum Ändern des Gesamtnamens bitte die einzelnen Bestandteile (Login, Farbname, Titel, eigener Titel) editieren.',
            
'login'=>'Login|?Loginname des Accounts.',
            
'title'=>'Regulärer Titel',
            
'ctitle'=>'Eigener Titel',
            
'ctitle_backup'=>'Eigener Titel - Backup',
            
'cname'=>'Eigener (farbiger) Name',
            
'csign'=>'Besonderes Signum vor dem Namen (max. 3 Zeichen)',
            
'namecheckday'=>'Namensprüfungsalter',
            
'namecheck'=>'Name geprüft von (acctid); 16777215=ok',
            
'newpassword'=>'Neues Passwort',
            
'emailaddress'=>'Email-Adresse',
            
'loggedin'=>'Eingeloggt,bool',
            
'banoverride'=>'Verbannungen übergehen,bool',
            
'ü18'=>'Ü18?,bool',
            
'specialinc'=>'aktuelles SpecialEvent',
            
'superuser'=>'Superuser,'.($access_control->su_check(access_control::SU_RIGHT_RIGHTS) ? 'enum'.$sugroups 'viewonly'),
            
'superuser_id_switch' => 'ID des zugehörigen Superuser Chars,int|?Die ID des Admincharakters die bei einem Superuser Invoke geladen wird!',
            
'incommunity'=>'Community ID (0=nicht eingetragen),int',
            
'nodelete'=>'Niemals Löschen?,bool',

            
'Charakterdaten,title',
            
'sex'=>'Geschlecht,enum,0,Männlich,1,Weiblich',
            
'race'=>'Rasse,enum'.$races,
            
'specialty'=>'Spezialgebiet,enum'.$specialties,
            
'birthday'=>'Ankunftsdatum (Format: YYYY-MM-DD)',
            
'char_birthdate'=>'Geburtsdatum des Spielers|?Anleitung s. Profil',
            
'charclass'=>'Charakterklasse',
            
''=>'Amt (nur Anzeige),enum'.$professions,
            
'profession'=>'Amt (ersten zwei Ziffern),int',
            
'profession_rang'=>'Rang (letzte Ziffer),int',
            
            
'marriedto'=>'Partner-ID (4294967295 = `lN`Lo`Xel`Ll`le`0/`9D`wa`Fri`wa`9n`0),int',
            
'charisma'=>'Flirts (4294967295 = verheiratet mit Partner),int',
            
'expedition'=>'Zutritt zur Expedition?,bool',
            
'long_bio'=>'Bio,textarea,60,30',
            
'ext_mount'=>'Tier-Bio'.($row2['ext_mount'] == NULL ' (nicht vorhanden),viewonly':',textarea,60,30'),
            
'ext_disciple'=>'Knappen-Bio'.($row2['ext_disciple'] == NULL ' (nicht vorhanden),viewonly':',textarea,60,30'),
            
'bio_extra_info'=>'Extra-Info'.($row2['bio_extra_info'] == NULL ' (nicht vorhanden),viewonly':',textarea,60,30'),
            
'ext_bio_faehigkeiten'=>'Fähigkeiten Bio,textarea,60,30',
      
            
'guildid'=>'GildenID,int',
            
'guildrank'=>'Gildenrang (1-'.count($dg_default_ranks).'),int',
            
'guildfunc'=>'Funktion in der Gilde,enum'.$guildfuncs,

            
'Werte,title',
            
'dragonkills'=>'Heldentaten,int',
            
'level'=>'Level,int',
            
'experience'=>'Erfahrung,int',
            
'hitpoints'=>'Lebenspunkte (aktuell),int',
            
'maxhitpoints'=>'Maximale Lebenspunkte,int',
            
'alive'=>'Lebendig,bool|?Wirkt nur, wenn LP > 0!',
            
'deathpower'=>'Gefallen bei Ilyas,int',
            
'gravefights'=>'Grabkämpfe übrig,int',
            
'soulpoints'=>'Seelenpunkte (HP im Tod),int',
            
'turns'=>'Runden übrig,int',
            
'castleturns'=>'Schlossrunden übrig,int',
            
'maze'=>'aktuelle Schlosskarte,int',
            
'fishturn'=>'Angelrunden,int',
            
'playerfights'=>'Spielerkämpfe übrig,int',
            
'attack'=>'Angriffswert (inkl. Waffenschaden),int',
            
'defence'=>'Verteidigung (inkl. Rüstung),int',
            
'spirits'=>'Stimmung (nur Anzeige),enum,'.RP_RESURRECTION.',RP-Wiedererweckung,-6,Wiedererweckt,-2,Sehr schlecht,-1,Schlecht,0,Normal,1,Gut,2,Sehr gut',
            
'resurrections'=>'Auferstehungen,int',
            
'reputation'=>'Ansehen (-50 - +50),int',
            
'sentence'=>'Zu x Tagen Haft verurteilt,int',
            
'imprisoned'=>'Haftstrafe in Tagen,int',
            
'daysinjail'=>'Verbrachte Tage im Kerker,int',
            
'charm'=>'Charme,int',
            
'sympathy'=>'Sympatiepunkte,int',
            
'rppunkte'=>'RP Punkte,int',
            
'gesammelteRunden'=>'gesammelte Runden,int',
            
'battlepoints'=>'Arenapunkte,int',
            
'gladiatorfights'=>'Gladiatorkämpfe vor DK übrig,int',
            
'age'=>'Tage seit Level 1,int',
            
'dragonage'=>'Alter bei der letzten Heldentat,int',
            
'marks'=>'Male,bitflag,Mal der Erde,Mal der Luft,Mal des Feuers,Mal des Wassers,Mal des Geistes,Pakt mit Blutgott',
            
'conf_bits'=>'Konfigurationsflags,bitflag,Chaching deaktiviert <i>(nicht empfohlen)<i>,Darf keine Sympathiepunkte bekommen',

            
'orden_pruefung1'=>'Ordensprüfung 1,bitflag,Erdprüfung 1,Luftprüfung 1,Feuerprüfung 1,Wasserprüfung 1,Geistprüfung 1',
            
'orden_pruefung2'=>'Ordensprüfung 2,bitflag,Erdprüfung 2,Luftprüfung 2,Feuerprüfung 2,Wasserprüfung 2,Geistprüfung 2',
            
'orden_pruefung3'=>'Ordensprüfung 3,bitflag,Erdprüfung 3,Luftprüfung 3,Feuerprüfung 3,Wasserprüfung 3,Geistprüfung 3',
            
'orden_pruefung4'=>'Ordensprüfung 4,bitflag,Erdprüfung 4,Luftprüfung 4,Feuerprüfung 4,Wasserprüfung 4,Geistprüfung 4',
            
'orden_pruefung5'=>'Ordensprüfung 5,bitflag,Erdprüfung 5,Luftprüfung 5,Feuerprüfung 5,Wasserprüfung 5,Geistprüfung 5',
            
'orden'=>'Orden,bitflag,Erd Orden,Luft Orden,Feuer Orden,Wasser Orden,Geist Orden',
            
'element_pakt'=>'Pakt,bitflag,Mit der Erde,Mit der Luft,Mit dem Feuer,Mit dem Wasser,Mit den Geistern',
            
'element_malus'=>'Tage die der Malus nach dem Pakt brechen noch hält,int',
            
            
'Ausstattung &amp; Besitz,title',
            
'gems'=>'Edelsteine,int',
            
'gemsinbank'=>'Gems auf der Bank,int',
            
'gold'=>'Bargold,int',
            
'goldinbank'=>'Gold auf der Bank,int',
            
'minnows'=>'Fliegen im Beutel,int',
            
'worms'=>'Würmer im Beutel,int',
            
'boatcoupons'=>'Bootscoupons im Beutel,int',
            
'weapon'=>'Name der Waffe',
            
'weapondmg'=>'Waffenschaden,int',
            
'weaponvalue'=>'Kaufwert der Waffe,int',
            
'armor'=>'Name der Rüstung',
            
'armordef'=>'Verteidigungswert,int',
            
'armorvalue'=>'Kaufwert der Rüstung,int',
            
'house'=>'Haus-ID,int',
            
'hashorse'=>'Tier,enum'.$mounts,
            
'xmountname'=>'Name des Tieres',

            
'Aktueller Spieltag / Übrige Aktionen,title',
            
'seenlover'=>'Geflirtet,bool',
            
'seendragon'=>'Bosse heute versucht,bool',
            
'seenmaster'=>'Meister befragt,bool',
            
'fedmount'=>'Tier gefüttert,bool',
            
'seenbard'=>'Barden gehört,bool',
            
'usedouthouse'=>'Plumpsklo besucht,bool',
            
'treepick'=>'Baum des Lebens besucht,bool',
            
'boughtroomtoday'=>'Zimmer für heute bezahlt,bool',
            
'hadnewday'=>'Rastbonus erhalten,enum,0,Nein,1,Ja,2,Wiedererweckt',
            
'witch'=>'Hexenbesuche,int',
            
'cage_action'=>'Käfigkämpfe heute angezettelt,int',
            
'rouletterounds'=>'übrige Rouletterunden (Zehner = Todeszähler),int',
            
'gotfreeale'=>'Frei-Ale (MSB: getrunken - LSB: spendiert),int',
            
'goldin'=>'Goldeingang heute,int',
            
'goldout'=>'Goldausgang heute,int',
            
'gemsin'=>'Gemeingang heute,int',
            
'gemsout'=>'Gemausgang heute,int',
            
'guildtransferred_gold'=>'Gildentransfer (gold),int',
            
'guildtransferred_gems'=>'Gildentransfer (gems),int',
            
'guildfights'=>'Gildenkämpfe heute,int',
            
'temple_servant'=>'Tempeldienertage(x20=heute geleistet),int',
            
'drunkenness'=>'Betrunken (0-100),int',
            
'pvpflag'=>'Letzter PvP-Kampf ('.PVP_IMMU.' = Immu an)',
            
'last_crime'=>'Letzte Straftat',
            
'balance_forest'=>'Waldbalance|?-10 / +20, > 0 verstärkt Werte der Waldmonster, < 0 verringert sie.',
            
'balance_dragon'=>'Bossbalance|?-10 / +20, > 0 verstärkt Werte der Bosse, < 0 verringert sie.',
            
'location'=>'Aufenthaltsort,enum,0,Felder,1,Kneipe,2,Haus,3,Kerker,'.USER_LOC_VACATION.',Urlaubsmodus',

            
'Freischaltungen / DP,title',
            
'has_long_bio'=>'Verlängerte Bio gekauft,bool',
            
'hasxmount'=>'Tier getauft,bool',
            
'trophyhunter'=>'Präparierset gekauft,bool',
            
'hastausendwege'=>'Ort der Tausend Wege gekauft,bool',
            
'hasdaylist'=>'Hat tägliche ToDo Liste,bool',
            
            
'Spezielle Ruhmeshalleneinträge,title',
            
'bestdragonage'=>'Jüngstes Alter bei einer Heldentat,int',
            
'beerspent'=>'Anzahl spendierter Ales,int',
            
'disciples_spoiled'=>'Anzahl verheizter Knappen,int',
            
'timesbeaten'=>'Verpügelt worden,int',
            
'runaway'=>'Aus dem Kampf geflohen,int',
            
'virgator_level'=>'Virgator-Level,int',
            
'exchangequest'=>'Tauschquest-Level,int',
            
'hunterlevel'=>'Jagd-Level,int',

            
'Weitere Infos,title',
            
'laston'=>'Zuletzt Online,viewonly',
            
'lasthit'=>'Letzter neuer Tag,viewonly',
            
'lastmotd'=>'Datum der letzten MOTD,viewonly',
            
'lastip'=>'Letzte IP,viewonly',
            
'uniqueid'=>'Unique ID,viewonly',
            
'allowednavs'=>'Zulässige Navigation,viewonly',
            
'dragonpoints'=>'Eingesetzte Heldenpunkte,viewonly',
            
'bufflist'=>'Spruchliste,viewonly',
            
'prefs'=>'Einstellungen,viewonly',
            
'donationconfig'=>'Spendenkäufe,viewonly',
            
'ext_profile'=>'Profilerweiterungen,viewonly',
            
            
'User Einstellungen,title',
            
'prefs[output_compression]'=>'Output compression,bool|?Mehr Belastung für den Server, weniger Datentraffic',
            
'Maileinstellungen,divider',
            
'prefs[emailonmail]'=>'Email bei Brieftaube versenden,bool',
            
'prefs[systemmail]'=>'Email bei systemmails versenden,bool',
            
'prefs[dirtyemail]'=>'Kein Wortfilter bei Brieftauben,bool',
            
'prefs[forward_yom_to_superuser]'=>'Mail an Superuser weiterleiten,int|?-1 setzt das setting außer Kraft, sonst ID eingeben',
            
'Farbeinstellungen,divider',
            
'prefs[commenttalkcolor]'=>'Kommentarfarbe,color_pick,1,$',
            
'prefs[commentemotecolor]'=>'Emote farbe,color_pick,1,$',
            
'Chateinstellungen,divider',
            
'prefs[chat_show_rest]'=>'Restzeichenanzeige,bool',
            
'prefs[preview]'=>'Chat Previews einblenden,bool',
            
'prefs[timestamps]'=>'Zeit vor Posts anzeigen,bool',
            
'prefs[nav_help_enabled]'=>'Hilfetext bei Navigationslinks einschalten,bool',
            
'prefs[sx0]'=>'Shortcut 1',
            
'prefs[sx1]'=>'Shortcut 2',
            
'prefs[sx2]'=>'Shortcut 3',
            
            
'Features an/abschalten,divider',
            
'prefs[nosounds]'=>'Sounds abschalten,bool',
            
'prefs[nocolors]'=>'Farben abschalten,bool',
            
'prefs[noimg]'=>'Navigationsbilder deaktivieren,bool',
            
'prefs[nopngfix]'=>'PNG Fix deaktivieren,bool',
            
'prefs[tutorial_disabled]'=>'Tutorial deaktivieren,bool',
            
'prefs[htmleditor_enabled]'=>'HTML Editor aktivieren,bool',
            
'prefs[birthdate_disp]'=>'Geburtsdatum in Bio einblenden,bool',
            
'prefs[notall2bank]'=>'Nicht alles zur Bank bringen,int',
            
'prefs[taxfrombank]'=>'Steuerbankeinzug verwenden,bool',
            
'prefs[hide_who_is_here]'=>'Wer ist hier Leiste verbergen,bool',
            
'prefs[nohotkeys]'=>'Hotkeys deaktivieren,bool',
            
'prefs[quicknav_enabled]'=>'Soll das Quicknav Feld angezeigt werden?,bool',
            
            );

        
$extrainfo = array(
        );

        
// END Formular-Array

        // Speichern
        
if($_GET['act'] == 'save') {
            
$sql1    "UPDATE `accounts` SET `acctid` = '" $row['acctid'] . "',";
            
$sql2    "UPDATE account_extra_info SET `acctid` = '" $row['acctid'] . "',";
            
$log    '';

            
// Rassenänderung: Boni zurücksetzen
            
if($row['race'] != $_POST['race']) {
                
$arr_change $_POST;
                
// Bisherige Rasse!
                
$str_newrace $_POST['race'];
                
$arr_change['race'] = $row['race'];
                
// Alte Boni abnehmen
                
race_set_boni(true,true,$arr_change);
                
// Neue Boni verteilen
                
$arr_change['race'] = $str_newrace;
                
race_set_boni(true,false,$arr_change);
                
$_POST $arr_change;
            }

            
// Auf gleiche Logins checken
            
if( $_POST['login'] != $row['login'] && db_num_rows(db_query('SELECT acctid FROM accounts WHERE LOWER(login)="'.addstripslashes(strtolower($_POST['login'])).'"')) ) {
                
$_POST['login']    = $row['login'];
            }

            
// Bei Namensänderung ein bißchen aufpassen
            // cname und Login müssen bis auf Farbcodes identisch sein
            
if(strip_appoencode($_POST['cname'],3) != $_POST['login']) {

                
// Ansonsten Farbname weg
                
$_POST['cname'] = '';

            }

            
// Wenn Login geändert: Forum nicht vergessen
            
if($row2['incommunity'] && $_POST['login'] != $row['login']) {
                require_once(
LIB_PATH.'communityinterface.lib.php');

                
ci_rename($row2['incommunity'], stripslashes($_POST['login']));
            }

            
// Jetzt noch Gesamtnamen korrekt setzen
            // Muss vor saveuser kommen, da beim Sessionuser noch Änderungen vorgenommen werden!
            
if(substr($_POST['name'],0,34) != 'Neuling mit unzulässigem Namen Nr.') {
                
$_POST['name'] = user_set_name($_GET['userid'],false,$_POST);
            }

            
// Sonderrechte speichern
            
if($access_control->su_check(access_control::SU_RIGHT_RIGHTS)) {
                foreach(
$_POST['surights'] as $key=>$r) {
                    if(
$r == -1) {
                        unset(
$_POST['surights'][$key]);
                    }
                }

                if(
sizeof($_POST['surights']) > 0) {
                    
$_POST['surights'] = addslashes(serialize(user_set_surights($_POST['surights'],$ugrp_rights)));
                }
                else {
                    
$_POST['surights'] = '';
                }
                
// Zu Formular-Schablone hinzufügen
                
$userinfo['surights'] = true;
            }
            
            if(
sizeof($_POST['prefs']) > 0
            {
                
$arr_user_prefs unserialize($row['prefs']);
                foreach (
$arr_user_prefs as $key => $val)
                {
                    if(!
array_key_exists($key,$_POST['prefs']))
                    {
                        
$_POST['prefs'][$key] = $arr_user_prefs[$key];    
                    }
                    elseif (
$_POST['prefs'][$key] != $val)
                    {
                        
$log .= '[Einstellung] ' $key ' = ' $_POST['prefs'][$key] . ' (davor: ' $arr_user_prefs[$key] . '),`n';
                    }
                }
                
$_POST['prefs'] = serialize($_POST['prefs']);
            }
            else
            {
                unset(
$_POST['prefs']);
            }

            foreach(
$_POST as $key=>$val)
            {
                if(isset(
$row[$key]))
                {
                    if (
$key=="newpassword" )
                    {
                        if (!empty(
$val))
                        {
                            
$sql1    .= "password = MD5('$val'),";
                            
$log    .= 'Neues Passwort,`n';
                        }
                    }
                    elseif (
$row[$key] != stripslashes($val))
                    {
                        
$sql1    .= $key " = '".addstripslashes($val)."',";
                        if (
$key == 'prefs') continue;
                        
$log    .= $key ' = ' $val ' (davor: ' stripslashes($row[$key]) . '),`n';
                    }
                }
                elseif (isset(
$row2[$key]) && $row2[$key] != stripslashes($val))
                {
                    
$sql2    .= $key " = '".addstripslashes($val)."',";
                    
$log    .= $key ' = ' $val ' (davor: ' stripslashes($row2[$key]) . '),`n';
                }

            }
            
$sql1=substr($sql1,0,strlen($sql1)-1);
            
$sql2=substr($sql2,0,strlen($sql2)-1);
            
$sql1.=' WHERE acctid='.$_GET['userid'];
            
$sql2.=' WHERE acctid='.$_GET['userid'];

            if (
strlen($log)>3$log substr($log0strlen($log)-3);
            
debuglog('Useredit - Editierte User`n(Setzte: ' $log ')',$_GET['userid']);
            
systemlog('Useredit - Editierte User',$session['user']['acctid'],$_GET['userid']);

            
//we must manually redirect so that our changes go in to effect *after* our user save.
            
addnav('','su_petitions.php?op=view&id='.$_GET['returnpetition']);
            
addnav('','user.php');

            
saveuser();

            
db_query($sql1);
            
db_query($sql2);
            
            global 
$mem_cache;
            
$mem_cache->delete('session_'.$_GET['userid']);

            if (!empty(
$_GET['returnpetition'])){
                
header('Location: su_petitions.php?op=view&id='.$_GET['returnpetition']);
            }
            else{
                
header('Location: user.php');
            }

            exit();
        }
        
// END Speichern

        
if(!is_array($surights))
        {
            
$surights=array();
        }
        
        
$userinfo array_merge($userinfo,$extrainfo,$surights);
        
debuglog('`&Benutzer '.$row['name'].'`& im Usereditor geöffnet.');

        
$row['surights'] = unserialize(stripslashes($row['surights']));


        foreach(
$access_control as $r=>$v) {

            if(isset(
$row['surights'][$r])) {
                
$row['surights['.$r.']'] = $row['surights'][$r];
                unset(
$row['surights'][$r]);
            }
            else {
                
$row['surights['.$r.']'] = -1;
            }

        }

//        $row2['long_bio'] = preg_replace('/\r\n|\r|\n/', '', $row2['long_bio']); // Zeilenumbrüche raus
//        $row2['ext_bio_faehigkeiten'] = preg_replace('/\r\n|\r|\n/', '', $row2['ext_bio_faehigkeiten']); // Zeilenumbrüche raus

        
$arr_user_prefs unserialize($row['prefs']);
        
        foreach(
$arr_user_prefs as $r=>$v
        {
            
$row['prefs['.$r.']'] = $arr_user_prefs[$r];
        }
        
$row adv_array_merge($row,$row2,$arr_user_prefs);
        
output("<form action='user.php?op=special&amp;userid=$_GET[userid]".($_GET['returnpetition']!=""?"&amp;returnpetition={$_GET['returnpetition']}":"")."' method='POST'>",true);
        
addnav("","user.php?op=special&userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"")."");
        
output("`n`c".$row[name]."`c`n<input type='submit' class='button' name='newday' value='Neuen Tag gewähren'>",true);
        
output("<input type='submit' class='button' name='fixnavs' value='Defekte Navs reparieren'>",true);
        if(!empty(
$row['emailvalidation'])) {
            
output("<input type='submit' class='button' name='clearvalidation' value='E-Mail als gültig markieren'>",true);
        }
        if(
$access_control->su_check(access_control::SU_RIGHT_DEV)) //auf Wunsch der Admins, die Knöpfe braucht man sowieso nur bei Fehlern
        
{
            
output("<input type='submit' class='button' name='reset_values' value='ATK+DEF Reset (!)'>",true);
            
output("<input type='submit' class='button' name='reset_dragonpoints' value='Heldenpunkte Reset (!)'>",true);
        }
        if(
$access_control->su_check(access_control::SU_RIGHT_ANONYMIZE_USER))
        {
            
output("<input type='submit' class='button' name='anonymize_user' value='User anonymisieren (!)' onClick='return confirm(\"Achtung, der User wird anonymisiert und ist für das System praktisch unbrauchbar!\")'>",true);
        }
        
        
output("</form>",true);

        
output("<form action='user.php?op=edit&amp;act=save&amp;userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"")."' method='POST'>",true);
        
addnav("","user.php?op=edit&act=save&userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"")."");
        
addnav("","user.php?op=edit&userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"")."");

        
editnav();


        
output("<input type='submit' class='button' value='Speichern'>",true);
        
showform($userinfo,$row);
        
output("</form>",true);
        if(
$_GET['userid'] != $session['user']['acctid']) {
            
output("<iframe src='user.php?op=lasthit&userid={$_GET['userid']}' width='100%' height='400'>Dein Browser muss iframes unterstützen, um die letzte Seite des Users anzeigen zu können. Benutze den Link im Menü stattdessen.</iframe>",true);
        }
        
addnav("","user.php?op=lasthit&userid=".$_GET['userid']);

    break;    
// END edit

    
case 'special':

        if (
$_POST['newday']!='')
        {
            
user_update(
                array
                (
                    
'lasthit'=>date('Y-m-d H:i:s',strtotime(date('r').'-'.(86500/getsetting('daysperday',4)).' seconds'))
                ),
                (int)
$_GET['userid']
            );
        }
        elseif(
$_POST['fixnavs']!='')
        {
            
user_update(
                array
                (
                    
'allowednavs'=>'',
                    
'output'=>'',
                    
'restorepage'=>'',
                    
'specialinc'=>'',
                    
'pqtemp'=>'',
                    
'specialmisc'=>'',
                ),
                (int)
$_GET['userid']
            );
        }
        elseif(
$_POST['clearvalidation']!='')
        {
            
user_update(
                array
                (
                    
'emailvalidation'=>'',
                ),
                (int)
$_GET['userid']
            );
        }
        elseif (
$_POST['reset_values'])
        {

            
$sql 'SELECT dragonpoints,weapondmg,armordef,level,race FROM accounts WHERE acctid='.(int)$_GET['userid'];
            
$arr_tmp db_fetch_assoc(db_query($sql));

            
$arr_dp unserialize($arr_tmp['dragonpoints']);

            
$arr_tmp['attack'] = $arr_tmp['weapondmg'] + $arr_tmp['level'];
            
$arr_tmp['defence'] = $arr_tmp['armordef'] + $arr_tmp['level'];

            if(
is_array($arr_dp)) {
                foreach(
$arr_dp as $key=>$val)
                {
                    if (
$val=='atk' || $val == 'at')
                    {
                        
$arr_tmp['attack']++;
                    }
                    if (
$val=='def' || $val == 'de')
                    {
                        
$arr_tmp['defence']++;
                    }
                }
            }

            if(!empty(
$arr_tmp['race'])) {
                
$arr_race race_get($arr_tmp['race'],true);
                
race_set_boni(true,false,$arr_tmp);
            }

            
debuglog('setzte ATK (='.$arr_tmp['attack'].') + DEF (='.$arr_tmp['defence'].') zurück für',$_GET['userid']);
            
            
user_update(
                array
                (
                    
'attack'=>$arr_tmp['attack'],
                    
'defence'=>$arr_tmp['defence'],
                ),
                (int)
$_GET['userid']
            );
        }
        elseif (
$_POST['reset_dragonpoints']) {

            
$sql 'SELECT dragonpoints,attack,defence,maxhitpoints,level,weapondmg,armordef FROM accounts WHERE acctid='.$_GET['userid'];
            
$arr_tmp db_fetch_assoc(db_query($sql));

            
$arr_dp unserialize($arr_tmp['dragonpoints']);

            if(
is_array($arr_dp)) {
                foreach (
$arr_dp as $key=>$val) {

                    if(
$val == 'atk' || $val == 'at') {
                        
$arr_tmp['attack']--;
                    }
                    if(
$val == 'def' || $val == 'de') {
                        
$arr_tmp['defence']--;
                    }
                    if(
$val == 'hp') {
                        
$arr_tmp['maxhitpoints'] -= 5;
                    }

                }
            }

            
$arr_tmp['attack'] = max($arr_tmp['attack'],$arr_tmp['level']+$arr_tmp['weapondmg']);
            
$arr_tmp['defence'] = max($arr_tmp['defence'],$arr_tmp['level']+$arr_tmp['armordef']);
            
$arr_tmp['maxhitpoints'] = max($arr_tmp['maxhitpoints'],5*$arr_tmp['level']);

            
debuglog('setzte Heldenpunkte zurück, ATK(='.$arr_tmp['attack'].'), DEF (='.$arr_tmp['defence'].'), HP (='.$arr_tmp['maxhitpoints'].') für',$_GET['userid']);

            
$arr_tmp['dragonpoints'] = array();

            
// User kurz ausloggen..
            
user_update(
                array
                (
                    
'loggedin'=>0,
                    
'dragonpoints'=>$arr_tmp['dragonpoints'],
                    
'attack'=>$arr_tmp['attack'],
                    
'defence'=>$arr_tmp['defence'],
                    
'maxhitpoints'=>$arr_tmp['maxhitpoints'],
                    
'lasthit'=>'0000-00-00 00:00:00'
                
),
                (int)
$_GET['userid']
            );
        }
        elseif (
$_POST['anonymize_user'])
        {
            
$rand md5(microtime());
            
            
// User kurz ausloggen..
            
user_update(
                array
                (
                    
'emailaddress'=>$rand,
                    
'lastip'=>$rand,
                    
'lasthit'=>'0000-00-00 00:00:00',
                    
'uniqueid'=>$temp,
                    
'output'=>'',
                    
'password'=>$rand
                
),
                (int)
$_GET['userid']
            );
            
debuglog('Anonymisierte User',$_GET['userid']);
        }


        if (empty(
$_GET['returnpetition']))
        {
            
$str_lnk 'user.php?op=edit&userid='.$_GET['userid'];
        }
        else
        {
            
$str_lnk 'su_petitions.php?op=view&id='.$_GET['returnpetition'];
        }
        
// Von Hand weiterleiten
        
addnav('',$str_lnk);
        
saveuser();

        
header('Location:'.$str_lnk);
        exit();

    break;    
// END special

    // Knappeneditor
    
case 'disciple':

        
$int_uid = (int)$_GET['userid'];
        
$int_did = (int)$_POST['id'];

        
addnav('Zurück zum Useredit','user.php?op=edit&userid='.$int_uid);

        if(
$int_did>0) {

      
/* Nase voll von dem Scheiß auf dem DP 
          
            // Feststellen, ob unser Knappe der stärkste im Lande ist
            $bool_bestone = false;
            $sql = 'SELECT level, id FROM disciples WHERE level > '.(int)$_POST['level'].' AND state > 0 ORDER BY level DESC LIMIT 1';
            $res = db_query($sql);

            // Gibt keinen stärkeren
            if(!db_num_rows($res)) {
                $bool_bestone = true;

                // Alle anderen zurücksetzen
                db_query('UPDATE disciples SET best_one = 0');
            }
            else {
                // Stärkeren zum besten Knappen erheben
                $arr_best = db_fetch_assoc($res);

                db_query('UPDATE disciples SET best_one = 1 WHERE id='.$arr_best['id']);
            }*/

            
$sql = ($int_did == -'INSERT INTO ' 'UPDATE ');
            
$sql .= ' disciples
                    SET name="'
.$_POST['name'].'",state='.$_POST['state'].',oldstate='.$_POST['oldstate'].',level='.$_POST['level'].',master='.$int_uid// best_one='.($bool_bestone ? 1 : 0).', - entfernt wg. DP, siehe oben.
            
$sql .= ($int_did > -' WHERE id='.$int_did '');
            
db_query($sql);

            if(
db_affected_rows()) {
                
output('`@`b`cKnappe erfolgreich editiert!`c`b`0`n`n');
            }
            else {
                
output('`$`b`cKnappe NICHT editiert!`c`b`0`n`n');
            }
        }

        
$sql 'SELECT * FROM disciples WHERE master='.$int_uid;
        
$res db_query($sql);

        if(
db_num_rows($res) == 0) {
            
$arr_data = array('id'=>-1);
        }
        else {
            
$arr_data db_fetch_assoc($res);
        }

        
$str_state_enum ',-1,tot,0,inaktiv';
        for(
$i=1;$i<=22;$i++) {
            
$str_state_enum .= ','.$i.','.get_disciple_stat($i);
        }

        
$arr_form = array(

                            
'name'=>'Name des Knappen:',
                            
'state'=>'Aktueller Status des Knappen:,enum'.$str_state_enum,
                            
'oldstate'=>'Status-Backup:,enum'.$str_state_enum,
                            
'level'=>'Level des Knappen:,enum_order,0,100',
                            
'id'=>'ID des Knappen,hidden'
                            
);

        
$str_lnk 'user.php?op=disciple&userid='.$int_uid;
        
addnav('',$str_lnk);
        
output('<form method="POST" action="'.htmlentities($str_lnk).'">',true);

        
showform($arr_form,$arr_data,false,'Speichern');

        
output('</form>',true);


    break;

    
// Runeneditor
    
case 'runes':

        
$int_uid = (int)$_GET['userid'];

        
addnav('Zurück');
        
addnav('Zum Useredit','user.php?op=edit&userid='.$int_uid);

        
// Runeninfos abrufen
        
$res db_query('SELECT * FROM runes_extrainfo');

        if(!
db_num_rows($res)) {
            
output('Runen? Was ist das?!');
            
page_footer();
            exit();
        }

        
$str_out '';

        if(isset(
$_POST['save'])) {

            
$arr_tmp['runes_ident'] = array();
            if( 
is_array($_POST['runes']) ){
                foreach (
$_POST['runes'] as $id) {
                    
$arr_tmp['runes_ident'][$id] = true;
                }
            }

            
$arr_tmp['runes_ident'] = serialize($arr_tmp['runes_ident']);

            
user_set_aei($arr_tmp,$int_uid);

            
$str_out .= '`n`@Erfolgreich gespeichert!`0`n`n';

        }

        
$lres db_query('    SELECT DISTINCT i.value2 AS id
                            FROM items i
                            LEFT JOIN items_tpl it ON it.tpl_id = i.tpl_id
                            LEFT JOIN account_extra_info aei ON aei.acctid = i.owner
                            WHERE it.tpl_class = "'
.getsetting('runes_classid',19).'"
                            AND i.tpl_id <> "r_dummy"
                            AND NOT INSTR( aei.runes_ident, CONCAT( ":", it.tpl_value2, ";" ) )
                            AND i.owner = '
.$int_uid.'');
        
$lost = array();
        while( 
$l db_fetch_assoc($lres) ){
            
$lost$l['id'] ] = true;
        }

        
$arr_tmp user_get_aei('runes_ident',$int_uid);
        
$arr_tmp['runes_ident'] = unserialize($arr_tmp['runes_ident']);

        
$str_lnk 'user.php?op=runes&userid='.$int_uid;
        
addnav('',$str_lnk);
        
$str_out .= '`n`c`bIdentifizierte Runen dieses Benutzers:`b`n`n
                    `$`b*`b`& = Besitzt Rune im identifizierten Zustand, hat aber das Wissen nicht!`0
                    <form method="POST" action="'
.htmlentities($str_lnk).'"><input type="hidden" value="1" name="save">';
        
$str_out .= '<table>';
        
$int_row 0;
        
$bool_lostthis=false;
        while(
$r db_fetch_assoc($res))
        {
            if( !
$int_row )
            {
                
$str_out .= '<tr>';
            }
            
$bool_lostthis $lost$r['id'] ];
            
$str_out .= '<td><input type="checkbox" name="runes[]" value="'.$r['id'].'" '.($arr_tmp['runes_ident'][$r['id']] ? 'checked="checked"':'').' /></td><td>'.($bool_lostthis?'`$`b':'`&').$r['name'].' (id: '.$r['id'].')'.($bool_lostthis?'`b':'').'`0</td>';
            
$int_row++;
            if( 
$int_row==)
            {
                
$str_out .= '</tr>'$int_row=0;
            }

        }

        
$str_out .= '</table><input type="submit" value="Speichern!" />
                    </form>`n`n`c'
.plu_mi('runes_check',0,false).'`bCheck:`b`n<div style="text-align: left; width: 250px; display:none;" id="'.plu_mi_unique_id('runes_check').'">'.nl2br(str_replace(' ','&nbsp;',print_r($arr_tmp['runes_ident'],true))).'</div>
                    '
;
        
output($str_out,true);

    break;

    case 
'forum':

        
$aUser = array();
        
$aUser] = array(    'id'    => $_GET['userid'],
                                
'name'    => urldecode($_GET['name']),
                                
'pass'    => urldecode($_GET['pass']),
                                
'mail'    => urldecode($_GET['mail'])
                            );
        include_once(
LIB_PATH.'communityinterface.lib.php');
        
$ret ci_importusers($aUser);
        if( !empty(
$ret) ){
            
$str_mailbody 'Dir wurde durch den Passierschein A38 Zugang zum Forum gewährt.`n
            Dein Username lautet `b'
.$_GET['name'].'`b und Dein Passwort lautet `b'.$_GET['pass'].'`b.`n
            Bitte ändere es in Deinem Forenprofil so schnell wie möglich auf einen neuen Wert ab.'
;
            
systemmail($_GET['userid'],'Forenzugangsdaten (Passierschein A38)',$str_mailbody);
            
redirect("user.php?op=edit&userid=".$_GET['userid']."&msg=ok");
        }
        else{
            
redirect("user.php?op=edit&userid=".$_GET['userid']."&msg=fail");
        }

    break;    
// END forum

    
case 'forum_update':
        
$aUser =         array(    'ci_id'    => $_GET['ci_id'],
                                
'name'    => urldecode($_GET['name']),
                                
'pass'    => urldecode($_GET['pass']),
                                
'mail'    => urldecode($_GET['mail'])
                            );
        include_once(
LIB_PATH.'communityinterface.lib.php');
        
$ret ci_updateuser($aUser);
        if( 
$ret == ){
            
$str_mailbody 'Dir wurde durch den Passierschein A38 Zugang zum Forum gewährt.`n
            Dein Username lautet `b'
.$_GET['name'].'`b und Dein Passwort lautet `b'.$_GET['pass'].'`b.`n
            Bitte ändere es in Deinem Forenprofil so schnell wie möglich auf einen neuen Wert ab.'
;
            
systemmail($_GET['userid'],'Forenzugangsdaten (Passierschein A38)',$str_mailbody);
            
redirect("user.php?op=edit&userid=".(int)$_GET['userid']."&msg=ok");
        }
        else{
            
redirect("user.php?op=edit&userid=".(int)$_GET['userid']."&msg=fail");
        }

    break;    
// END forum

    
case 'forum_all':

        
$sql 'SELECT accounts.acctid AS id,login AS name,password AS pass,emailaddress AS mail FROM accounts LEFT JOIN account_extra_info USING(acctid) WHERE incommunity > 0';
        
$res db_query($sql);

        while(
$a db_fetch_assoc($res)) {
            
$aUser[] = $a;
        }

        include_once(
LIB_PATH."communityinterface.lib.php");
        
$ret ci_importusers($aUser);
        if( !empty(
$ret) ){
            
redirect("user.php?op=edit&userid=".(int)$_GET['userid']."&msg=ok");
        }
        else{
            
redirect("user.php?op=edit&userid=".(int)$_GET['userid']."&msg=fail");
        }

    break;    
// END forum

    
case 'logoff':

        
$id = (int)$_GET['userid'];
        
user_update(
            array
            (
                
'loggedin'=>0,
                
'lasthit'=>0
            
),
            
$id
        
);

        
addnav('User Info bearbeiten','user.php?op=edit&userid=$id');

        
output("Der User wurde ausgelogged!");

    break;    
// END logoff

    
default:    // Standardanzeige



    
break;    // END default

}    // END Main-Switch (op)

if (isset($_GET['page']))
{
    
$str_output '';
    
$order 'acctid';
    if (!empty(
$_GET['sort']))
    {
        
$order $_GET['sort'];
    }
    
$offset=(int)$_GET['page']*100;
    
$sql "SELECT acctid,login,name,level,laston,lastip,uniqueid,emailaddress,activated FROM accounts ".($where>""?"WHERE $where ":"")."ORDER BY \"$order\" LIMIT $offset,100";
    
$result db_query($sql);
    
$str_output .= "
    <table>
        <tr>
        <td>Ops</td>
        <td><a href='user.php?sort=login'>Login</a></td>
        <td><a href='user.php?sort=name'>Name</a></td>
        <td><a href='user.php?sort=acctid'>ID</a></td>
        <td><a href='user.php?sort=level'>Lev</a></td>
        <td><a href='user.php?sort=laston'>Zuletzt da</a></td>
        <td><a href='user.php?sort=lastip'>IP</a></td>
        <td><a href='user.php?sort=uniqueid'>ID</a></td>
        <td><a href='user.php?sort=emailaddress'>E-Mail</a></td>
        </tr>"
;

    
addpregnav("/user.php\?sort=(login|name|acctid|level|laston|lastip|uniqueid)/");

    
$rn=0;
    
$int_count db_num_rows($result);
    for (
$i=0;$i$int_count;$i++)
    {
        
$row=db_fetch_assoc($result);
        
$loggedin=user_get_online(0,$row,true);
        
$laston=round((strtotime(date('r'))-strtotime($row[laston])) / 86400,0).' Tage';
        if (
substr($laston,0,2)=='1 ')
        {
            
$laston='1 Tag';
        }
        if (
date('Y-m-d',strtotime($row[laston])) == date('Y-m-d'))
        {
            
$laston='Heute';
        }
        if (
date('Y-m-d',strtotime($row[laston])) == date('Y-m-d',strtotime(date('r').'-1 day')))
        {
            
$laston='Gestern';
        }
        if (
$loggedin)
        {
            
$laston='Jetzt';
        }
        
$row['laston']=$laston;
        if (
$row[$order]!=$oorder)
        {
            
$rn++;
        }
        
$oorder $row[$order];
        
$str_output .= "<tr class='".($rn%2?"trlight":"trdark")."'>";

        
$str_output .= "<td>";

        
//ADDED LOG OFF HERE
        
$str_output .= "[<a href='user.php?op=edit&amp;userid=$row[acctid]'>Edit</a>|"
                
.create_lnk('Del','su_delete.php?ids[]='.$row['acctid'].'&ret='.urlencode(calcreturnpath()) ).'|'.
                
create_lnk('Ban','su_bans.php?op=edit_ban&ids[]='.$row['acctid'].'&ret='.urlencode(calcreturnpath()) ).'|'.
                
create_lnk('Logs','su_logs.php?op=search&type=debuglog&account_id='.$row['acctid']).'|'.
                (
$access_control->su_check(access_control::SU_RIGHT_USERDISCU) ? create_lnk('Disku','su_userdiscu.php?op=new&id='.$row['acctid']) : '').'|'.
                
"<a href='user.php?op=logoff&amp;userid=$row[acctid]'>Logout</a>]";
        
addnav("","user.php?op=edit&userid=".(int)$row['acctid']);
        
addnav("","user.php?op=setupban&userid=".(int)$row['acctid']);
        
//ADDED LOG OFF HERE

        
addnav("","user.php?op=logoff&userid=".(int)$row['acctid']);

        
$str_output .= "</td><td>";
        
$str_output .= $row['login'];
        
$str_output .= "</td><td>";
        
$str_output .= $row['name'];
        
$str_output .= "</td><td>";
        
$str_output .= $row['acctid'];
        
$str_output .= "</td><td>";
        
$str_output .= $row['level'];
        
$str_output .= "</td><td>";
        
$str_output .= $row['laston'];
        
$str_output .= "</td><td>";
        
$str_output .= $row['lastip'];
        
$str_output .= "</td><td>";
        
$str_output .= $row['uniqueid'];
        
$str_output .= "</td><td>";
        
$str_output .= $row['emailaddress'];
        
$str_output .= "</td>";
        
        
$str_output .= "</tr>";
    }
    
$str_output .= "</table>";
}
output($str_output);
page_footer();
?>
0.9.7(DS V3) Ithil-Edition