xref: /plugin/bez/cron/functions.php (revision 8a6381983135ed7de69b33e64aa0c1b16dbf69b0)
1<?php
2
3require_once DOKU_PLUGIN.'bez/helper.php';
4
5require_once DOKU_PLUGIN . 'bez/exceptions.php';
6require_once DOKU_PLUGIN.'bez/interfaces.php';
7
8require_once DOKU_PLUGIN.'bez/mdl/model.php';
9
10class Cron_dummy_action extends DokuWiki_Action_Plugin {
11    public function getPluginName() {
12        return 'bez';
13    }
14
15    public function id() {
16        $args = func_get_args();
17        array_unshift($args, 'bez');
18
19        return implode(':', $args);
20    }
21};
22
23$dummy_action = new Cron_dummy_action();
24$model = new BEZ_mdl_Model($auth, $dw_user, $dummy_action, $conf);
25
26function send_inactive_issue() {
27    global $model;
28
29    $issues = $model->issues->get_all(array(
30        'last_activity' => array('<=',
31            date('Y-m-d', strtotime('-30 days')), 'date'
32        ),
33        'state' => '0'
34    ));
35
36    foreach ($issues as $issue) {
37        //send reminder once a month
38        $day_of_issue_last_activity = date('d', strtotime($issue->last_activity));
39        if ($day_of_issue_last_activity === date('d')) {
40            //send message to all
41            $issue->mail_notify_issue_inactive($issue->get_subscribents());
42        }
43    }
44}
45
46function send_one_day_task_reminder() {
47    global $model;
48
49    $tasks = $model->tasks->get_all(array(
50        'plan_date' => date('Y-m-d', strtotime('+1 day')),
51        'state'     => '0' //only open tasks
52    ));
53
54    foreach ($tasks as $task) {
55        $task->mail_notify_remind($task->get_subscribents());
56    }
57}
58
59function send_weekly_message($simulate=true) {
60    global $conf, $auth, $bezlang;
61
62    $helper = new helper_plugin_bez();
63
64   //email => array('user' => array('issues' => array(), 'tasks' => array()))
65    $msg = array();
66    $output = array();
67
68    try {
69        $isso = new Issues();
70        $tasko = new Tasks();
71    } catch (Exception $e) {
72        echo $e->getMessage().': '.$e->getFile();
73    }
74
75    $issues = $isso->cron_get_unsolved();
76
77    foreach ($issues as $issue) {
78        $key = $issue['coordinator'];
79        if (!isset($msg[$key]))
80            $msg[$key] = array('issues' => array(), 'coming_tasks' => array(),
81                                'outdated_tasks' => array());
82
83        $msg[$key]['issues'][] = $issue;
84    }
85
86    $coming_tasks_all  = $tasko->cron_get_coming_tasks();
87
88    foreach ($coming_tasks_all as $task) {
89        $key = $task['executor'];
90        if (!isset($msg[$key]))
91            $msg[$key] = array('issues' => array(), 'coming_tasks' => array(),
92                                'outdated_tasks' => array());
93
94        $msg[$key]['coming_tasks'][] = $task;
95    }
96
97    $outdated_tasks_all  = $tasko->cron_get_outdated_tasks();
98
99    foreach ($outdated_tasks_all as $task) {
100        $key = $task['executor'];
101        if (!isset($msg[$key]))
102            $msg[$key] = array('issues' => array(), 'coming_tasks' => array(),
103                                'outdated_tasks' => array());
104
105        $msg[$key]['outdated_tasks'][] = $task;
106    }
107
108    //outdated_tasks, coming_tasks, open_tasks
109
110
111    foreach ($msg as $user => $data) {
112        $udata = $auth->getUserData($user);
113
114        $his_issues = $data['issues'];
115        $outdated_tasks = $data['outdated_tasks'];
116        $coming_tasks = $data['coming_tasks'];
117
118
119        if (count($his_issues) + count($outdated_tasks) + count($coming_tasks) == 0)
120            continue;
121
122        $to = $udata['name'].' <'.$udata['mail'].'>';
123
124        ob_start();
125        include 'tpl/weekly-message.php';
126        $body = ob_get_clean();
127
128        $mailer = new BEZ_Mailer();
129        $rep = array();
130        $mailer->setBody('', $rep, NULL, $body, false);
131
132        $mailer->to($to);
133        $subject = 'Nadchodzące zadania';
134        $mailer->subject($subject);
135
136        if ($simulate === false) {
137            $send = $mailer->send();
138        }
139        $output[] = array($to, $subject, $body, array());
140    }
141
142    return $output;
143}
144