1<?php 2 3namespace dokuwiki\plugin\config\core\Setting; 4 5/** 6 * Class setting_email 7 */ 8class SettingEmail extends SettingString 9{ 10 protected $multiple = false; 11 protected $placeholders = false; 12 13 /** @inheritdoc */ 14 public function update($input) 15 { 16 if(is_null($input)) return false; 17 if($this->isProtected()) return false; 18 19 $value = is_null($this->local) ? $this->default : $this->local; 20 if($value == $input) return false; 21 if($input === '') { 22 $this->local = $input; 23 return true; 24 } 25 $mail = $input; 26 27 if($this->placeholders) { 28 // replace variables with pseudo values 29 $mail = str_replace('@USER@', 'joe', $mail); 30 $mail = str_replace('@NAME@', 'Joe Schmoe', $mail); 31 $mail = str_replace('@MAIL@', 'joe@example.com', $mail); 32 } 33 34 // multiple mail addresses? 35 if($this->multiple) { 36 $mails = array_filter(array_map('trim', explode(',', $mail))); 37 } else { 38 $mails = [$mail]; 39 } 40 41 // check them all 42 foreach($mails as $mail) { 43 // only check the address part 44 if(preg_match('#(.*?)<(.*?)>#', $mail, $matches)) { 45 $addr = $matches[2]; 46 } else { 47 $addr = $mail; 48 } 49 50 if(!mail_isvalid($addr)) { 51 $this->error = true; 52 $this->input = $input; 53 return false; 54 } 55 } 56 57 $this->local = $input; 58 return true; 59 } 60} 61