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 $sender 13*f1a0181dSAnna Dabrowska * @param array $replacements 14*f1a0181dSAnna Dabrowska * 155187ba70SAnna Dabrowska * @return void 165187ba70SAnna Dabrowska */ 17*f1a0181dSAnna Dabrowska public function sendMail($recipient, $sender, $replacements = []) 185187ba70SAnna Dabrowska { 195187ba70SAnna Dabrowska global $INPUT; 205187ba70SAnna Dabrowska 21*f1a0181dSAnna Dabrowska $mailtext = file_get_contents($this->localFN('template')); 22*f1a0181dSAnna Dabrowska 23*f1a0181dSAnna Dabrowska /* Limit to two empty lines. */ 24*f1a0181dSAnna Dabrowska $mailtext = preg_replace('/\n{4,}/', "\n\n\n", $mailtext); 25*f1a0181dSAnna Dabrowska 265187ba70SAnna Dabrowska $mailer = new Mailer(); 275187ba70SAnna Dabrowska $mailer->bcc($recipient); 285187ba70SAnna Dabrowska $mailer->from($sender); 295187ba70SAnna Dabrowska 305187ba70SAnna Dabrowska $subject = $INPUT->str('subject'); 315187ba70SAnna Dabrowska $mailer->subject($subject); 32*f1a0181dSAnna Dabrowska $mailer->setBody($mailtext, $replacements); 335187ba70SAnna Dabrowska $mailer->send(); 345187ba70SAnna Dabrowska } 355187ba70SAnna Dabrowska 365187ba70SAnna Dabrowska /** 375187ba70SAnna Dabrowska * Processes recipients from input and returns an array of emails 385187ba70SAnna Dabrowska * with user groups resolved to individual users 395187ba70SAnna Dabrowska * 405187ba70SAnna Dabrowska * @param string $recipients 415187ba70SAnna Dabrowska * @return array 425187ba70SAnna Dabrowska * @throws Exception 435187ba70SAnna Dabrowska */ 445187ba70SAnna Dabrowska public function resolveRecipients($recipients) 455187ba70SAnna Dabrowska { 465187ba70SAnna Dabrowska $resolved = []; 475187ba70SAnna Dabrowska 485187ba70SAnna Dabrowska $recipients = explode(',', $recipients); 495187ba70SAnna Dabrowska 505187ba70SAnna Dabrowska foreach ($recipients as $recipient) { 515187ba70SAnna Dabrowska $recipient = trim($recipient); 525187ba70SAnna Dabrowska 535187ba70SAnna Dabrowska if ($recipient[0] === '@') { 549121cb07SAnna Dabrowska $this->resolveGroup($resolved, $recipient); 559121cb07SAnna Dabrowska } elseif (strpos($recipient, '@') === false) { 569121cb07SAnna Dabrowska $this->resolveUser($resolved, $recipient); 575187ba70SAnna Dabrowska } else { 5871a147c8SAnna Dabrowska if (!$this->emailIsValid($recipient)) { 595187ba70SAnna Dabrowska throw new \Exception($this->getLang('err_recipient')); 605187ba70SAnna Dabrowska } 615187ba70SAnna Dabrowska $resolved[] = $recipient; 625187ba70SAnna Dabrowska } 635187ba70SAnna Dabrowska } 645187ba70SAnna Dabrowska return $resolved; 655187ba70SAnna Dabrowska } 669121cb07SAnna Dabrowska 679121cb07SAnna Dabrowska /** 689121cb07SAnna Dabrowska * @param array $resolved 699121cb07SAnna Dabrowska * @param string $recipient 709121cb07SAnna Dabrowska * @return void 719121cb07SAnna Dabrowska * @throws Exception 729121cb07SAnna Dabrowska */ 739121cb07SAnna Dabrowska protected function resolveGroup(&$resolved, $recipient) 749121cb07SAnna Dabrowska { 759121cb07SAnna Dabrowska /** @var AuthPlugin $auth */ 769121cb07SAnna Dabrowska global $auth; 779121cb07SAnna Dabrowska if (!$auth->canDo('getUsers')) { 7871a147c8SAnna Dabrowska throw new \Exception('Auth cannot fetch users by group.'); 799121cb07SAnna Dabrowska } 809121cb07SAnna Dabrowska 819121cb07SAnna Dabrowska $users = $auth->retrieveUsers(0, 0, ['grps' => substr($recipient, 1)]); 829121cb07SAnna Dabrowska foreach ($users as $user) { 839121cb07SAnna Dabrowska $resolved[] = $user['mail']; 849121cb07SAnna Dabrowska } 859121cb07SAnna Dabrowska } 869121cb07SAnna Dabrowska 879121cb07SAnna Dabrowska /** 889121cb07SAnna Dabrowska * @param array $resolved 899121cb07SAnna Dabrowska * @param string $recipient 909121cb07SAnna Dabrowska * @return void 919121cb07SAnna Dabrowska */ 929121cb07SAnna Dabrowska protected function resolveUser(&$resolved, $recipient) 939121cb07SAnna Dabrowska { 949121cb07SAnna Dabrowska /** @var AuthPlugin $auth */ 959121cb07SAnna Dabrowska global $auth; 969121cb07SAnna Dabrowska $user = $auth->getUserData($recipient); 979121cb07SAnna Dabrowska if ($user) $resolved[] = $user['mail']; 989121cb07SAnna Dabrowska } 9971a147c8SAnna Dabrowska 10071a147c8SAnna Dabrowska /** 10171a147c8SAnna Dabrowska * Checks validity of given mail. With config 'wikionly' set to true 10271a147c8SAnna Dabrowska * also checks if user with this email is known. 10371a147c8SAnna Dabrowska * 10471a147c8SAnna Dabrowska * @param $mail 10571a147c8SAnna Dabrowska * @return bool 10671a147c8SAnna Dabrowska * @throws Exception 10771a147c8SAnna Dabrowska */ 10871a147c8SAnna Dabrowska protected function emailIsValid($mail) 10971a147c8SAnna Dabrowska { 11071a147c8SAnna Dabrowska if(!$this->getConf('wikionly')) return mail_isvalid($mail); 11171a147c8SAnna Dabrowska 11271a147c8SAnna Dabrowska /** @var AuthPlugin $auth */ 11371a147c8SAnna Dabrowska global $auth; 11471a147c8SAnna Dabrowska if (!$auth->canDo('getUsers')) { 11571a147c8SAnna Dabrowska throw new \Exception('Auth cannot fetch users by email.'); 11671a147c8SAnna Dabrowska } 11771a147c8SAnna Dabrowska 11871a147c8SAnna Dabrowska $user = $auth->retrieveUsers(0, 1, ['mail' => $mail]); 11971a147c8SAnna Dabrowska return (bool)$user; 12071a147c8SAnna Dabrowska } 1215187ba70SAnna Dabrowska} 122