X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Fpage.inc.php;h=9ea18d9e1f57603c6a9f51592a3a9e365a9052e1;hb=87db81e71e24db248d1a5059dcd28781b0e2e75f;hp=67fcbe7842b534708b14f5dafcfc7b536bc2d6ea;hpb=2db80ab6f7d054ec274c66f7ba983f49596b81cf;p=platal.git diff --git a/modules/profile/page.inc.php b/modules/profile/page.inc.php index 67fcbe7..9ea18d9 100644 --- a/modules/profile/page.inc.php +++ b/modules/profile/page.inc.php @@ -1,6 +1,6 @@ values[$field]) ? $page->values[$field] : S::v($field); - } - require_once('profil.func.inc.php'); - $value = format_phone_number($value); - if($value == '') { - $success = true; - return $value; - } - $value = format_display_number($value,$error); - $success = !$error; - if (!$success) { - 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 $link_type; - protected $link_id; - - public function __construct($type, $link_id) - { - $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) || !is_array($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", - $page->pid(), $this->link_type); - $value = $res->fetchAllAssoc(); - } - foreach ($value as $key=>&$phone) { - if (@$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'] = ''; - } + $phones = array(); + + if (is_null($value)) { + $it = Phone::iterate(array($page->pid()), array(Phone::LINK_PROFILE), array(0)); + while ($phone = $it->next()) { + $success = ($phone->format() && $success); + $phones[] = $phone->toFormArray(); + } + if (count($phones) == 0) { + $phone = new Phone(); + $phones[] = $phone->toFormArray(); } + return $phones; } - return $value; - } - private function saveTel($pid, $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 ({?}, {?}, {?}, {?}, {?}, - {?}, {?}, {?}, {?})", - $pid, $this->link_type, $this->link_id, $telid, $phone['type'], - format_phone_number($phone['tel']), $phone['tel'], $phone['pub'], $phone['comment']); - } + return Phone::formatFormArray($value, $success); } public function save(ProfilePage &$page, $field, $value) { - XDB::execute("DELETE FROM profile_phones - WHERE uid = {?} AND link_type = {?} AND link_id = {?}", - $page->pid(), $this->link_type, $this->link_id); - $this->saveTels($page->pid(), $field, $value); + Phone::deletePhones($page->pid(), Phone::LINK_PROFILE); + Phone::savePhones($value, $page->pid(), Phone::LINK_PROFILE); } - //Only saves phones without a delete operation - public function saveTels($pid, $field, $value) - { - foreach ($value as $telid=>&$phone) { - $this->saveTel($pid, $telid, $phone); - } + public function getText($value) { + return Phone::formArrayToString($value); } } -class ProfilePub extends ProfileNoSave +class ProfileSettingPub extends ProfileNoSave { public function value(ProfilePage &$page, $field, $value, &$success) { @@ -209,9 +149,13 @@ class ProfilePub extends ProfileNoSave } return $value; } + + public function getText($value) { + return $value; + } } -class ProfileBool extends ProfileNoSave +class ProfileSettingBool extends ProfileNoSave { public function value(ProfilePage &$page, $field, $value, &$success) { @@ -223,7 +167,7 @@ class ProfileBool extends ProfileNoSave } } -class ProfileDate extends ProfileNoSave +class ProfileSettingDate extends ProfileNoSave { public function value(ProfilePage &$page, $field, $value, &$success) { @@ -246,33 +190,13 @@ class ProfileDate extends ProfileNoSave } return $value; } -} -abstract class ProfileGeocoding implements ProfileSetting -{ - protected function geocodeAddress(array &$address, &$success) + public static function toSQLDate($value) { - require_once 'geocoding.inc.php'; - $success = true; - if ($address['changed'] == 1) { - $gmapsGeocoder = new GMapsGeocoder(); - $address = $gmapsGeocoder->getGeocodedAddress($address); - if (isset($address['geoloc'])) { - $success = false; - } - } - 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); - } + return preg_replace('@(\d{2})/(\d{2})/(\d{4})@', '\3-\2-\1', $value); } } - abstract class ProfilePage implements PlWizardPage { protected $wizard; @@ -325,12 +249,26 @@ abstract class ProfilePage implements PlWizardPage protected function saveData() { require_once 'notifs.inc.php'; + $changedFields = array(); foreach ($this->settings as $field=>&$setting) { - if (!is_null($setting) && $this->changed[$field]) { - $setting->save($this, $field, $this->values[$field]); - } - if ($this->changed[$field] && @$this->watched[$field]) { - WatchProfileUpdate::register($this->profile, $field); + if ($this->changed[$field]) { + if (!is_null($setting)) { + $changedFields[$field] = array( + str_replace("\n", " - ", $setting->getText($this->orig[$field])), + str_replace("\n", " - ", $setting->getText($this->values[$field])), + ); + } else { + $changedFields[$field] = array( + str_replace("\n", " - ", $this->orig[$field]), + str_replace("\n", " - ", $this->values[$field]), + ); + } + if (!is_null($setting)) { + $setting->save($this, $field, $this->values[$field]); + } + if (isset($this->watched[$field]) && $this->watched[$field]) { + WatchProfileUpdate::register($this->profile, $field); + } } } $this->_saveData(); @@ -341,6 +279,20 @@ abstract class ProfilePage implements PlWizardPage WHERE pid = {?}', $this->pid()); global $platal; S::logger()->log('profil', $platal->pl_self(2)); + + /** If the update was made by a third party and the profile corresponds + * to a registered user, stores both former and new text. + * This will be daily sent to the user. + */ + $owner = $this->profile->owner(); + $user = S::user(); + if ($owner->isActive() && $owner->id() != $user->id()) { + foreach ($changedFields as $field => $values) { + XDB::execute('REPLACE INTO profile_modifications (pid, uid, field, oldText, newText) + VALUES ({?}, {?}, {?}, {?}, {?})', + $this->pid(), $user->id(), $field, $values[0], $values[1]); + } + } } protected function checkChanges() @@ -399,7 +351,7 @@ abstract class ProfilePage implements PlWizardPage $page->assign('errors', $this->errors); } - public function process() + public function process(&$global_success) { $global_success = true; $this->fetchData(); @@ -422,9 +374,14 @@ abstract class ProfilePage implements PlWizardPage return Post::has('next_page') ? PlWizard::NEXT_PAGE : PlWizard::CURRENT_PAGE; } 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"); + . "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';