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