summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Smith <chris.eureka@jalakai.co.uk>2009-04-27 01:13:46 +0200
committerChris Smith <chris.eureka@jalakai.co.uk>2009-04-27 01:13:46 +0200
commit3a4bb9d5b60597f13681e43dff1a37b3a2966735 (patch)
treeeb3db172ad87aa4270a3c707c06b8fce17943468
parent672f99ce23ac7ec217f954a568d9b380f3c8f2a2 (diff)
downloadrpg-3a4bb9d5b60597f13681e43dff1a37b3a2966735.tar.gz
rpg-3a4bb9d5b60597f13681e43dff1a37b3a2966735.tar.bz2
FS#1680 - improve email address validation in config plugin
- setting_email and setting_richemail updated to use mail_isvalid() from inc/mail.php - _pattern improved if any plugin extends either class for its own settings (this maybe over cautious. Its probably very unlikely that any plugin does this). darcs-hash:20090426231346-f07c6-2af83d890ff4d92b14637ef6024d3fb68ba97efd.gz
-rw-r--r--lib/plugins/config/settings/config.class.php31
1 files changed, 29 insertions, 2 deletions
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 81d9224f5..ce9409438 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -528,8 +528,35 @@ if (!class_exists('setting_password')) {
}
if (!class_exists('setting_email')) {
+
+ require_once(DOKU_INC.'inc/mail.php');
+ if (!defined('SETTING_EMAIL_PATTERN')) define('SETTING_EMAIL_PATTERN','<^'.PREG_PATTERN_VALID_EMAIL.'$>');
+
class setting_email extends setting_string {
- var $_pattern = '#^\s*(([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)(,\s*([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+))*)?\s*$#i';
+ var $_pattern = SETTING_EMAIL_PATTERN; // no longer required, retained for backward compatibility - FIXME, may not be necessary
+
+ /**
+ * update setting with user provided value $input
+ * if value fails error check, save it
+ *
+ * @return true if changed, false otherwise (incl. on error)
+ */
+ function update($input) {
+ if (is_null($input)) return false;
+ if ($this->is_protected()) return false;
+
+ $value = is_null($this->_local) ? $this->_default : $this->_local;
+ if ($value == $input) return false;
+
+ if (!mail_isvalid($input)) {
+ $this->_error = true;
+ $this->_input = $input;
+ return false;
+ }
+
+ $this->_local = $input;
+ return true;
+ }
}
}
@@ -563,7 +590,7 @@ if (!class_exists('setting_richemail')) {
$addr = $test;
}
- if ($this->_pattern && !preg_match($this->_pattern,$addr)) {
+ if (!mail_isvalid($addr)) {
$this->_error = true;
$this->_input = $input;
return false;