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