WoltLab Cloud KittMedia Visit Statistics 1.2.3

Extend your WoltLab Suite with a lightweight tool to measure the popularity of your project by collecting the site visits.

Extend your WoltLab Suite with a lightweight tool to measure the popularity of your project by collecting the site visits. KittMedia Visit Statistics doesn’t track your users and doesn’t use any tracking mechanism. It is privacy-friendly by design and neither needs a privacy policy text.


An interactive chart displays your site visits over time and comes with the most important statistics for today’s, yesterday’s and total visits. Besides it provides a list with the most visited pages.

Data Privacy

KittMedia Visit Statistics doesn’t process or store any personal data of you users, unlike the most statistic services such as Google Analytics and Matomo (Piwik).


Besides the visited URL and its title, only the timestamp of the request, a boolean for whether the visitor is registered or a guest, the language and the ID and the object ID of the visited page is stored in the database.


Never is or will data be sent to us or any third party.


Due to this mechanism, KittMedia Visit Statistics is 100 % GDPR compliant without needing any consent of the user or the need to extend your privacy policy.

Data that isn’t tracked

Some requests are not getting tracked by the plugin. Besides visits of pages the user is not allowed to visit (HTTP error 403) or that are not available (HTTP error 404), invalid requests, requests from spiders or any request to AJAX actions, attachments, media or background actions are ignored.


Additionally, you can disable tracking for certain user groups in the user group settings.


If a user opens a conversation, its title and URL are replaced before KittMedia Visit Statistics stores the data in the database.

In short

Visit the statistics in your administration control panel under Management > Statistics > Visitor Statistics.

Exclude user groups in your user group settings under General Permissions > User Profiles > Exclude requests from visitor statistics.

You can also add a box via Content > Boxes called “Visits” to the frontend, which displays general statistics.

Images

  • Version 1.2.3

    – We fixed display issues if there are some days without data.

    – We fixed getting mixed up data from today’s and all time frequently visited pages.

  • Version 1.2.2

    – We added missing language variables.

    – We made sure that formatting the numbers is always according to the current user’s language.

    – If only one language is available, the list of frequently visited pages doesn’t contain the column “language” anymore.

    – It was possible that calculating the correct values failed with an error message.

    – Calculating the values for week, month and total has been fixed.

    – The data for today were excluded in the list of all time frequently visited pages.

    – Due to a caching problem with a JavaScript file it could be possible that you get an error message if you open the visit statistics.

    – We fixed a potential error on pages where the box was enabled.

  • Version 1.2.1

    – We fixed an error on a fresh installation, if there is no data yet.


    Version 1.2.0

    – You can now add a box called “Visits” to your frontend anywhere you want to display general statistics there, too.

    – You can now limit the graph by a date period.

    – You can now hide visit types (guests/registered users) in the graph.

    – A new area displays frequently visited pages from the beginning of the tracking.

    – The statistics for “yesterday” are now also correct if the daily cron has not been running yet.

    – The statistics for “This week” now also uses the data from today to calculate its value.

  • Version 1.1.4

    – Fixed a bug according to timezone changes in winter time

  • Version 1.1.3

    – Fixed a bug in the cron job if there are no daily statistics yet

  • Version 1.1.2

    – Improve English translation if currently no visit is available

    – Improve data point of guests

    – Improve cron update

    – Improve chart design with few entries

    – Improve displaying table of visited pages

    – Fix check if given page ID is invalid

    – Fix saving the correct language of guests instead of always using the default

  • Version 1.1.1

    – Fix calculation of the average

    – Fix a bug with a field too big in older MySQL versions

    – Fix potential division by zero on an empty statistic

  • Version 1.1.0

    – Summarize data and keep detailed information only for a week to drastically reduce space amount needed.

    – Added separate graphs for registered users and guests, displaying them in a bar chart.

    – Added more general counts for this week, last week, this month, last month and average visits.

    – Added storing the used language.

    – Changed storing of the page title of the visit to get it on-the-fly in the statistics in the language of the administrator.

    – Fixed storing and displaying HTML entities.

  • Version 1.0.4

    – Fixed a bug that could lead to incorrect dates in the statistics.

  • Version 1.0.3

    – Removed dependency on the package WoltLab Suite Core: Conversations

    – Fixed a possible error if the web server doesn’t use UTF-8

    – General code and performance improvements

  • Wie genau setzt sich der Titel der häufig aufgerufenen Seiten zusammen? Ich habe bei einem meiner Plugins das Problem, dass dort der Content-Titel der Seite eingetragen ist, der auch in der page.xml eingetragen ist. Je nach URL (show/id-title/) ist der Titel aber anders. Statt dann den richtigen Titel der Seite (entsprechend zur ID) anzuzeigen steht bei mir nur der Standard-Wert aus der page.xml.

    Bei den Artikeln steht z.B. "Artikel Titel", ich kann mir aber nicht genau erklären, wo das genau her kommt. Danke schon mal für die Hilfe :)

    • Der Titel ist tatsächlich etwas tricky.

      Wie ich den in der Datenbank speichere, siehst du hier:

      https://github.com/KittMedia/c…istener.class.php#L34-L42


      Im Endeffekt verlasse ich mich an der Stelle darauf, was WoltLab mir über WCF::getTPL()->get('contentTitle') bzw. WCF::getTPL()->get('pageTitle') zurückgibt.


      Bei der Ausgabe im Template versuche ich dann nochmal, den korrekten Seitentitel aus dem PageCache zu bekommen:

      https://github.com/KittMedia/c…rPage.class.php#L166-L167


      Wenn das fehlschlägt, fällt er auf den in der Datenbank gespeicherten Wert zurück. Das dürfte bei dir der Fall sein.

    • Danke, dann werde ich mal in diese Richtung ein wenig mehr probieren, bzw. auch debuggen :)

      Ist zwar nicht so schlimm, aber wenn man 10 Mal den Titel aus der page.xml für unterschiedliche IDs hat, stört das doch manchmal :)

  • Hello,


    Latest version bugs my forum when i enable BOX on Forum.


    Woltlab Version : 5.3.5


    An error has occurred

    Internal error code: 9c2b2416f1769becf19cf491552952d6560ce090

    What happened?

    An error has occurred while trying to handle your request and execution has been terminated. Please forward the above error code to the site administrator.


    The error code can be used by an administrator to lookup the full error message in the Administration Control Panel via “Logs » Errors”. In addition the error has been written to the log file located at */log/2021-04-08.txt and can be accessed with a FTP program or similar.


    Notice: The error code was randomly generated and has no use beyond looking up the full message.

    • Error Type:

      wcf\system\exception\ErrorException

    • Error Message:

      Trying to get property 'conditionData' of non-object

    • File:

      */lib/system/WCF.class.php (343)

    • Stack Trace:
      • #0 */lib/system/box/VisitStatisticsVisitsBoxController.class.php (40):
      • wcf\system\WCF::handleError(8, 'Trying to get property \'conditionData\' of non-object', '*/lib/system/box/VisitStatisticsVisitsBoxController.class.php', 40, [ conditions => ])
      • #1 */lib/system/box/VisitStatisticsVisitsBoxController.class.php (27):
      • wcf\system\box\VisitStatisticsVisitsBoxController->getTemplate()
      • #2 */lib/system/box/AbstractBoxController.class.php (51):
      • wcf\system\box\VisitStatisticsVisitsBoxController->loadContent()
      • #3 */lib/data/box/Box.class.php (245):
      • wcf\system\box\AbstractBoxController->getContent()
      • #4 */templates/compiled/2_wcf_1___box.php (43):
      • wcf\data\box\Box->getContent()
      • #5 */lib/system/template/TemplateEngine.class.php (334):
      • include('*/templates/compiled/2_wcf_1___box.php')
      • #6 */lib/system/template/TemplateEngine.class.php (562):
      • wcf\system\template\TemplateEngine->display('__box', 'wcf', false)
      • #7 */lib/data/box/Box.class.php (285):
      • wcf\system\template\TemplateEngine->fetch('__box')
      • #8 */templates/compiled/2_wbb_1_boardList.php (2367):
      • wcf\data\box\Box->render()
      • #9 */lib/system/template/TemplateEngine.class.php (334):
      • include('*/templates/compiled/2_wbb_1_boardList.php')
      • #10 */lib/page/AbstractPage.class.php (323):
      • wcf\system\template\TemplateEngine->display('boardList', 'wbb')
      • #11 */lib/page/AbstractPage.class.php (114):
      • wcf\page\AbstractPage->show()
      • #12 */lib/system/request/Request.class.php (83):
      • wcf\page\AbstractPage->__run()
      • #13 */lib/system/request/RequestHandler.class.php (107):
      • wcf\system\request\Request->execute()
      • #14 */forum/index.php (9):
      • wcf\system\request\RequestHandler->handle('wbb')


    • Hi!


      Thank you for reporting, I was able to reproduce and fix it in the current development version:

      https://github.com/KittMedia/c…visitstatistics/issues/40

    • hey!


      thank you very much. Im updated my file but this time it gives me another error


      • Error Type:

        wcf\system\exception\ErrorException

      • Error Message:

        Undefined index: hideToday

      • File:

        */lib/system/WCF.class.php (343)

      • Stack Trace:
        • #0 */templates/compiled/2_wcf_1_boxVisitStatisticsVisits.php (17):
        • wcf\system\WCF::handleError(8, 'Undefined index: hideToday', '*/templates/compiled/2_wcf_1_boxVisitStatisticsVisits.php', 17, [ 7 items ])
        • #1 */lib/system/template/TemplateEngine.class.php (334):
        • include('*/templates/compiled/2_wcf_1_boxVisitStatisticsVisits.php')
        • #2 */lib/system/template/TemplateEngine.class.php (562):
        • wcf\system\template\TemplateEngine->display('boxVisitStatisticsVisits', 'wcf', false)
        • #3 */lib/system/box/VisitStatisticsVisitsBoxController.class.php (58):
        • wcf\system\template\TemplateEngine->fetch('boxVisitStatisticsVisits', 'wcf', [ 11 items ], true)
        • #4 */lib/system/box/VisitStatisticsVisitsBoxController.class.php (29):
        • wcf\system\box\VisitStatisticsVisitsBoxController->getTemplate()
        • #5 */lib/system/box/AbstractBoxController.class.php (51):
        • wcf\system\box\VisitStatisticsVisitsBoxController->loadContent()
        • #6 */lib/data/box/Box.class.php (245):
        • wcf\system\box\AbstractBoxController->getContent()
        • #7 */templates/compiled/2_wcf_1___box.php (43):
        • wcf\data\box\Box->getContent()
        • #8 */lib/system/template/TemplateEngine.class.php (334):
        • include('*/templates/compiled/2_wcf_1___box.php')
        • #9 */lib/system/template/TemplateEngine.class.php (562):
        • wcf\system\template\TemplateEngine->display('__box', 'wcf', false)
        • #10 */lib/data/box/Box.class.php (285):
        • wcf\system\template\TemplateEngine->fetch('__box')
        • #11 */templates/compiled/2_wbb_1_boardList.php (2367):
        • wcf\data\box\Box->render()
        • #12 */lib/system/template/TemplateEngine.class.php (334):
        • include('*/templates/compiled/2_wbb_1_boardList.php')
        • #13 */lib/page/AbstractPage.class.php (323):
        • wcf\system\template\TemplateEngine->display('boardList', 'wbb')
        • #14 */lib/page/AbstractPage.class.php (114):
        • wcf\page\AbstractPage->show()
        • #15 */lib/system/request/Request.class.php (83):
        • wcf\page\AbstractPage->__run()
        • #16 */lib/system/request/RequestHandler.class.php (107):
        • wcf\system\request\Request->execute()
        • #17 */forum/index.php (9):
        • wcf\system\request\RequestHandler->handle('wbb')


    • Could you please try this file instead?

      https://gist.github.com/MatzeK…0545d91edff36d87873e57ce0

      Like 1 Thanks 1
    • thank you very much, it seems fine now i can use box without any problem. :)

      Thanks 1
    • Thank you for helping resolving this issue! :)

      Thanks 1
  • Hi

    After I updated to version 1.2.1 I get an error message when I go to Visit Statistics in ACP


    Code
    The parameter “startDate” is missing or invalid.
    • Hi!


      Do you get this error every time or just once?

      If so, could you please clear your browser cache and try again?

      Thanks 1
    • Got this error after the update, but clearing the cache helped :)

    • Thank you for the response! Then I think I know what causes this problem.

      I’ve got it also once during development but couldn’t find a problem at that moment.

  • Hallo! Ich benötige eine Statistik, die mir zeigt, wie viele Aufrufe ein Thread (Seite 1 des Threads) hat. Generiert werden sollte eine Liste mit den Threads, die mehr als (zb) 1000 Aufrufe haben. Und es müsste einen Weg geben, die Statistiken zurück zu setzen. Kann ich das mit dem Plugin lösen?

    • Zumindest das Sammeln der Daten kann dieses Plugin übernehmen. Die Auswertung müsstest du dann über die Datenbank selbst manuell vornehmen.

  • Erst einmal vielen Dank für das Plugin.


    Wäre es möglich eventuell auf einzelne Zeitbereiche die die Übersicht häufig besuchte Seiten runter zu brechen.


    Eventuell mit Zeitangabe von - bis


    oder


    Einteilung zum Beispiel


    letzte Stunde

    letzte 2 Stunden

    letzte 4 Stunden

    letzte 12 Stunden

    letzte 24 Stunden

    letzte 2 Tage

    letzte Woche

    letzte 2 Wochen

    letzte 4 Wochen

    letzte 52 Wochen

    Gesamt

  • Gibt es die Möglichkeit die Zugriffe auf die verschiedenen Seiten einer Kategorie (hier: Filebase) zu bündeln? Ich habe eine Filebase Kategorie mit vielen Seiten, die alle bei mir aufgeführt werden unter "Datei-Kategorie Musik" (ohne weitere Details). Erst beim Klick auf den Eintrag in der Statistik sehe ich, dass es Seite 34 oder Seite 40 war. Für mich nützlich wäre es, wenn ich die Parametrisierung der Seiten (also z.B. &pageNo=) und ggf. andere Parameter ausblenden könnte.

    • Aktuell gibt es so etwas noch nicht. Eventuell wäre so etwas für zukünftige Versionen etwas.

      Like 1
  • Könnt ihr hier mal reinschauen? Dieser Fehler wird von eurem Plugin verursacht:


    RE: Fehlermeldung - A non well formed numeric value encountered

  • Wünschenswert wäre es, wenn die Statistik einen Unterschied bei den Gästen machen würde. Zwischen einen Robot (Crowler) und ein menschlicher Gast (Besucher) ist ein erheblicher Unterschied. Die Bots besuchen i.d.R. alle Seiten, während die menschlichen Gäste gezielt Seiten besuchen.

    • Es werden bereits alle Aufrufe, die der WoltLab Suite Core als Bots erkennt, ignoriert. Darüber hinaus gibt es eine schlichte Erkennung für weitere generische Browserkennungen.

      Like 1
  • Ich habe heute die 1.1.1 Version installiert, Aufräumarbeiten durchgeführt.

    Die Anzahl oben links als Zahl dargestellt (in der Übersicht) stimmt noch nicht mit der angezeigten Anzahl im Balkendiagramm

    überein:

    Beispiel:

    in der Übersicht

    Heute: 5474

    im Balkendiagramm:

    910 Besuche von Registrierten

    5474 Besuche von Gästen


    in der Übersicht müßten dann stehen Heute : 6385 (gesamt) die Addition von Registrierten + Gästen


    Gruß

    • Anders herum ist es korrekt: Es gibt 910 Besuche registrierter Benutzer und 4564 Besuche von Gästen, was dann im Tooltip auf 5474 addiert wird. Ich bin mir des Problems bewusst, kann ich allerdings bisher noch keine Lösung anbieten. Es wird aber sicherlich in einer zukünftigen Version adressiert werden.

  • Schön wäre noch, wenn man die Statistik für die letzten 14 Tage auf Stunden runterbrechen könnte. Damit könnte man schauen wann das Forum wie und von wem frequentiert wird.

    Like 1
    • Gibt es einen speziellen Grund für die von dir genannten 14 Tage? Hintergrund ist, dass ältere Daten aktuell nach 7 Tagen verworfen werden.


      Ein „von wem“ wird es effektiv nicht geben, allein deshalb, weil diese Daten gar nicht erfasst werden.


      Davon abgesehen kann ich mir aber gut vorstellen, das zu implementieren.

    • 7 Tage wäre auch ok. 14 Tage besser

    • Wieso das? Versteh mich bitte nicht falsch, das soll keine Kritik sein, ich möchte lediglich den Grund dafür erfahren. Letztendlich soll das, was ich in das Plugin einbaue, einen Mehrwert bieten. Dafür muss ich diesen Mehrwert aber auch verstehen.

    • Bei 14 Tagen sehe ich zwei Mal den gleichen Wochentag und kann dann Montag Vorwoche mit Montag laufende Woche vergleichen.

  • Forenweit Fehler:


    Parse error: syntax error, unexpected '?' in /www/htdocs/xxxxxxx/cms/lib/data/visitor/VisitorAction.class.php on line 95

    • Laut Fehlermeldung nutzt du nicht mindestens PHP 7.0, was Mindestvoraussetzung für die WoltLab Suite und damit einhergehend auch für dieses Plugin ist.

    • Upps. Tatsächlich.

  • Verursacht folgenden Fehler (version 1.10):


    Can't overwrite unknown table 'wcf1_visitor_daily'


    Sowohl als Update, als auch bei einer Neuinstallation!

    • Das hört sich für mich so an, als ob die Installation bzw. das Update beim ersten Mal nicht vollständig durchlief und nun Reste vom Update noch vorhanden sind.


      Bitte melde dich in unserem Supportforum unter https://support.kittmedia.com, um diesbezüglich Support zu bekommen.

  • Hallo Black Rider,


    es ist auch ein Fehler bei Sonderzeichen.


    "Announcements & Suggestions"


    Eigentlcih sieht es so aus.


    "Announcements & Suggestions"

    Thanks 1
    • Wird in der kommenden Version 1.1.0 korrigiert sein. :)

      Like 1
  • Hallo,


    ich bekomme wenn ich in meinem Forum ein Thema absenden will folgenden Fehler.

    Invalid datetime format: 1366 Incorrect string value: '\xFCr-1-t...' for column `wbb`.`wcf1_visitor`.`requestURI` at row 1

    Sofern ich dieses Plugi deinstalliere kommt der Fehler nicht mehr.


    MfG


    Allrounder18

  • Quote

    Antwort von Black Rider (Vor einer Stunde):

    Vorschläge werden gern angenommen. :)

    Ein Ausbau mit mehreren Diagrammen und z.B. Browser, Auflösung, Weltkarte ähnlich wie z.B. Analytics oder so etwas :) vielleicht auch als Pro Version dann ;)

    • Ich habe mir bereits so etwas gedacht. 🙈

      Die Besuchsstatistiken sind explizit darauf ausgelegt, keine personenbezogenen Daten zu speichern. Dies zu tun, würde umfangreiche notwendige Schritte für den Seitenbetreiber bedeuten – und wir alle wissen, wie oberflächlich sich viele, wenn überhaupt, damit auseinandersetzen.


      Ich stimme dir zu, dass es definitiv schön wäre, solche Daten sammeln zu können. Allerdings bin ich mir ebenso bewusst, dass viele das nicht datenschutzkonform schaffen würden, also ihre eigenen Aufgaben diesbezüglich zu erledigen. Daher möchte ich kein Werkzeug dafür anbieten, das entsprechend missbraucht werden kann – ob bewusst oder unbewusst.

    • Solange du keine IP oder eine ID dazu aufbaust ist das doch kein Problem :)


      Das heist OS und Browser Type dürfte man Problemlos aufzeichnen können ;)

    • Nicht unbedingt. Für eine Weltkarte muss anhand der IP-Adresse das Land erkannt werden. Auch wenn die IP-Adresse nicht gespeichert wird, wird sie in dem Moment verarbeitet und dementsprechend müsste eine Einwilligung gegeben sein.


      Letztendlich muss man sich die Frage stellen, wie weit man gehen will und mein Ziel ist in erster Linie der Datenschutz und dass die Daten nie einzelnen Personen zugeordnet werden können. Das geht nur mit den geringstmöglichen Daten. Wenngleich ich das mit Betriebssystem und Browser durchaus verstehen kann, da diese Informationen auch technische Hintergründe haben.

    • Hm Ok bei Weltkarte bin ich noch irgendwie bei dir auch wenn Google und Co. das alle DSVGO Konform anbieten. Aber Auflösung, OS und Browser Version bringen einem ohne einen Bezug auf IP Adresse oder Tracking Cookie nichts :)

  • Recht herzlichen Dank :)

  • Cooles Plugin

    Wirklich coole Idee und sieht gut aus. Könnte man noch erweitern :)

    Reply from Black Rider ():

    Vorschläge werden gern angenommen. :)