xref: /plugin/recommend/helper/mail.php (revision 71a147c8f40cc6f87d8258a1c5ba55bf3b49bdbe)
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] === '@') {
489121cb07SAnna Dabrowska                $this->resolveGroup($resolved, $recipient);
499121cb07SAnna Dabrowska            } elseif (strpos($recipient, '@') === false) {
509121cb07SAnna Dabrowska                $this->resolveUser($resolved, $recipient);
515187ba70SAnna Dabrowska            } else {
52*71a147c8SAnna Dabrowska                if (!$this->emailIsValid($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    }
609121cb07SAnna Dabrowska
619121cb07SAnna Dabrowska    /**
629121cb07SAnna Dabrowska     * @param array $resolved
639121cb07SAnna Dabrowska     * @param string $recipient
649121cb07SAnna Dabrowska     * @return void
659121cb07SAnna Dabrowska     * @throws Exception
669121cb07SAnna Dabrowska     */
679121cb07SAnna Dabrowska    protected function resolveGroup(&$resolved, $recipient)
689121cb07SAnna Dabrowska    {
699121cb07SAnna Dabrowska        /** @var AuthPlugin $auth */
709121cb07SAnna Dabrowska        global $auth;
719121cb07SAnna Dabrowska        if (!$auth->canDo('getUsers')) {
72*71a147c8SAnna Dabrowska            throw new \Exception('Auth cannot fetch users by group.');
739121cb07SAnna Dabrowska        }
749121cb07SAnna Dabrowska
759121cb07SAnna Dabrowska        $users = $auth->retrieveUsers(0, 0, ['grps' => substr($recipient, 1)]);
769121cb07SAnna Dabrowska        foreach ($users as $user) {
779121cb07SAnna Dabrowska            $resolved[] = $user['mail'];
789121cb07SAnna Dabrowska        }
799121cb07SAnna Dabrowska    }
809121cb07SAnna Dabrowska
819121cb07SAnna Dabrowska    /**
829121cb07SAnna Dabrowska     * @param array $resolved
839121cb07SAnna Dabrowska     * @param string $recipient
849121cb07SAnna Dabrowska     * @return void
859121cb07SAnna Dabrowska     */
869121cb07SAnna Dabrowska    protected function resolveUser(&$resolved, $recipient)
879121cb07SAnna Dabrowska    {
889121cb07SAnna Dabrowska        /** @var AuthPlugin $auth */
899121cb07SAnna Dabrowska        global $auth;
909121cb07SAnna Dabrowska        $user = $auth->getUserData($recipient);
919121cb07SAnna Dabrowska        if ($user) $resolved[] = $user['mail'];
929121cb07SAnna Dabrowska    }
93*71a147c8SAnna Dabrowska
94*71a147c8SAnna Dabrowska    /**
95*71a147c8SAnna Dabrowska     * Checks validity of given mail. With config 'wikionly' set to true
96*71a147c8SAnna Dabrowska     * also checks if user with this email is known.
97*71a147c8SAnna Dabrowska     *
98*71a147c8SAnna Dabrowska     * @param $mail
99*71a147c8SAnna Dabrowska     * @return bool
100*71a147c8SAnna Dabrowska     * @throws Exception
101*71a147c8SAnna Dabrowska     */
102*71a147c8SAnna Dabrowska    protected function emailIsValid($mail)
103*71a147c8SAnna Dabrowska    {
104*71a147c8SAnna Dabrowska        if(!$this->getConf('wikionly')) return mail_isvalid($mail);
105*71a147c8SAnna Dabrowska
106*71a147c8SAnna Dabrowska        /** @var AuthPlugin $auth */
107*71a147c8SAnna Dabrowska        global $auth;
108*71a147c8SAnna Dabrowska        if (!$auth->canDo('getUsers')) {
109*71a147c8SAnna Dabrowska            throw new \Exception('Auth cannot fetch users by email.');
110*71a147c8SAnna Dabrowska        }
111*71a147c8SAnna Dabrowska
112*71a147c8SAnna Dabrowska        $user = $auth->retrieveUsers(0, 1, ['mail' => $mail]);
113*71a147c8SAnna Dabrowska        return (bool)$user;
114*71a147c8SAnna Dabrowska    }
1155187ba70SAnna Dabrowska}
116