xref: /plugin/notification/action/cron.php (revision 6cdebc539ff0654a6c1d30517990fc9fc0a7a4d7)
194db1f40SSzymon Olewniczak<?php
294db1f40SSzymon Olewniczak
3*6cdebc53SAnna Dabrowskause dokuwiki\Extension\ActionPlugin;
4*6cdebc53SAnna Dabrowskause dokuwiki\Extension\EventHandler;
5*6cdebc53SAnna Dabrowskause dokuwiki\Extension\Event;
6*6cdebc53SAnna Dabrowska
794db1f40SSzymon Olewniczak/**
894db1f40SSzymon Olewniczak * DokuWiki Plugin notification (Action Component)
994db1f40SSzymon Olewniczak *
1094db1f40SSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
1194db1f40SSzymon Olewniczak * @author  Szymon Olewniczak <it@rid.pl>
1294db1f40SSzymon Olewniczak */
13*6cdebc53SAnna Dabrowskaclass action_plugin_notification_cron extends ActionPlugin
1494db1f40SSzymon Olewniczak{
1594db1f40SSzymon Olewniczak    /**
1694db1f40SSzymon Olewniczak     * Registers a callback function for a given event
1794db1f40SSzymon Olewniczak     *
18*6cdebc53SAnna Dabrowska     * @param EventHandler $controller DokuWiki's event controller object
1994db1f40SSzymon Olewniczak     *
2094db1f40SSzymon Olewniczak     * @return void
2194db1f40SSzymon Olewniczak     */
22*6cdebc53SAnna Dabrowska    public function register(EventHandler $controller)
2394db1f40SSzymon Olewniczak    {
24*6cdebc53SAnna Dabrowska        $controller->register_hook('INDEXER_TASKS_RUN', 'AFTER', $this, 'handleIndexerTasksRun');
2594db1f40SSzymon Olewniczak    }
2694db1f40SSzymon Olewniczak
2794db1f40SSzymon Olewniczak    /**
2894db1f40SSzymon Olewniczak     *
29*6cdebc53SAnna Dabrowska     * @param Event $event event object by reference
3094db1f40SSzymon Olewniczak     * @param mixed      $param  [the parameters passed as fifth argument to register_hook() when this
3194db1f40SSzymon Olewniczak     *                           handler was registered]
3294db1f40SSzymon Olewniczak     *
3394db1f40SSzymon Olewniczak     * @return void
3494db1f40SSzymon Olewniczak     */
35*6cdebc53SAnna Dabrowska    public function handleIndexerTasksRun(Event $event, $param)
3694db1f40SSzymon Olewniczak    {
3794db1f40SSzymon Olewniczak        /** @var DokuWiki_Auth_Plugin $auth */
3894db1f40SSzymon Olewniczak        global $auth;
3994db1f40SSzymon Olewniczak
4094db1f40SSzymon Olewniczak        /** @var \helper_plugin_notification_db $db_helper */
4194db1f40SSzymon Olewniczak        $db_helper = plugin_load('helper', 'notification_db');
4294db1f40SSzymon Olewniczak        $sqlite = $db_helper->getDB();
4394db1f40SSzymon Olewniczak
44fca8ba9fSAnna Dabrowska        // insert new users first
45fca8ba9fSAnna Dabrowska        /** @var \helper_plugin_notification_cron $cron_helper */
46fca8ba9fSAnna Dabrowska        $cron_helper = plugin_load('helper', 'notification_cron');
47fca8ba9fSAnna Dabrowska        $cron_helper->addUsersToCron();
48fca8ba9fSAnna Dabrowska
4994db1f40SSzymon Olewniczak        //get the oldest check
5094db1f40SSzymon Olewniczak        $res = $sqlite->query('SELECT user, MIN(timestamp) FROM cron_check');
5194db1f40SSzymon Olewniczak        $user = $sqlite->res2single($res);
5251157a53SAnna Dabrowska        //no user to send notifications to
5394db1f40SSzymon Olewniczak        if (!$user) return;
5494db1f40SSzymon Olewniczak
5594db1f40SSzymon Olewniczak        //update user last check
5694db1f40SSzymon Olewniczak        $sqlite->query('UPDATE cron_check SET timestamp=? WHERE user=?', date('c'), $user);
5794db1f40SSzymon Olewniczak
5851157a53SAnna Dabrowska        // get new notifications from plugins
5951157a53SAnna Dabrowska        $notification_data = $cron_helper->getNotificationData($user);
6094db1f40SSzymon Olewniczak
6151157a53SAnna Dabrowska        //no notifications - nothing to send
6251157a53SAnna Dabrowska        if (empty($notification_data['notifications'])) return;
6394db1f40SSzymon Olewniczak
6451157a53SAnna Dabrowska        $new_notifications = $cron_helper->getNewNotifications($user, $notification_data);
6594db1f40SSzymon Olewniczak
6651157a53SAnna Dabrowska        // no notifications left - nothing to send
6794db1f40SSzymon Olewniczak        if (!$new_notifications) return;
6894db1f40SSzymon Olewniczak
6951157a53SAnna Dabrowska        list($text, $html) = $cron_helper->composeEmail($new_notifications);
7051157a53SAnna Dabrowska        if ($cron_helper->sendMail($user, $text, $html)) {
7194db1f40SSzymon Olewniczak            //mark notifications as sent
7251157a53SAnna Dabrowska            $cron_helper->storeSentNotifications($user, $new_notifications);
7394db1f40SSzymon Olewniczak        }
7494db1f40SSzymon Olewniczak
7594db1f40SSzymon Olewniczak        $event->stopPropagation();
7694db1f40SSzymon Olewniczak        $event->preventDefault();
7794db1f40SSzymon Olewniczak    }
7894db1f40SSzymon Olewniczak}
79