xref: /plugin/notification/action/cron.php (revision 51157a531472d6d2a6f7e37d218dcffecfc1ac35)
194db1f40SSzymon Olewniczak<?php
294db1f40SSzymon Olewniczak
394db1f40SSzymon Olewniczak/**
494db1f40SSzymon Olewniczak * DokuWiki Plugin notification (Action Component)
594db1f40SSzymon Olewniczak *
694db1f40SSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
794db1f40SSzymon Olewniczak * @author  Szymon Olewniczak <it@rid.pl>
894db1f40SSzymon Olewniczak */
994db1f40SSzymon Olewniczak
1094db1f40SSzymon Olewniczakclass action_plugin_notification_cron extends DokuWiki_Action_Plugin
1194db1f40SSzymon Olewniczak{
1294db1f40SSzymon Olewniczak
1394db1f40SSzymon Olewniczak    /**
1494db1f40SSzymon Olewniczak     * Registers a callback function for a given event
1594db1f40SSzymon Olewniczak     *
1694db1f40SSzymon Olewniczak     * @param Doku_Event_Handler $controller DokuWiki's event controller object
1794db1f40SSzymon Olewniczak     *
1894db1f40SSzymon Olewniczak     * @return void
1994db1f40SSzymon Olewniczak     */
2094db1f40SSzymon Olewniczak    public function register(Doku_Event_Handler $controller)
2194db1f40SSzymon Olewniczak    {
2294db1f40SSzymon Olewniczak        $controller->register_hook('INDEXER_TASKS_RUN', 'AFTER', $this, 'handle_indexer_tasks_run');
2394db1f40SSzymon Olewniczak    }
2494db1f40SSzymon Olewniczak
2594db1f40SSzymon Olewniczak    /**
2694db1f40SSzymon Olewniczak     *
2794db1f40SSzymon Olewniczak     * @param Doku_Event $event  event object by reference
2894db1f40SSzymon Olewniczak     * @param mixed      $param  [the parameters passed as fifth argument to register_hook() when this
2994db1f40SSzymon Olewniczak     *                           handler was registered]
3094db1f40SSzymon Olewniczak     *
3194db1f40SSzymon Olewniczak     * @return void
3294db1f40SSzymon Olewniczak     */
3394db1f40SSzymon Olewniczak    public function handle_indexer_tasks_run(Doku_Event $event, $param)
3494db1f40SSzymon Olewniczak    {
3594db1f40SSzymon Olewniczak        /** @var DokuWiki_Auth_Plugin $auth */
3694db1f40SSzymon Olewniczak        global $auth;
3794db1f40SSzymon Olewniczak
3894db1f40SSzymon Olewniczak        /** @var \helper_plugin_notification_db $db_helper */
3994db1f40SSzymon Olewniczak        $db_helper = plugin_load('helper', 'notification_db');
4094db1f40SSzymon Olewniczak        $sqlite = $db_helper->getDB();
4194db1f40SSzymon Olewniczak
42fca8ba9fSAnna Dabrowska        // insert new users first
43fca8ba9fSAnna Dabrowska        /** @var \helper_plugin_notification_cron $cron_helper */
44fca8ba9fSAnna Dabrowska        $cron_helper = plugin_load('helper', 'notification_cron');
45fca8ba9fSAnna Dabrowska        $cron_helper->addUsersToCron();
46fca8ba9fSAnna Dabrowska
4794db1f40SSzymon Olewniczak        //get the oldest check
4894db1f40SSzymon Olewniczak        $res = $sqlite->query('SELECT user, MIN(timestamp) FROM cron_check');
4994db1f40SSzymon Olewniczak        $user = $sqlite->res2single($res);
50*51157a53SAnna Dabrowska        //no user to send notifications to
5194db1f40SSzymon Olewniczak        if (!$user) return;
5294db1f40SSzymon Olewniczak
5394db1f40SSzymon Olewniczak        //update user last check
5494db1f40SSzymon Olewniczak        $sqlite->query('UPDATE cron_check SET timestamp=? WHERE user=?',  date('c'), $user);
5594db1f40SSzymon Olewniczak
56*51157a53SAnna Dabrowska        // get new notifications from plugins
57*51157a53SAnna Dabrowska        $notification_data = $cron_helper->getNotificationData($user);
5894db1f40SSzymon Olewniczak
59*51157a53SAnna Dabrowska        //no notifications - nothing to send
60*51157a53SAnna Dabrowska        if (empty($notification_data['notifications'])) return;
6194db1f40SSzymon Olewniczak
62*51157a53SAnna Dabrowska        $new_notifications = $cron_helper->getNewNotifications($user, $notification_data);
6394db1f40SSzymon Olewniczak
64*51157a53SAnna Dabrowska        // no notifications left - nothing to send
6594db1f40SSzymon Olewniczak        if (!$new_notifications) return;
6694db1f40SSzymon Olewniczak
67*51157a53SAnna Dabrowska        list($text, $html) = $cron_helper->composeEmail($new_notifications);
68*51157a53SAnna Dabrowska        if ($cron_helper->sendMail($user, $text, $html)) {
6994db1f40SSzymon Olewniczak            //mark notifications as sent
70*51157a53SAnna Dabrowska            $cron_helper->storeSentNotifications($user, $new_notifications);
7194db1f40SSzymon Olewniczak        }
7294db1f40SSzymon Olewniczak
7394db1f40SSzymon Olewniczak        $event->stopPropagation();
7494db1f40SSzymon Olewniczak        $event->preventDefault();
7594db1f40SSzymon Olewniczak    }
7694db1f40SSzymon Olewniczak}
77