xref: /plugin/bez/cron/functions.php (revision 32fae04eed3dfbbb5c1dfa8fcd03866a0eb2c20f)
18d31684bSSzymon Olewniczak<?php
28d31684bSSzymon Olewniczak
367fdb426SSzymon Olewniczakuse PHPMailer\PHPMailer\PHPMailer;
467fdb426SSzymon Olewniczak
567fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/Exception.php';
667fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/PHPMailer.php';
767fdb426SSzymon Olewniczakrequire_once DOKU_PLUGIN . 'bez/vendor/phpmailer/phpmailer/src/SMTP.php';
867fdb426SSzymon Olewniczak
914a1f0a4SSzymon Olewniczak$action = new action_plugin_bez_base();
10522c019cSSzymon Olewniczak$action->createObjects(true);
118d31684bSSzymon Olewniczak
128d31684bSSzymon Olewniczakfunction send_inactive_issue() {
1314a1f0a4SSzymon Olewniczak    global $action;
148d31684bSSzymon Olewniczak
1514a1f0a4SSzymon Olewniczak    $threads = $action->get_model()->threadFactory->get_all(array(
1653df74e7SSzymon Olewniczak        'last_activity_date' => array('<=', date('c', strtotime('-26 days'))),
1753df74e7SSzymon Olewniczak        'state' => 'opened'
188d31684bSSzymon Olewniczak    ));
198d31684bSSzymon Olewniczak
2053df74e7SSzymon Olewniczak    foreach ($threads as $thread) {
218d31684bSSzymon Olewniczak        //send reminder once a month
2253df74e7SSzymon Olewniczak        $day_of_issue_last_activity = date('d', strtotime($thread->last_activity_date));
2353df74e7SSzymon Olewniczak        if ($day_of_issue_last_activity == date('d')) {
246e6a7f3dSSzymon Olewniczak            //send message to all
25f9ff7301SSzymon Olewniczak            $thread->mail_notify_inactive($thread->get_participants('subscribent'));
268d31684bSSzymon Olewniczak        }
278d31684bSSzymon Olewniczak    }
288d31684bSSzymon Olewniczak}
298d31684bSSzymon Olewniczak
30d571026cSSzymon Olewniczakfunction send_task_reminder() {
3114a1f0a4SSzymon Olewniczak    global $action;
328d31684bSSzymon Olewniczak
33d571026cSSzymon Olewniczak    $filters = array('state' => 'opened', 'plan_date' => array('OR', array()));
348d31684bSSzymon Olewniczak
35d571026cSSzymon Olewniczak    $days_before = $action->getConf('task_remaind_days_before');
36d571026cSSzymon Olewniczak    $days_before = array_map('trim', explode(',', $days_before));
37d571026cSSzymon Olewniczak
38d571026cSSzymon Olewniczak    if (count($days_before) == 0) {
39d571026cSSzymon Olewniczak        return;
40d571026cSSzymon Olewniczak    }
41d571026cSSzymon Olewniczak
42d571026cSSzymon Olewniczak    foreach($days_before as $day) {
43d571026cSSzymon Olewniczak        $filters['plan_date'][1][] = date('Y-m-d', strtotime("+$day day"));
44d571026cSSzymon Olewniczak    }
45d571026cSSzymon Olewniczak
46d571026cSSzymon Olewniczak
47d571026cSSzymon Olewniczak    $tasks = $action->get_model()->taskFactory->get_all($filters);
48d571026cSSzymon Olewniczak
49d571026cSSzymon Olewniczak    $now = new DateTime(date('Y-m-d'));
508d31684bSSzymon Olewniczak    foreach ($tasks as $task) {
51d571026cSSzymon Olewniczak        $plan_date = new DateTime($task->plan_date);
52d571026cSSzymon Olewniczak        $task->mail_notify_remind($task->get_participants('subscribent'), $plan_date->diff($now)->format('%a'));
538d31684bSSzymon Olewniczak    }
548d31684bSSzymon Olewniczak}
558d31684bSSzymon Olewniczak
5614a1f0a4SSzymon Olewniczakfunction send_weekly_message() {
5714a1f0a4SSzymon Olewniczak    global $action;
5814a1f0a4SSzymon Olewniczak    global $auth;
5967fdb426SSzymon Olewniczak    global $conf;
6014a1f0a4SSzymon Olewniczak
6114a1f0a4SSzymon Olewniczak    //email => array('user' => array('issues' => array(), 'tasks' => array()))
6214a1f0a4SSzymon Olewniczak    $msg = array();
6314a1f0a4SSzymon Olewniczak    $output = array();
6414a1f0a4SSzymon Olewniczak
6514a1f0a4SSzymon Olewniczak    $threads = $action->get_model()->threadFactory->get_all(array(
6614a1f0a4SSzymon Olewniczak          'type' => 'issue',
6714a1f0a4SSzymon Olewniczak          'priority' => array('OR', array('2', '1'))
6814a1f0a4SSzymon Olewniczak      ));
6914a1f0a4SSzymon Olewniczak
7014a1f0a4SSzymon Olewniczak    foreach ($threads as $thread) {
7114a1f0a4SSzymon Olewniczak        $key = $thread->coordinator;
7214a1f0a4SSzymon Olewniczak        if (!isset($msg[$key])) {
7314a1f0a4SSzymon Olewniczak            $msg[$key] = array(
7414a1f0a4SSzymon Olewniczak                'issues'          => array(),
7514a1f0a4SSzymon Olewniczak                'coming_tasks'    => array(),
7614a1f0a4SSzymon Olewniczak                'outdated_tasks'  => array()
7714a1f0a4SSzymon Olewniczak            );
7814a1f0a4SSzymon Olewniczak        }
7914a1f0a4SSzymon Olewniczak        $msg[$key]['issues'][] = $thread;
8014a1f0a4SSzymon Olewniczak    }
8114a1f0a4SSzymon Olewniczak
8214a1f0a4SSzymon Olewniczak    $tasks  = $action->get_model()->taskFactory->get_all(array(
8314a1f0a4SSzymon Olewniczak        'priority' => array('OR', array('2', '1'))
8414a1f0a4SSzymon Olewniczak    ));
8514a1f0a4SSzymon Olewniczak
8614a1f0a4SSzymon Olewniczak    foreach ($tasks as $task) {
8714a1f0a4SSzymon Olewniczak        $key = $task->assignee;
8814a1f0a4SSzymon Olewniczak        if (!isset($msg[$key])) {
8914a1f0a4SSzymon Olewniczak            $msg[$key] = array(
9014a1f0a4SSzymon Olewniczak                'issues'          => array(),
9114a1f0a4SSzymon Olewniczak                'coming_tasks'    => array(),
9214a1f0a4SSzymon Olewniczak                'outdated_tasks'  => array()
9314a1f0a4SSzymon Olewniczak            );
9414a1f0a4SSzymon Olewniczak        }
9514a1f0a4SSzymon Olewniczak
9614a1f0a4SSzymon Olewniczak        if ($task->priority == '1') {
9714a1f0a4SSzymon Olewniczak            $msg[$key]['coming_tasks'][] = $task;
9814a1f0a4SSzymon Olewniczak        } else {
9914a1f0a4SSzymon Olewniczak            $msg[$key]['outdated_tasks'][] = $task;
10014a1f0a4SSzymon Olewniczak        }
10114a1f0a4SSzymon Olewniczak    }
10214a1f0a4SSzymon Olewniczak
10314a1f0a4SSzymon Olewniczak    //outdated_tasks, coming_tasks, open_tasks
104*32fae04eSSzymon Olewniczak    $muted_users = $action->get_model()->factory('subscription')->getMutedUsers();
10514a1f0a4SSzymon Olewniczak
10614a1f0a4SSzymon Olewniczak    foreach ($msg as $user => $data) {
10714a1f0a4SSzymon Olewniczak        $udata = $auth->getUserData($user);
10867fdb426SSzymon Olewniczak        if (!$udata) continue;
10914a1f0a4SSzymon Olewniczak
110*32fae04eSSzymon Olewniczak        //omit muted users
111*32fae04eSSzymon Olewniczak        if (in_array($user, $muted_users)) continue;
112*32fae04eSSzymon Olewniczak
11314a1f0a4SSzymon Olewniczak        $issues = $data['issues'];
11414a1f0a4SSzymon Olewniczak        $outdated_tasks = $data['outdated_tasks'];
11514a1f0a4SSzymon Olewniczak        $coming_tasks = $data['coming_tasks'];
11614a1f0a4SSzymon Olewniczak
11714a1f0a4SSzymon Olewniczak
11814a1f0a4SSzymon Olewniczak        if (count($issues) + count($outdated_tasks) + count($coming_tasks) == 0)
11914a1f0a4SSzymon Olewniczak            continue;
12014a1f0a4SSzymon Olewniczak
12114a1f0a4SSzymon Olewniczak        $tpl = $action->get_tpl();
12214a1f0a4SSzymon Olewniczak        $tpl->set('issues', $issues);
12314a1f0a4SSzymon Olewniczak        $tpl->set('outdated_tasks', $outdated_tasks);
12414a1f0a4SSzymon Olewniczak        $tpl->set('coming_tasks', $coming_tasks);
12514a1f0a4SSzymon Olewniczak        $body = $action->bez_tpl_include('cron/weekly-message', true);
12614a1f0a4SSzymon Olewniczak
12767fdb426SSzymon Olewniczak        $mailer = new PHPMailer;
12867fdb426SSzymon Olewniczak        $mailer->CharSet = 'utf-8';
129bc0bd078SSzymon Olewniczak        $mailer->isHTML(true);
13014a1f0a4SSzymon Olewniczak
13167fdb426SSzymon Olewniczak        $mailer->setFrom($conf['mailfrom']);
13267fdb426SSzymon Olewniczak        $mailer->addReplyTo($conf['mailfrom']);
13367fdb426SSzymon Olewniczak
134bc0bd078SSzymon Olewniczak        $token = $action->get_model()->factory('subscription')->getUserToken($user);
1355e27504eSSzymon Olewniczak        $resign_link = $action->url('unsubscribe', array('GET' => array( 't' => $token)));
136bc0bd078SSzymon Olewniczak        $mailer->Body = str_replace('%%resign_link%%', $resign_link, $body);
13767fdb426SSzymon Olewniczak
13867fdb426SSzymon Olewniczak        $mailer->addAddress($udata['mail'], $udata['name']);
13967fdb426SSzymon Olewniczak        $subject = $conf['title'] . ' Nadchodzące zadania';
14067fdb426SSzymon Olewniczak        $mailer->Subject = $subject;
14114a1f0a4SSzymon Olewniczak
14214a1f0a4SSzymon Olewniczak        $mailer->send();
14367fdb426SSzymon Olewniczak        $mailer->clearAddresses();
144bc0bd078SSzymon Olewniczak        $mailer->clearCustomHeaders();
14567fdb426SSzymon Olewniczak        $output[] = array($udata['name'].' <'.$udata['mail'].'>', $subject, $body, array());
14614a1f0a4SSzymon Olewniczak    }
14714a1f0a4SSzymon Olewniczak
14814a1f0a4SSzymon Olewniczak    return $output;
14914a1f0a4SSzymon Olewniczak}
150