[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/lib/plugins/config/core/Setting/ -> SettingEmail.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\plugin\config\core\Setting;
   4  
   5  /**
   6   * Class setting_email
   7   */
   8  class 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  }