* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-if (!defined('STATUSNET')) {
- exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
class ProfileDetailSettingsAction extends ProfileSettingsAction
{
return _m('Extended profile settings');
}
- /**
- * Instructions for use
- *
- * @return instructions for use
- */
- function getInstructions()
- {
- // TRANS: Usage instructions for profile settings.
- return _m('You can update your personal profile info here '.
- 'so people know more about you.');
- }
-
function showStylesheets() {
parent::showStylesheets();
$this->cssLink('plugins/ExtendedProfile/css/profiledetail.css');
return true;
}
- function handlePost()
+ protected function doPost()
{
- // CSRF protection
- $token = $this->trimmed('token');
- if (!$token || $token != common_session_token()) {
- $this->showForm(
- // TRANS: Client error displayed when the session token does not match or is not given.
- _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.'));
+ return $this->saveDetails();
}
+
+ // TRANS: Message given submitting a form with an unknown action.
+ throw new ClientException(_m('Unexpected form submission.'));
}
function showContent()
{
- $cur = common_current_user();
- $profile = $cur->getProfile();
-
$widget = new ExtendedProfileWidget(
$this,
- $profile,
+ $this->scoped,
ExtendedProfileWidget::EDITABLE
);
$widget->show();
{
common_debug(var_export($_POST, true));
- $user = common_current_user();
-
- try {
- $this->saveStandardProfileDetails($user);
+ $this->saveStandardProfileDetails();
- $profile = $user->getProfile();
+ $simpleFieldNames = array('title', 'spouse', 'kids', 'manager');
+ $dateFieldNames = array('birthday');
- $simpleFieldNames = array('title', 'spouse', 'kids', 'manager');
- $dateFieldNames = array('birthday');
-
- foreach ($simpleFieldNames as $name) {
- $value = $this->trimmed('extprofile-' . $name);
- if (!empty($value)) {
- $this->saveField($user, $name, $value);
- }
+ foreach ($simpleFieldNames as $name) {
+ $value = $this->trimmed('extprofile-' . $name);
+ if (!empty($value)) {
+ $this->saveField($name, $value);
}
+ }
- foreach ($dateFieldNames as $name) {
- $value = $this->trimmed('extprofile-' . $name);
- $dateVal = $this->parseDate($name, $value);
- $this->saveField(
- $user,
- $name,
- null,
- null,
- null,
- $dateVal
- );
- }
-
- $this->savePhoneNumbers($user);
- $this->saveIms($user);
- $this->saveWebsites($user);
- $this->saveExperiences($user);
- $this->saveEducations($user);
-
- } catch (Exception $e) {
- $this->showForm($e->getMessage(), false);
- return;
+ foreach ($dateFieldNames as $name) {
+ $value = $this->trimmed('extprofile-' . $name);
+ $dateVal = $this->parseDate($name, $value);
+ $this->saveField(
+ $name,
+ null,
+ null,
+ null,
+ $dateVal
+ );
}
+ $this->savePhoneNumbers();
+ $this->saveIms();
+ $this->saveWebsites();
+ $this->saveExperiences();
+ $this->saveEducations();
+
// TRANS: Success message after saving extended profile details.
- $this->showForm(_m('Details saved.'), true);
+ return _m('Details saved.');
}
return null;
}
- function savePhoneNumbers($user) {
+ function savePhoneNumbers() {
$phones = $this->findPhoneNumbers();
- $this->removeAll($user, 'phone');
+ $this->removeAll('phone');
$i = 0;
foreach($phones as $phone) {
if (!empty($phone['value'])) {
++$i;
$this->saveField(
- $user,
'phone',
$phone['value'],
$phone['rel'],
return $imArray;
}
- function saveIms($user) {
+ function saveIms() {
$ims = $this->findIms();
- $this->removeAll($user, 'im');
+ $this->removeAll('im');
$i = 0;
foreach($ims as $im) {
if (!empty($im['value'])) {
++$i;
$this->saveField(
- $user,
'im',
$im['value'],
$im['rel'],
return $wsArray;
}
- function saveWebsites($user) {
+ function saveWebsites() {
$sites = $this->findWebsites();
- $this->removeAll($user, 'website');
+ $this->removeAll('website');
$i = 0;
foreach($sites as $site) {
- if (!empty($site['value']) && !Validate::uri(
- $site['value'],
- array('allowed_schemes' => array('http', 'https')))
- ) {
+ if (!empty($site['value']) && !common_valid_http_url($site['value'])) {
// TRANS: Exception thrown when entering an invalid URL.
// TRANS: %s is the invalid URL.
throw new Exception(sprintf(_m('Invalid URL: %s.'), $site['value']));
if (!empty($site['value'])) {
++$i;
$this->saveField(
- $user,
'website',
$site['value'],
$site['rel'],
return $expArray;
}
- function saveExperiences($user) {
+ function saveExperiences() {
common_debug('save experiences');
$experiences = $this->findExperiences();
- $this->removeAll($user, 'company');
- $this->removeAll($user, 'start');
- $this->removeAll($user, 'end'); // also stores 'current'
+ $this->removeAll('company');
+ $this->removeAll('start');
+ $this->removeAll('end'); // also stores 'current'
$i = 0;
foreach($experiences as $experience) {
if (!empty($experience['company'])) {
++$i;
$this->saveField(
- $user,
'company',
$experience['company'],
null,
);
$this->saveField(
- $user,
'start',
null,
null,
// Save "current" employer indicator in rel
if ($experience['current']) {
$this->saveField(
- $user,
'end',
null,
'current', // rel
);
} else {
$this->saveField(
- $user,
'end',
null,
null,
}
- function saveEducations($user) {
+ function saveEducations() {
common_debug('save education');
$edus = $this->findEducations();
common_debug(var_export($edus, true));
- $this->removeAll($user, 'school');
- $this->removeAll($user, 'degree');
- $this->removeAll($user, 'degree_descr');
- $this->removeAll($user, 'school_start');
- $this->removeAll($user, 'school_end');
+ $this->removeAll('school');
+ $this->removeAll('degree');
+ $this->removeAll('degree_descr');
+ $this->removeAll('school_start');
+ $this->removeAll('school_end');
$i = 0;
foreach($edus as $edu) {
if (!empty($edu['school'])) {
++$i;
$this->saveField(
- $user,
'school',
$edu['school'],
null,
$i
);
$this->saveField(
- $user,
'degree',
$edu['degree'],
null,
$i
);
$this->saveField(
- $user,
'degree_descr',
$edu['description'],
null,
$i
);
$this->saveField(
- $user,
'school_start',
null,
null,
);
$this->saveField(
- $user,
'school_end',
null,
null,
/**
* Save an extended profile field as a Profile_detail
*
- * @param User $user the current user
* @param string $name field name
* @param string $value field value
* @param string $rel field rel (type)
* @param int $index index (fields can have multiple values)
* @param date $date related date
*/
- function saveField($user, $name, $value, $rel = null, $index = null, $date = null)
+ function saveField($name, $value, $rel = null, $index = null, $date = null)
{
- $profile = $user->getProfile();
$detail = new Profile_detail();
- $detail->profile_id = $profile->id;
+ $detail->profile_id = $this->scoped->getID();
$detail->field_name = $name;
$detail->value_index = $index;
$result = $detail->find(true);
- if (empty($result)) {
- $detial->value_index = $index;
+ if (!$result instanceof Profile_detail) {
+ $detail->value_index = $index;
$detail->rel = $rel;
$detail->field_value = $value;
$detail->date = $date;
$detail->created = common_sql_now();
$result = $detail->insert();
- if (empty($result)) {
+ if ($result === false) {
common_log_db_error($detail, 'INSERT', __FILE__);
// TRANS: Server error displayed when a field could not be saved in the database.
- $this->serverError(_m('Could not save profile details.'));
+ throw new ServerException(_m('Could not save profile details.'));
}
} else {
$orig = clone($detail);
$detail->date = $date;
$result = $detail->update($orig);
- if (empty($result)) {
+ if ($result === false) {
common_log_db_error($detail, 'UPDATE', __FILE__);
// TRANS: Server error displayed when a field could not be saved in the database.
- $this->serverError(_m('Could not save profile details.'));
+ throw new ServerException(_m('Could not save profile details.'));
}
}
$detail->free();
}
- function removeAll($user, $name)
+ function removeAll($name)
{
- $profile = $user->getProfile();
$detail = new Profile_detail();
- $detail->profile_id = $profile->id;
+ $detail->profile_id = $this->scoped->getID();
$detail->field_name = $name;
$detail->delete();
$detail->free();
*
* XXX: There's a lot of dupe code here from ProfileSettingsAction.
* Do not want.
- *
- * @param User $user the current user
*/
- function saveStandardProfileDetails($user)
+ function saveStandardProfileDetails()
{
$fullname = $this->trimmed('extprofile-fullname');
$location = $this->trimmed('extprofile-location');
}
}
- $profile = $user->getProfile();
-
- $oldTags = $user->getSelfTags();
+ $oldTags = Profile_tag::getSelfTagsArray($this->scoped);
$newTags = array_diff($tags, $oldTags);
- if ($fullname != $profile->fullname
- || $location != $profile->location
+ if ($fullname != $this->scoped->getFullname()
+ || $location != $this->scoped->location
|| !empty($newTags)
- || $bio != $profile->bio) {
+ || $bio != $this->scoped->getDescription()) {
- $orig = clone($profile);
+ $orig = clone($this->scoped);
- $profile->nickname = $user->nickname;
- $profile->fullname = $fullname;
- $profile->bio = $bio;
- $profile->location = $location;
+ // Skipping nickname change here until we add logic for when the site allows it or not
+ // old Profilesettings will still let us do that.
+
+ $this->scoped->fullname = $fullname;
+ $this->scoped->bio = $bio;
+ $this->scoped->location = $location;
$loc = Location::fromName($location);
if (empty($loc)) {
- $profile->lat = null;
- $profile->lon = null;
- $profile->location_id = null;
- $profile->location_ns = null;
+ $this->scoped->lat = null;
+ $this->scoped->lon = null;
+ $this->scoped->location_id = null;
+ $this->scoped->location_ns = null;
} else {
- $profile->lat = $loc->lat;
- $profile->lon = $loc->lon;
- $profile->location_id = $loc->location_id;
- $profile->location_ns = $loc->location_ns;
+ $this->scoped->lat = $loc->lat;
+ $this->scoped->lon = $loc->lon;
+ $this->scoped->location_id = $loc->location_id;
+ $this->scoped->location_ns = $loc->location_ns;
}
- $profile->profileurl = common_profile_url($user->nickname);
-
- $result = $profile->update($orig);
+ $result = $this->scoped->update($orig);
if ($result === false) {
- common_log_db_error($profile, 'UPDATE', __FILE__);
+ common_log_db_error($this->scoped, 'UPDATE', __FILE__);
// TRANS: Server error thrown when user profile settings could not be saved.
- $this->serverError(_m('Could not save profile.'));
- return;
+ throw new ServerException(_m('Could not save profile.'));
}
// 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(_m('Could not save tags.'));
- return;
- }
+ $result = Profile_tag::setSelfTags($this->scoped, $tags);
Event::handle('EndProfileSaveForm', array($this));
- common_broadcast_profile($profile);
}
}