From e738144737dd4bef3115f1e7a1e647d3edf9f5b6 2017-10-25 00:05:06 From: Julia Date: 2017-10-25 00:05:06 Subject: [PATCH] Update inplaytracker.php --- diff --git a/inc/plugins/inplaytracker.php b/inc/plugins/inplaytracker.php index 4f507375ffb123143d36f1a67843b54138a7c87e..18341701698b43efb3d970849da7f8ed517ddc17 100644 --- a/inc/plugins/inplaytracker.php +++ b/inc/plugins/inplaytracker.php @@ -12,10 +12,17 @@ $plugins->add_hook("editpost_do_editpost_end", "inplaytracker_do_editpost"); $plugins->add_hook("newreply_do_newreply_end", "inplaytracker_do_newreply"); $plugins->add_hook("forumdisplay_thread_end", "inplaytracker_forumdisplay"); $plugins->add_hook("misc_start", "inplaytracker_misc"); +if (class_exists('MybbStuff_MyAlerts_AlertTypeManager')) { + $plugins->add_hook("global_start", "inplaytracker_alerts"); +} $plugins->add_hook("global_intermediate", "inplaytracker_global"); $plugins->add_hook("member_profile_end", "inplaytracker_profile"); $plugins->add_hook("usercp_do_options_end", "inplaytracker_usercp_options"); $plugins->add_hook("usercp_options_start", "inplaytracker_usercp"); +$plugins->add_hook("showthread_start", "inplaytracker_showthread"); + +$plugins->add_hook("admin_tools_menu", "inplaytracker_tools_menu"); +$plugins->add_hook("admin_tools_action_handler", "inplaytracker_tools_action_handler"); function inplaytracker_info() @@ -23,10 +30,10 @@ function inplaytracker_info() return array( "name" => "Inplaytracker", "description" => "Eintragen von Postpartnern in eine Szene, PN-Benachrichtigung bei neuen Szenen/Posts & Komplette Übersicht offener Szenen.", - "website" => "http://www.storming-gates.de", + "website" => "https://github.com/its-sparks-fly", "author" => "sparks fly", - "authorsite" => "http://www.storming-gates.de", - "version" => "1.0", + "authorsite" => "https://github.com/its-sparks-fly", + "version" => "2.0", "compatibility" => "*" ); } @@ -35,56 +42,265 @@ function inplaytracker_install() { global $db, $mybb; + 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); + } + // Tabellen erstellen $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `partners` VARCHAR(1155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `attachmentcount`;"); $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `partners` VARCHAR(1155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `visible`;"); $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `ipdate` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `partners`;"); $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `ipdate` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `partners`;"); - $db->query("ALTER TABLE `".TABLE_PREFIX."users` ADD `inplaytrackerpm` int(11) NOT NULL DEFAULT '1';"); + $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `iport` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `ipdate`;"); + $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `iport` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `ipdate`;"); + $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `ipdaytime` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `iport`;"); + $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `ipdaytime` VARCHAR(155) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `iport`;"); + $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `openscene` int(11) NOT NULL DEFAULT '-1';"); + $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `openscene` int(11) NOT NULL DEFAULT '-1';"); + $db->query("ALTER TABLE `".TABLE_PREFIX."threads` ADD `postorder` int(11) NOT NULL DEFAULT '1';"); + $db->query("ALTER TABLE `".TABLE_PREFIX."posts` ADD `postorder` int(11) NOT NULL DEFAULT '1';"); // Einstellungen $setting_group = array( - 'name' => 'inplaytracker', - 'title' => 'Inplaytracker', - 'description' => 'Einstellungen für das Inplaytracker-Plugin', - 'disporder' => 5, // The order your setting group will display - 'isdefault' => 0 + 'name' => 'inplaytracker', + 'title' => 'Inplaytracker', + 'description' => 'Einstellungen für das Inplaytracker-Plugin', + 'disporder' => 5, // The order your setting group will display + 'isdefault' => 0 ); $gid = $db->insert_query("settinggroups", $setting_group); - $setting_array = array( - 'inplaytracker_forum' => array( - 'title' => 'Inplay-Kategorie', - 'description' => 'Gib die ID deiner Inplay-Kategorie an.', - 'optionscode' => 'text', - 'value' => '998', // Default - 'disporder' => 1 - ), - 'inplaytracker_archiv' => array( - 'title' => 'Archiv-Forum', - 'description' => 'Gib die ID deines Inplay-Archivs an.', - 'optionscode' => 'text', - 'value' => '999', // Default - 'disporder' => 2 - ), + $setting_array = + array( + 'inplaytracker_forum' => array( + 'title' => 'Inplay-Kategorie', + 'description' => 'Gib die ID deiner Inplay-Kategorie an.', + 'optionscode' => 'text', + 'value' => '998', // Default + 'disporder' => 1 + ), + 'inplaytracker_archiv' => array( + 'title' => 'Archiv-Forum', + 'description' => 'Gib die ID deines Inplay-Archivs an.', + 'optionscode' => 'text', + 'value' => '999', // Default + 'disporder' => 2 + ), + '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; + $setting['name'] = $name; + $setting['gid'] = $gid; + $db->insert_query('settings', $setting); + } - $db->insert_query('settings', $setting); + rebuild_settings(); + +} +function inplaytracker_is_installed() +{ + global $db; + if($db->field_exists("partners", "threads")) + { + return true; } + return false; +} - $insert_array = array( - 'title' => 'newthread_ip_partners', +function inplaytracker_uninstall() +{ + global $db; + + if (class_exists('MybbStuff_MyAlerts_AlertTypeManager')) { + $alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::getInstance(); + + if (!$alertTypeManager) { + $alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::createInstance($db, $cache); + } + + $alertTypeManager->deleteByCode('inplaytracker_newthread'); + $alertTypeManager->deleteByCode('inplaytracker_newreply'); + } + + // Tabellen entfernen + if($db->field_exists("partners", "threads")) + { + $db->drop_column("threads", "partners"); + } + if($db->field_exists("partners", "posts")) + { + $db->drop_column("posts", "partners"); + } + if($db->field_exists("ipdate", "threads")) + { + $db->drop_column("threads", "ipdate"); + } + if($db->field_exists("ipdate", "posts")) + { + $db->drop_column("posts", "ipdate"); + } + if($db->field_exists("iport", "threads")) + { + $db->drop_column("threads", "iport"); + } + if($db->field_exists("iport", "posts")) + { + $db->drop_column("posts", "iport"); + } + if($db->field_exists("ipdaytime", "threads")) + { + $db->drop_column("threads", "ipdaytime"); + } + if($db->field_exists("ipdaytime", "posts")) + { + $db->drop_column("posts", "ipdaytime"); + } + if($db->field_exists("openscene", "threads")) + { + $db->drop_column("threads", "openscene"); + } + if($db->field_exists("openscene", "posts")) + { + $db->drop_column("posts", "openscene"); + } + if($db->field_exists("postorder", "threads")) + { + $db->drop_column("threads", "postorder"); + } + if($db->field_exists("postorder", "posts")) + { + $db->drop_column("posts", "postorder"); + } + + // Einstellungen entfernen + $db->delete_query('settings', "name LIKE '%inplaytracker%'"); + $db->delete_query('settinggroups', "name = 'inplaytracker'"); + + rebuild_settings(); + +} + +function inplaytracker_activate() +{ + global $db, $mybb; + + // Variablen einfügen + include MYBB_ROOT."/inc/adminfunctions_templates.php"; + find_replace_templatesets("newthread", "#".preg_quote('{$loginbox}')."#i", '{$loginbox} {$tracker_partners} {$tracker_date} {$tracker_ort} {$tracker_daytime}'); + find_replace_templatesets("editpost", "#".preg_quote('{$loginbox}')."#i", '{$loginbox} {$tracker_partners} {$tracker_date} {$tracker_ort} {$tracker_daytime}'); + find_replace_templatesets("header", "#".preg_quote('{$menu_calendar}')."#i", '{$menu_calendar} {$menu_inplaytracker} {$tracker_date}'); + find_replace_templatesets("member_profile", "#".preg_quote('{$awaybit}')."#i", '{$awaybit} {$inplaytracker}'); + find_replace_templatesets("member_profile", "#".preg_quote('{$referrals}')."#i", '{$referrals} {$inplaytracker_lastpost}'); + find_replace_templatesets("usercp_options", "#".preg_quote('{$board_style}')."#i", '{$inplaytrackerpm}{$board_style}'); + find_replace_templatesets("showthread", "#".preg_quote('')."#i", '{$inplaytracker}'); + + $insert_array = array( + 'title' => 'newthread_inplaytracker_partners', 'template' => $db->escape_string(' -Postpartner: -Trenne deine Postpartner mit ", " voneinander und füge deinen eigenen Namen nicht mit ein!

Für optimale Funktionsweise, fügst du bei mehreren Postpartnern die Namen in der entsprechenden Postreihenfolge ein.
-'), +{$lang->inplaytracker_partner} +{$lang->inplaytracker_partner_desc} {$lang->inplaytracker_partner_desc_2} + + +{$lang->inplaytracker_settings} + + + + + +'), 'sid' => '-1', 'version' => '', 'dateline' => TIME_NOW @@ -92,10 +308,11 @@ function inplaytracker_install() $db->insert_query("templates", $insert_array); $insert_array = array( - 'title' => 'newthread_ip_date', + 'title' => 'newthread_inplaytracker_date', 'template' => $db->escape_string(' -Inplaydatum: -
Die Angabe des Inplaydatums muss die volle Angabe des Spielmonats ausgeben (deutsch)!
+{$lang->inplaytracker_date} + + '), 'sid' => '-1', 'version' => '', @@ -103,22 +320,46 @@ function inplaytracker_install() ); $db->insert_query("templates", $insert_array); + $insert_array = array( + 'title' => 'newthread_inplaytracker_ort', + 'template' => $db->escape_string(' +{$lang->inplaytracker_location} +
{$lang->inplaytracker_location_desc}
+'), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); + + $insert_array = array( + 'title' => 'newthread_inplaytracker_daytime', + 'template' => $db->escape_string(' + {$lang->inplaytracker_daytime} +
{$lang->inplaytracker_daytime_desc}
+ '), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); + $insert_array = array( 'title' => 'misc_inplaytracker', 'template' => $db->escape_string(' -{$mybb->settings[\'bbname\']} - Inplayszenen +{$mybb->settings[\'bbname\']} - {$lang->inplaytracker} {$headerinclude} {$header} - + @@ -133,22 +374,22 @@ function inplaytracker_install() $db->insert_query("templates", $insert_array); $insert_array = array( - 'title' => 'misc_ip_user', + 'title' => 'misc_inplaytracker_user', 'template' => $db->escape_string('
Inplayszenen{$lang->inplaytracker}
-

{$countgesamt} Szenen insgesamt, {$opengesamt} davon offen!

+

{$countgesamt} {$lang->inplaytracker_all_scenes}, {$opengesamt} {$lang->inplaytracker_open_scenes}

{$scenes_user}
{$scenes_bit} @@ -160,17 +401,17 @@ function inplaytracker_install() $db->insert_query("templates", $insert_array); $insert_array = array( - 'title' => 'misc_ip_bit', + 'title' => 'misc_inplaytracker_bit', 'template' => $db->escape_string(' @@ -181,9 +422,68 @@ function inplaytracker_install() ); $db->insert_query("templates", $insert_array); + $insert_array = array( + 'title' => 'misc_inplaytracker_overview', + 'template' => $db->escape_string(' + +{$mybb->settings[\'bbname\']} - {$lang->inplaytracker} +{$headerinclude} + + +{$header} +
- Szenen von {$username} (insgesamt $countscenes Szenen, an der Reihe in $countactive Szenen) + {$lang->inplaytracker_scenes_by} {$username} ({$lang->inplaytracker_all_scenes} {$countscenes}, {$countactive} {$lang->inplaytracker_open_scenes})
- Nächster Post + {$lang->inplaytracker_next_post} - Szenen-Informationen + {$lang->inplaytracker_scene_information} - Letzter Post + {$lang->inplaytracker_last_post}
{$status} - Charaktere: {$szene[\'partners\']}
- Inplaydatum: {$szene[\'ipdate\']} + {$lang->inplaytracker_characters} {$szene[\'partners\']}
+ {$lang->inplaytracker_date} {$szene[\'ipdate\']}
- {$szene[\'subject\']}
+ {$szene[\'subject\']}
{$szene[\'lastpost\']}
{$szene[\'lastposter\']}
+ + + + + + +
{$lang->inplaytracker}

+ + + + + + + + + + +
{$lang->inplaytracker_order_setting}{$lang->inplaytracker_open_setting}
+

+ + + + + + + + +
+ {$lang->inplaytracker} ({$count_scenes} {$lang->inplaytracker_all_scenes}) +
+ {$scene_bit} +

+
+{$footer} + +'), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); + $insert_array = array( 'title' => 'header_inplaytracker', - 'template' => $db->escape_string('
  • Inplayszenen ({$opengesamt}/{$countgesamt})
  • '), + 'template' => $db->escape_string('
  • {$lang->inplaytracker_scenes} ({$opengesamt}/{$countgesamt})
  • {$lang->inplaytracker}
  • '), 'sid' => '-1', 'version' => '', 'dateline' => TIME_NOW @@ -195,7 +495,7 @@ function inplaytracker_install() 'template' => $db->escape_string('
    - +'), 'sid' => '-1', @@ -226,86 +526,134 @@ function inplaytracker_install() $db->insert_query("templates", $insert_array); $insert_array = array( - 'title' => 'usercp_options_inplaytrackerpm', + 'title' => 'member_profile_inplaytracker_lastpost', 'template' => $db->escape_string(' - - - '), + + + '), 'sid' => '-1', 'version' => '', 'dateline' => TIME_NOW ); - $db->insert_query("templates", $insert_array); - rebuild_settings(); - -} - -function inplaytracker_is_installed() -{ - global $db; - if($db->field_exists("partners", "threads")) - { - return true; - } - return false; -} - -function inplaytracker_uninstall() -{ - global $db; - - // Tabellen entfernen - if($db->field_exists("partners", "threads")) - { - $db->drop_column("threads", "partners"); - } - if($db->field_exists("partners", "posts")) - { - $db->drop_column("posts", "partners"); - } - if($db->field_exists("ipdate", "threads")) - { - $db->drop_column("threads", "ipdate"); - } - if($db->field_exists("ipdate", "posts")) - { - $db->drop_column("posts", "ipdate"); - } - if($db->field_exists("inplaytrackerpm", "users")) - { - $db->drop_column("users", "inplaytrackerpm"); - } - - // Einstellungen entfernen - $db->delete_query('settings', "name IN ('inplaytracker_forum', 'inplaytracker_archiv')"); - $db->delete_query('settinggroups', "name = 'inplaytracker'"); + $insert_array = array( + 'title' => 'showthread_inplaytracker', + 'template' => $db->escape_string(' +
    Inplayszenen ({$inplayposts} Beiträge){$lang->inplaytracker_scenes} ({$inplayposts} {$lang->inplaytracker_posts})
    @@ -216,7 +516,7 @@ function inplaytracker_install() 'title' => 'member_profile_inplaytracker_bit', 'template' => $db->escape_string('
    $szenen[subject]
    - {$szenen[\'ipdate\']}
    Mitspieler: {$szenen[\'partners\']}
    + {$szenen[\'ipdate\']}
    {$lang->inplaytracker_characters}: {$szenen[\'partners\']}
    {$lang->inplaytracker_last_post}:{$last_inplaypost}
    + + + + + + + + + + + +{$inplaytracker_location} +{$inplaytracker_daytime} +{$inplaytracker_openscene} +{$inplaytracker_order} +
    + {$lang->inplaytracker_scene_information} +
    + {$lang->inplaytracker_characters} + + {$thread[\'partners\']} +
    + {$lang->inplaytracker_date} + + {$thread[\'ipdate\']} +
    +'), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); - rebuild_settings(); + $insert_array = array( + 'title' => 'showthread_inplaytracker_location', + 'template' => $db->escape_string(' + + {$lang->inplaytracker_location} + + + {$thread[\'iport\']} + +'), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); - // Templates entfernen - $db->delete_query("templates", "title IN('newthread_ip_partners', 'newthread_ip_date', 'misc_inplaytracker', 'misc_ip_user', 'misc_ip_bit', 'header_inplaytracker', 'member_profile_inplaytracker', 'member_profile_inplaytracker_bit', 'usercp_options_inplaytrackerpm')"); + $insert_array = array( + 'title' => 'showthread_inplaytracker_daytime', + 'template' => $db->escape_string(' + + {$lang->inplaytracker_daytime} + + + {$thread[\'ipdaytime\']} + +'), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); -} + $insert_array = array( + 'title' => 'showthread_inplaytracker_halfopenscene', + 'template' => $db->escape_string(' + + {$lang->inplaytracker_halfopen} + + + {$lang->inplaytracker_scene_halfopen} + +'), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); -function inplaytracker_activate() -{ - global $db, $mybb; + $insert_array = array( + 'title' => 'showthread_inplaytracker_openscene', + 'template' => $db->escape_string(' + + {$lang->inplaytracker_open} + + + {$lang->inplaytracker_scene_open} {$lang->inplaytracker_add_partner} + +'), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); - // PM-Feld einfügen - if(!$db->field_exists("inplaytrackerpm", "users")) - { - $db->query("ALTER TABLE `".TABLE_PREFIX."users` ADD `inplaytrackerpm` int(11) NOT NULL;"); - } + $insert_array = array( + 'title' => 'showthread_inplaytracker_order', + 'template' => $db->escape_string(' + + {$lang->inplaytracker_no_order} + + + {$lang->inplaytracker_scene_no_order} + +'), + 'sid' => '-1', + 'version' => '', + 'dateline' => TIME_NOW + ); + $db->insert_query("templates", $insert_array); - // Variablen einfügen - include MYBB_ROOT."/inc/adminfunctions_templates.php"; - find_replace_templatesets("newthread", "#".preg_quote('{$loginbox}')."#i", '{$loginbox} {$tracker_partners} {$tracker_date}'); - find_replace_templatesets("editpost", "#".preg_quote('{$loginbox}')."#i", '{$loginbox} {$tracker_partners} {$tracker_date}'); - find_replace_templatesets("header", "#".preg_quote('{$menu_calendar}')."#i", '{$menu_calendar} {$menu_inplaytracker} {$tracker_date}'); - find_replace_templatesets("member_profile", "#".preg_quote('')."#i", ' {$inplaytracker}'); - find_replace_templatesets("usercp_options", "#".preg_quote('{$board_style}')."#i", '{$inplaytrackerpm}{$board_style}'); } function inplaytracker_deactivate() @@ -314,415 +662,872 @@ function inplaytracker_deactivate() // Variablen entfernen include MYBB_ROOT."/inc/adminfunctions_templates.php"; - find_replace_templatesets("newthread", "#".preg_quote('{$tracker_partners} {$tracker_date}')."#i", '', 0); - find_replace_templatesets("editpost", "#".preg_quote('{$tracker_partners} {$tracker_date}')."#i", '', 0); + find_replace_templatesets("newthread", "#".preg_quote('{$tracker_partners} {$tracker_date}')."#i", '', 0); + find_replace_templatesets("newthread", "#".preg_quote('{$tracker_ort}')."#i", '', 0); + find_replace_templatesets("newthread", "#".preg_quote('{$tracker_daytime}')."#i", '', 0); + find_replace_templatesets("editpost", "#".preg_quote('{$tracker_partners} {$tracker_date}')."#i", '', 0); + find_replace_templatesets("editpost", "#".preg_quote('{$tracker_ort}')."#i", '', 0); + find_replace_templatesets("editpost", "#".preg_quote('{$tracker_daytime}')."#i", '', 0); find_replace_templatesets("header", "#".preg_quote('{$menu_inplaytracker}')."#i", '', 0); find_replace_templatesets("member_profile", "#".preg_quote('{$inplaytracker}')."#i", '', 0); + find_replace_templatesets("member_profile", "#".preg_quote('{$inplaytracker_lastpost}')."#i", '', 0); find_replace_templatesets("usercp_options", "#".preg_quote('{$inplaytrackerpm}')."#i", '', 0); + find_replace_templatesets("showthread", "#".preg_quote('{$inplaytracker}')."#i", '', 0); + + // Templates entfernen + $db->delete_query("templates", "title LIKE '%inplaytracker%'"); } function inplaytracker_newthread() { - global $mybb, $templates, $post_errors, $forum, $thread, $tracker_partners, $tracker_date; + global $mybb, $lang, $templates, $post_errors, $forum, $thread, $tracker_partners, $tracker_date, $tracker_ort, $tracker_daytime; + $lang->load('inplaytracker'); $inplaykategorie = $mybb->settings['inplaytracker_forum']; $forum['parentlist'] = ",".$forum['parentlist'].","; if(preg_match("/,$inplaykategorie,/i", $forum['parentlist'])) { - if(isset($mybb->input['previewpost']) || $post_errors) - { - $partners = htmlspecialchars_uni($mybb->get_input('partners')); + if(isset($mybb->input['previewpost']) || $post_errors) + { + $partners = htmlspecialchars_uni($mybb->get_input('partners')); $ipdate = htmlspecialchars_uni($mybb->get_input('ipdate')); - } - else - { + $iport = htmlspecialchars_uni($mybb->get_input('iport')); + $ipdaytime = htmlspecialchars_uni($mybb->get_input('ipdaytime')); + } + else + { $partners = htmlspecialchars_uni($thread['partners']); $ipdate = htmlspecialchars_uni($thread['ipdate']); - } - eval("\$tracker_partners = \"".$templates->get("newthread_ip_partners")."\";"); - eval("\$tracker_date = \"".$templates->get("newthread_ip_date")."\";"); + $iport = htmlspecialchars_uni($thread['iport']); + $ipdaytime = htmlspecialchars_uni($thread['ipdaytime']); + } + + for($i = 1 ; $i < 32 ; $i++) { + $day_bit .= ""; + } + + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $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" + ); + + foreach($months as $key => $month) { + $month_bit .= ""; + } + } + else { + $months = explode(", ", $mybb->settings['inplaytracker_months']); + foreach($months as $month) { + $month_bit .= ""; + } + } + + $private = array("-1" => "{$lang->inplaytracker_closed}", "0" => "{$lang->inplaytracker_halfopen}", "1" => "{$lang->inplaytracker_open}"); + foreach($private as $key => $value) { + $private_bit .= ""; + } + $postorder = array("1" => "{$lang->inplaytracker_order}", "0" => "{$lang->inplaytracker_no_order}"); + foreach($postorder as $key => $value) { + $postorder_bit .= ""; + } + + eval("\$tracker_partners = \"".$templates->get("newthread_inplaytracker_partners")."\";"); + eval("\$tracker_date = \"".$templates->get("newthread_inplaytracker_date")."\";"); + if($mybb->settings['inplaytracker_location'] == "1") + { + eval("\$tracker_ort = \"".$templates->get("newthread_inplaytracker_ort")."\";"); + } + if($mybb->settings['inplaytracker_daytime'] == "1") + { + eval("\$tracker_daytime = \"".$templates->get("newthread_inplaytracker_daytime")."\";"); + } } } function inplaytracker_do_newthread() { - global $db, $mybb, $tid, $pmhandler, $pm, $pminfo, $forum; + global $db, $mybb, $lang, $tid, $pmhandler, $pm, $pminfo, $forum, $partners_new, $partner_uid; + $lang->load('inplaytracker'); - $username = $mybb->user['username']; $ownuid = $mybb->user['uid']; - $partners = $mybb->get_input('partners'); $inplaykategorie = $mybb->settings['inplaytracker_forum']; - $forum['parentlist'] = ",".$forum['parentlist'].","; - if(preg_match("/,$inplaykategorie,/i", $forum['parentlist'])) { - - $new_record = array( - "partners" => $username.", ".$db->escape_string($mybb->get_input('partners')), - "ipdate" => $db->escape_string($mybb->input['ipdate']) - ); - $db->update_query("threads", $new_record, "tid='{$tid}'"); - - $tags = explode(", ", $partners); - foreach($tags as $tag) { - $partneruid = $db->fetch_field($db->query("SELECT uid FROM ".TABLE_PREFIX."users WHERE username = '$tag'"), "uid"); - $subject = "Neue Szene eröffnet!"; - $message = "Hi! Ich habe dir soeben eine neue Szene eröffnet! Du findest sie hier!"; - $fromid = $ownuid; - - require_once MYBB_ROOT . "inc/datahandlers/pm.php"; - $pmhandler = new PMDataHandler(); - - $pm = array( - "subject" => $subject, - "message" => $message, - "fromid" => $fromid, - "toid" => $partneruid - ); - - $pmcheck = $db->fetch_field($db->query("SELECT inplaytrackerpm FROM ".TABLE_PREFIX."users where uid = '$partneruid'"), "inplaytrackerpm"); - - if($pmcheck == "1") { - - $pmhandler->set_data($pm); - // Now let the pm handler do all the hard work. - if (!$pmhandler->validate_pm()) { - $pm_errors = $pmhandler->get_friendly_errors(); - } - - else { - $pminfo = $pmhandler->insert_pm(); + if(preg_match("/,$inplaykategorie,/i", $forum['parentlist'])) { + $partners_new = explode(",", $mybb->get_input('partners')); + $partners_new = array_map("trim", $partners_new); + $partner_uids = array(); + foreach($partners_new as $partner) { + $db->escape_string($partner); + $partner_uid = $db->fetch_field($db->query("SELECT uid FROM ".TABLE_PREFIX."users WHERE username = '$partner'"), "uid"); + $partner_uids[] = $partner_uid; + } + $partner_uids_imp = implode(",", $partner_uids); + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $ipdate = strtotime($mybb->get_input('day')." ".$mybb->get_input('month')." ".$mybb->get_input('year')); + } + else { + $ipdate = $mybb->get_input('day')." ".$mybb->get_input('month')." ".$mybb->get_input('year'); } + $new_record = array( + "partners" => $ownuid.",".$partner_uids_imp, + "ipdate" => $ipdate, + "iport" => $db->escape_string($mybb->input['iport']), + "ipdaytime" => $db->escape_string($mybb->input['ipdaytime']), + "openscene" => (int)$mybb->input['private'], + "postorder" => (int)$mybb->input['postorder'], + ); + $db->update_query("threads", $new_record, "tid='{$tid}'"); + + $fromid = $ownuid; + if(class_exists('MybbStuff_MyAlerts_AlertTypeManager')) { + foreach($partner_uids as $tag) { + $alertType = MybbStuff_MyAlerts_AlertTypeManager::getInstance()->getByCode('inplaytracker_newthread'); + if ($alertType != NULL && $alertType->getEnabled() && $ownuid != $tag) { + $alert = new MybbStuff_MyAlerts_Entity_Alert((int)$tag, $alertType, (int)$tid); + MybbStuff_MyAlerts_AlertManager::getInstance()->addAlert($alert); + } + } + } } - - } - -} - } function inplaytracker_editpost() { - global $mybb, $templates, $post_errors, $forum, $thread, $pid, $tracker_partners, $tracker_date; + global $mybb, $lang, $templates, $post_errors, $forum, $thread, $pid, $tracker_partners, $tracker_date, $tracker_ort, $tracker_daytime; + $lang->load('inplaytracker'); $inplaykategorie = $mybb->settings['inplaytracker_forum']; $forum['parentlist'] = ",".$forum['parentlist'].","; if(preg_match("/,$inplaykategorie,/i", $forum['parentlist'])) { $pid = $mybb->get_input('pid', MyBB::INPUT_INT); - if($thread['firstpost'] == $pid) - { - if(isset($mybb->input['previewpost']) || $post_errors) - { - $partners = htmlspecialchars_uni($mybb->get_input('partners')); - $ipdate = htmlspecialchars_uni($mybb->get_input('ipdate')); - } - else - { - $partners = htmlspecialchars_uni($thread['partners']); + if($thread['firstpost'] == $pid) { + if(isset($mybb->input['previewpost']) || $post_errors) { + $partners = htmlspecialchars_uni($mybb->get_input('partners')); + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $ipdate = strtotime($mybb->get_input('day')." ".$mybb->get_input('month')." ".$mybb->get_input('year')); + } + $iport = htmlspecialchars_uni($mybb->get_input('iport')); + $ipdaytime = htmlspecialchars_uni($mybb->get_input('ipdaytime')); + } + else + { + $tags = explode(",", $thread['partners']); + $usernames = array(); + foreach($tags as $tag) { + $tagged_user = get_user($tag); + $usernames[] = $tagged_user['username']; + } + $usernames = implode(",", $usernames); + $partners = $usernames; $ipdate = htmlspecialchars_uni($thread['ipdate']); - } - eval("\$tracker_partners = \"".$templates->get("newthread_ip_partners")."\";"); - eval("\$tracker_date = \"".$templates->get("newthread_ip_date")."\";"); - } - } + $iport = htmlspecialchars_uni($thread['iport']); + $ipdaytime = htmlspecialchars_uni($thread['ipdaytime']); + } + + if($mybb->settings['inplaytracker_timeformat'] == "0") { + for($i = 1 ; $i < 32 ; $i++) { + $checked_day = ""; + $active_day = date("j", $ipdate); + if($active_day == $i) { + $checked_day = "selected=\"selected\""; + } + $day_bit .= ""; + } + + $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" + ); + + foreach($months as $key => $month) { + $checked_month = ""; + $active_month = date("F", $ipdate); + if($active_month == $key) { + $checked_month = "selected=\"selected\""; + } + $month_bit .= ""; + } + + $year = date("Y", $ipdate); + } + else { + for($i = 1 ; $i < 32 ; $i++) { + $checked_day = ""; + $active_day = $mybb->get_input('day'); + if($active_day == $i) { + $checked_day = "selected=\"selected\""; + } + $day_bit .= ""; + } + + $months = explode(", ", $mybb->settings['inplaytracker_months']); + foreach($months as $month) { + $checked_month = ""; + $active_month = $mybb->get_input('month'); + if($active_month == $month) { + $checked_month = "selected=\"selected\""; + } + $month_bit .= ""; + } + + $year = $mybb->get_input('year'); + } + + $private = array("-1" => "{$lang->inplaytracker_closed}", "0" => "{$lang->inplaytracker_halfopen}", "1" => "{$lang->inplaytracker_open}"); + foreach($private as $key => $value) { + $checked = ""; + if($thread['openscene'] == $key) { + $checked = "selected=\"selected\""; + } + $private_bit .= ""; + } + + $postorder = array("1" => "{$lang->inplaytracker_order}","0" => "{$lang->inplaytracker_no_order}"); + foreach($postorder as $key => $value) { + $checked = ""; + if($thread['postorder'] == $key) { + $checked = "selected=\"selected\""; + } + $postorder_bit .= ""; + } + + + eval("\$tracker_partners = \"".$templates->get("newthread_inplaytracker_partners")."\";"); + eval("\$tracker_date = \"".$templates->get("newthread_inplaytracker_date")."\";"); + if($mybb->settings['inplaytracker_location'] == "1") { + eval("\$tracker_ort = \"".$templates->get("newthread_inplaytracker_ort")."\";"); + } + if($mybb->settings['inplaytracker_daytime'] == "1") { + eval("\$tracker_daytime = \"".$templates->get("newthread_inplaytracker_daytime")."\";"); + } + } + } } function inplaytracker_do_editpost() { - global $db, $mybb, $tid, $pid, $thread; + global $db, $mybb, $tid, $pid, $thread, $partners_new, $partner_uid; - if ($pid != $thread['firstpost']) return; + if($pid != $thread['firstpost']) { + return; + } + + $partners_new = explode(",", $mybb->get_input('partners')); + $partners_new = array_map("trim", $partners_new); + $partner_uids = array(); + foreach($partners_new as $partner) { + $db->escape_string($partner); + $partner_uid = $db->fetch_field($db->query("SELECT uid FROM ".TABLE_PREFIX."users WHERE username = '$partner'"), "uid"); + $partner_uids[] = $partner_uid; + } + $partner_uids = implode(",", $partner_uids); + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $ipdate = strtotime($mybb->input['day']." ".$mybb->input['month']." ".$mybb->input['year']); + } + else { + $ipdate = $mybb->input['day']." ".$mybb->input['month']." ".$mybb->input['year']; + } $new_record = array( - "partners" => $db->escape_string($mybb->input['partners']), - "ipdate" => $db->escape_string($mybb->input['ipdate']) + "partners" => $partner_uids, + "ipdate" => $ipdate, + "iport" => $db->escape_string($mybb->input['iport']), + "ipdaytime" => $db->escape_string($mybb->input['ipdaytime']), + "openscene" => (int)$mybb->input['private'], + "postorder" => (int)$mybb->input['postorder'], ); $db->update_query("threads", $new_record, "tid='{$tid}'"); } function inplaytracker_do_newreply() { - global $db, $mybb, $username, $pmhandler, $pm, $pminfo, $thread, $forum; + global $db, $mybb, $lang, $username, $pmhandler, $pm, $pminfo, $thread, $forum; + $lang->load('inplaytracker'); - $username = $mybb->user['username']; $ownuid = $mybb->user['uid']; $partners = $thread['partners']; $inplaykategorie = $mybb->settings['inplaytracker_forum']; - + $last_post = $db->fetch_field($db->query("SELECT pid FROM ".TABLE_PREFIX."posts WHERE tid = '$thread[tid]' ORDER BY pid DESC LIMIT 1"), "pid"); $forum['parentlist'] = ",".$forum['parentlist'].","; if(preg_match("/,$inplaykategorie,/i", $forum['parentlist'])) { - - $tags = explode(", ", $partners); - foreach($tags as $tag) { - $partneruid = $db->fetch_field($db->query("SELECT uid FROM ".TABLE_PREFIX."users WHERE username = '$tag'"), "uid"); - $subject = "Antwort auf $thread[subject]!"; - $message = "Hi! Ich habe so eben eine Antwort auf unsere Szene veröffentlicht!"; $fromid = $ownuid; - - require_once MYBB_ROOT . "inc/datahandlers/pm.php"; - $pmhandler = new PMDataHandler(); - - $pm = array( - "subject" => $subject, - "message" => $message, - "fromid" => $fromid, - "toid" => $partneruid - ); - - $pmcheck = $db->fetch_field($db->query("SELECT inplaytrackerpm FROM ".TABLE_PREFIX."users where uid = '$partneruid'"), "inplaytrackerpm"); - - if($pmcheck == "1") { - - $pmhandler->set_data($pm); - - // Now let the pm handler do all the hard work. - if (!$pmhandler->validate_pm()) { - $pm_errors = $pmhandler->get_friendly_errors(); - } - else { - - if ($tag != $username) { - $pminfo = $pmhandler->insert_pm(); + $tags = explode(",", $partners); + if (class_exists('MybbStuff_MyAlerts_AlertTypeManager')) { + foreach($tags as $tag) { + $alertType = MybbStuff_MyAlerts_AlertTypeManager::getInstance()->getByCode('inplaytracker_newreply'); + if ($alertType != NULL && $alertType->getEnabled() && $ownuid != $tag) { + $alert = new MybbStuff_MyAlerts_Entity_Alert((int)$tag, $alertType, (int)$thread['tid']); + $alert->setExtraDetails([ + 'subject' => $thread['subject'], + 'lastpost' => $last_post + ]); + MybbStuff_MyAlerts_AlertManager::getInstance()->addAlert($alert); } + } } - } - -} - -} - } function inplaytracker_forumdisplay(&$thread) { - global $db, $mybb, $thread, $foruminfo; + global $db, $lang, $mybb, $thread, $foruminfo; + $lang->load('inplaytracker'); $inplaykategorie = $mybb->settings['inplaytracker_forum']; $inplayarchiv = $mybb->settings['inplaytracker_archiv']; $foruminfo['parentlist'] = ",".$foruminfo['parentlist'].","; if(preg_match("/,$inplaykategorie,/i", $foruminfo['parentlist']) OR preg_match("/,$inplayarchiv,/i", $foruminfo['parentlist']) ) { - $partners = explode(", ", $thread['partners']); - $partnerusers = ""; - foreach ($partners as $partner) { - $uid = $db->fetch_field($db->query("SELECT uid FROM ".TABLE_PREFIX."users WHERE username = '$partner'"), "uid"); - $taguser = build_profile_link($partner, $uid); - $partnerusers .= " $taguser "."##"; - } - $thread['profilelink'] = "Charaktere: $partnerusers
    Inplaydatum: $thread[ipdate]"; - return $thread; + $partners = explode(",", $thread['partners']); + $partnerusers = array(); + foreach ($partners as $partner) { + $charakter = get_user($partner); + $taguser = build_profile_link($charakter['username'], $partner); + $partnerusers[] = $taguser; + } + $partnerusers = implode(" » ", $partnerusers); + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $ipdate = date("d.m.Y", $thread['ipdate']); + } + else { + $ipdate = $thread['ipdate']; + } + if($mybb->settings['inplaytracker_location'] == "1") { + $thread['profilelink'] = "{$lang->inplaytracker_characters}: $partnerusers
    {$lang->inplaytracker_date}: $ipdate
    {$lang->inplaytracker_location}: $thread[iport]"; + } + if($mybb->settings['inplaytracker_daytime'] == "1") { + $thread['profilelink'] = "{$lang->inplaytracker_characters}: $partnerusers
    {$lang->inplaytracker_date}: $ipdate
    {$lang->inplaytracker_daytime}: $thread[ipdaytime]"; + } + if($mybb->settings['inplaytracker_location'] == "1" && $mybb->settings['inplaytracker_daytime']) { + $thread['profilelink'] = "{$lang->inplaytracker_characters}: $partnerusers
    {$lang->inplaytracker_date}: $ipdate
    {$lang->inplaytracker_location}: $thread[iport]
    {$lang->inplaytracker_daytime}: $thread[ipdaytime]"; + } + else { + $thread['profilelink'] = "{$lang->inplaytracker_characters}: $partnerusers
    {$lang->inplaytracker_date}: $ipdate"; + } + return $thread; } } function inplaytracker_misc() { - global $mybb, $db, $templates, $headerinclude, $header, $footer, $scenes_bit, $scenes_user; + global $mybb, $db, $lang, $templates, $headerinclude, $header, $footer, $scenes_bit, $scenes_user; + $lang->load('inplaytracker'); $mybb->input['action'] = $mybb->get_input('action'); - if($mybb->input['action'] == "scenes") { - - $ipforum = $mybb->settings['inplaytracker_forum']; - $email = $mybb->user['email']; + if($mybb->input['action'] == "inplay") { + $postorder = $mybb->get_input('postorder'); + $openscene = $mybb->get_input('openscene'); + $ipforum = $mybb->settings['inplaytracker_forum']; + if(empty($postorder) && $postorder != "0") { + $postorder = "%"; + } + if(empty($openscene) && $openscene != "0") { + $openscene = "%"; + } + $private = array("-1" => "{$lang->inplaytracker_closed}", "0" => "{$lang->inplaytracker_halfopen}", "1" => "{$lang->inplaytracker_open}"); + $order = array("0" => "{$lang->inplaytracker_no_order}", "1" => "{$lang->inplaytracker_order}",); + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $query = $db->query("SELECT *, ".TABLE_PREFIX."threads.lastpost, ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.iport, ".TABLE_PREFIX."threads.postorder, ".TABLE_PREFIX."threads.openscene, ".TABLE_PREFIX."threads.ipdaytime, ".TABLE_PREFIX."threads.subject, ".TABLE_PREFIX."threads.lastposter, ".TABLE_PREFIX."threads.ipdate, ".TABLE_PREFIX."threads.lastposteruid FROM ".TABLE_PREFIX."threads + LEFT JOIN ".TABLE_PREFIX."posts ON ".TABLE_PREFIX."threads.lastpost = ".TABLE_PREFIX."posts.dateline + LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."threads.fid = ".TABLE_PREFIX."forums.fid + WHERE ".TABLE_PREFIX."forums.parentlist LIKE '$ipforum,%' + AND ".TABLE_PREFIX."threads.partners != '' + AND ".TABLE_PREFIX."threads.postorder LIKE '$postorder' + AND ".TABLE_PREFIX."threads.openscene LIKE '$openscene' + ORDER by ".TABLE_PREFIX."threads.ipdate"); + $count_scenes = mysqli_num_rows($query); + while($szene = $db->fetch_array($query)) { + $status = ""; + $partners = explode(",", $szene['partners']); + $partnerusers = array(); + foreach ($partners as $partner) { + $charakter = get_user($partner); + $taguser = build_profile_link($charakter['username'], $partner); + $partnerusers[] = $taguser; + } + $szene['partners'] = implode(" » ", $partnerusers); + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $szene['ipdate'] = date("d.m.Y", $szene['ipdate']); + } + $szene['lastpost'] = my_date('relative', $szene['lastpost']); + if(my_strlen($szene['subject']) > 35) { + $szene['subject'] = my_substr($szene['subject'], 0, 35)."..."; + } + $status = $private[$szene[openscene]]; + $status .= "
    ".$order[$szene[postorder]]; + $lastpost = $db->fetch_field($db->query("SELECT pid FROM ".TABLE_PREFIX."posts WHERE tid = '$szene[tid]' ORDER BY pid DESC LIMIT 1"), "pid"); + eval("\$scene_bit .= \"".$templates->get("misc_inplaytracker_bit")."\";"); + } + } + else { + $months = explode(", ", $mybb->settings['inplaytracker_months']); + $count_scenes = "0"; + foreach($months as $month) { + $query = $db->query("SELECT *, ".TABLE_PREFIX."threads.lastpost, ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.iport, ".TABLE_PREFIX."threads.postorder, ".TABLE_PREFIX."threads.ipdaytime, ".TABLE_PREFIX."threads.subject, ".TABLE_PREFIX."threads.lastposter, ".TABLE_PREFIX."threads.ipdate, ".TABLE_PREFIX."threads.lastposteruid FROM ".TABLE_PREFIX."threads + LEFT JOIN ".TABLE_PREFIX."posts ON ".TABLE_PREFIX."threads.lastpost = ".TABLE_PREFIX."posts.dateline + LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."threads.fid = ".TABLE_PREFIX."forums.fid + WHERE ".TABLE_PREFIX."forums.parentlist LIKE '$ipforum,%' + AND ".TABLE_PREFIX."threads.partners != '' + AND ".TABLE_PREFIX."threads.postorder LIKE '$postorder' + AND ".TABLE_PREFIX."threads.openscene LIKE '$openscene' + AND ".TABLE_PREFIX."threads.ipdate LIKE '%$month%' + ORDER by CAST(".TABLE_PREFIX."threads.ipdate AS signed)"); + while($szene = $db->fetch_array($query)) { + $count_scenes++; + $partners = explode(",", $szene['partners']); + $partnerusers = array(); + foreach ($partners as $partner) { + $charakter = get_user($partner); + $taguser = build_profile_link($charakter['username'], $partner); + $partnerusers[] = $taguser; + } + $szene['partners'] = implode(" » ", $partnerusers); + $szene['lastpost'] = my_date('relative', $szene['lastpost']); + if(my_strlen($szene['subject']) > 35) { + $szene['subject'] = my_substr($szene['subject'], 0, 35)."..."; + } + $private = array("-1" => "{$lang->inplaytracker_closed}", "0" => "{$lang->inplaytracker_halfopen}", "1" => "{$lang->inplaytracker_open}"); + $status = $private[$szene[openscene]]; + $order = array("0" => "{$lang->inplaytracker_no_order}", "1" => "{$lang->inplaytracker_order}",); + $status .= "
    ".$order[$szene[postorder]]; + $lastpost = $db->fetch_field($db->query("SELECT pid FROM ".TABLE_PREFIX."posts WHERE tid = '$szene[tid]' ORDER BY pid DESC LIMIT 1"), "pid"); + eval("\$scene_bit .= \"".$templates->get("misc_inplaytracker_bit")."\";"); + } + } + } + eval("\$page = \"".$templates->get("misc_inplaytracker_overview")."\";"); + output_page($page); + } - $query = $db->query("SELECT username FROM ".TABLE_PREFIX."users WHERE ".TABLE_PREFIX."users.email = '$email' ORDER By ".TABLE_PREFIX."users.username ASC"); + if($mybb->input['action'] == "add_partner") { + $uid = $mybb->get_input('uid'); + $tid = $mybb->get_input('tid'); + $thread = get_thread($tid); + $partners = explode(",", $thread['partners']); + if(!in_array($uid, $partners)) { + $lastposteruid = $thread['lastposteruid']; + $lastposterkey = array_search($lastposteruid, $partners); + array_splice($partners, $lastposterkey+1, 0, $uid); + $partners = implode(",", $partners); + $new_record = array( + "partners" => $partners + ); + $db->update_query("threads", $new_record, "tid = '$tid'"); + } + redirect("showthread.php?tid={$tid}", "Dein Charakter wurde hinzugefügt!"); + } + if($mybb->input['action'] == "scenes") { + $ipforum = $mybb->settings['inplaytracker_forum']; + $email = $mybb->user['email']; + $query = $db->query("SELECT username, uid FROM ".TABLE_PREFIX."users WHERE ".TABLE_PREFIX."users.email = '$email' ORDER By ".TABLE_PREFIX."users.username ASC"); $countgesamt = 0; $opengesamt = 0; - while($user = $db->fetch_array($query)) { - $username = $user['username']; - - $query1 = $db->query("SELECT *, ".TABLE_PREFIX."threads.lastpost, ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.subject, ".TABLE_PREFIX."threads.lastposter, ".TABLE_PREFIX."threads.ipdate, ".TABLE_PREFIX."threads.lastposteruid FROM ".TABLE_PREFIX."threads + $ownuid = $user['uid']; + $query1 = $db->query("SELECT *, ".TABLE_PREFIX."threads.lastpost, ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.iport, ".TABLE_PREFIX."threads.postorder, ".TABLE_PREFIX."threads.ipdaytime, ".TABLE_PREFIX."threads.subject, ".TABLE_PREFIX."threads.lastposter, ".TABLE_PREFIX."threads.ipdate, ".TABLE_PREFIX."threads.lastposteruid FROM ".TABLE_PREFIX."threads LEFT JOIN ".TABLE_PREFIX."posts ON ".TABLE_PREFIX."threads.lastpost = ".TABLE_PREFIX."posts.dateline LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."threads.fid = ".TABLE_PREFIX."forums.fid - WHERE ".TABLE_PREFIX."threads.partners LIKE '%$username%' - AND ".TABLE_PREFIX."forums.parentlist LIKE '$ipforum,%' + WHERE ".TABLE_PREFIX."forums.parentlist LIKE '$ipforum,%' ORDER by ".TABLE_PREFIX."threads.lastpost DESC"); - - $scenes_bit = ""; - $countscenes = 0; - $countactive = 0; - + $scenes_bit = ""; + $countscenes = 0; + $countactive = 0; while($szene = $db->fetch_array($query1)) { - - $countgesamt++; - - $tagged = explode(", ", $szene['partners']); - $szene['lastpost'] = my_date('relative', $szene['lastpost']); - - if(my_strlen($szene['subject']) > 35) { - $szene['subject'] = my_substr($szene['subject'], 0, 35)."..."; - } - - $key = array_search($szene['lastposter'], $tagged); - $key = $key + 1; - $next = $tagged[$key]; - - if(!$tagged[$key]) { - $next = $tagged[0]; - } - - if($next == $username) { - $status = "
    DU BIST DRAN!
    "; - $countactive++; - $opengesamt++; + $szenen_partner = ",".$szene['partners'].","; + if(preg_match("/,$ownuid,/i", $szenen_partner)) { + $countgesamt++; + $tagged = explode(",", $szene['partners']); + $szene['lastpost'] = my_date('relative', $szene['lastpost']); + if(my_strlen($szene['subject']) > 35) { + $szene['subject'] = my_substr($szene['subject'], 0, 35)."..."; + } + $key = array_search($szene['lastposteruid'], $tagged); + $key = $key + 1; + $next = $tagged[$key]; + if(!$tagged[$key]) { + $next = $tagged[0]; + } + $next = get_user($next); + $next = $next['username']; + if($next == $username && $szene['postorder'] == "1") { + $status = "
    DU BIST DRAN!
    "; + $countactive++; + $opengesamt++; + } + if($next != $username && $szene['postorder'] == "1") { + $status = "
    $next
    "; + } + if($szene['postorder'] == "0") { + $status = "
    {$lang->inplaytracker_no_order}
    "; + } + $countscenes++; + $szene['lastposter'] = build_profile_link($szene['lastposter'],$szene['lastposteruid']); + $partners = explode(",", $szene['partners']); + $partnerusers = array(); + foreach ($partners as $partner) { + $charakter = get_user($partner); + $taguser = build_profile_link($charakter['username'], $partner); + $partnerusers[] = $taguser; + } + $szene['partners'] = implode(" » ", $partnerusers); + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $szene['ipdate'] = date("d.m.Y", $szene['ipdate']); + } + $lastpost = $db->fetch_field($db->query("SELECT pid FROM ".TABLE_PREFIX."posts WHERE tid = '$szene[tid]' ORDER BY pid DESC LIMIT 1"), "pid"); + eval("\$scenes_bit .= \"".$templates->get("misc_inplaytracker_bit")."\";"); } - - else { - $status = "
    $next
    "; - } - - $countscenes++; - - $szene['lastposter'] = build_profile_link($szene['lastposter'],$szene['lastposteruid']); - - eval("\$scenes_bit .= \"".$templates->get("misc_ip_bit")."\";"); - } - - eval("\$scenes_user .= \"".$templates->get("misc_ip_user")."\";"); - + eval("\$scenes_user .= \"".$templates->get("misc_inplaytracker_user")."\";"); } - eval("\$page = \"".$templates->get("misc_inplaytracker")."\";"); output_page($page); } - } function inplaytracker_global() { - global $mybb, $db, $templates, $menu_inplaytracker; - + global $mybb, $db, $lang, $templates, $menu_inplaytracker; + $lang->load('inplaytracker'); $ipforum = $mybb->settings['inplaytracker_forum']; $email = $mybb->user['email']; - - $query = $db->query("SELECT username FROM ".TABLE_PREFIX."users WHERE ".TABLE_PREFIX."users.email = '$email' ORDER By ".TABLE_PREFIX."users.username ASC"); - + $query = $db->query("SELECT username, uid FROM ".TABLE_PREFIX."users WHERE ".TABLE_PREFIX."users.email = '$email' ORDER By ".TABLE_PREFIX."users.username ASC"); $countgesamt = 0; $opengesamt = 0; - while($user = $db->fetch_array($query)) { - $username = $user['username']; - - $query1 = $db->query("SELECT *, ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.lastposter FROM ".TABLE_PREFIX."threads + $ownuid = $user['uid']; + $query1 = $db->query("SELECT *, ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.postorder, ".TABLE_PREFIX."threads.lastposter FROM ".TABLE_PREFIX."threads LEFT JOIN ".TABLE_PREFIX."posts ON ".TABLE_PREFIX."threads.lastpost = ".TABLE_PREFIX."posts.dateline LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."threads.fid = ".TABLE_PREFIX."forums.fid - WHERE ".TABLE_PREFIX."threads.partners LIKE '%$username%' - AND ".TABLE_PREFIX."forums.parentlist LIKE '$ipforum,%'"); - + WHERE ".TABLE_PREFIX."forums.parentlist LIKE '$ipforum,%'"); while($szene = $db->fetch_array($query1)) { - - $countgesamt++; - - $tagged = explode(", ", $szene['partners']); - - $key = array_search($szene['lastposter'], $tagged); - $key = $key + 1; - $next = $tagged[$key]; - - if(!$tagged[$key]) { - $next = $tagged[0]; - } - - if($next == $username) { - $opengesamt++; - } - - $countscenes++; - - } - - } - + $szenen_partner = ",".$szene['partners'].","; + if(preg_match("/,$ownuid,/i", $szenen_partner)) { + $countgesamt++; + $tagged = explode(",", $szene['partners']); + $key = array_search($szene['lastposteruid'], $tagged); + $key = $key + 1; + $next = $tagged[$key]; + $next = get_user($next); + $next = $next['username']; + if(!$tagged[$key]) { + $next = $tagged[0]; + } + if($next == $username && $szene['postorder'] == "1") { + $opengesamt++; + } + $countscenes++; + } + } + } eval("\$menu_inplaytracker = \"".$templates->get("header_inplaytracker")."\";"); } function inplaytracker_profile() { - global $db, $mybb, $templates, $memprofile, $inplaytracker, $inplaytracker_bit; + global $db, $mybb, $lang, $templates, $memprofile, $inplaytracker_lastpost, $inplaytracker, $inplaytracker_bit; + $lang->load('inplaytracker'); $ipforum = $mybb->settings['inplaytracker_forum']; $archiv = $mybb->settings['inplaytracker_archiv']; - $inplayposts = $db->fetch_field($db->query("SELECT COUNT(*) AS inplayposts FROM ".TABLE_PREFIX."posts + $last_inplaypost = $db->fetch_field($db->query("SELECT ".TABLE_PREFIX."posts.dateline FROM ".TABLE_PREFIX."posts LEFT JOIN ".TABLE_PREFIX."threads on ".TABLE_PREFIX."threads.tid = ".TABLE_PREFIX."posts.tid LEFT JOIN ".TABLE_PREFIX."forums on ".TABLE_PREFIX."forums.fid = ".TABLE_PREFIX."threads.fid WHERE ".TABLE_PREFIX."posts.username = '$memprofile[username]' AND (".TABLE_PREFIX."forums.parentlist LIKE '$ipforum,%' - OR ".TABLE_PREFIX."forums.parentlist LIKE '%,$archiv%')"), "inplayposts"); + OR ".TABLE_PREFIX."forums.parentlist LIKE '%,$archiv%') + AND ".TABLE_PREFIX."posts.visible = '1'"), "dateline"); + $last_inplaypost = my_date("relative", $last_inplaypost); + eval("\$inplaytracker_lastpost .= \"".$templates->get("member_profile_inplaytracker_lastpost")."\";"); + $inplayposts = $db->fetch_field($db->query("SELECT COUNT(*) AS inplayposts FROM ".TABLE_PREFIX."posts + LEFT JOIN ".TABLE_PREFIX."threads on ".TABLE_PREFIX."threads.tid = ".TABLE_PREFIX."posts.tid + LEFT JOIN ".TABLE_PREFIX."forums on ".TABLE_PREFIX."forums.fid = ".TABLE_PREFIX."threads.fid + WHERE ".TABLE_PREFIX."posts.username = '$memprofile[username]' + AND (".TABLE_PREFIX."forums.parentlist LIKE '$ipforum,%' + OR ".TABLE_PREFIX."forums.parentlist LIKE '%,$archiv%') + AND ".TABLE_PREFIX."posts.visible = '1'"), "inplayposts"); if($inplayposts != "0") { - - $monate = array( - "januar" => "januar", - "februar" => "februar", - "märz" => "märz", - "april" => "april", - "mai" => "mai", - "juni" => "juni", - "juli" => "juli", - "august" => "august", - "september" => "september", - "oktober" => "oktober", - "november" => "november", - "dezember" => "dezember" -); -foreach($monate as $monat) { -$query = $db->query("SELECT * , ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.ipdate, ".TABLE_PREFIX."threads.subject FROM ".TABLE_PREFIX."threads -LEFT JOIN ".TABLE_PREFIX."posts ON ".TABLE_PREFIX."threads.tid = ".TABLE_PREFIX."posts.tid -LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."forums.fid = ".TABLE_PREFIX."threads.fid -WHERE (".TABLE_PREFIX."forums.parentlist LIKE '%$ipforum%' OR ".TABLE_PREFIX."forums.parentlist LIKE '%,$archiv%') -AND ".TABLE_PREFIX."threads.ipdate LIKE '%$monat%' -AND ".TABLE_PREFIX."threads.partners LIKE '%$memprofile[username]%' -GROUP by ".TABLE_PREFIX."threads.tid -ORDER by ".TABLE_PREFIX."threads.ipdate -"); - - while($szenen = $db->fetch_array($query)) { - eval("\$inplaytracker_bit .= \"".$templates->get("member_profile_inplaytracker_bit")."\";"); + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $query = $db->query("SELECT * , ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.ipdate, ".TABLE_PREFIX."threads.iport, ".TABLE_PREFIX."threads.ipdaytime, ".TABLE_PREFIX."threads.subject FROM ".TABLE_PREFIX."threads + LEFT JOIN ".TABLE_PREFIX."posts ON ".TABLE_PREFIX."threads.tid = ".TABLE_PREFIX."posts.tid + LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."forums.fid = ".TABLE_PREFIX."threads.fid + WHERE (".TABLE_PREFIX."forums.parentlist LIKE '%$ipforum%' OR ".TABLE_PREFIX."forums.parentlist LIKE '%,$archiv%') + AND ".TABLE_PREFIX."threads.visible = '1' + GROUP by ".TABLE_PREFIX."threads.tid + ORDER by ".TABLE_PREFIX."threads.ipdate ASC + "); + while($szenen = $db->fetch_array($query)) { + $ownuid = $memprofile['uid']; + $szenen_partner = ",".$szenen['partners'].","; + if(preg_match("/,$ownuid,/i", $szenen_partner)) { + $partners = explode(",", $szenen['partners']); + $partnerusers = array(); + foreach ($partners as $partner) { + $charakter = get_user($partner); + $taguser = build_profile_link($charakter['username'], $partner); + $partnerusers[] = $taguser; + } + $szenen['partners'] = implode(" » ", $partnerusers); + $szenen['ipdate'] = date("d.m.Y", $szenen['ipdate']); + eval("\$inplaytracker_bit .= \"".$templates->get("member_profile_inplaytracker_bit")."\";"); + } + } + } + else { + $months = explode(", ", $mybb->settings['inplaytracker_months']); + foreach($months as $month) { + $query = $db->query("SELECT * , ".TABLE_PREFIX."threads.partners, ".TABLE_PREFIX."threads.ipdate, ".TABLE_PREFIX."threads.iport, ".TABLE_PREFIX."threads.ipdaytime, ".TABLE_PREFIX."threads.subject FROM ".TABLE_PREFIX."threads + LEFT JOIN ".TABLE_PREFIX."posts ON ".TABLE_PREFIX."threads.tid = ".TABLE_PREFIX."posts.tid + LEFT JOIN ".TABLE_PREFIX."forums ON ".TABLE_PREFIX."forums.fid = ".TABLE_PREFIX."threads.fid + WHERE (".TABLE_PREFIX."forums.parentlist LIKE '%$ipforum%' OR ".TABLE_PREFIX."forums.parentlist LIKE '%,$archiv%') + AND ".TABLE_PREFIX."threads.ipdate LIKE '%$month%' + GROUP by ".TABLE_PREFIX."threads.tid + ORDER by CAST(".TABLE_PREFIX."threads.ipdate AS signed) + "); + while($szenen = $db->fetch_array($query)) { + $ownuid = $memprofile['uid']; + $szenen_partner = ",".$szenen['partners'].","; + if(preg_match("/,$ownuid,/i", $szenen_partner)) { + $partners = explode(",", $szenen['partners']); + $partnerusers = array(); + foreach ($partners as $partner) { + $charakter = get_user($partner); + $taguser = build_profile_link($charakter['username'], $partner); + $partnerusers[] = $taguser; + } + $szenen['partners'] = implode(" » ", $partnerusers); + eval("\$inplaytracker_bit .= \"".$templates->get("member_profile_inplaytracker_bit")."\";"); + } + } + } + } + eval("\$inplaytracker = \"".$templates->get("member_profile_inplaytracker")."\";"); } } - eval("\$inplaytracker = \"".$templates->get("member_profile_inplaytracker")."\";"); +function inplaytracker_showthread() { + global $mybb, $lang, $user, $templates, $thread, $inplaytracker, $inplaytracker_location; + $lang->load('inplaytracker'); + $uid = $mybb->user['uid']; + if($mybb->settings['inplaytracker_location'] == "1") { + eval("\$inplaytracker_location = \"".$templates->get("showthread_inplaytracker_location")."\";"); + } + if($mybb->settings['inplaytracker_daytime'] == "1") { + eval("\$inplaytracker_daytime = \"".$templates->get("showthread_inplaytracker_daytime")."\";"); + } + if($mybb->settings['inplaytracker_timeformat'] == "0") { + $thread['ipdate'] = date("d.m.Y", $thread['ipdate']); + } + $partners = explode(",", $thread['partners']); + $partnerusers = array(); + foreach ($partners as $partner) { + $charakter = get_user($partner); + $taguser = build_profile_link($charakter['username'], $partner); + $partnerusers[] = $taguser; + } + $thread['partners'] = implode(" » ", $partnerusers); + $thread['partners'] = implode(" » ", $partnerusers); + if($thread['openscene'] == "1" && !in_array($uid, $partners)) { + eval("\$inplaytracker_openscene = \"".$templates->get("showthread_inplaytracker_openscene")."\";"); + } + elseif($thread['openscene'] == "0" && !in_array($uid, $partners)) { + eval("\$inplaytracker_openscene = \"".$templates->get("showthread_inplaytracker_halfopenscene")."\";"); + } + else { + $inplaytracker_openscene = ""; + } + if($thread['postorder'] == "0") { + eval("\$inplaytracker_order = \"".$templates->get("showthread_inplaytracker_order")."\";"); + } + else { + $inplaytracker_order = ""; + } + eval("\$inplaytracker = \"".$templates->get("showthread_inplaytracker")."\";"); } -} +function inplaytracker_alerts() { + global $mybb, $lang; + $lang->load('inplaytracker'); + /** + * Alert formatter for my custom alert type. + */ + class MybbStuff_MyAlerts_Formatter_InplaytrackerNewthreadFormatter extends MybbStuff_MyAlerts_Formatter_AbstractFormatter + { + /** + * Format an alert into it's output string to be used in both the main alerts listing page and the popup. + * + * @param MybbStuff_MyAlerts_Entity_Alert $alert The alert to format. + * + * @return string The formatted alert string. + */ + public function formatAlert(MybbStuff_MyAlerts_Entity_Alert $alert, array $outputAlert) + { + return $this->lang->sprintf( + $this->lang->inplaytracker_newthread, + $outputAlert['from_user'], + $outputAlert['dateline'] + ); + } + + /** + * Init function called before running formatAlert(). Used to load language files and initialize other required + * resources. + * + * @return void + */ + public function init() + { + if (!$this->lang->inplaytracker) { + $this->lang->load('inplaytracker'); + } + } + + /** + * Build a link to an alert's content so that the system can redirect to it. + * + * @param MybbStuff_MyAlerts_Entity_Alert $alert The alert to build the link for. + * + * @return string The built alert, preferably an absolute link. + */ + public function buildShowLink(MybbStuff_MyAlerts_Entity_Alert $alert) + { + return $this->mybb->settings['bburl'] . '/' . get_thread_link($alert->getObjectId()); + } + } -function inplaytracker_usercp() { + if (class_exists('MybbStuff_MyAlerts_AlertFormatterManager')) { + $formatterManager = MybbStuff_MyAlerts_AlertFormatterManager::getInstance(); - global $mybb, $user, $templates, $inplaytrackerpmcheck, $inplaytrackerpm; + if (!$formatterManager) { + $formatterManager = MybbStuff_MyAlerts_AlertFormatterManager::createInstance($mybb, $lang); + } - if(isset($mybb->user['inplaytrackerpm']) && $mybb->user['inplaytrackerpm'] == 1) - { - $inplaytrackerpmcheck = "checked=\"checked\""; + $formatterManager->registerFormatter( + new MybbStuff_MyAlerts_Formatter_InplaytrackerNewthreadFormatter($mybb, $lang, 'inplaytracker_newthread') + ); } - else + + /** + * Alert formatter for my custom alert type. + */ + class MybbStuff_MyAlerts_Formatter_InplaytrackerNewreplyFormatter extends MybbStuff_MyAlerts_Formatter_AbstractFormatter { - $inplaytrackerpmcheck = ""; + /** + * Format an alert into it's output string to be used in both the main alerts listing page and the popup. + * + * @param MybbStuff_MyAlerts_Entity_Alert $alert The alert to format. + * + * @return string The formatted alert string. + */ + public function formatAlert(MybbStuff_MyAlerts_Entity_Alert $alert, array $outputAlert) + { + $alertContent = $alert->getExtraDetails(); + return $this->lang->sprintf( + $this->lang->inplaytracker_newreply, + $outputAlert['from_user'], + $alertContent['subject'], + $outputAlert['dateline'] + ); + } + + /** + * Init function called before running formatAlert(). Used to load language files and initialize other required + * resources. + * + * @return void + */ + public function init() + { + if (!$this->lang->inplaytracker) { + $this->lang->load('inplaytracker'); + } + } + + /** + * Build a link to an alert's content so that the system can redirect to it. + * + * @param MybbStuff_MyAlerts_Entity_Alert $alert The alert to build the link for. + * + * @return string The built alert, preferably an absolute link. + */ + public function buildShowLink(MybbStuff_MyAlerts_Entity_Alert $alert) + { + $alertContent = $alert->getExtraDetails(); + return $this->mybb->settings['bburl'] . '/' . get_post_link((int) $alertContent['lastpost'], (int) $alert->getObjectId()) . '#pid' . $alertContent['lastpost']; + } } - eval("\$inplaytrackerpm = \"".$templates->get("usercp_options_inplaytrackerpm")."\";"); + if (class_exists('MybbStuff_MyAlerts_AlertFormatterManager')) { + $formatterManager = MybbStuff_MyAlerts_AlertFormatterManager::getInstance(); -} + if (!$formatterManager) { + $formatterManager = MybbStuff_MyAlerts_AlertFormatterManager::createInstance($mybb, $lang); + } -function inplaytracker_usercp_options() -{ - global $mybb, $db; + $formatterManager->registerFormatter( + new MybbStuff_MyAlerts_Formatter_InplaytrackerNewreplyFormatter($mybb, $lang, 'inplaytracker_newreply') + ); + } - $uid = $mybb->user['uid']; +} - $new_record = array( - "inplaytrackerpm" => $mybb->get_input('inplaytrackerpm', MyBB::INPUT_INT) - ); - $db->update_query("users", $new_record, "uid = '$uid'"); +function inplaytracker_tools_menu($sub_menu) { + $found_free_index = 0; + $index = 100; + + // Looking for unused Index in $sub_menu + while($found_free_index == 0) + { + if(!isset($sub_menu[$index])) + { + $sub_menu[$index] = array( + 'id' => 'inplaytracker', + 'title' => 'Inplaytracker', + 'link' => 'index.php?module=tools-inplaytracker' + ); + $found_free_index = 1; + } + else + { + $index++; + } + ksort($sub_menu); + return $sub_menu; + } +} +function inplaytracker_tools_action_handler($actions) { + $actions['inplaytracker'] = array('active' => 'inplaytracker', 'file' => 'inplaytracker.php'); + return $actions; } ?>