xref: /plugin/recommend/helper/mail.php (revision 9121cb07ff02058edafe0496d07f44d1c51921af)
15187ba70SAnna Dabrowska<?php
25187ba70SAnna Dabrowska
35187ba70SAnna Dabrowskause dokuwiki\Extension\AuthPlugin;
45187ba70SAnna Dabrowska
55187ba70SAnna Dabrowska/**
65187ba70SAnna Dabrowska * Mail helper
75187ba70SAnna Dabrowska */
85187ba70SAnna Dabrowskaclass helper_plugin_recommend_mail extends DokuWiki_Plugin
95187ba70SAnna Dabrowska{
105187ba70SAnna Dabrowska    /**
115187ba70SAnna Dabrowska     * @param string $recipient
125187ba70SAnna Dabrowska     * @param string $mailtext
135187ba70SAnna Dabrowska     * @param string $sender
145187ba70SAnna Dabrowska     * @return void
155187ba70SAnna Dabrowska     */
165187ba70SAnna Dabrowska    public function sendMail($recipient, $mailtext, $sender)
175187ba70SAnna Dabrowska    {
185187ba70SAnna Dabrowska        global $INPUT;
195187ba70SAnna Dabrowska
205187ba70SAnna Dabrowska        $mailer = new Mailer();
215187ba70SAnna Dabrowska        $mailer->bcc($recipient);
225187ba70SAnna Dabrowska        $mailer->from($sender);
235187ba70SAnna Dabrowska
245187ba70SAnna Dabrowska        $subject = $INPUT->str('subject');
255187ba70SAnna Dabrowska        $mailer->subject($subject);
265187ba70SAnna Dabrowska        $mailer->setBody($mailtext);
275187ba70SAnna Dabrowska        $mailer->send();
285187ba70SAnna Dabrowska    }
295187ba70SAnna Dabrowska
305187ba70SAnna Dabrowska    /**
315187ba70SAnna Dabrowska     * Processes recipients from input and returns an array of emails
325187ba70SAnna Dabrowska     * with user groups resolved to individual users
335187ba70SAnna Dabrowska     *
345187ba70SAnna Dabrowska     * @param string $recipients
355187ba70SAnna Dabrowska     * @return array
365187ba70SAnna Dabrowska     * @throws Exception
375187ba70SAnna Dabrowska     */
385187ba70SAnna Dabrowska    public function resolveRecipients($recipients)
395187ba70SAnna Dabrowska    {
405187ba70SAnna Dabrowska        $resolved = [];
415187ba70SAnna Dabrowska
425187ba70SAnna Dabrowska        $recipients = explode(',', $recipients);
435187ba70SAnna Dabrowska
445187ba70SAnna Dabrowska        foreach ($recipients as $recipient) {
455187ba70SAnna Dabrowska            $recipient = trim($recipient);
465187ba70SAnna Dabrowska
475187ba70SAnna Dabrowska            if ($recipient[0] === '@') {
48*9121cb07SAnna Dabrowska                $this->resolveGroup($resolved, $recipient);
49*9121cb07SAnna Dabrowska            } elseif (strpos($recipient, '@') === false) {
50*9121cb07SAnna Dabrowska                $this->resolveUser($resolved, $recipient);
515187ba70SAnna Dabrowska            } else {
525187ba70SAnna Dabrowska                if (!mail_isvalid($recipient)) {
535187ba70SAnna Dabrowska                    throw new \Exception($this->getLang('err_recipient'));
545187ba70SAnna Dabrowska                }
555187ba70SAnna Dabrowska                $resolved[] = $recipient;
565187ba70SAnna Dabrowska            }
575187ba70SAnna Dabrowska        }
585187ba70SAnna Dabrowska        return $resolved;
595187ba70SAnna Dabrowska    }
60*9121cb07SAnna Dabrowska
61*9121cb07SAnna Dabrowska    /**
62*9121cb07SAnna Dabrowska     * @param array $resolved
63*9121cb07SAnna Dabrowska     * @param string $recipient
64*9121cb07SAnna Dabrowska     * @return void
65*9121cb07SAnna Dabrowska     * @throws Exception
66*9121cb07SAnna Dabrowska     */
67*9121cb07SAnna Dabrowska    protected function resolveGroup(&$resolved, $recipient)
68*9121cb07SAnna Dabrowska    {
69*9121cb07SAnna Dabrowska        /** @var AuthPlugin $auth */
70*9121cb07SAnna Dabrowska        global $auth;
71*9121cb07SAnna Dabrowska        if (!$auth->canDo('getUsers')) {
72*9121cb07SAnna Dabrowska            throw new \Exception('');
73*9121cb07SAnna Dabrowska        }
74*9121cb07SAnna Dabrowska
75*9121cb07SAnna Dabrowska        $users = $auth->retrieveUsers(0, 0, ['grps' => substr($recipient, 1)]);
76*9121cb07SAnna Dabrowska        foreach ($users as $user) {
77*9121cb07SAnna Dabrowska            $resolved[] = $user['mail'];
78*9121cb07SAnna Dabrowska        }
79*9121cb07SAnna Dabrowska    }
80*9121cb07SAnna Dabrowska
81*9121cb07SAnna Dabrowska    /**
82*9121cb07SAnna Dabrowska     * @param array $resolved
83*9121cb07SAnna Dabrowska     * @param string $recipient
84*9121cb07SAnna Dabrowska     * @return void
85*9121cb07SAnna Dabrowska     */
86*9121cb07SAnna Dabrowska    protected function resolveUser(&$resolved, $recipient)
87*9121cb07SAnna Dabrowska    {
88*9121cb07SAnna Dabrowska        /** @var AuthPlugin $auth */
89*9121cb07SAnna Dabrowska        global $auth;
90*9121cb07SAnna Dabrowska        $user = $auth->getUserData($recipient);
91*9121cb07SAnna Dabrowska        if ($user) $resolved[] = $user['mail'];
92*9121cb07SAnna Dabrowska    }
935187ba70SAnna Dabrowska}
94