X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Fpage.inc.php;h=a23b1e2945c3584d92dbe5b987cbcd9aae3a7223;hb=429e4a4b8eb428e9631513fc6bb053b4635c7729;hp=64ba1915cebd07c43255fada3564684db86399f4;hpb=5e4417a9f3f2dfa9ad9207de4022beeb14c797df;p=platal.git diff --git a/modules/profile/page.inc.php b/modules/profile/page.inc.php index 64ba191..a23b1e2 100644 --- a/modules/profile/page.inc.php +++ b/modules/profile/page.inc.php @@ -1,6 +1,6 @@ trigError('URL Incorrecte : une url doit commencer par http:// ou https:// ou ftp://' - . ' et ne pas contenir de caractères interdits'); + Platal::page()->trigError('URL Incorrecte : une url doit commencer par http:// ou https:// ou ftp://' + . ' et ne pas contenir de caractères interdits'); } return $value; } @@ -69,11 +68,9 @@ class ProfileEmail extends ProfileNoSave 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->trigError('Adresse Email invalide'); + Platal::page()->trigError('Adresse Email invalide'); } return $value; } @@ -89,8 +86,7 @@ class ProfileNumber extends ProfileNoSave $value = trim($value); $success = empty($value) || is_numeric($value); if (!$success) { - global $page; - $page->trigError('Numéro invalide'); + Platal::page()->trigError('Numéro invalide'); } return $value; } @@ -113,13 +109,108 @@ class ProfileTel extends ProfileNoSave $value = format_display_number($value,$error); $success = !$error; if (!$success) { - global $page; - $page->trigError('Le préfixe international du numéro de téléphone est inconnu. '); + Platal::page()->trigError('Le préfixe international du numéro de téléphone est inconnu. '); } return $value; } } +class ProfilePhones implements ProfileSetting +{ + private $tel; + private $pub; + protected $id; + protected $link_type; + protected $link_id; + + public function __construct($type, $link_id, $id = 0) + { + if ($id != 0) { + $this->id = $id; + } else { + $this->id = S::i('uid'); + } + $this->tel = new ProfileTel(); + $this->pub = new ProfilePub(); + $this->link_type = $type; + $this->link_id = $link_id; + } + + public function value(ProfilePage &$page, $field, $value, &$success) + { + $success = true; + if (is_null($value)) { + $value = array(); + $res = XDB::iterator("SELECT t.display_tel AS tel, t.tel_type AS type, t.pub, t.comment + FROM profile_phones AS t + WHERE t.uid = {?} AND t.link_type = {?} + ORDER BY t.tel_id", + $this->id, $this->link_type); + if ($res->numRows() > 0) { + $value = $res->fetchAllAssoc(); + } else { + $value = array( + 0 => array( + 'type' => 'fixed', + 'tel' => '', + 'pub' => 'private', + 'comment' => '', + ) + ); + } + } + foreach ($value as $key=>&$phone) { + if (isset($phone['removed']) && $phone['removed']) { + unset($value[$key]); + } else { + unset($phone['removed']); + $phone['pub'] = $this->pub->value($page, 'pub', $phone['pub'], $s); + $phone['tel'] = $this->tel->value($page, 'tel', $phone['tel'], $s); + if(!isset($phone['type']) || ($phone['type'] != 'fixed' && $phone['type'] != 'mobile' && $phone['type'] != 'fax')) { + $phone['type'] = 'fixed'; + $s = false; + } + if (!$s) { + $phone['error'] = true; + $success = false; + } + if (!isset($phone['comment'])) { + $phone['comment'] = ''; + } + } + } + return $value; + } + + private function saveTel($telid, array &$phone) + { + if ($phone['tel'] != '') { + XDB::execute("INSERT INTO profile_phones (uid, link_type, link_id, tel_id, tel_type, + search_tel, display_tel, pub, comment) + VALUES ({?}, {?}, {?}, {?}, {?}, + {?}, {?}, {?}, {?})", + $this->id, $this->link_type, $this->link_id, $telid, $phone['type'], + format_phone_number($phone['tel']), $phone['tel'], $phone['pub'], $phone['comment']); + } + } + + public function save(ProfilePage &$page, $field, $value) + { + XDB::execute("DELETE FROM profile_phones + WHERE uid = {?} AND link_type = {?} AND link_id = {?}", + $this->id, $this->link_type, $this->link_id); + $this->saveTels($field, $value); + } + + //Only saves phones without a delete operation + public function saveTels($field, $value) + { + foreach ($value as $telid=>&$phone) { + $this->saveTel($telid, $phone); + } + } +} + class ProfilePub extends ProfileNoSave { public function value(ProfilePage &$page, $field, $value, &$success) @@ -128,9 +219,9 @@ class ProfilePub extends ProfileNoSave if (is_null($value)) { return isset($page->values[$field]) ? $page->values[$field] : S::v($field); } - if (is_null($value) || !$value) { + if (!$value) { $value = 'private'; - } else if ($value == 'on') { // Checkbox + } elseif ($value == 'on') { // Checkbox $value = 'public'; } return $value; @@ -143,7 +234,7 @@ class ProfileBool extends ProfileNoSave { $success = true; if (is_null($value)) { - $value = @$page->values[$field]; + $value = isset($page->values[$field]) ? $page->values[$field] : null; } return $value ? "1" : ""; } @@ -159,16 +250,14 @@ class ProfileDate extends ProfileNoSave } else { $success = preg_match('@(\d{2})/(\d{2})/(\d{4})@', $value, $matches); if (!$success) { - global $page; - $page->trigError("Les dates doivent être au format jj/mm/aaaa"); + Platal::page()->trigError("Les dates doivent être au format jj/mm/aaaa"); } else { $day = (int)$matches[1]; $month = (int)$matches[2]; $year = (int)$matches[3]; $success = ($day > 0 && $day <= 31) && ($month > 0 && $month <= 12) && ($year > 1900 && $year <= 2020); if (!$success) { - global $page; - $page->trigError("La date n'a pas une valeur valide"); + Platal::page()->trigError("La date n'a pas une valeur valide"); } } } @@ -176,44 +265,27 @@ class ProfileDate extends ProfileNoSave } } -abstract class ProfileGeoloc implements ProfileSetting +abstract class ProfileGeocoding implements ProfileSetting { - protected function geolocAddress(array &$address, &$success) + protected function geocodeAddress(array &$address, &$success) { - require_once 'geoloc.inc.php'; + require_once 'geocoding.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/geoloc.mail.tpl'); - $mailer->assign('text', get_address_text($address)); - $mailer->assign('geoloc', $geotxt); - $mailer->send(); - } else if (@$address['changed'] || !@$address['checked']) { + if (isset($address['changed']) && $address['changed'] == 1) { + $gmapsGeocoder = new GMapsGeocoder(); + $address = $gmapsGeocoder->getGeocodedAddress($address); + if (isset($address['geoloc'])) { $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['precise_lat'] = rtrim($address['precise_lat'], '.0'); - $address['precise_lon'] = rtrim($address['precise_lon'], '.0'); - $address['text'] = get_address_text($address); + if (isset($address['geoloc_choice']) && ($address['geoloc_choice'] == 0)) { + $mailer = new PlMailer('geoloc/geoloc.mail.tpl'); + $mailer->assign('text', $address['text']); + $mailer->assign('geoloc', $address['geoloc']); + $mailer->send(); + $gmapsGeocoder = new GMapsGeocoder(); + $address = $gmapsGeocoder->stripGeocodingFromAddress($address); + } } } @@ -283,8 +355,7 @@ abstract class ProfilePage implements PlWizardPage register_watch_op(S::i('uid'), WATCH_FICHE); } global $platal; - $log =& $_SESSION['log']; - $log->log('profil', $platal->pl_self(1)); + S::logger()->log('profil', $platal->pl_self(1)); } protected function checkChanges() @@ -314,11 +385,11 @@ abstract class ProfilePage implements PlWizardPage return 'profile/base.tpl'; } - protected function _prepare(PlatalPage &$page, $id) + protected function _prepare(PlPage &$page, $id) { } - public function prepare(PlatalPage &$page, $id) + public function prepare(PlPage &$page, $id) { if (count($this->values) == 0) { $this->fetchData(); @@ -331,7 +402,7 @@ abstract class ProfilePage implements PlWizardPage $page->assign('errors', $this->errors); } - public function process() + public function process(&$global_success) { $global_success = true; $this->fetchData(); @@ -353,11 +424,15 @@ abstract class ProfilePage implements PlWizardPage } return Post::has('next_page') ? PlWizard::NEXT_PAGE : PlWizard::CURRENT_PAGE; } - global $page; - $page->trigError("Certains champs n'ont pas pu être validés, merci de corriger les informations " - . "de ton profil et de revalider ta demande"); + Platal::page()->trigError("Certains champs n'ont pas pu être validés, merci de corriger les informations " + . "de ton profil et de revalider ta demande."); return PlWizard::CURRENT_PAGE; } + + public function success() + { + return 'Ton profil a bien été mis à jour.'; + } } require_once dirname(__FILE__) . '/general.inc.php';