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!


./motd.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:
<?php
/**
* motd.php: Stellt bewährte MoTD-Funktionalität zur Verfügung, erweitert
*            um Editfunktion, Autorangabe, Datumsanzeige, Archiv.
* @author LOGD-Core, modified and rewritten by talion <t [-[at]-] ssilo.de>
* @version DS-E V/2
*/

require_once('common.php');
$chat=false;
addcommentary();
define('MOTDGROUP_ALL',99);
$str_filename basename(__FILE__);

$arr_groups $access_control->user_get_sugroups();
$arr_groups[MOTDGROUP_ALL][1] = 'Alle Grottenolme';

popup_header(getsetting('townname','Atrahor').': Message of the Day (MoTD)',true);

$str_output '';
$str_output  '<center>[<a href="motd.php">MoTD-Index</a> | <a href="motd-coding.php?check=all">MoTC-Index</a>]</center><br />';
if (
$access_control->su_check(access_control::SU_RIGHT_MOTD))
{
    
$str_output .= '<center>[<a href="motd.php?op=edit">MoTD / Umfrage erstellen</a> | <a href="motd-coding.php?op=neu">MoTC erstellen</a>]</center><br />';
}

/**
 * Schreibt ein MOTD Item
 *
 * @param String $subject
 * @param String $body
 * @param int $group
 * @param string $date
 * @param string $author
 * @return string MOTDItem
 */
function motditem($subject,$body,$group=0,$date='',$author='')
{    
    global 
$arr_groups;
    
$str_output = ('`b'.($author?$author:'').' '.$subject.' '.($group>0?'(Für '.$arr_groups[$group][1].'`0)':'').'`b`n');
    if (
$date)
    {
        
$str_output .= ('`#`i[ '.strftime('%A, %e. %B %Y, %H:%M',strtotime($date)).' ]`i`n');
    }
    
motd_place_links($body);
    
$str_output .= ('`3'.$body.'<hr />`0');
    return 
$str_output;
}

/**
 * Ersetzt BBCode Style url Tags mit einem echten Link
 *
 * @param String $str_text Text in dem nach url-bbcode gesucht werden soll
 */
function motd_place_links(&$str_text)
{    
    
$str_text preg_replace('#\[url=([\w]+?://[^ \"\n\r\t<]*?)\](.*?)\[/url\]#is','<a href="$1">$2</a>',$str_text);
}

/**
 * Schreibt ein Poll item
 *
 * @param int $id
 * @param string $subject
 * @param String $body
 * @param string $date
 * @param string $author
 * @return string PollItem
 */
function pollitem($id,$subject,$body,$group=0,$date='',$author='')
{
    global 
$Char,$arr_groups;
    
    
$sql "
            SELECT
                count(`resultid`)     AS `c`,
                MAX(`choice`)         AS `choice`
            FROM
                `pollresults`
            WHERE
                `motditem`    = '"
.$id."'        AND
                `account`    = '"
.$Char->acctid."'
            "
;
    
$result db_query($sql);
    
$row db_fetch_assoc($result);
    
    
$choice $row['choice'];
    
$body unserialize($body);
    
    
//Darf noch abgestimmt werden    
    
$bool_poll_active time() < strtotime($body['end_date']);    
    if(
$bool_poll_active)
    {
        
$str_output .= form_header($str_filename.'?op=vote');
        
$str_output .= '<input type="hidden" name="motditem" value="'.$id.'">';
    }
    
    
$str_output .= '`b'.($author $author '').' Umfrage: '.$subject.' '.($group>0?'(Für '.$arr_groups[$group][1].'`0)':'').'`b`n';
    if (
$date)
    {
        
$str_output .= '`#`i[ '.strftime('%A, %e. %B %Y, %H:%M',strtotime($date)).' ]`i`n';
    }
    
$motd_body $body['body'];
    
motd_place_links($motd_body);
    
    
$str_output .= ('`3'.stripslashes($motd_body));
    
$sql "
            SELECT
                count(`resultid`) AS `c`,
                `choice`
            FROM
                `pollresults`
            WHERE
                `motditem`    = '"
.$id."'
            GROUP BY
                `choice`
            ORDER BY
                `choice`
            "
;
    
$result db_query($sql);
    
$choices = array();
    
$totalanswers 0;
    
$maxitem 0;

    while (
$row db_fetch_assoc($result))
    {
        
$choices[$row['choice']]=$row['c'];
        
$totalanswers+=$row['c'];
        if (
$row['c']>$maxitem)
        {
            
$maxitem $row['c'];
        }
    }
    
    foreach (
$body['opt'] as $key=>$val)
    {
        if (
trim($val)!='')
        {
            if (
$totalanswers<=0)
            {
                
$totalanswers=1;
            }
            
$str_output .= '`n';
            
$percent round($choices[$key] / $totalanswers 100,1);
            
$str_output .= $bool_poll_active"<input type='radio' name='choice' value='".$key."'".($choice==$key?" checked":"").">":'';
            
$str_output .= stripslashes($val)." (".(int)$choices[$key]." - ".$percent."%)";
            if (
$maxitem==0)
            {
                
$width=1;
            }
            else
            {
                
$width round(($choices[$key]/$maxitem) * 400,0);
            }
            
$width max($width,1);
            
$str_output .= "`n<img src='images/rule.gif' width='".$width."' height='2' alt='".$percent."'>";
        }
    }
    if(
$bool_poll_active)
    {
        
$str_output .= '<br /><input type="submit" class="button" value="Abstimmen" />';    
        
$str_output .= form_footer();
    }
    
$str_output .= '<hr>';
    
    return 
$str_output;
}

switch (
$_GET['op'])
{
    case 
'vote':
        if (!isset(
$Char->acctid))
        {
            
header('Location: motd.php');
            exit();
        }
        
$sql "
            DELETE FROM
                `pollresults`
            WHERE
                `motditem`    = '"
.$_POST['motditem']."'             AND
                `account`    = '"
.$Char->acctid."'
            "
;
        
db_query($sql);
        
$sql "
            INSERT INTO
                `pollresults`
            SET
                `choice`    = '"
.$_POST['choice']."',
                `account`    = '"
.$Char->acctid."',
                `motditem`    = '"
.$_POST['motditem']."'
            "
;
        
db_query($sql);
        
header('Location: motd.php');
        exit();
        
        break;

    case 
'edit':
        
$access_control->su_check(access_control::SU_RIGHT_MOTD,true);

        
$str_output .= ' [<a href="motd.php">MoTD Index</a>] ';

        
$int_item         = (int)$_REQUEST['motditem'];
        
$str_body         $_POST['motdbody'];
        
$str_savebody     '';
        
$str_title         $_POST['motdtitle'];
        
$int_type         = (int)$_POST['motdtype'];
        
$int_group         = (int)$_POST['motdgroup'];
        
$int_author     = (int)$_POST['motdauthor'];
        
$str_opt         $_POST['opt'];
        
$str_enddate    $_POST['end_date'];
        
$arr_body         = array();
        
$arr_opt         = array();

        if (
$_GET['act'] == 'save')
        {
            if (
$int_type == 1)
            {
                
$arr_opt     explode('||',stripslashes($str_opt));
                
$arr_body     = array('body'=>stripslashes(nl2br($str_body)),'opt'=>$arr_opt,'end_date'=>$str_enddate);
                
$str_savebody addslashes(serialize($arr_body));
            }
            else
            {
                
$str_savebody nl2br($str_body);
            }

            
$sql = ($int_item 'UPDATE ' 'INSERT INTO ');
            
$sql .= ' `motd` SET ';

            
$sql .= "
            `motdtitle`    = '"
.$str_title."',
            `motdbody`    = '"
.$str_savebody."',
            `motddate`    = "
.($int_item==|| $_POST['newmotd'] ? 'NOW()' '`motddate`').",
            `motdtype`    = '"
.$int_type."',
            `motdgroup`    = '"
.$int_group."',
            `motdauthor`= "
.($int_author > -"'".$int_author."'" 'motdauthor')."
            "
;

            
$sql .= ($int_item " WHERE `motditem`    = '".$int_item."'" '');

            
db_query($sql);

            if (!
db_error(LINK))
            {
                if (
$int_item==|| $_POST['newmotd'])
                {
                    
//MOTD Status nur für bestimmte Leute updaten
                    
if(!is_null_or_empty($_POST['motdgroup']))
                    {
                        
$id = (int)$_POST['motdgroup'];
                        if(
$id && $id MOTDGROUP_ALL)
                        {
                            
$str_where 'acctid != '.$Char->acctid.' AND superuser='.(int)$_POST['motdgroup'];
                        }
                        elseif(
$id == MOTDGROUP_ALL)
                        {
                            
$str_where 'acctid != '.$Char->acctid.' AND superuser IN ('.implode(',',$access_control->get_superuser_sugroups()).') ';
                        }
                        else
                        {
                            
$str_where 'acctid != '.$Char->acctid;
                        }
                    }
                    else
                    {
                        
$str_where 'acctid != '.$Char->acctid;
                    }

                    
user_update(
                        array(
'lastmotd'=>'0000-00-00 00:00:00',
                            
'where'=>$str_where
                        
)
                    );
                }

                
$session['message'] = '`@MoTD erfolgreich eingetragen!`0';

                
//Write the RSS Webfeed
                
if (getsetting('rss_enable_motd_feed',false)==true && ($int_item==|| $_POST['newmotd']))
                {
                    require_once(
LIB_PATH.'rss.lib.php');
                    
rss_write_motd_feed_file();
                }

                
header('Location: motd.php');
                exit;
            }
        }

        
$str_author_list ',enum,0,'.getsetting('teamname','Drachenserver-Team').','.$Char->acctid.','.$Char->login;

        
$str_type_list ',radio,0,Ohne Umfrage,1,Mit Umfrage';

        
$str_group_list ',enum';
        foreach (
$arr_groups as $key=>$arr_group)
        {
            
$str_group_list .= ','.$key.','.$arr_group[1];
        }

        
$arr_form = array(
            
'motditem'=>',hidden',
            
'motdauthor'=>'Autor:'.$str_author_list,
            
'motdtitle'=>'Titel:',
            
'motdbody'=>'Inhalt:`n,textarea,35,8|?BBCode Style URLs werden zu korrekten Links umgeformt: [url=http://www.atrahor.de]Atrahor[/url] => <a href="http://www.atrahor.de">Atrahor.de</a>',
            
'motdtype'=>'Typ:'.$str_type_list,
            
'motdgroup'=>'Gruppe:'.$str_group_list,
            
'opt'=>'Antwortmöglichkeiten für die Umfrage`n(mit || abtrennen)`n,textarea,35,8',
            
'end_date' => 'Ende der Umfrage|?Es wird ein gültiges PHP Date Format erwartet z.B. NOW + 2 days oder im Format YYYY-MM-DD HH:MM:SS',
        );
        
$arr_data = array(
            
'motditem'=>$int_id,
            
'motdauthor'=>($int_author?$int_author:$Char->acctid),
            
'motdtitle'=>$str_title,
            
'motdbody'=>$str_body,
            
'motdtype'=>$int_type,
            
'motdgroup'=>$int_group,
            
'opt'=>$str_opt,
            
'end_date' => $str_enddate?$str_enddate:date('Y-m-d H:i:s',strtotime("NOW +2 days"))
        );

        if (
$int_item 0)
        {
            
$sql 'SELECT * FROM motd WHERE motditem='.$int_item;
            
$arr_motd db_fetch_assoc(db_query($sql));

            
//Falls es eine Umfrage ist
            
if ($arr_motd['motdtype'] == 1)
            {
                
// Umfrage vorhanden
                
$arr_body unserialize($arr_motd['motdbody']);
                
$arr_motd['motdbody'] = $arr_body['body'];
                
$arr_motd['opt'] = implode('||',$arr_body['opt']);
                
$arr_motd['end_date'] = date('Y-m-d H:i:s',strtotime($arr_body['end_date']));
            }

            
$arr_motd['motdbody'] = str_replace('<br />','',$arr_motd['motdbody']);

            
$arr_form['newmotd'] = 'MoTD als neu markieren:,bool';
            
$arr_data['newmotd'] = 0;

            
$arr_form['motdauthor'] .= ',-1,~ Keine Änderung ~';
            
$arr_motd['motdauthor'] = -1;

            
$arr_data array_merge($arr_data,$arr_motd);
        }

        
$str_output .= form_header($str_filename.'?op=edit&act=save');

        
//Ausgabe des Formulars, farbtags werden escaped
        
$str_output .= str_replace('`','``',generateform($arr_form,$arr_data,false,'Veröffentlichen!'));

        
$str_output .= form_footer();

        break;

    case 
'del':

        if (
$access_control->su_check(access_control::SU_RIGHT_MOTD))
        {
            
$sql "
            DELETE FROM
                `motd`
            WHERE
                `motditem`    = '"
.(int)$_GET['id']."'
            "
;
            
db_query($sql);

            
$sql "
            DELETE FROM
                `pollresults`
            WHERE
                `motditem`    = '"
.(int)$_GET['id']."'
            "
;
            
db_query($sql);

            
header('Location: motd.php');
            exit();
        }

        break;

    default:

        
$last_motddate '0000-00-00 00:00:00';
        
$per_page 10;

        
$str_output .= '`&';
        if (
getsetting('rss_enable_motd_feed',false) == true)
        {
            
$str_rss_header '<img src="images/rss/feed_icon.gif" align="left" />RSS Feed';
            
$str_rss_html '
            Diese Nachrichten werden auch von einem Herold verkündet.
            <link rel="alternate" type="application/rss+xml"
            title="RSS" href="'
.getsetting('server_address','http://www.atrahor.de').'/rss/motd.xml" />
            '
;
            
$str_output .= motditem($str_rss_header,$str_rss_html);
        }

        if(
$Char instanceof CCharacter )
        {
            
$sql_where ' WHERE (motdgroup=0 OR motdgroup='.$Char->superuser.' OR ('.$Char->superuser .'>0 AND motdgroup='.MOTDGROUP_ALL.'))' ;
        }
        else
        {
            
$sql_where ' WHERE (motdgroup = 0)' ;
        }

        
//Suche speichern
        
$arr_nav_vars persistent_nav_vars(array('search'));
        
        if(!
is_null_or_empty($arr_nav_vars['search']))
        {
            
$arr_nav_vars['search']=str_replace('"','',stripslashes($arr_nav_vars['search']));
            
$search=db_real_escape_string($arr_nav_vars['search']);
            
$sql_where .= ' AND (motdbody LIKE "%'.$search.'%" OR motdtitle LIKE "%'.$search.'%")';
        }

        
$sql 'SELECT COUNT(*) AS anzahl FROM motd';
        
$res db_query($sql);
        
$nr db_fetch_assoc($res);

        
$pagecount ceil($nr['anzahl']/$per_page);
        
$page = ($_POST['page'])?$_POST['page']:1;
        
$from = ($page-1) * $per_page;
        
$select form_header($str_filename).'
        -&#8212; MotD-Archiv: <select name="page" size="1" onChange="this.form.submit();">'
;

        for (
$i=1$i<=$pagecount$i++)
        {
            
$select .= '<option value="'.$i.'" '.(($page==$i)?'selected="selected"':'').'>Seite '.$i.'</option>';
        }
        
$select .= '</select>  &#8212;-
        <input type="hidden" name="search" value="'
.$_POST['search'].'"> </form>';

        
$sql "
            SELECT
                `m`.*,
                `a`.`login`
            FROM
                `motd` `m`
            LEFT JOIN `accounts` `a` ON
                `a`.`acctid`     = `m`.`motdauthor`
                "
.$sql_where."
            ORDER BY
                `m`.`motddate`     DESC
            LIMIT
                "
.$from.",".$per_page;

        
$result db_query($sql);

        
$last_motddate 0;
        while (
$row db_fetch_assoc($result))
        {
            if (
$last_motddate $row['motddate'])
            {
                
$last_motddate $row['motddate'];
            }

            
$author '`&'.($row['login'] != '' $row['login'] : getsetting('teamname','Drachenserver-Team')).' :';

            
$str_subj $row['motdtitle']
            .(
$access_control->su_check(access_control::SU_RIGHT_MOTD)?
            
" [<a href='motd.php?op=del&id=".$row['motditem']."' onClick=\"return confirm('Bist du sicher, dass dieser Eintrag gelöscht werden soll?');\">Del</a>]
            [<a href='motd.php?op=edit&motditem="
.$row['motditem']."'>Edit</a>] "
            
:"");
            if (!
$row['motdtype'])
            {
                
$str_body '`3'.$row['motdbody'];
                
$str_output .= motditem($str_subj,$str_body,$row['motdgroup'],$row['motddate'],$author);
            }
            else
            {
                
$str_body $row['motdbody'];
                
$str_output .= pollitem($row['motditem'],$str_subj,$str_body,$row['motdgroup'],$row['motddate'],$author);
            }
        }
        
        
//Die blöde Betameldung ist nervig
        //$str_output .= '`&';
        //$str_output .= motditem('Beta!','Dieses Spiel ist im Beta-Status! Wir basteln an der Dragonslayer-Edition, wenn wir Zeit haben und versuchen, das Spiel so bugfrei wie möglich zu halten. Das ist KEIN Freibrief zum Ausnutzen von Bugs, sondern alle Spieler (Teilnehmer am Beta-Test) sind verpflichtet, gefundene Fehler zu melden! Wünsche und Anregungen werden ebenfalls jederzeit gerne angenommen. : )');
        
        
$str_output .= '`c'.$select.'`c';

        if(
$Char instanceof CCharacter)
        {
            
$str_output .= form_header($str_filename).'
            `n`c-&#8212; Stichwort: <input type="text" name="search" value="'
.$arr_nav_vars['search'].'">
            <input type="submit" class="button" value="Suchen"> &#8212;-`c'
;
            
$str_output .= form_footer();
        }

        if ((isset(
$session['needtoviewmotd']) && $session['needtoviewmotd'] === true) || $Char->lastmotd == '0000-00-00 00:00:00')
        {
            
$session['needtoviewmotd']     = false;
            
$Char->lastmotd $last_motddate;
            
saveuser();
        }
        
$chat=true;
        break;
}

output($str_output);
if(
$chat==true && $session['user']['loggedin']==true)
    
viewcommentary('motd','Diskutieren:',20,'sagt',false,true,false,false,true);
popup_footer(false);
?>
0.9.7(DS V3) Ithil-Edition