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
forum_message forum_message
sikookis, Franz-Jupp und creator haben 5 neue Beiträge im Thema Dateisuche in den Dateianhänger nur nach Dateinamen möglich? geschrieben.
Das liegt daran, dass du mit Hilfe der Foren-Suche suchst.Ich bewege mich aber in der Administration → Einstellungen → Dateianhänge !!Dort habe ich den Wunsch. [[File:SucheDateianhänge.png|none|fullsize]]LGsikookis
forum_message forum_message
Kräuterhexe und 3 weitere haben 4 neue Beiträge im Thema Xobor APP bald für jedes Forum - Jetzt die APP hier Beta testen geschrieben.
Bei mir funktioniert es. Hab die App auf dem Handy und Laptop installiert. Nur das eigene Logo wird nicht angezeigt.
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Gabriella und 3 weitere haben 4 neue Beiträge im Thema Kommentare in der Bildergalerie - Editiermöglichkeit geschrieben.
Mike,hier ist aber von Kommentaren editieren in der Bildgalerie die Rede und nicht von den andern. Da bei mir aber die Bildgalerie gar nicht für Kommentare freigegeben ist (dient bei uns nur zu Archivzecken) ist mir noch gar nie aufgefallen, dass das in der Bildgalerie nicht geht. In Themen und Beit...
rating rating
%usernames% hat sich bedankt!
rating rating
%usernames% hat sich bedankt!
rating rating
%usernames% hat sich bedankt!
rating rating
Franz-Jupp hat sich bedankt!
Beitrag: Kommentare in der Bildergalerie - Editiermöglichkeit
%usernames% hat sich bedankt!
forum_message forum_message
Bettina1959 hat einen neuen Beitrag im Thema HTTPS-Verschlüsselung geschrieben.
@Ingmar @Johannes Ihr Lieben, leider funktioniert die HTTPS-Verschlüsselung immer noch nicht. Forum # 757209Immer noch das selbe wie unten zitiert,,,,Zitat von Bettina1959 im Beitrag #3Hallo liebes Support-Team,bei mir dauert es nun auch schon beinahe 2 Wochen...Forum Nr. 757209Immer sehe ich nur d...
forum_message forum_message
sikookis und 1 weitere haben 2 neue Beiträge im Thema Dateisuche in den Dateianhänger nur nach Dateinamen möglich? geschrieben.
Der Original-Name ist für mich eher nicht wichtig.Wie in meinem obigen Bildbeispiel zu sehen, trägt die Dateiauch neben dem kryptischen Dateinamen auch einen Titel: ´Am Fuße des Bergest - Luxus - SiidV´.Diese Titel möchte ich durchsuchen.Und genau dafür gibts keine Suchfunktion :-(
forum_topic forum_topic
Board-Nr.: 779879In den Dateianhängen kann man eine Suche starten. Diese scheint aber nur für Dateinamen zu funktionieren.Jeder Dateianhang hat jedoch auch einen Titel:[[File:Dateianhang.png|none|fullsize]]Die Dateinamen sind allesamt bei mir kryptisch. Nach dem Titel zu suchen wäre wesentlich besse...
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Nico1981 und 3 weitere haben 4 neue Beiträge im Thema Xobor APP bald für jedes Forum - Jetzt die APP hier Beta testen geschrieben.
Da das mit den Pushnachrichten bei mehreren Foren nicht geht, würde ich davon ausgehen, dass das genau wie mit dem Logo noch ein allgemeiner Fehler ist.
forum_message forum_message
Meikel und 2 weitere haben 3 neue Beiträge im Thema Gibt es ein Red-Flag-Plugin bzw. Scan-Plugin für automatische Verwarnungen? geschrieben.
Danke Ingmar - mir geht es allerdings nicht darum, dass Forenmitgliedern hier die Verantwortung überlassen wird - ich brauche ziemlich enge Regeln die zeitnah umgesetzt werden müssen - daher zielt meine Frage auf etwas automatisch funktionierendes ab etwas wie - ich gebe Keywords ein und sobald eine...
rating rating
Lebenskünstler hat sich bedankt!
Beitrag: Forum Zugriff nicht sicher
%usernames% hat sich bedankt!
forum_topic forum_topic
Hallo Team!ich bin auf der Suche nach einem Plugin in für automatische Verwarnungen. Die Idee dahinter ist, wenn ein Forenmitglied Wörter benutzt, die laut den Forenregeln nicht gestattet sind, dann sollen diese automatisch zu einer Verwarnung führen beziehungsweise gelöscht werden. Eine andere Idee...
rating rating
Mike48 hat sich bedankt!
Beitrag: Benutzerbilder optional ausblenden lassen
%usernames% hat sich bedankt!
forum_message forum_message
TripleM und 3 weitere haben 9 neue Beiträge im Thema Xobor APP bald für jedes Forum - Jetzt die APP hier Beta testen geschrieben.
Ok, das habe ich nicht mitbekommen das es schon zur Verfügung steht. Werde es testen.
forum_message forum_message
Nico1981 und 1 weitere haben 3 neue Beiträge im Thema Benutzerbilder optional ausblenden lassen geschrieben.
Danke, habe die neue Version installiert und es sieht jetzt alles so aus wie es soll!
rating rating
old-smokey hat sich bedankt!
Beitrag: Forum Zugriff nicht sicher
%usernames% hat sich bedankt!
rating rating
Nico1981 hat sich bedankt!
Beitrag: Benutzerbilder optional ausblenden lassen
%usernames% hat sich bedankt!
rating rating
%usernames% hat sich bedankt!
rating rating
%usernames% hat sich bedankt!
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Ingmar und 1 weitere haben 2 neue Beiträge im Thema Forum Zugriff nicht sicher geschrieben.
Zitat von old-smokey im Beitrag #2Nachtrag, in der Admin zu sehen, https ist deaktiviert, obwohl weder ich noch mein Co-Admin daran was geändert habenDas wurde ziemlich sicher durch einen Fehler in einem unserer Domain-Wartungs-Skripts verursacht. Johannes ist auf der Fehlersuche.
forum_message forum_message
Habe eine ältere Kopie gefunden und aktiviert. Jetzt ist wieder fast alles iO. Muss ein paar Einträge ergänzen. Danke für die Geduld und Hinweise.Mir dem X6 werde ich im Testforum nochmal bearbeiten. Also auch hier das Problem bearbeitet und abgehackt.
rating rating
River hat sich bedankt!
Beitrag: neues Admin
%usernames% hat sich bedankt!
rating rating
River und 2 weitere haben sich bedankt!
Beitrag: neues Admin
%usernames% haben sich bedankt!
rating rating
River hat sich bedankt!
Beitrag: neues Admin
%usernames% hat sich bedankt!
forum_message forum_message
Mike48 und 5 weitere haben 6 neue Beiträge im Thema neues Admin geschrieben.
Zitat von Uschi im Beitrag #24also beim alten Admingehe ich über Farben Einstellungenzur Hintergrundkopfzeile und lade dort dann das bereits vorbereitete Bild hochspeichern und fertig(da kann ich auch das Hintergrundbild hoch laden)Die gezeigte Einstellung im Beitrag #24 ist V3 (Gaia) spezifisch un...
forum_topic forum_topic
old-smokey hat das Thema Forum Zugriff nicht sicher erstellt
@Ingmar Es kam eben in unserem Forum die Frage auf, weshalb plötzlich der Zugriff auf das Forum als nicht sicher angezeigt wird. Das ist seit irgendwann heute tatsächlich der Fall, egal mit welchem Browser.Ist ein Sicherheitszertifikat abgelaufen oder ist das durch ein Update von euch passiert? Auf...
rating rating
Mike48 hat sich bedankt!
Beitrag: In einem Album werden Bilder nicht angezeigt.
%usernames% hat sich bedankt!
rating rating
Franz-Jupp hat sich bedankt!
Beitrag: neues Admin
%usernames% hat sich bedankt!
forum_message forum_message
Lebenskünstler hat einen neuen Beitrag im Thema Kommentare in der Bildergalerie - Editiermöglichkeit geschrieben.
danke für die sachliche Erläuterung. Somit sind die Gründe auch nachvollziehbar.
forum_message forum_message
Ingmar hat einen neuen Beitrag im Thema In einem Album werden Bilder nicht angezeigt. geschrieben.
Das sieht so aus, als ob es dort einen Fehler bei der Erzeugung der Vorschaugrafiken gab. Jetzt liegen für die in der Alben-Ansicht gezeigten Grafiken fehlerhafte Bilder im Cache. Das sollte sich von alleine beheben, sobald der Cache sich erneuert.
rsummary rsummary
Nico1981 und 1 weitere haben 4 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
old-smokey und 1 weitere haben 5 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
River und 2 weitere haben 3 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Mike48 und 1 weitere haben 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
Wer ist Online?
3 Mitglieder und 25 Gäste sind Online
Besucher Statistiken
28 Aktive User
3 Mitglieder und 25 Gäste sind Online:
nobody, Meikel, sikookis


Besucherrekord
1274 Benutzer gleichzeitig online (11.10.2019 18:19)

Besucherzähler
Heute waren 989 Gäste und 26 Mitglieder, gestern 1646 Gäste und 39 Mitglieder online.

Statistiken
Themen 41408
Beiträge 302338
Mitglieder 12.393
Forum empfehlen