15187ba70SAnna Dabrowska<?php 25187ba70SAnna Dabrowska 3*c6f9d3d5SAnna Dabrowskause dokuwiki\Extension\Plugin; 45187ba70SAnna Dabrowskause dokuwiki\Extension\AuthPlugin; 55187ba70SAnna Dabrowska 65187ba70SAnna Dabrowska/** 75187ba70SAnna Dabrowska * Mail helper 85187ba70SAnna Dabrowska */ 9*c6f9d3d5SAnna Dabrowskaclass helper_plugin_recommend_mail extends Plugin 105187ba70SAnna Dabrowska{ 115187ba70SAnna Dabrowska /** 125187ba70SAnna Dabrowska * @param string $recipient 135187ba70SAnna Dabrowska * @param string $sender 14f1a0181dSAnna Dabrowska * @param array $replacements 15f1a0181dSAnna Dabrowska * 165187ba70SAnna Dabrowska * @return void 175187ba70SAnna Dabrowska */ 18f1a0181dSAnna Dabrowska public function sendMail($recipient, $sender, $replacements = []) 195187ba70SAnna Dabrowska { 205187ba70SAnna Dabrowska global $INPUT; 215187ba70SAnna Dabrowska 22f1a0181dSAnna Dabrowska $mailtext = file_get_contents($this->localFN('template')); 23f1a0181dSAnna Dabrowska 24f1a0181dSAnna Dabrowska /* Limit to two empty lines. */ 25f1a0181dSAnna Dabrowska $mailtext = preg_replace('/\n{4,}/', "\n\n\n", $mailtext); 26f1a0181dSAnna Dabrowska 275187ba70SAnna Dabrowska $mailer = new Mailer(); 285187ba70SAnna Dabrowska $mailer->bcc($recipient); 295187ba70SAnna Dabrowska $mailer->from($sender); 305187ba70SAnna Dabrowska 315187ba70SAnna Dabrowska $subject = $INPUT->str('subject'); 325187ba70SAnna Dabrowska $mailer->subject($subject); 33f1a0181dSAnna Dabrowska $mailer->setBody($mailtext, $replacements); 345187ba70SAnna Dabrowska $mailer->send(); 355187ba70SAnna Dabrowska } 365187ba70SAnna Dabrowska 375187ba70SAnna Dabrowska /** 385187ba70SAnna Dabrowska * Processes recipients from input and returns an array of emails 395187ba70SAnna Dabrowska * with user groups resolved to individual users 405187ba70SAnna Dabrowska * 415187ba70SAnna Dabrowska * @param string $recipients 425187ba70SAnna Dabrowska * @return array 435187ba70SAnna Dabrowska * @throws Exception 445187ba70SAnna Dabrowska */ 455187ba70SAnna Dabrowska public function resolveRecipients($recipients) 465187ba70SAnna Dabrowska { 475187ba70SAnna Dabrowska $resolved = []; 485187ba70SAnna Dabrowska 495187ba70SAnna Dabrowska $recipients = explode(',', $recipients); 505187ba70SAnna Dabrowska 515187ba70SAnna Dabrowska foreach ($recipients as $recipient) { 525187ba70SAnna Dabrowska $recipient = trim($recipient); 535187ba70SAnna Dabrowska 545187ba70SAnna Dabrowska if ($recipient[0] === '@') { 559121cb07SAnna Dabrowska $this->resolveGroup($resolved, $recipient); 56*c6f9d3d5SAnna Dabrowska } elseif (!str_contains($recipient, '@')) { 579121cb07SAnna Dabrowska $this->resolveUser($resolved, $recipient); 585187ba70SAnna Dabrowska } else { 5971a147c8SAnna Dabrowska if (!$this->emailIsValid($recipient)) { 605187ba70SAnna Dabrowska throw new \Exception($this->getLang('err_recipient')); 615187ba70SAnna Dabrowska } 625187ba70SAnna Dabrowska $resolved[] = $recipient; 635187ba70SAnna Dabrowska } 645187ba70SAnna Dabrowska } 655187ba70SAnna Dabrowska return $resolved; 665187ba70SAnna Dabrowska } 679121cb07SAnna Dabrowska 689121cb07SAnna Dabrowska /** 699121cb07SAnna Dabrowska * @param array $resolved 709121cb07SAnna Dabrowska * @param string $recipient 719121cb07SAnna Dabrowska * @return void 729121cb07SAnna Dabrowska * @throws Exception 739121cb07SAnna Dabrowska */ 749121cb07SAnna Dabrowska protected function resolveGroup(&$resolved, $recipient) 759121cb07SAnna Dabrowska { 769121cb07SAnna Dabrowska /** @var AuthPlugin $auth */ 779121cb07SAnna Dabrowska global $auth; 789121cb07SAnna Dabrowska if (!$auth->canDo('getUsers')) { 7971a147c8SAnna Dabrowska throw new \Exception('Auth cannot fetch users by group.'); 809121cb07SAnna Dabrowska } 819121cb07SAnna Dabrowska 829121cb07SAnna Dabrowska $users = $auth->retrieveUsers(0, 0, ['grps' => substr($recipient, 1)]); 839121cb07SAnna Dabrowska foreach ($users as $user) { 849121cb07SAnna Dabrowska $resolved[] = $user['mail']; 859121cb07SAnna Dabrowska } 869121cb07SAnna Dabrowska } 879121cb07SAnna Dabrowska 889121cb07SAnna Dabrowska /** 899121cb07SAnna Dabrowska * @param array $resolved 909121cb07SAnna Dabrowska * @param string $recipient 919121cb07SAnna Dabrowska * @return void 929121cb07SAnna Dabrowska */ 939121cb07SAnna Dabrowska protected function resolveUser(&$resolved, $recipient) 949121cb07SAnna Dabrowska { 959121cb07SAnna Dabrowska /** @var AuthPlugin $auth */ 969121cb07SAnna Dabrowska global $auth; 979121cb07SAnna Dabrowska $user = $auth->getUserData($recipient); 989121cb07SAnna Dabrowska if ($user) $resolved[] = $user['mail']; 999121cb07SAnna Dabrowska } 10071a147c8SAnna Dabrowska 10171a147c8SAnna Dabrowska /** 10271a147c8SAnna Dabrowska * Checks validity of given mail. With config 'wikionly' set to true 10371a147c8SAnna Dabrowska * also checks if user with this email is known. 10471a147c8SAnna Dabrowska * 10571a147c8SAnna Dabrowska * @param $mail 10671a147c8SAnna Dabrowska * @return bool 10771a147c8SAnna Dabrowska * @throws Exception 10871a147c8SAnna Dabrowska */ 10971a147c8SAnna Dabrowska protected function emailIsValid($mail) 11071a147c8SAnna Dabrowska { 11171a147c8SAnna Dabrowska if (!$this->getConf('wikionly')) return mail_isvalid($mail); 11271a147c8SAnna Dabrowska 11371a147c8SAnna Dabrowska /** @var AuthPlugin $auth */ 11471a147c8SAnna Dabrowska global $auth; 11571a147c8SAnna Dabrowska if (!$auth->canDo('getUsers')) { 11671a147c8SAnna Dabrowska throw new \Exception('Auth cannot fetch users by email.'); 11771a147c8SAnna Dabrowska } 11871a147c8SAnna Dabrowska 11971a147c8SAnna Dabrowska $user = $auth->retrieveUsers(0, 1, ['mail' => $mail]); 12071a147c8SAnna Dabrowska return (bool)$user; 12171a147c8SAnna Dabrowska } 1225187ba70SAnna Dabrowska} 123