xref: /plugin/combo/action/analytics.php (revision c42a11968760ceb3fe94cce1dc4bb1500929b684)
1c25e802bSgerardnico<?php
2c25e802bSgerardnico
32c067407Sgerardnicouse ComboStrap\Analytics;
455d4462bSgerardnicouse ComboStrap\LogUtility;
5c25e802bSgerardnicouse ComboStrap\Page;
655d4462bSgerardnicouse ComboStrap\Sqlite;
7c25e802bSgerardnico
8c25e802bSgerardnico/**
9c25e802bSgerardnico * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved.
10c25e802bSgerardnico *
11c25e802bSgerardnico * This source code is licensed under the GPL license found in the
12c25e802bSgerardnico * COPYING  file in the root directory of this source tree.
13c25e802bSgerardnico *
14c25e802bSgerardnico * @license  GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
15c25e802bSgerardnico * @author   ComboStrap <support@combostrap.com>
16c25e802bSgerardnico *
17c25e802bSgerardnico */
18c25e802bSgerardnico
192c067407Sgerardnicorequire_once(__DIR__ . '/../class/'.'Analytics.php');
202c067407Sgerardnico
21c25e802bSgerardnico/**
22c25e802bSgerardnico * Class action_plugin_combo_analytics
23c25e802bSgerardnico * Update the analytics data
24c25e802bSgerardnico */
25c25e802bSgerardnicoclass action_plugin_combo_analytics extends DokuWiki_Action_Plugin
26c25e802bSgerardnico{
27c25e802bSgerardnico
28c25e802bSgerardnico
29c25e802bSgerardnico    public function register(Doku_Event_Handler $controller)
30c25e802bSgerardnico    {
312c067407Sgerardnico
32c25e802bSgerardnico        /**
33c25e802bSgerardnico         * Called on every page write
34c25e802bSgerardnico         * https://www.dokuwiki.org/devel:event:io_wikipage_write
35c25e802bSgerardnico         * On update to an existing page this event is called twice,
36c25e802bSgerardnico         * once for the transfer of the old version to the attic (rev will have a value)
37c25e802bSgerardnico         * and once to write the new version of the page into the wiki (rev is false)
38c25e802bSgerardnico         */
39*c42a1196Sgerardnico        //$controller->register_hook('IO_WIKIPAGE_WRITE', 'AFTER', $this, 'handle_update_analytics', array());
402c067407Sgerardnico
41*c42a1196Sgerardnico        /**
42*c42a1196Sgerardnico         * Analytics to refresh because they have lost or gain a backlinks
43*c42a1196Sgerardnico         * are done via Sqlite table (The INDEXER_TASKS_RUN gives a way to
44*c42a1196Sgerardnico         * manipulate this queue)
45*c42a1196Sgerardnico         */
4655d4462bSgerardnico        $controller->register_hook('INDEXER_TASKS_RUN', 'BEFORE', $this, 'handle_refresh_analytics', array());
4755d4462bSgerardnico
48c25e802bSgerardnico    }
49c25e802bSgerardnico
502c067407Sgerardnico    public function handle_update_analytics(Doku_Event $event, $param)
51c25e802bSgerardnico    {
522c067407Sgerardnico
532c067407Sgerardnico        $rev = $event->data[3];
542c067407Sgerardnico        if ($rev===false){
552c067407Sgerardnico            $id = $event->data[2];
5655d4462bSgerardnico            $page = new Page($id);
5755d4462bSgerardnico            $page->refreshAnalytics();
58c25e802bSgerardnico        }
59c25e802bSgerardnico
60c25e802bSgerardnico
61c25e802bSgerardnico    }
6255d4462bSgerardnico
6355d4462bSgerardnico    public function handle_refresh_analytics(Doku_Event $event, $param)
6455d4462bSgerardnico    {
6555d4462bSgerardnico
66*c42a1196Sgerardnico        /**
67*c42a1196Sgerardnico         * Check that the actual page has analytics data
68*c42a1196Sgerardnico         * (if there is a cache, it's pretty quick)
69*c42a1196Sgerardnico         */
70*c42a1196Sgerardnico        global $ID;
71*c42a1196Sgerardnico        Analytics::process($ID,true);
72*c42a1196Sgerardnico
73*c42a1196Sgerardnico        /**
74*c42a1196Sgerardnico         * Check the analytics to refresh
75*c42a1196Sgerardnico         */
7655d4462bSgerardnico        $sqlite = Sqlite::getSqlite();
7755d4462bSgerardnico        $res = $sqlite->query("SELECT ID FROM ANALYTICS_TO_REFRESH");
7855d4462bSgerardnico        if (!$res) {
7955d4462bSgerardnico            LogUtility::msg("There was a problem during the select: {$sqlite->getAdapter()->getDb()->errorInfo()}");
8055d4462bSgerardnico        }
8155d4462bSgerardnico        $rows = $sqlite->res2arr($res,true);
8255d4462bSgerardnico        $sqlite->res_close($res);
8355d4462bSgerardnico        foreach($rows as $row){
8455d4462bSgerardnico            $page = new Page($row['ID']);
8555d4462bSgerardnico            $page->refreshAnalytics();
8655d4462bSgerardnico        }
8755d4462bSgerardnico
8855d4462bSgerardnico    }
89c25e802bSgerardnico}
90c25e802bSgerardnico
91c25e802bSgerardnico
92c25e802bSgerardnico
93