Praxisbeispiel: Plugin "Close Old Threads"

Plugin-Entwicklung



Im folgenden Beispiel wird die Entwicklung des Plugins "Close Old Threads" beschrieben.

0) Anforderungen


Oft passiert es, dass gerade neue Mitglieder ein altes Thema über die Suchfunktion auffinden und dort posten, obwohl bereits eine lange Zeit kein Beitrag mehr in diesem Thema geschrieben wurde. Für den Administrator ist es aber unzumutbar, ständig das Forum zu kontrollieren, um alte Beiträge zu schließen. Das neue Plugin soll dem Admin diese Arbeit abnehmen und beim Aufruf eines Themas automatisch prüfen, ob ein Thema zu alt ist oder nicht.
Für Themen die ein bestimmtes Alter überschritten haben, kann ein Warnhinweis angegeben werden, noch ältere Themen werden komplett geschlossen.

Der Administrator soll festlegen können, nach wie vielen Tagen eine Warnung bzw. eine Schließung erfolgt. Außerdem solle es möglich sein Gruppen zu definieren, die von der Schließung nicht betroffen sind.




1) Neues Plugin erstellen



In der Foren-Administration unter Plugins->Plugin Entwicklung können neue Plugins erstellt werden.

Plugin ID & Plugin Name
Die ersten beiden Werte, die bei der Erstellung eines Plugins angegeben werden müssen sind die Plugin ID und der Plugin Name. Die ID ist der interne Name des Plugins. Er darf keine Sonderzeichen enthalten. Der Pugin Name ist der Name des Plugins, den später der Endbenutzer zu sehen bekommt.


Plugin ID: threadautoclose
Plugin Name: Close Old Threads




2) Elemente des Plugins definieren



Ein Plugin besteht aus folgenden Elementen:

  • Content-Element
    Template-Elemente, Javascript oder HTML-Dateien
  • Config-Variablen
    Einstellungen für das Plugin
  • Daten-Variablen
    In diesen Variablen werden Werte und Daten gespeichert, die das Plugin benötigt. Datenvariablen werden immer einer Quelle (Origin) zugeordnet. Wird eine Variable z.B. dem Benutzerprofil zugeordnet, stehen die gespeicherten Werte später immer zur Verfügung, wenn ein Benutzerprofil geöffnet ist.
  • Globale Variablen
    Funktionieren genau wie Daten-Variablen, allerdings stehen die hier gespeicherten Werte später auf allen Seiten des Forums zur Verfügung. Dies kann die Performanz negativ beeinflusssen und sollte daher vorsichtig eingesetzt werden.



Für das Close Old Threads Plugin benötigen wir keine Variablen, die Daten speichern. Allerdings möchten wir dem Administartor einige Einstellungen ermöglichen, daher legen wir drei Config-Variablen an:

Variablen
1) maxdays_messageage_warning
Nach X Tagen soll eine Warnung angezeigt werden, dass das Thema schon alt ist.
Die Variable ist von Typ int und bekommt den Standardwert 180

2) maxdays_messageage_close
Nach X Tagen soll das Thema ganz geschlossen werden.
Die Variable ist von Typ int und bekommt den Standardwert 360

3) plugin_exceptions
Hier können Gruppen angegeben werden, welche auch nach dem erreichen von maxdays_messageage_close noch antworten können.
Die Variable ist vom Typ grouprights und bekommt den Standardwert administrator

Templates
Das Plugin soll später an zunächst 2 Stellen im Forum aktiv werden: Einmal beim Schreiben eines Beitrags, und einmal in der Themenansicht.

Wir benötigen daher 2 neue Template-Elemente:

Plugin Template Element "New Message"


Wir ordnen unser neues Element dem Foren-Template "Neuen Beitrag Schreiben" zu und erreichen damit, dass der Code des Templates immer ausgeführt wird, wenn das Template "Neuen Beitrag Schreiben" aufgerufen wird.


Desweiteren können wir festlegen, wann genau das Plugin Template ausgeführt werden soll:


Header -> das Plugin-Template wird direkt VOR dem Foren-Template ausgeführt.
Footer -> das Plugin-Template wird direkt NACH dem Foren-Template ausgeführt.
Inline-Element -> Die ermöglich die Ausführung der Plugin-Codes innerhalbt des Foren-Templates. Hierzu gibt es in den Foren-Templates Markierungen. Im "Neuen Beitrag Schreiben"-Template gibt es eine solche Markierung z.B. innerhalb des "Beitrag Schreiben" Formulars. Zu den Markierungen in den Template -Elementen wird es in Kürze noch ein eigenes Tutorial geben.


Unsere Einstellungen für das Element "New Message" lauten also:
Template: Neuen Beitrag Schreiben
Inline-Element: "new_message_in_form" (Name der Markierung im Foren Template)
Template Name: new_message

Analog dazu wird auch das Template "topic" angelegt:
Template: Themen Ansicht
Header: JA - das Plugin-Template soll vor dem Laden der Beiträge angezeigt werden.
Template Name: topic





3) Plugin Elemente schreiben


Wir haben nun alle Elemente des Plugins definiert und den jeweiligen Foren-Templates zugeordnet. Im nächsten Schritt schreiben wir nun den Code des Plugins

Plugin-Templates funktionieren fast genau wie normale Foren-Templates. Es stehen alle Foren-Variablen zur Verfügung, die auch im verknüpften Template-Element verwencet werden. Außerdem stehen die Variablen des Plugins zur Verfügung.

Auf den Wert der Variablen maxdays_messageage_warningzum Beispiel kann im Plugin Template mit {{plugin_threadautoclose_config_maxdays_messageage_warning}} zugegriffen werden.
Für Rechtevariablen erzeugt das System automatisch eine zusätzliche boolean-Variable. D.h während die Variable {{plugin_threadautoclose_config_plugin_exceptions}} die Gruppen-Ids der Gruppen enthält, die von der Themenschließung nicht betroffen sind, enthält {{plugin_threadautoclose_config_plugin_exceptions_boolean}} einen true/false Wert, der für den aktuellen Benutzer angepasst wird.


Das Element new_message setzt folgendes um:

Beim laden von "Neuen Beitrag Schreiben" prüfen wir ob

1) Das maximale Themenalter erreicht wurde
1a) Falls ja: Prüfen Ob das Mitglied in der "Ausnahmen"-Gruppe ist.
1aa) Falls ja: Warnhinweis anzeigen, dass das Thema eigentlich geschlossen wäre
1ab) Falls nein: Thema als geschlossen anzeigen, Laden des "Beitrag schreiben" Templates unterbinden

2) Das Themenalter für eine Warnung reicht:
2a) Falls ja: Warnung anzeigen

Das könnte dann z.B. so aussehen:

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
 
<!--{{reply==true.start}} = Nur laden, wenn geantwortet wird:-->
{{reply==true.start}}
 
<!--Berechnung der Tage seit der letzten Antwort-->
{{secs_since_message.startint}}{{server_time}}-{{thread_lastmessage_ts}}{{secs_since_message.end}}
{{days_inactive.startint}}{{secs_since_message}}/60/60/24{{days_inactive.end}}
 
{{limitreached.start}}0{{limitreached.end}}
 
<!--Thread ist älter als in maxdays_messageage_close definiert-->
{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_close.start}}

 
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.start}}
<!--Thread ist älter als in maxdays_messageage_close definiert - aber der USer ist in einer ausgenommenen Gruppe-->
{{limitreached.start}}1{{limitreached.end}}
<div class="threadinactive">In diesem Thema wurden seit mehr als {{plugin_threadautoclose_config_maxdays_messageage_close}} Tagen kein Beitrag verfasst. <br/>Bitte überlegen Sie vor dem posten ob es nicht sinnvoller ist, ein neues Thema zu eröffnen</div>
 
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.else}}
<!--Thread ist älter als in maxdays_messageage_close definiert - Thema wird als geschlossen angezeigt-->
<div class="threadinactive_hardlimit" style="text-align:center;">
Dieses Thema wurde aufgrund von Inaktivität geschlossen. <br/>Bitte eröffnen Sie bei Bedarf ein neues Thema.<br/>
<a href="{{reply_message_link}}" class="button button1">zurück zum Beitrag</a>
</div>

<!--Diese Funktionen veerhindern, dass weitere Templates geladen werden-->
{{template_stoploading(new_message)}}
{{template_stoploading(quote_html)}}
 
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.end}}
 
{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_close.end}}
 
<!--Thread ist älter als in maxdays_messageage_warning definiert - Warnhinweis anzeigen-->
{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_warning.start}}{{days_inactive<plugin_threadautoclose_config_maxdays_messageage_close.start}}
{{limitreached.start}}1{{limitreached.end}}
<div class="threadinactive">Bitte beachten Sie, dass in diesem Thema schon länger kein Beitrag mehr verfasst wurde.<br/>Überlegen Sie vor dem posten ob es nicht sinnvoller ist, ein neues Thema zu eröffnen.</div>
{{days_inactive<plugin_threadautoclose_config_maxdays_messageage_close.end}}{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_warning.end}}
 

<!--Hier wird der eingefügte Code per Javascript auf der Seite positioniert. Je nach Template wird er an eine unterschiedliche Position geschoben-->
{{limitreached==true.start}}
 
<script>
$(document).ready(function(){
{{template==1.start}}var $infotexttarget = $('#previewbutton').closest('table');{{template==1.end}}
{{template==111.start}}var $infotexttarget = $('#previewbutton').closest('table');{{template==111.end}}
{{template==110.start}}var $infotexttarget = $(".submit-buttons");{{template==110.end}}
{{template==144.start}}var $infotexttarget = $("#newmsg");{{template==144.end}}
$('.threadinactive').insertBefore($infotexttarget);
});</script>
{{limitreached==true.end}}
{{reply==true.end}}
 



Das Element "topic" wird auf der Themen Ansicht geladen. Für die erste Version des Plugins beschränken wir uns darauf, die Schnellantwort auszublenden, wenn das Limit überschritten wurde (da Mitglieder ja sonst auf diesem Wege dennoch Beiträge schreiben könnten).


{{secs_since_message.startint}}{{server_time}}-{{thread_lastmessage_ts}}{{secs_since_message.end}}
{{days_inactive.startint}}{{secs_since_message}}/60/60/24{{days_inactive.end}}

{{limitreached.start}}0{{limitreached.end}}

{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_close.start}}
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.start}}
{{limitreached.start}}1{{limitreached.end}}
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.else}}
{{reply_quick.start}}0{{reply_quick.end}}
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.end}}

{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_close.end}}




4) Testen



Wenn alles klappt, sollten nun beim beantworten alter Themen keine Antwort mehr möglich sein.




5) Veröffentlichen



An dieser Stelle ist die erste Version des Plugins fertig für die Veröffentlichung im Plugin-Store. Dazu geben wir in den Plugin-Einstellungen die gewünschte Versionsnummer an (Falls bereits eine Version des Plugins veröffentlicht wurde muss die versionsnummer höher sein als zuvor!) und klicken auf "In Plugin Store veröffentlichen. Da wir bei den Plugin-Einstellungen festgelegt haben, dass das Plugin sichtbar für alle ist (Public Store) erscheint das Plugin nun im öffentlichen Plugin Store, sobald ein Xobor Mitarbeiter den Code überprüft und für gut befunden hat.

Ist das Plugin erst einmal im Plugin Store, kann es von allen Xobor Foren mit einem Klick installiert und verwendet werden.

6) Erweitern



Die Arbeit hört hier natürlich nicht auf. Man könnte noch Variablen hinzufügen, die dem Admin erlauben, selbst die angezeigten Texte festzulegen. Oder man fügt bei der Themen-Ansicht gleich das "Thema geschlossen"-Icon ein wenn das Antworten nicht gestattet ist.

Nachdem ein Plugin verändert wurde, muss eine neue Versionsnummer angegeben werden, bevor es im Plugin Store veröffentlicht werden kann. Ist eine neue Version verfügbar, können alle Foren das Update mit einem Klick installieren.


Login
Activity Feed
rating rating
spotter46 hat sich bedankt!
Beitrag: Mitgliederliste editieren
%usernames% hat sich bedankt!
forum_message forum_message
Olaf und focus haben 2 neue Beiträge im Thema Mitgliederliste editieren geschrieben.
Ergänzend sei noch mein Plugin "Profilfelder in der Userliste abschalten" zu erwähnen,mit dem man alle Profilfelder in der Mitgliederliste für bestimmte Benutzergruppen ab- oder anschalten kann.GrußOlaf
forum_message forum_message
spotter46 und Olaf haben 2 neue Beiträge im Thema Alte Verson geschrieben.
Zitat von Marlies Stockmann im Beitrag #1wie kommr ich in die alte Version zurück find mich in der neuen nicht zurechtHallo Marlies,diese Frage hast Du nicht zum ersten Mal gestellt, sorry wenn ich jetzt den Tipp gebe, sich die Antworten zu notieren, damit das Forum nicht durch immer wieder gleiche ...
forum_message forum_message
Mike48, Jaden und Ingmar haben 4 neue Beiträge im Thema Keine Rückmeldungen auf Anfrage per E-Mail geschrieben.
Zitat von Jaden im Beitrag #11vielen Dank für die Antwort, leider hab ich auf meine Mails keine Antwort erhalten.Hast du eine gmx, web oder google Mail Adress?
forum_topic forum_topic
Mike48 hat das Thema E-Mail abgelehnt wegen fehlender DKIM Signatur erstellt
Tritt oftmals auf für Mails an gmx, web und google Mail-Accounts. Scheinbar nicht bei allen mail.miranus.com Mail-Servern von miranus. Hier ein Auszug aus der Undelivered Mail Returned to SenderZitathost mx-ha02.web.de[212.227.17.8] said: 451-Requested action aborted 451-Reject due to policy rest...
rating rating
focus hat sich bedankt!
Beitrag: Mitgliederliste editieren
%usernames% hat sich bedankt!
forum_topic forum_topic
Marlies Stockmann hat das Thema Alte Verson erstellt
wie kommr ich in die alte Version zurück find mich in der neuen nicht zurecht
forum_message forum_message
spotter46 und Ingmar haben 3 neue Beiträge im Thema manchmal wird die alte Admin-Ansicht angezeigt geschrieben.
Zitat von Ingmar im Beitrag #17Wie ihr schon schreibt tritt es nur gelegentlich auf - ich habe gerade in 4 Testforen Profile gespeichert und hatte das Problem nicht ein mal.Wenn man sich innerhalb der neuen Admin-Oberfläche bewegt, passiert es tatsächlich selten.Wenn man jedoch ein Mitgliedsprofil a...
rating rating
Gabriella und spotter46 haben sich bedankt!
Beitrag: Wortscanner für Schimpfwörter
%usernames% haben sich bedankt!
forum_message forum_message
Mike48 hat einen neuen Beitrag im Thema Mitgliederliste editieren geschrieben.
Administration → Benutzer → Profil Optionen → Sichtbarkeit der Profilfelder anpassen
forum_topic forum_topic
Olaf hat das Thema Wortscanner für Schimpfwörter erstellt
Da hier schon öfters der Wunsch geäußert worden ist,einen Wordscanner für Schimpfwörter zu haben,habe ich ein Plugin dazu geschrieben.Natürlich gibt es in dieser Richtung keine 100%ige Sicherheit,aber mit diesem Plugin wird schon einiges ausgefiltert.Wer Interesse daran hat,das Plugin mal zu testen,...
forum_topic forum_topic
focus hat das Thema Mitgliederliste editieren erstellt
Hallo,ich habe eine Frage zur Mitgliederliste. Ich habe diese gesperrt. Gibt es die Möglichkeit diese zu editieren, so das nicht alle Angaben sichtbar sind.Einige Mitglieder fragten nach einer Liste. Dem möchte ich gerne nachkommen und eine Mitgliederlisteeinstellen, allerdings nicht mit allen Daten...
forum_message forum_message
wildflower hat einen neuen Beitrag im Thema Premium Tarif überzahlt | Support gibt keine Antwort geschrieben.
Also langsam kommen wir uns wirklich nicht mehr ernst genommen, nehmt es uns nicht übel. Weder per E-Mail bekommt man eine Rückmeldung, geschweige denn eine Eingangsbestätigung dass es vielleicht zu Wartezeiten kommen kann. Hier wird man einfach ignoriert. Man zahlt für ein Forum und erfährt keinerl...
forum_message forum_message
Portaljäger und Ingmar haben 2 neue Beiträge im Thema E-Mail Postfach für ausgehende E-Mails geschrieben.
Sehr gerne, ich sammle die Daten und schicke dir dann eine PN :)
forum_message forum_message
Gemshorn, Mike48 und spotter46 haben 18 neue Beiträge im Thema Farbe der Benutzergruppen geschrieben.
Ich hab aus meinem Testforum die CSS-Einstellungen ins Hauptforum rüberkopiert.PROBLEM GELÖST!Mir schleierhaft, was das war...
forum_message forum_message
Mike48 und Gyoergy haben 2 neue Beiträge im Thema Spam Mail geschrieben.
Teste mal mit dem leakchecker ob deine Mail Adresse mit Passwort gehackt wurde. https://leakchecker.uni-bonn.de/
forum_topic forum_topic
in großen Foren wird die Moderation oft unter den Moderatoren für verschiedene Bereiche/Foren aufgeteilt.das geschieht hier: Unter Admin → Benutzer → Moderatoren Moderatorenrechte: Erfahre mehr unter: Wiki:rechteeinstellungen-im-forumAngezeigt wird das auf der ForumÜbersicht der Schalter für die A...
forum_topic forum_topic
Portaljäger hat das Thema E-Mail Postfach für ausgehende E-Mails erstellt
Forum: #919489Hallo liebe Xobor-Gemeinde,wenn ich im Forum unter Einstellungen > Mailversand > Ausgehende Mails über eigenen Mail Server verschicken die Daten (Email-Adresse, SMTP-Server, SMTP-Port, Verschlüsselung, Benutzername, Password) von der Forenmail die ich unter Premium > E-Mails einrichten...
forum_message forum_message
Mike48, Gyoergy und Ingmar haben 4 neue Beiträge im Thema Spam Mail geschrieben.
Hast du denn nach dem 23.6.2025 wenigstens dein Passwort für administrator@neues-ungarn.de geändert wenn du das mit dem iPhone in Brüssel nicht warst?Ebenfalls das Passwort für den Admin im Forum ändern. Administrator Passwort am besten zuerst ändern und sich abmelden. Mit einem Mitglieder Account ...
rating rating
River hat sich bedankt!
Beitrag: Hilfe, ich habe alles vergessen
%usernames% hat sich bedankt!
rating rating
River hat sich bedankt!
Beitrag: Hilfe, ich habe alles vergessen
%usernames% hat sich bedankt!
forum_message forum_message
Mike48 hat einen neuen Beitrag im Thema Farbe der Benutzergruppen geschrieben.
Bei mir funktioniert es richtig. In der neue und auch in der alten Admin wie gehabt. Die Farben werden auch gespeichert. Farbe auswählen und mit dem unten rechts den ColorPicker schließen. Dann speichern.
forum_topic forum_topic
Gemshorn hat das Thema Farbe der Benutzergruppen erstellt
Hallo,gehe ich im Adminbereich zu "Benutzer - Gruppen" und möchte dort die Farben der unterschiedlichen Gruppen bearbeiten, so geht das seit heute nicht mehr. Es öffnet sich beim Klicken auf die aktuelle Farbe zwar die Farbauswahl, aber dort lässt sich nichts verändern. Zudem erscheinen die Werte in...
forum_message forum_message
Gemshorn hat einen neuen Beitrag im Thema Palettentitel bearbeiten geschrieben.
Verstehe. Umso wichtiger wird die Wahl eines guten, selbsterklärenden Icons. Die "Farbpalette" ist eine gute Wahl.
rating rating
Gemshorn hat sich bedankt!
Beitrag: Palettentitel bearbeiten
%usernames% hat sich bedankt!
rating rating
Mike48 hat sich bedankt!
Beitrag: Palettentitel bearbeiten
%usernames% hat sich bedankt!
rating rating
Portaljäger hat sich bedankt!
Beitrag: V6 - Kein Mail Benachrichtung bei Mitglied sperren
%usernames% hat sich bedankt!
forum_message forum_message
l2otbart_57 hat einen neuen Beitrag im Thema Palettentitel bearbeiten geschrieben.
Zitat von Gemshorn im Beitrag #13Anders sei es beim Hovern des Icons in der Iconbardas Problem beim Hovern ist, mobil Nutzer sehen davon nix, wenn keine Maus vorhanden ist.Gerade beim V6 sollte die Handynutzung vorrangig betrachtet werden
rsummary rsummary
River hat 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Gemshorn, Mike48 und Portaljäger haben 3 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
Wer ist Online?
0 Mitglieder und 46 Gäste sind Online
Besucher Statistiken
46 Aktive User
0 Mitglieder und 46 Gäste sind Online

Heute waren Online
Gabriella, Mike48, nobody, spotter46

Besucherrekord
1274 Benutzer gleichzeitig online (11.10.2019 18:19)

Besucherzähler
Heute waren 209 Gäste und 4 Mitglieder, gestern 3136 Gäste und 27 Mitglieder online.

Statistiken
Themen 42009
Beiträge 307648
Mitglieder 12.582
Forum empfehlen