X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Fpage.inc.php;h=f07ef0433e77609577de69656a4564c018413495;hb=f25e1a5648e03f9fde143f28127200428ec5d3b0;hp=d85bfcea6c1423bd7cb6c1cbea6a9c04bad8eeab;hpb=0b14f91d0a35ef3228101b9740164582a266ce04;p=platal.git diff --git a/modules/profile/page.inc.php b/modules/profile/page.inc.php index d85bfce..f07ef04 100644 --- a/modules/profile/page.inc.php +++ b/modules/profile/page.inc.php @@ -50,7 +50,8 @@ class ProfileWeb extends ProfileNoSave if (is_null($value)) { return isset($page->values[$field]) ? $page->values[$field] : S::v($field); } - $success = preg_match("{^(https?|ftp)://[a-zA-Z0-9._%#+/?=&~-]+$}i", $value); + $value = trim($value); + $success = empty($value) || preg_match("{^(https?|ftp)://[a-zA-Z0-9._%#+/?=&~-]+$}i", $value); if (!$success) { global $page; $page->trig('URL Incorrecte : une url doit commencer par http:// ou https:// ou ftp://' @@ -60,6 +61,25 @@ class ProfileWeb extends ProfileNoSave } } +class ProfileEmail extends ProfileNoSave +{ + public function value(ProfilePage &$page, $field, $value, &$success) + { + if (is_null($value)) { + return isset($page->values[$field]) ? $page->values[$field] : S::v($field); + } + $value = trim($value); + require_once 'xorg.misc.inc.php'; + $success = empty($value) || isvalid_email($value); + if (!$success) { + global $page; + $page->trig('Adresse Email invalide'); + } + return $value; + } +} + + class ProfileTel extends ProfileNoSave { public function value(ProfilePage &$page, $field, $value, &$success) @@ -67,10 +87,10 @@ class ProfileTel extends ProfileNoSave if (is_null($value)) { return isset($page->values[$field]) ? $page->values[$field] : S::v($field); } - $success = strlen(strtok($value, '<>{}@&#~\/:;?,!§*_`[]|%$^=')) == strlen($value); + $success = !preg_match('/[<>{}@&#~\/:;?,!§*_`\[\]|%$^=]/', $value, $matches); if (!$success) { global $page; - $page->trig('Le numéro de téléphone contient un caractère interdit.'); + $page->trig('Le numéro de téléphone contient un caractère interdit : ' . pl_entities($matches[0][0])); } return $value; } @@ -99,12 +119,52 @@ class ProfileBool extends ProfileNoSave { $success = true; if (is_null($value)) { - $value = $page->values[$field]; + $value = @$page->values[$field]; } return $value ? 1 : 0; } } +abstract class ProfileGeoloc implements ProfileSetting +{ + protected function geolocAddress(array &$address, &$success) + { + require_once 'geoloc.inc.php'; + $success = true; + unset($address['geoloc']); + unset($address['geoloc_cityid']); + if (@$address['parsevalid'] + || (@$address['text'] && @$address['changed']) + || (@$address['text'] && !@$address['cityid'])) { + $address = array_merge($address, empty_address()); + $new = get_address_infos(@$address['text']); + if (compare_addresses_text(@$address['text'], $geotxt = get_address_text($new)) + || (@$address['parsevalid'] && @$address['cityid'])) { + $address = array_merge($address, $new); + $address['checked'] = true; + } else if (@$address['parsevalid']) { + $address = array_merge($address, cut_address(@$address['text'])); + $address['checked'] = true; + $mailer = new PlMailer('geoloc/mail_geoloc.tpl'); + $mailer->assign('text', get_address_text($address)); + $mailer->assign('geoloc', $geotxt); + $mailer->send(); + } else if (@$address['changed'] || !@$address['checked']) { + $success = false; + $address = array_merge($address, cut_address(@$address['text'])); + $address['checked'] = false; + $address['geoloc'] = $geotxt; + $address['geoloc_cityid'] = $new['cityid']; + } else { + $address = array_merge($address, cut_address(@$address['text'])); + $address['checked'] = true; + } + } + $address['text'] = get_address_text($address); + } +} + + abstract class ProfilePage implements PlWizardPage { protected $wizard; @@ -201,10 +261,10 @@ abstract class ProfilePage implements PlWizardPage foreach ($this->settings as $field=>&$setting) { $success = false; if (!is_null($setting)) { - $this->values[$field] = $setting->value($this, $field, Post::v($field), $success); + $this->values[$field] = $setting->value($this, $field, Post::v($field, ''), $success); } else { $success = true; - $this->values[$field] = Post::v($field); + $this->values[$field] = Post::v($field, ''); } $this->errors[$field] = !$success; $global_success = $global_success && $success; @@ -225,6 +285,10 @@ abstract class ProfilePage implements PlWizardPage require_once dirname(__FILE__) . '/general.inc.php'; require_once dirname(__FILE__) . '/addresses.inc.php'; +require_once dirname(__FILE__) . '/groups.inc.php'; +require_once dirname(__FILE__) . '/decos.inc.php'; +require_once dirname(__FILE__) . '/jobs.inc.php'; +require_once dirname(__FILE__) . '/skills.inc.php'; // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>