168716d5dSSzymon Olewniczak<?php 284c6f062SAnna Dabrowska 3*c510d2bfSanndause dokuwiki\Cache\Cache; 492c202adSanndause dokuwiki\Extension\ActionPlugin; 592c202adSanndause dokuwiki\Extension\EventHandler; 692c202adSanndause dokuwiki\Extension\Event; 792c202adSanndause dokuwiki\Form\Form; 892c202adSanndause dokuwiki\ChangeLog\PageChangeLog; 984c6f062SAnna Dabrowskause dokuwiki\plugin\sqlite\SQLiteDB; 1084c6f062SAnna Dabrowska 1168716d5dSSzymon Olewniczak/** 1268716d5dSSzymon Olewniczak * DokuWiki Plugin watchcycle (Action Component) 1368716d5dSSzymon Olewniczak * 1468716d5dSSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 1568716d5dSSzymon Olewniczak * @author Szymon Olewniczak <dokuwiki@cosmocode.de> 1668716d5dSSzymon Olewniczak */ 1768716d5dSSzymon Olewniczak 1892c202adSanndaclass action_plugin_watchcycle extends ActionPlugin 191cd7657bSMichael Große{ 2068716d5dSSzymon Olewniczak /** 2168716d5dSSzymon Olewniczak * Registers a callback function for a given event 2268716d5dSSzymon Olewniczak * 2392c202adSannda * @param EventHandler $controller DokuWiki's event controller object 241cd7657bSMichael Große * 2568716d5dSSzymon Olewniczak * @return void 2668716d5dSSzymon Olewniczak */ 2792c202adSannda public function register(EventHandler $controller) 281cd7657bSMichael Große { 2968716d5dSSzymon Olewniczak 309de4e228SAnna Dabrowska $controller->register_hook('PARSER_METADATA_RENDER', 'AFTER', $this, 'handleParserMetadataRender'); 319de4e228SAnna Dabrowska $controller->register_hook('PARSER_CACHE_USE', 'AFTER', $this, 'handleParserCacheUse'); 324082d945SSzymon Olewniczak // ensure a page revision is created when summary changes: 339de4e228SAnna Dabrowska $controller->register_hook('COMMON_WIKIPAGE_SAVE', 'BEFORE', $this, 'handlePagesaveBefore'); 34ff7d7d2fSMichael Große $controller->register_hook('SEARCH_RESULT_PAGELOOKUP', 'BEFORE', $this, 'addIconToPageLookupResult'); 35ff7d7d2fSMichael Große $controller->register_hook('SEARCH_RESULT_FULLPAGE', 'BEFORE', $this, 'addIconToFullPageResult'); 361e9d3322SMichael Große $controller->register_hook('FORM_SEARCH_OUTPUT', 'BEFORE', $this, 'addFilterToSearchForm'); 379de4e228SAnna Dabrowska $controller->register_hook('FORM_QUICKSEARCH_OUTPUT', 'BEFORE', $this, 'handleFormQuicksearchOutput'); 381e9d3322SMichael Große $controller->register_hook('SEARCH_QUERY_FULLPAGE', 'AFTER', $this, 'filterSearchResults'); 391e9d3322SMichael Große $controller->register_hook('SEARCH_QUERY_PAGELOOKUP', 'AFTER', $this, 'filterSearchResults'); 406c3d183aSMichael Große 419de4e228SAnna Dabrowska $controller->register_hook('TOOLBAR_DEFINE', 'AFTER', $this, 'handleToolbarDefine'); 429de4e228SAnna Dabrowska $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxGet'); 439de4e228SAnna Dabrowska $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxValidate'); 446c3d183aSMichael Große } 456c3d183aSMichael Große 466c3d183aSMichael Große 476c3d183aSMichael Große /** 486c3d183aSMichael Große * Register a new toolbar button 496c3d183aSMichael Große * 5092c202adSannda * @param Event $event event object by reference 516c3d183aSMichael Große * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 526c3d183aSMichael Große * handler was registered] 531cd7657bSMichael Große * 546c3d183aSMichael Große * @return void 556c3d183aSMichael Große */ 5692c202adSannda public function handleToolbarDefine(Event $event, $param) 571cd7657bSMichael Große { 581cd7657bSMichael Große $event->data[] = [ 596c3d183aSMichael Große 'type' => 'plugin_watchcycle', 60b935dbe4SMichael Große 'title' => $this->getLang('title toolbar button'), 6150b9f250SMichael Große 'icon' => '../../plugins/watchcycle/images/eye-plus16Green.png', 621cd7657bSMichael Große ]; 631e9d3322SMichael Große } 641e9d3322SMichael Große 651e9d3322SMichael Große /** 661e9d3322SMichael Große * Add a checkbox to the search form to allow limiting the search to maintained pages only 671e9d3322SMichael Große * 6892c202adSannda * @param Event $event 691e9d3322SMichael Große * @param $param 701e9d3322SMichael Große */ 7192c202adSannda public function addFilterToSearchForm(Event $event, $param) 721e9d3322SMichael Große { 731e9d3322SMichael Große /* @var \dokuwiki\Form\Form $searchForm */ 741e9d3322SMichael Große $searchForm = $event->data; 751e9d3322SMichael Große $advOptionsPos = $searchForm->findPositionByAttribute('class', 'advancedOptions'); 761e9d3322SMichael Große $searchForm->addCheckbox('watchcycle_only', $this->getLang('cb only maintained pages'), $advOptionsPos + 1) 771e9d3322SMichael Große ->addClass('plugin__watchcycle_searchform_cb'); 781e9d3322SMichael Große } 791e9d3322SMichael Große 801e9d3322SMichael Große /** 8156d39839SMichael Große * Handles the FORM_QUICKSEARCH_OUTPUT event 8256d39839SMichael Große * 8392c202adSannda * @param Event $event event object by reference 8456d39839SMichael Große * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 8556d39839SMichael Große * handler was registered] 861cd7657bSMichael Große * 8756d39839SMichael Große * @return void 8856d39839SMichael Große */ 8992c202adSannda public function handleFormQuicksearchOutput(Event $event, $param) 901cd7657bSMichael Große { 9192c202adSannda /** @var Form $qsearchForm */ 9256d39839SMichael Große $qsearchForm = $event->data; 9356d39839SMichael Große if ($this->getConf('default_maintained_only')) { 9456d39839SMichael Große $qsearchForm->setHiddenField('watchcycle_only', '1'); 9556d39839SMichael Große } 9656d39839SMichael Große } 9756d39839SMichael Große 9856d39839SMichael Große /** 991e9d3322SMichael Große * Filter the search results to show only maintained pages, if watchcycle_only is true in $INPUT 1001e9d3322SMichael Große * 10192c202adSannda * @param Event $event 1021e9d3322SMichael Große * @param $param 1031e9d3322SMichael Große */ 10492c202adSannda public function filterSearchResults(Event $event, $param) 1051e9d3322SMichael Große { 1061e9d3322SMichael Große global $INPUT; 107afaf3415SMichael Große if (!$INPUT->bool('watchcycle_only')) { 108afaf3415SMichael Große return; 109afaf3415SMichael Große } 1101e9d3322SMichael Große $event->result = array_filter($event->result, function ($key) { 1111e9d3322SMichael Große $watchcycle = p_get_metadata($key, 'plugin watchcycle'); 1121e9d3322SMichael Große return !empty($watchcycle); 1131e9d3322SMichael Große }, ARRAY_FILTER_USE_KEY); 1141e9d3322SMichael Große } 11568716d5dSSzymon Olewniczak 11668716d5dSSzymon Olewniczak /** 11768716d5dSSzymon Olewniczak * [Custom event handler which performs action] 11868716d5dSSzymon Olewniczak * 11992c202adSannda * @param Event $event event object by reference 12068716d5dSSzymon Olewniczak * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 12168716d5dSSzymon Olewniczak * handler was registered] 1221cd7657bSMichael Große * 12368716d5dSSzymon Olewniczak * @return void 12468716d5dSSzymon Olewniczak */ 12592c202adSannda public function handleParserMetadataRender(Event $event, $param) 1261cd7657bSMichael Große { 1274082d945SSzymon Olewniczak global $ID; 1284082d945SSzymon Olewniczak 12984c6f062SAnna Dabrowska /** @var \helper_plugin_watchcycle_db $dbHelper */ 13084c6f062SAnna Dabrowska $dbHelper = plugin_load('helper', 'watchcycle_db'); 13184c6f062SAnna Dabrowska 13284c6f062SAnna Dabrowska /** @var SQLiteDB */ 13384c6f062SAnna Dabrowska $sqlite = $dbHelper->getDB(); 13484c6f062SAnna Dabrowska 13519870ce2SMichael Große /* @var \helper_plugin_watchcycle $helper */ 1364048d1eeSSzymon Olewniczak $helper = plugin_load('helper', 'watchcycle'); 137d31368a4SSzymon Olewniczak 1384048d1eeSSzymon Olewniczak $page = $event->data['current']['last_change']['id']; 139d31368a4SSzymon Olewniczak 140d31368a4SSzymon Olewniczak if (isset($event->data['current']['plugin']['watchcycle'])) { 141d31368a4SSzymon Olewniczak $watchcycle = $event->data['current']['plugin']['watchcycle']; 14284c6f062SAnna Dabrowska $row = $sqlite->queryRecord('SELECT * FROM watchcycle WHERE page=?', $page); 143d31368a4SSzymon Olewniczak $changes = $this->getLastMaintainerRev($event->data, $watchcycle['maintainer'], $last_maintainer_rev); 14402b945d2SAnna Dabrowska //false if page needs checking 14502b945d2SAnna Dabrowska $uptodate = $helper->daysAgo($last_maintainer_rev) <= (int)$watchcycle['cycle']; 146686a1274SAnna Dabrowska 14702b945d2SAnna Dabrowska if ($uptodate === false) { 148ba165cbdSAnna Dabrowska $helper->informMaintainer($watchcycle['maintainer'], $ID); 149686a1274SAnna Dabrowska } 150686a1274SAnna Dabrowska 1514048d1eeSSzymon Olewniczak if (!$row) { 152d31368a4SSzymon Olewniczak $entry = $watchcycle; 1534048d1eeSSzymon Olewniczak $entry['page'] = $page; 154d31368a4SSzymon Olewniczak $entry['last_maintainer_rev'] = $last_maintainer_rev; 15502b945d2SAnna Dabrowska // uptodate is an int in the database 15602b945d2SAnna Dabrowska $entry['uptodate'] = (int)$uptodate; 15784c6f062SAnna Dabrowska $sqlite->saveRecord('watchcycle', $entry); 158d31368a4SSzymon Olewniczak } else { //check if we need to update something 1591cd7657bSMichael Große $toupdate = []; 160d31368a4SSzymon Olewniczak 161d31368a4SSzymon Olewniczak if ($row['cycle'] != $watchcycle['cycle']) { 162d31368a4SSzymon Olewniczak $toupdate['cycle'] = $watchcycle['cycle']; 163d31368a4SSzymon Olewniczak } 164d31368a4SSzymon Olewniczak 165d31368a4SSzymon Olewniczak if ($row['maintainer'] != $watchcycle['maintainer']) { 166d31368a4SSzymon Olewniczak $toupdate['maintainer'] = $watchcycle['maintainer']; 1674048d1eeSSzymon Olewniczak } 1684048d1eeSSzymon Olewniczak 1694048d1eeSSzymon Olewniczak if ($row['last_maintainer_rev'] != $last_maintainer_rev) { 170d31368a4SSzymon Olewniczak $toupdate['last_maintainer_rev'] = $last_maintainer_rev; 171d31368a4SSzymon Olewniczak } 172d31368a4SSzymon Olewniczak 17384c6f062SAnna Dabrowska //uptodate value has changed? 17484c6f062SAnna Dabrowska if ($row['uptodate'] !== (int)$uptodate) { 175b1c7da2aSAnna Dabrowska $toupdate['uptodate'] = (int)$uptodate; 1764048d1eeSSzymon Olewniczak } 1774048d1eeSSzymon Olewniczak 17892c202adSannda if ($toupdate !== []) { 17992c202adSannda $set = implode(',', array_map(static fn($v) => "$v=?", array_keys($toupdate))); 1804048d1eeSSzymon Olewniczak $toupdate[] = $page; 18184c6f062SAnna Dabrowska $sqlite->query("UPDATE watchcycle SET $set WHERE page=?", array_values($toupdate)); 182d31368a4SSzymon Olewniczak } 183d31368a4SSzymon Olewniczak } 184d31368a4SSzymon Olewniczak $event->data['current']['plugin']['watchcycle']['last_maintainer_rev'] = $last_maintainer_rev; 185d31368a4SSzymon Olewniczak $event->data['current']['plugin']['watchcycle']['changes'] = $changes; 186d31368a4SSzymon Olewniczak } else { //maybe we've removed the syntax -> delete from the database 1874048d1eeSSzymon Olewniczak $sqlite->query('DELETE FROM watchcycle WHERE page=?', $page); 188d31368a4SSzymon Olewniczak } 189d31368a4SSzymon Olewniczak } 190d31368a4SSzymon Olewniczak 191d31368a4SSzymon Olewniczak /** 1920eeacb89SAnna Dabrowska * Returns JSON with filtered users and groups 1930eeacb89SAnna Dabrowska * 19492c202adSannda * @param Event $event 1950eeacb89SAnna Dabrowska * @param string $param 1960eeacb89SAnna Dabrowska */ 19792c202adSannda public function handleAjaxGet(Event $event, $param) 1980eeacb89SAnna Dabrowska { 19993878f6fSAnna Dabrowska if ($event->data != 'plugin_watchcycle_get') return; 2000eeacb89SAnna Dabrowska $event->preventDefault(); 2010eeacb89SAnna Dabrowska $event->stopPropagation(); 2020eeacb89SAnna Dabrowska global $conf; 2030eeacb89SAnna Dabrowska 2040eeacb89SAnna Dabrowska header('Content-Type: application/json'); 2050eeacb89SAnna Dabrowska try { 2060eeacb89SAnna Dabrowska $result = $this->fetchUsersAndGroups(); 2070eeacb89SAnna Dabrowska } catch (\Exception $e) { 2080eeacb89SAnna Dabrowska $result = [ 2090eeacb89SAnna Dabrowska 'error' => $e->getMessage() . ' ' . basename($e->getFile()) . ':' . $e->getLine() 2100eeacb89SAnna Dabrowska ]; 2110eeacb89SAnna Dabrowska if ($conf['allowdebug']) { 2120eeacb89SAnna Dabrowska $result['stacktrace'] = $e->getTraceAsString(); 2130eeacb89SAnna Dabrowska } 2140eeacb89SAnna Dabrowska http_status(500); 2150eeacb89SAnna Dabrowska } 2160eeacb89SAnna Dabrowska 217e98a8e79SAnna Dabrowska echo json_encode($result); 2180eeacb89SAnna Dabrowska } 2190eeacb89SAnna Dabrowska 2200eeacb89SAnna Dabrowska /** 22193878f6fSAnna Dabrowska * JSON result of validation of maintainers definition 22293878f6fSAnna Dabrowska * 22392c202adSannda * @param Event $event 22493878f6fSAnna Dabrowska * @param $param 22593878f6fSAnna Dabrowska */ 22692c202adSannda public function handleAjaxValidate(Event $event, $param) 22793878f6fSAnna Dabrowska { 22893878f6fSAnna Dabrowska if ($event->data != 'plugin_watchcycle_validate') return; 22993878f6fSAnna Dabrowska $event->preventDefault(); 23093878f6fSAnna Dabrowska $event->stopPropagation(); 23193878f6fSAnna Dabrowska 23293878f6fSAnna Dabrowska global $INPUT; 23393878f6fSAnna Dabrowska $maintainers = $INPUT->str('param'); 23493878f6fSAnna Dabrowska 23593878f6fSAnna Dabrowska if (empty($maintainers)) return; 23693878f6fSAnna Dabrowska 23793878f6fSAnna Dabrowska header('Content-Type: application/json'); 23893878f6fSAnna Dabrowska 23993878f6fSAnna Dabrowska /* @var \helper_plugin_watchcycle $helper */ 24093878f6fSAnna Dabrowska $helper = plugin_load('helper', 'watchcycle'); 24193878f6fSAnna Dabrowska 242e98a8e79SAnna Dabrowska echo json_encode($helper->validateMaintainerString($maintainers)); 24393878f6fSAnna Dabrowska } 24493878f6fSAnna Dabrowska 24593878f6fSAnna Dabrowska /** 2460eeacb89SAnna Dabrowska * Returns filtered users and groups, if supported by the current authentication 2470eeacb89SAnna Dabrowska * 2480eeacb89SAnna Dabrowska * @return array 2490eeacb89SAnna Dabrowska */ 2500eeacb89SAnna Dabrowska protected function fetchUsersAndGroups() 2510eeacb89SAnna Dabrowska { 2520eeacb89SAnna Dabrowska global $INPUT; 25393878f6fSAnna Dabrowska $term = $INPUT->str('param'); 2540eeacb89SAnna Dabrowska 2550eeacb89SAnna Dabrowska if (empty($term)) return []; 2560eeacb89SAnna Dabrowska 2570eeacb89SAnna Dabrowska /* @var DokuWiki_Auth_Plugin $auth */ 2580eeacb89SAnna Dabrowska global $auth; 2590eeacb89SAnna Dabrowska 2600eeacb89SAnna Dabrowska $users = []; 2610eeacb89SAnna Dabrowska $foundUsers = $auth->retrieveUsers(0, 50, ['user' => $term]); 2620eeacb89SAnna Dabrowska if (!empty($foundUsers)) { 263f82d2ef7SAnna Dabrowska $users = array_map( 264f82d2ef7SAnna Dabrowska static fn($name, $user) => ['label' => $user['name'] . " ($name)", 'value' => $name], 265f82d2ef7SAnna Dabrowska array_keys($foundUsers), 266f82d2ef7SAnna Dabrowska $foundUsers 267f82d2ef7SAnna Dabrowska ); 2680eeacb89SAnna Dabrowska } 2690eeacb89SAnna Dabrowska 2700eeacb89SAnna Dabrowska $groups = []; 2710eeacb89SAnna Dabrowska 2720eeacb89SAnna Dabrowska // check cache 273*c510d2bfSannda $cachedGroups = new Cache('retrievedGroups', '.txt'); 2740eeacb89SAnna Dabrowska if ($cachedGroups->useCache(['age' => 30])) { 2750eeacb89SAnna Dabrowska $foundGroups = unserialize($cachedGroups->retrieveCache()); 2760eeacb89SAnna Dabrowska } else { 27765bfe62cSAnna Dabrowska $foundGroups = $auth->retrieveGroups(); 2780eeacb89SAnna Dabrowska $cachedGroups->storeCache(serialize($foundGroups)); 2790eeacb89SAnna Dabrowska } 2800eeacb89SAnna Dabrowska 2810eeacb89SAnna Dabrowska if (!empty($foundGroups)) { 2820eeacb89SAnna Dabrowska $groups = array_filter( 2830eeacb89SAnna Dabrowska array_map(function ($grp) use ($term) { 2840eeacb89SAnna Dabrowska // filter groups 28592c202adSannda if (strpos($grp, (string) $term) !== false) { 2860eeacb89SAnna Dabrowska return ['label' => '@' . $grp, 'value' => '@' . $grp]; 2870eeacb89SAnna Dabrowska } 2880eeacb89SAnna Dabrowska }, $foundGroups) 2890eeacb89SAnna Dabrowska ); 2900eeacb89SAnna Dabrowska } 2910eeacb89SAnna Dabrowska 2920eeacb89SAnna Dabrowska return array_merge($users, $groups); 2930eeacb89SAnna Dabrowska } 2940eeacb89SAnna Dabrowska 2950eeacb89SAnna Dabrowska /** 296d31368a4SSzymon Olewniczak * @param array $meta metadata of the page 2977ec9f11bSAnna Dabrowska * @param string $maintainer 2984082d945SSzymon Olewniczak * @param int $rev revision of the last page edition by maintainer or -1 if no edition was made 2991cd7657bSMichael Große * 3004082d945SSzymon Olewniczak * @return int number of changes since last maintainer's revision or -1 if no changes was made 301d31368a4SSzymon Olewniczak */ 3027ec9f11bSAnna Dabrowska protected function getLastMaintainerRev($meta, $maintainer, &$rev) 3031cd7657bSMichael Große { 304d31368a4SSzymon Olewniczak $changes = 0; 3057ec9f11bSAnna Dabrowska 3067ec9f11bSAnna Dabrowska /* @var \helper_plugin_watchcycle $helper */ 3077ec9f11bSAnna Dabrowska $helper = plugin_load('helper', 'watchcycle'); 3087ec9f11bSAnna Dabrowska 3097ec9f11bSAnna Dabrowska if ($helper->isMaintainer($meta['current']['last_change']['user'], $maintainer)) { 310d31368a4SSzymon Olewniczak $rev = $meta['current']['last_change']['date']; 311d31368a4SSzymon Olewniczak return $changes; 312d31368a4SSzymon Olewniczak } else { 3134048d1eeSSzymon Olewniczak $page = $meta['current']['last_change']['id']; 31492c202adSannda $changelog = new PageChangeLog($page); 315d31368a4SSzymon Olewniczak $first = 0; 316d31368a4SSzymon Olewniczak $num = 100; 317d31368a4SSzymon Olewniczak while (count($revs = $changelog->getRevisions($first, $num)) > 0) { 318d31368a4SSzymon Olewniczak foreach ($revs as $rev) { 31992c202adSannda ++$changes; 320d31368a4SSzymon Olewniczak $revInfo = $changelog->getRevisionInfo($rev); 3217ec9f11bSAnna Dabrowska if ($helper->isMaintainer($revInfo['user'], $maintainer)) { 322d31368a4SSzymon Olewniczak $rev = $revInfo['date']; 323d31368a4SSzymon Olewniczak return $changes; 324d31368a4SSzymon Olewniczak } 325d31368a4SSzymon Olewniczak } 326d31368a4SSzymon Olewniczak $first += $num; 327d31368a4SSzymon Olewniczak } 328d31368a4SSzymon Olewniczak } 329d31368a4SSzymon Olewniczak 3304082d945SSzymon Olewniczak $rev = -1; 331d31368a4SSzymon Olewniczak return -1; 33268716d5dSSzymon Olewniczak } 33368716d5dSSzymon Olewniczak 3344082d945SSzymon Olewniczak /** 3354082d945SSzymon Olewniczak * clean the cache every 24 hours 3364048d1eeSSzymon Olewniczak * 33792c202adSannda * @param Event $event event object by reference 3384048d1eeSSzymon Olewniczak * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 3394048d1eeSSzymon Olewniczak * handler was registered] 3401cd7657bSMichael Große * 3414048d1eeSSzymon Olewniczak * @return void 3424048d1eeSSzymon Olewniczak */ 34392c202adSannda public function handleParserCacheUse(Event $event, $param) 3441cd7657bSMichael Große { 34519870ce2SMichael Große /* @var \helper_plugin_watchcycle $helper */ 3464048d1eeSSzymon Olewniczak $helper = plugin_load('helper', 'watchcycle'); 3474048d1eeSSzymon Olewniczak 3484048d1eeSSzymon Olewniczak if ($helper->daysAgo($event->data->_time) >= 1) { 3494048d1eeSSzymon Olewniczak $event->result = false; 3504048d1eeSSzymon Olewniczak } 3514048d1eeSSzymon Olewniczak } 3524048d1eeSSzymon Olewniczak 3534082d945SSzymon Olewniczak /** 3544082d945SSzymon Olewniczak * Check if the page has to be changed 3554082d945SSzymon Olewniczak * 35692c202adSannda * @param Event $event event object by reference 3574082d945SSzymon Olewniczak * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 3584082d945SSzymon Olewniczak * handler was registered] 3591cd7657bSMichael Große * 3604082d945SSzymon Olewniczak * @return void 3614082d945SSzymon Olewniczak */ 36292c202adSannda public function handlePagesaveBefore(Event $event, $param) 3631cd7657bSMichael Große { 3641cd7657bSMichael Große if ($event->data['contentChanged']) { 3651cd7657bSMichael Große return; 3661cd7657bSMichael Große } // will be saved for page changes 3674082d945SSzymon Olewniczak 3684082d945SSzymon Olewniczak //save page if summary is provided 3694082d945SSzymon Olewniczak if (!empty($event->data['summary'])) { 3704082d945SSzymon Olewniczak $event->data['contentChanged'] = true; 3714082d945SSzymon Olewniczak } 3724082d945SSzymon Olewniczak } 3734082d945SSzymon Olewniczak 37419870ce2SMichael Große /** 37519870ce2SMichael Große * called for event SEARCH_RESULT_PAGELOOKUP 37619870ce2SMichael Große * 37792c202adSannda * @param Event $event 37819870ce2SMichael Große * @param $param 37919870ce2SMichael Große */ 38092c202adSannda public function addIconToPageLookupResult(Event $event, $param) 381ff7d7d2fSMichael Große { 38238cc216eSMichael Große /* @var \helper_plugin_watchcycle $helper */ 38338cc216eSMichael Große $helper = plugin_load('helper', 'watchcycle'); 38438cc216eSMichael Große 38538cc216eSMichael Große $icon = $helper->getSearchResultIconHTML($event->data['page']); 386ff7d7d2fSMichael Große if ($icon) { 387ff7d7d2fSMichael Große $event->data['listItemContent'][] = $icon; 388ff7d7d2fSMichael Große } 389ff7d7d2fSMichael Große } 390ff7d7d2fSMichael Große 39119870ce2SMichael Große /** 39219870ce2SMichael Große * called for event SEARCH_RESULT_FULLPAGE 39319870ce2SMichael Große * 39492c202adSannda * @param Event $event 39519870ce2SMichael Große * @param $param 39619870ce2SMichael Große */ 39792c202adSannda public function addIconToFullPageResult(Event $event, $param) 398ff7d7d2fSMichael Große { 39938cc216eSMichael Große /* @var \helper_plugin_watchcycle $helper */ 40038cc216eSMichael Große $helper = plugin_load('helper', 'watchcycle'); 40138cc216eSMichael Große 40238cc216eSMichael Große $icon = $helper->getSearchResultIconHTML($event->data['page']); 403ff7d7d2fSMichael Große if ($icon) { 404ff7d7d2fSMichael Große $event->data['resultHeader'][] = $icon; 405ff7d7d2fSMichael Große } 406ff7d7d2fSMichael Große } 40768716d5dSSzymon Olewniczak} 408