. */ if (!defined('STATUSNET')) { exit(1); } class ProfileDetailSettingsAction extends SettingsAction { function title() { return _m('Extended profile settings'); } /** * Instructions for use * * @return instructions for use */ function getInstructions() { // TRANS: Usage instructions for profile settings. return _('You can update your personal profile info here '. 'so people know more about you.'); } function showStylesheets() { parent::showStylesheets(); $this->cssLink('plugins/ExtendedProfile/profiledetail.css'); return true; } function handlePost() { // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { $this->show_form( _m( 'There was a problem with your session token. ' . 'Try again, please.' ) ); return; } if ($this->arg('save')) { $this->saveDetails(); } else { // TRANS: Message given submitting a form with an unknown action $this->showForm(_m('Unexpected form submission.')); } } function showContent() { $cur = common_current_user(); $profile = $cur->getProfile(); $widget = new ExtendedProfileWidget($this, $profile, ExtendedProfileWidget::EDITABLE); $widget->show(); } function saveDetails() { common_debug(var_export($_POST, true)); $user = common_current_user(); try { $this->saveStandardProfileDetails($user); } catch (Exception $e) { $this->showForm($e->getMessage(), false); return; } $profile = $user->getProfile(); $simpleFieldNames = array('title'); foreach ($simpleFieldNames as $name) { $value = $this->trimmed('extprofile-' . $name); $this->saveSimpleField($user, $name, $value); } $this->showForm(_('Details saved.'), true); } function saveSimpleField($user, $name, $value) { $profile = $user->getProfile(); $detail = new Profile_detail(); $detail->profile_id = $profile->id; $detail->field_name = $name; $result = $detail->find(true); if (empty($result)) { $detail->field_value = $value; $detail->created = common_sql_now(); common_debug("XXXXXXXXXXXXXXX not found"); $result = $detail->insert(); if (empty($result)) { common_log_db_error($detail, 'INSERT', __FILE__); $this->serverError(_m('Could not save profile details.')); } } else { common_debug('zzzzz FOUND'); $orig = clone($detail); $detail->field_value = $value; $result = $detail->update($orig); } $detail->free(); } /** * Save fields that should be stored in the main profile object * * XXX: There's a lot of dupe code here from ProfileSettingsAction. * Do not want. * * @param User $user the current user */ function saveStandardProfileDetails($user) { $user->query('BEGIN'); $fullname = $this->trimmed('extprofile-fullname'); $location = $this->trimmed('extprofile-location'); $tagstring = $this->trimmed('extprofile-tags'); $bio = $this->trimmed('extprofile-bio'); if ($tagstring) { $tags = array_map( 'common_canonical_tag', preg_split('/[\s,]+/', $tagstring) ); } else { $tags = array(); } foreach ($tags as $tag) { if (!common_valid_profile_tag($tag)) { // TRANS: Validation error in form for profile settings. // TRANS: %s is an invalid tag. throw new Exception(sprintf(_m('Invalid tag: "%s".'), $tag)); } } $profile = $user->getProfile(); $oldTags = $user->getSelfTags(); $newTags = array_diff($tags, $oldTags); if ($fullname != $profile->fullname || $location != $profile->location || !empty($newTags) || $bio != $profile->bio) { $orig = clone($profile); $profile->nickname = $user->nickname; $profile->fullname = $fullname; $profile->bio = $bio; $profile->location = $location; $loc = Location::fromName($location); if (empty($loc)) { $profile->lat = null; $profile->lon = null; $profile->location_id = null; $profile->location_ns = null; } else { $profile->lat = $loc->lat; $profile->lon = $loc->lon; $profile->location_id = $loc->location_id; $profile->location_ns = $loc->location_ns; } $profile->profileurl = common_profile_url($user->nickname); $result = $profile->update($orig); if ($result === false) { common_log_db_error($profile, 'UPDATE', __FILE__); // TRANS: Server error thrown when user profile settings could not be saved. $this->serverError(_('Could not save profile.')); return; } // Set the user tags $result = $user->setSelfTags($tags); if (!$result) { // TRANS: Server error thrown when user profile settings tags could not be saved. $this->serverError(_('Could not save tags.')); return; } $user->query('COMMIT'); Event::handle('EndProfileSaveForm', array($this)); common_broadcast_profile($profile); } } }