diff --git a/admin/modules/tools/inplaytracker.php b/admin/modules/tools/inplaytracker.php new file mode 100644 index 0000000000000000000000000000000000000000..640b477683acbe383781609654d49026393e2d29 --- /dev/null +++ b/admin/modules/tools/inplaytracker.php @@ -0,0 +1,374 @@ +
Please make sure IN_MYBB is defined."); +} + +$page->add_breadcrumb_item("Inplaytracker - Administration", "index.php?module=tools-inplaytracker"); + +// Inaktive Szenen seit x Tagen finden +if(!$mybb->input['action']) +{ + // Zeit-Filter erstelen + $time = TIME_NOW; + $time = date("d.m.Y", $time); + $days = $mybb->get_input('days'); + if(empty($days)) { + $days = 30; + } + + // Szenen auslesen + $ipforum = $mybb->settings['inplaytracker_forum']; + $filter = strtotime("$time - $days days"); + $query = $db->query("SELECT * FROM ".TABLE_PREFIX."threads + LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."threads.fid = ".TABLE_PREFIX."forums.fid + WHERE parentlist LIKE '%$ipforum%' + AND ".TABLE_PREFIX."threads.lastpost < '$filter' + ORDER BY ".TABLE_PREFIX."threads.lastpost ASC"); + + // Navigation erstellen + $page->output_header("Inplaytracker Administration"); + + $sub_tabs['inplaytracker'] = array( + 'title' => "Inaktive Szenen", + 'link' => "index.php?module=tools-inplaytracker", + 'description' => "Finde Szenen die seit $days Tagen inaktiv sind." + ); + + $sub_tabs['inplaytracker_deleted'] = array( + 'title' => "Szenen mit inaktiven Mitgliedern", + 'link' => "index.php?module=tools-inplaytracker&action=find-deleted", + 'description' => "Finde Szenen mit inaktiven Charakteren." + ); + + $sub_tabs['inplaytracker_update'] = array( + 'title' => "Plugin updaten", + 'link' => "index.php?module=tools-inplaytracker&action=update", + 'description' => "Inplaytracker auf die neueste Version updaten." + ); + + $page->output_nav_tabs($sub_tabs, 'inplaytracker'); + + // Formular & Tabelle generieren + $form = new Form("index.php?module=tools-inplaytracker", "post"); + $form_container = new FormContainer("Inaktive Szenen"); + + $form_container->output_row_header("Filter"); + $form_container->output_row_header("Suchen"); + + $html_filters = " +
+
+ +
+ "; + $form_container->output_cell($html_filters); + $form_container->output_cell("
".$form->generate_submit_button("Szenen suchen", array("name" => "filter_scenes"))."
"); + + $form_container->construct_row(); + $form_container->end(); + + // Szenen auflisten + $form_container = new FormContainer(Szenen); + $i = 0; + while($scenes = $db->fetch_array($query)) { + $parentlist = ",".$scenes['parentlist'].","; + if(preg_match("/,$ipforum,/i", $parentlist)) { + $form_container->output_cell("settings['bburl']}/showthread.php?tid={$scenes['tid']}\" target=\"blank\">{$scenes['subject']}"); + $form_container->construct_row(); + $i++; + } + } + // Keine inaktiven Szenen? + if($i == 0) { + $form_container->output_cell("Keine inaktiven Szenen gefunden!"); + $form_container->construct_row(); + } + $form_container->end(); + $form->end(); + $page->output_footer(); +} + +// Szenen mit inaktiven Charakteren finden +if($mybb->input['action'] == "find-deleted") +{ + + // Navigation erstellen + $page->output_header("Inplaytracker Administration"); + + $sub_tabs['inplaytracker'] = array( + 'title' => "Inaktive Szenen", + 'link' => "index.php?module=tools-inplaytracker", + 'description' => "Finde Szenen die seit $days Tagen inaktiv sind." + ); + + $sub_tabs['inplaytracker_deleted'] = array( + 'title' => "Szenen mit inaktiven Mitgliedern", + 'link' => "index.php?module=tools-inplaytracker&action=find-deleted", + 'description' => "Finde Szenen mit inaktiven Charakteren." + ); + + $sub_tabs['inplaytracker_update'] = array( + 'title' => "Plugin updaten", + 'link' => "index.php?module=tools-inplaytracker&action=update", + 'description' => "Inplaytracker auf die neueste Version updaten." + ); + + $page->output_nav_tabs($sub_tabs, 'inplaytracker_deleted'); + + // Formular & Tabelle generieren + $form = new Form("index.php?module=tools-inplaytracker&action=find-deleted", "post"); + $form_container = new FormContainer("Szenen mit inaktiven Mitgliedern"); + + $form_container = new FormContainer(Szenen); + $i = 0; + // Szenen auslesen + $ipforum = $mybb->settings['inplaytracker_forum']; + $query = $db->query("SELECT * FROM ".TABLE_PREFIX."threads + LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."threads.fid = ".TABLE_PREFIX."forums.fid + WHERE parentlist LIKE '%$ipforum%' + ORDER BY tid ASC"); + // Szenen auflisten + while($scenes = $db->fetch_array($query)) { + $parentlist = ",".$scenes['parentlist'].","; + if(preg_match("/,$ipforum,/i", $parentlist)) { + $partners = explode(",", $scenes['partners']); + foreach($partners as $partner) { + $user = get_user($partner); + if(empty($user)) { + $form_container->output_cell("settings['bburl']}/showthread.php?tid={$scenes['tid']}\" target=\"blank\">{$scenes['subject']}"); + $form_container->construct_row(); + $i++; + } + } + } + } + // Keine inaktiven Szenen? + if($i == 0) { + $form_container->output_cell("Keine Szenen gefunden!"); + $form_container->construct_row(); + } + $form_container->end(); + $form->end(); + $page->output_footer(); +} + +// Inplaytracker updaten +if($mybb->input['action'] == "update") +{ + + if($mybb->request_method == "post") { + // Datenbank aktualisieren + if(isset($mybb->input['update_database'])) { + if(!$db->field_exists("iport", "threads")) + { + $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `iport` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `ipdate`;"); + } + if(!$db->field_exists("iport", "posts")) + { + $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `iport` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `ipdate`;"); + } + if(!$db->field_exists("ipdaytime", "threads")) + { + $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `ipdaytime` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `iport`;"); + } + if(!$db->field_exists("ipdaytime", "posts")) + { + $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `ipdaytime` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `iport`;"); + } + if(!$db->field_exists("openscene", "threads")) + { + $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `openscene` int(11) NOT NULL DEFAULT '-1';"); + } + if(!$db->field_exists("openscene", "posts")) + { + $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `openscene` int(11) NOT NULL DEFAULT '-1';"); + } + if(!$db->field_exists("postorder", "threads")) + { + $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `postorder` int(11) NOT NULL DEFAULT '1';"); + } + if(!$db->field_exists("postorder", "posts")) + { + $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `postorder` int(11) NOT NULL DEFAULT '1';"); + } + } + + // ACP Einstellungen aktualisieren + if(isset($mybb->input['update_settings'])) { + $gid = $db->fetch_field($db->query("SELECT gid FROM ".TABLE_PREFIX."settinggroups WHERE name = 'inplaytracker'"), "gid"); + $setting_array = + array( + 'inplaytracker_location' => array( + 'title' => 'Ort-Feld hinzufügen?', + 'description' => 'Sollen User ein Feld ausfüllen können, in dem siie zusätzlich den Spielort angeben können?', + 'optionscode' => 'yesno', + 'value' => 1, + 'disporder' => 3 + ), + 'inplaytracker_daytime' => array( + 'title' => 'Tageszeit-Feld hinzufügen?', + 'description' => 'Sollen User ein Feld ausfüllen können, in dem siie zusätzlich die Tageszeit angeben können?', + 'optionscode' => 'yesno', + 'value' => 0, + 'disporder' => 4 + ), + 'inplaytracker_timeformat' => array( + 'title' => 'Eigene Zeitrechnung nutzen?', + 'description' => 'Soll das Plugin eine Zeitrechnung abseits vom gregorianischen Kalender nutzen (auch ankreuzen, wenn euer Forum vor 1970 oder nach 2038 spielt!)?', + 'optionscode' => 'yesno', + 'value' => 0, + 'disporder' => 5 + ), + 'inplaytracker_months' => array( + 'title' => 'Monatsnamen', + 'description' => 'Nur bei eigener Zeitrechnung: Welche Monate sollen in deinem Forum auswählbar sein? Besonders interessant für Fantasy- und/oder Fandomforen!', + 'optionscode' => 'text', + 'value' => 'Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember', + 'disporder' => 6 + ), + ); + + foreach($setting_array as $name => $setting) + { + $setting['name'] = $name; + $setting['gid'] = $gid; + $db->insert_query('settings', $setting); + } + + rebuild_settings(); + } + + // Datenbankspalte partners aktualisieren + if(isset($mybb->input['update_partner'])) { + // Szenen auslesen + $ipforum = $mybb->settings['inplaytracker_forum']; + $query = $db->query("SELECT * FROM ".TABLE_PREFIX."threads + WHERE partners != ''"); + while($scenes = $db->fetch_array($query)) { + $partners = explode(", ", $scenes['partners']); + $partners_new = array(); + foreach($partners as $partner) { + $partner = $db->escape_string($partner); + $user_id = $db->fetch_field($db->query("SELECT uid FROM ".TABLE_PREFIX."users WHERE username = '$partner'"), "uid"); + $partners_new[] = $user_id; + } + $partners_new = implode(",", $partners_new); + $new_record = array( + "partners" => $partners_new + ); + $db->update_query("threads", $new_record, "tid = '$scenes[tid]'"); + } + } + + // Datenbankspalte ipdate aktualisieren + if(isset($mybb->input['update_date'])) { + $ipforum = $mybb->settings['inplaytracker_forum']; + $query = $db->query("SELECT * FROM ".TABLE_PREFIX."threads + WHERE ipdate != ''"); + while($scenes = $db->fetch_array($query)) { + $ipdate = explode(" ", $scenes['ipdate']); + $months = array( + "january" => "Januar", + "february" => "Februar", + "march" => "März", + "april" => "April", + "may" => "Mai", + "june" => "Juni", + "july" => "Juli", + "august" => "August", + "september" => "September", + "october" => "Oktober", + "november" => "November", + "december" => "Dezember" + ); + $ipdate['1'] = array_search($ipdate['1'], $months); + $ipdate = implode(" ", $ipdate); + $ipdate = strtotime($ipdate); + $new_record = array( + "ipdate" => $ipdate + ); + $db->update_query("threads", $new_record, "tid = '$scenes[tid]'"); + } + } + + if(isset($mybb->input['update_alerts'])) { + if(class_exists('MybbStuff_MyAlerts_AlertTypeManager')) { + $alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::getInstance(); + + if (!$alertTypeManager) { + $alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::createInstance($db, $cache); + } + + $alertType = new MybbStuff_MyAlerts_Entity_AlertType(); + $alertType->setCode('inplaytracker_newthread'); // The codename for your alert type. Can be any unique string. + $alertType->setEnabled(true); + $alertType->setCanBeUserDisabled(true); + + $alertTypeManager->add($alertType); + + $alertType = new MybbStuff_MyAlerts_Entity_AlertType(); + $alertType->setCode('inplaytracker_newreply'); // The codename for your alert type. Can be any unique string. + $alertType->setEnabled(true); + $alertType->setCanBeUserDisabled(true); + + $alertTypeManager->add($alertType); + } + } + } + + // Navigation erstellen + $page->output_header("Inplaytracker Administration"); + + $sub_tabs['inplaytracker'] = array( + 'title' => "Inaktive Szenen", + 'link' => "index.php?module=tools-inplaytracker", + 'description' => "Finde Szenen die seit $days Tagen inaktiv sind." + ); + + $sub_tabs['inplaytracker_deleted'] = array( + 'title' => "Szenen mit inaktiven Mitgliedern", + 'link' => "index.php?module=tools-inplaytracker&action=find-deleted", + 'description' => "Finde Szenen mit inaktiven Charakteren." + ); + + $sub_tabs['inplaytracker_update'] = array( + 'title' => "Plugin updaten", + 'link' => "index.php?module=tools-inplaytracker&action=update", + 'description' => "Inplaytracker auf die neueste Version updaten." + ); + + $page->output_nav_tabs($sub_tabs, 'inplaytracker_update'); + + // Optionen generieren + $form = new Form("index.php?module=tools-inplaytracker&action=update", "post"); + $form_container = new FormContainer("Inplaytracker updaten"); + $form_container = new FormContainer("Plugin aktualisieren"); + $form_container->output_row_header("Status"); + $form_container->output_row_header("Update"); + // Datenbank aktualisieren + $form_container->output_cell("Datenbankmodifizierungen"); + $form_container->output_cell("
".$form->generate_submit_button("Datenbank updaten", array("name" => "update_database"))."
"); + $form_container->construct_row(); + // Admin CP Settings hinzufügen + $form_container->output_cell("Admin CP Einstellungen aktualisieren"); + $form_container->output_cell("
".$form->generate_submit_button("Einstellungen aktualisieren", array("name" => "update_settings"))."
"); + $form_container->construct_row(); + // Datenbankspalte "partners" aktualisieren + $form_container->output_cell("Charakternamen in User-ID umwandeln"); + $form_container->output_cell("
".$form->generate_submit_button("Postingpartner aktualisieren", array("name" => "update_partner"))."
"); + $form_container->construct_row(); + // Datenbankspalte "ipdate" aktualisieren + $form_container->output_cell("Datum in Zeitstempel umwandeln
Voraussetzung ist die Formatierung Tag Monat Jahr für das ursprüngliche Datum!"); + $form_container->output_cell("
".$form->generate_submit_button("Datum aktualisieren", array("name" => "update_date"))."
"); + $form_container->construct_row(); + // MyAlerts-Integration anlegen + $form_container->output_cell("Alert-Types anlegen
Nur, wenn MyAlerts nach dem Tracker installiert wurde!"); + $form_container->output_cell("
".$form->generate_submit_button("Alert Types anlegen", array("name" => "update_alerts"))."
"); + $form_container->construct_row(); + $form_container->end(); + $form->end(); + $page->output_footer(); +} + +?>