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