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
844er hat einen neuen Beitrag im Thema v6 Business Linkbuttons weg, zu schmale Inhaltsbox geschrieben.
Hallo Rika1Wer wird denn gleich die Flinte ins Korn werfen..... Ich persönlich arbeite nur noch mit dem v6-Template (seit fast der ersten Stunde) und habe alle meine Foren auf v6 umgestellt. Mir gefällt das sehr sehr gut. Hast du ggf. ein Testforum angelegt, wo du das neue v6 in aller Ruhe ausprobie...
rating rating
l2otbart_57 hat sich bedankt!
Beitrag: Fotos-Exif-Geodaten vs Anonymität
%usernames% hat sich bedankt!
rating rating
l2otbart_57 hat sich bedankt!
Beitrag: Fotos-Exif-Geodaten vs Anonymität
%usernames% hat sich bedankt!
forum_message forum_message
Johannes und Ingmar haben 2 neue Beiträge im Thema Fotos-Exif-Geodaten vs Anonymität geschrieben.
Werden die exif Daten nicht auch beim Wasserzeichen entfernt? Dann wäre das eine Lösung und würde jedes Foto zuverlässig sichern.
forum_topic forum_topic
hallo,In einem Forum ist ein netter Fotofaden entstanden, wo es auch Probleme mit den gekippten Bildern gegeben hat.Bei der Durchsicht der Exif-Daten sind mir dann z.T. die Geo-Koordinaten aufgefallen. In einem Forum, was auf Datenschutz Wert legt, finde ich das fatal.meine Frage hier, wie lassen si...
forum_message forum_message
Rika1 hat einen neuen Beitrag im Thema v6 Business Linkbuttons weg, zu schmale Inhaltsbox geschrieben.
Tja, ich gebe wieder auf. Das war mein dritter Versuch auf v6 umzusteigen. Die Schriftfarben geändert, es geschieht nix, sie bleiben grau und schwarz. Die Forumübersicht passt sich nicht dem PC Desktop an, zu schmal.Und immer noch das Logo, das sich weder mit Wizzard noch mit eigenem html einsetzen ...
forum_message forum_message
Mato hat einen neuen Beitrag im Thema Keine Ahnung was passiert ist .... geschrieben.
Ich glaub ich muß mein Lob wieder zurück nehmen Es fängt schon wieder an mit ewiger Wartezeit und Fehler
forum_message forum_message
minasmask hat einen neuen Beitrag im Thema „System“ bearbeitet Beiträge? geschrieben.
Bei meinem Forum (und allen anderen, in denen ich bin) passiert dasselbe, obwohl wir keinen Account-Switcher haben und jemals installiert hatten. Der allererste Beitrag vom Admin-Account ist ebenfalls mit dem "System"-Nutzer hinterlegt.Siehe hier: http://blessing-in-disguise.xobor.de/f2-Regeln.html
forum_message forum_message
Schön für Dich. Bei mir hat nix funktioniert.Wie gesagt mit dem html-link war die obere Leiste über dem Logo verschwunden.Mit dem eingebauten Headerdings war der Header größer als das Logo. Trotz "auto" hat es sich nicht automatisch angepasst. Wenn alles funktionieren würde hätte man auch viel Arbei...
rating rating
Gabriella und Rika1 hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
rating rating
%usernames% hat sich bedankt!
forum_topic forum_topic
Gebe wieder mal auf!Wollte v6 mit dem business Layout.Der Foreninhalt wird viel zu schmal angezeigt! Mein privater Button und der Linkbutton zur Administration werden nicht angezeigt.Wenn man das v6 so gut konfigurieren könnte wie v4 wäre es ja okay. Aber wenn nix funktioniert wie es sollte.... da b...
forum_message forum_message
Rika1 hat einen neuen Beitrag im Thema v6 Logo erscheint doppelt geschrieben.
Nochmal danke Mike. Hab es geändert.
forum_topic forum_topic
Im zuletzt diskutierten Thema hier v6 Logo erscheint doppelt (3) wird der eingefügte Bilderlink doppelt angezeigt.Das habe ich bei mir auch öfters, wenn man die Datei neu hochgeladen und dann eingefügt hat.Die Reduzierung durch Kürzen des Links funktioniert genauso.Verwendet wird das bei uns für Kat...
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Zitat von River im Beitrag #2Die Abfrage könnte zum Cookie-Layer gehören bzw. möglicherweise angezeigt werden, wenn die User zuvor nicht sämtlichen Cookies zugestimmt haben.Genau so ist es. Nach den gesetzlichen Vorgaben muss der Nutzer zustimmen, BEVOR das Javascript für das reCAPTCHA von Google üb...
rating rating
844er hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
forum_message forum_message
Mike48 und 3 weitere haben 20 neue Beiträge im Thema v6 Logo erscheint doppelt geschrieben.
Zitat von Rika1 im Beitrag #31Alles gut. Danke.Ist nicht gut. Sieht im ersten Augenblick wie OK aus, ist aber sehr fehlerhaft und kann im ganzen Forum zu Problemen führen da in der Kopfzeile die auf allen Seiten angezeigt wird. Bei dir ist folgendes drin123 <!-- begin - Header gestalten mit Grafik u...
rating rating
River hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
rating rating
River hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
forum_topic forum_topic
HalloIch habe in all meinen Foren die Sicherheitsabfrage bei Anmeldung (Login) auf reCAPTCHA gewählt. Wenn sich jetzt User Anmelden wollen, dann erscheint zusätzliche Abfrage (siehe Bild)[[File:reCapcha.png|none|auto]]Warum muss man da erst noch was zustimmen, bevor dann das eigentliche reCAPTCHA-Fe...
rating rating
Rika1 hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
rating rating
Rika1 hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
rating rating
Rika1 hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
forum_message forum_message
Mike48 und 2 weitere haben 11 neue Beiträge im Thema v6 Logo erscheint doppelt geschrieben.
Ich habe leider keine Einstellung gefunden um das Muster zu deaktivieren. Ich habe es mit einem CSS deaktiviert.Admin → Layout → Farben & Einstellungen → CSS/SCSS → CSS / SCSS Addon123 .headeroverlay,#usertoggler_menu_lg,#adminlink{ display:none; } 
rating rating
Rika1 hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
rating rating
Rika1 hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
rating rating
Rika1 hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
rating rating
River hat sich bedankt!
Beitrag: v6 Logo erscheint doppelt
%usernames% hat sich bedankt!
forum_message_revision forum_message_revision
River hat einen Beitrag im Thema v6 Logo erscheint doppelt bearbeitet.
Das hast du vermutlich in deinem Testforum? Dein anderes ist ja noch das v4 Business.Da kann ich natürlich nicht nachschauen. Entweder ist das Headerbild über einen Bilderlink in der Kopfzeile UND im Logo Wizard drin, oder die Einstellungen passen nicht.Man kann ja den Header für mobil und für PC ex...
forum_topic forum_topic
Rika1 hat das Thema v6 Logo erscheint doppelt erstellt
Hallo Hab mich nach langer Zeit mal wieder in meinem Testforum mit v6 beschäftigt. Erst erschien das Logo mit einem nebelartigen Überzug. Jetzt erscheint das Logo doppelt untereinander. Das obere ist klar, das untere dieses nebelhafte.Kann mir bitte jemand sagen warum das doppelt erscheint und wie i...
forum_message forum_message
River hat einen neuen Beitrag im Thema Bildergalerie kommentieren geschrieben.
Zitat von Mato im Beitrag #1Ist sowas vorgesehen?Diese Option sehe ich nicht.Du könntest für das erste Bild im Album eine Grafik basteln mit Text 'Kommentare zum Album' und im Album hochladen.Dieses erste Bild im Album könnte man dann für Kommentare nutzen.Viele Grüße RiverMeat Loaf schreibt man nic...
forum_topic forum_topic
Mato hat das Thema Bildergalerie kommentieren erstellt
Ich fände es schön wenn User die Alben kommentieren könnten und nicht nur die einzelnen Bilder.Ist sowas vorgesehen?Wäre echt Klasse.
rsummary rsummary
l2otbart_57 hat 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Gabriella und 2 weitere haben 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
River hat 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Rika1 hat 3 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Rika1 und 1 weitere haben 4 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
Wer ist Online?
2 Mitglieder und 11 Gäste sind Online
Besucher Statistiken
13 Aktive User
2 Mitglieder und 11 Gäste sind Online:
creator, Kipper-Spedition

Heute waren Online
844er, creator, Lucas Zelasko, Sami

Besucherrekord
1274 Benutzer gleichzeitig online (11.10.2019 18:19)

Besucherzähler
Heute waren 12 Gäste und 4 Mitglieder, gestern 1138 Gäste und 46 Mitglieder online.

Statistiken
Themen 39784
Beiträge 287689
Mitglieder 12.018
Forum empfehlen