Autor |
Thema: Addon: Freeze |
| Torsten |
|
|
NEW
Clan: maxlan
Postings: 29
|
Da am Wochenende wieder ein Event ansteht, ist mir aufgefallen was fehlt: Ein Knopf mit dem man sämtliche Turnier-Anmeldungen, den Cateringverkauf und die Sitzplan-Anmeldephase beenden kann.
Warum? Damit ich ein Dump der DB ziehen kann (für die LAN) und ab dann (per Knopfdruck) keine wichtigen Sachen mehr im Internet passieren können. D.h. nach dem Knopfdruck kann sich niemand mehr im Internet an einem Turnier anmelden und wundern, warum er auf der LAN nicht angemeldet ist.
In der Config gibts zwar ein Readonly, aber das klang irgendwie böse - und Kommentare etc können ja ruhig weiterlaufen.
Außerdem müsste ich eigentlich lernen .. aber die Wohnung ist schon sauber, deswegen brauchte ich eine andere Ausrede
Ich hab das ganze erstmal als Dotlan-Addon geschrieben. Einfach einen Ordner namens "freeze" erstellen und eine index.php mit folgendem Inhalt:
Code: | <?php
############################################################
# Freeze-Button Modul for dotlan #
# #
# Copyright (C) 2010 Torsten Amshove <torsten@amshove.net> #
############################################################
include_once("../global.php");
$PAGE->sitetitle = $PAGE->htmltitle = _("Freeze");
if($ADMIN->check(ADMIN_USER)){
$output .= "<br>";
if($_POST["submit"]){
$output .= "<b>Führe freeze aus:<br>";
$event_id = mysql_real_escape_string($_POST["event_id"]);
if($_POST["sitzplan"] == 1){
$DB->query("UPDATE events SET seatreserveend = '".date("Y-m-d H:i:s",time())."' WHERE id = '".$event_id."' LIMIT 1");
$output .= " - Sitzplan-Anmeldung Ende auf JETZT gesetzt.<br>";
}
if($_POST["turniere"] == 1){
$DB->query("UPDATE t_turnier SET topen = 0 WHERE teventid = '".$event_id."'");
$output .= " - Alle Turnieranmeldungen gestoppt.<br>";
}
if($_POST["catering"] == 1){
$DB->query("UPDATE catering_groups SET active = 0");
$output .= " - Alle Catering Artikelgruppen versteckt.<br>";
}
$output .= "</b><br><br>";
}
$res = $DB->query("SELECT id, name FROM events ORDER BY id");
$output .= "<form action='index.php' method='POST'>";
$output .= "<select name='event_id'>";
while($data = $DB->fetch_array($res)){
$output .= "<option value='".$data["id"]."'";
if($data["id"] == $EVENT->next) $output .= " selected ";
$output .= ">".$data["name"]."</option>";
}
$output .= "</select><br>";
$output .= "<input type='checkbox' name='sitzplan' value='1'> Sitzplan-Anmeldung Ende auf JETZT setzen.<br>";
$output .= "<input type='checkbox' name='turniere' value='1' checked> Turnieranmeldungen stoppen.<br>";
$output .= "<input type='checkbox' name='catering' value='1' checked> Catering Artikelgruppen verstecken.<br>";
$output .= "<input type='submit' name='submit' value='Ausführen'>";
$output .= "</form>";
}
$PAGE->render($output);
?> |
Wenn man das Modul aufruft (geht nur als Admin) gibts ne Drop-Down Box mit den Events (nächstes automatisch ausgewählt) und eine Auswahl, ob man die Sitzplan-Ende-Zeit auf jetzt ändern will, alle Turnieranmeldungen schließen will und/oder alle Catering Artikelgruppen deaktivieren will.
Einen DB-Dump hab ich nicht mit eingebaut, den gibts schon im support-Tool und in phpmyadmin. Könnte man vllt. für uns faule Admins noch irgendwann mit einbauen.
Gibt es eine Möglichkeit das Ding ins support-Tool zu integrieren? Dann wäre es schonmal näher an ner Dump-Funktion dran.
Fällt euch noch was auf, was man aufnehmen sollte?
__________________
www.maxlan.de
|
| Bigga |
|
|
NEW
Clan: KST-LAN
Postings: 418
|
Sauber
|
| Torsten |
|
|
NEW
Clan: maxlan
Postings: 29
|
Hab noch etwas hinzugefügt. Mit ner extra Option kann man nun auch die Turniere aufräumen und von der LAN abgemeldete User aus den Turnieren schmeißen (siehe Fehler: http://www.dotlan.net/de/forum/thread/1015/)
Hier der neue Code (komplett - einfach die index.php komplett ersetzen):
Code: | <?php
############################################################
# Freeze-Button Modul for dotlan #
# #
# Copyright (C) 2010 Torsten Amshove <torsten@amshove.net> #
############################################################
include_once("../global.php");
$PAGE->sitetitle = $PAGE->htmltitle = _("Freeze");
if($ADMIN->check(ADMIN_USER)){
$output .= "<br>";
if($_POST["submit"]){
$output .= "<b>Führe freeze aus:<br>";
$event_id = mysql_real_escape_string($_POST["event_id"]);
if($_POST["sitzplan"] == 1){
$DB->query("UPDATE events SET seatreserveend = '".date("Y-m-d H:i:s",time())."' WHERE id = '".$event_id."' LIMIT 1");
$output .= " - Sitzplan-Anmeldung Ende auf JETZT gesetzt.<br>";
}
if($_POST["turniere"] == 1){
$DB->query("UPDATE t_turnier SET topen = 0 WHERE teventid = '".$event_id."'");
$output .= " - Alle Turnieranmeldungen gestoppt.<br>";
}
if($_POST["turnier_abmeldung"] ==1){
$query = $DB->query("SELECT p.tnid AS tnid, p.user_id AS user_id
FROM `t_teilnehmer` AS n, t_turnier AS t, t_teilnehmer_part AS p
WHERE n.tid = t.tid
AND t.teventid = '".$event_id."'
AND p.tnid = n.tnid
AND p.user_id NOT IN (SELECT user_id FROM event_teilnehmer WHERE event_id = '".$event_id."')");
$tnids = array();
$userids = array();
while($data = $DB->fetch_array($query)){
if(!in_array($data["tnid"],$tnids)) $tnids[] = $data["tnid"];
if(!in_array($data["user_id"],$userids)) $userids[] = $data["user_id"];
$DB->query("DELETE FROM t_teilnehmer_part WHERE tnid = '".$data["tnid"]."' AND user_id = '".$data["user_id"]."' LIMIT 1");
}
foreach($tnids as $tnid){
$DB->query("DELETE FROM t_teilnehmer WHERE tnid = '".$tnid."' AND tnanz = 1");
$data = $DB->query_first("SELECT tnid FROM t_teilnehmer WHERE tnid = '".$tnid."' AND tnleader IN (".implode(",",$userids).")");
if(!empty($data["tnid"])){
$query = $DB->query("SELECT user_id FROM t_teilnehmer_part WHERE tnid = '".$tnid."'");
if($DB->num_rows($query) > 0){
$new_tnleader = mysql_result($query,0,'user_id');
$DB->query("UPDATE t_teilnehmer SET tnleader = '".$new_tnleader."' WHERE tnid = '".$tnid."' LIMIT 1");
}else{
$DB->query("DELETE FROM t_teilnehmer WHERE tnid = '".$tnid."' LIMIT 1");
}
}
}
$output .= " - Abgemeldete User aus Turnieren gelöscht. WICHTIG: unter <a href='/admin/support'>/admin/support</a> den Cache leeren!<br>";
}
if($_POST["catering"] == 1){
$DB->query("UPDATE catering_groups SET active = 0");
$output .= " - Alle Catering Artikelgruppen versteckt.<br>";
}
$output .= "</b><br><br>";
}
$res = $DB->query("SELECT id, name FROM events ORDER BY id");
$output .= "<form action='index.php' method='POST'>";
$output .= "<select name='event_id'>";
while($data = $DB->fetch_array($res)){
$output .= "<option value='".$data["id"]."'";
if($data["id"] == $EVENT->next) $output .= " selected ";
$output .= ">".$data["name"]."</option>";
}
$output .= "</select><br>";
$output .= "<input type='checkbox' name='sitzplan' value='1'> Sitzplan-Anmeldung Ende auf JETZT setzen.<br>";
$output .= "<input type='checkbox' name='turniere' value='1' checked> Turnieranmeldungen stoppen.<br>";
$output .= "<input type='checkbox' name='turnier_abmeldung' value='1' checked> Abgemeldete User aus Turnieren löschen.<br>";
$output .= "<input type='checkbox' name='catering' value='1' checked> Catering Artikelgruppen verstecken.<br>";
$output .= "<input type='submit' name='submit' value='Ausführen'>";
$output .= "</form>";
}
$PAGE->render($output);
?> |
__________________
www.maxlan.de
|
| Torsten |
|
|
NEW
Clan: maxlan
Postings: 29
|
Achja: gibts ne möglichkeit, per Script den Cache zu leeren/aktualisieren? Das muss man momentan noch manuell machen, nachdem die Turnier-DB aufgeräumt wurde
__________________
www.maxlan.de
|
| DerMega |
|
|
NEW
Clan: Mitten aus Deutschland e.V.
Postings: 438
|
Hey super. Tolles Script.
Die Möglichkeit des Cacheleerens iss doch in den Supporttools gegeben.
Muss man da ja auch des öfteren nutzen. :o)
|
| Torsten |
|
|
NEW
Clan: maxlan
Postings: 29
|
das sind aber wieder unnötige klicks
__________________
www.maxlan.de
|
| Bigga |
|
|
NEW
Clan: KST-LAN
Postings: 418
|
Torsten hat folgendes geschrieben: | Achja: gibts ne möglichkeit, per Script den Cache zu leeren/aktualisieren? Das muss man momentan noch manuell machen, nachdem die Turnier-DB aufgeräumt wurde |
Ich glaub zwar ich versteh dich falsch, aber trotzdem ^^
Wenn du den Cache löschen willst musst du den Inhalt des entsprechenden Ordners im Webspace / im Intranet löschen.
|
| Torsten |
|
|
NEW
Clan: maxlan
Postings: 29
|
ich dachte eher an eine Funktion, die man mit dem Script ausführen kann.
__________________
www.maxlan.de
|
| Sorehead |
|
|
NEW
Clan: Gamesession Hannover
Postings: 348
|
*push* hat das jemand mal mit der aktuellen Version getestet? Ich bekomme folgende Fehlermeldung:
Code: |
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /www/htdocs/w00b6477/addons/freeze/index.php:1) in /www/htdocs/w00b6477/includes/class.session.php on line 121
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w00b6477/addons/freeze/index.php:1) in /www/htdocs/w00b6477/includes/class.page.php on line 238
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w00b6477/addons/freeze/index.php:1) in /www/htdocs/w00b6477/includes/class.page.php on line 239
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w00b6477/addons/freeze/index.php:1) in /www/htdocs/w00b6477/includes/class.page.php on line 240
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w00b6477/addons/freeze/index.php:1) in /www/htdocs/w00b6477/includes/class.page.php on line 385
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w00b6477/addons/freeze/index.php:1) in /www/htdocs/w00b6477/includes/class.page.php on line 247
|
|
| Sorehead |
|
|
NEW
Clan: Gamesession Hannover
Postings: 348
|
Verdammte Leerzeichen
|
| Sorehead |
|
|
NEW
Clan: Gamesession Hannover
Postings: 348
|
Habe das Skript mal ein wenig für unseren Bedarf erweitert. Unter anderem um diese Geschichte der nicht ANWESENDEN User: http://www.dotlan.net/de/forum/thread/1029/
|
[ Antwort erstellen ] |