'action' =>
common_local_url('profilesettings')));
common_hidden('token', common_session_token());
-
-
-
+
# too much common patterns here... abstractable?
+
common_input('nickname', _('Nickname'),
($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname,
_('1-64 lowercase letters or numbers, no punctuation or spaces'));
common_input('location', _('Location'),
($this->arg('location')) ? $this->arg('location') : $profile->location,
_('Where you are, like "City, State (or Region), Country"'));
+ common_input('tags', _('Tags'),
+ ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()),
+ _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated'));
$language = common_language();
common_dropdown('language', _('Language'), get_nice_language_list(), _('Preferred language'), TRUE, $language);
$autosubscribe = $this->boolean('autosubscribe');
$language = $this->trimmed('language');
$timezone = $this->trimmed('timezone');
-
+ $tagstring = $this->trimmed('tags');
+
# Some validation
if (!Validate::string($nickname, array('min_length' => 1,
return;
} else if (!is_null($language) && strlen($language) > 50) {
$this->show_form(_('Language is too long (max 50 chars).'));
+ return;
}
+ $tags = array_map('common_canonical_tag', preg_split('/[\s,]+/', $tagstring));
+
+ foreach ($tags as $tag) {
+ if (!common_valid_profile_tag($tag)) {
+ $this->show_form(sprintf(_('Invalid tag: "%s"'), $tag));
+ return;
+ }
+ }
+
$user = common_current_user();
$user->query('BEGIN');
return;
}
+ # Set the user tags
+
+ $result = $user->setTags($tags);
+
+ if (!$result) {
+ common_server_error(_('Couldn\'t save tags.'));
+ return;
+ }
+
$user->query('COMMIT');
common_broadcast_profile($profile);
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
+
+ static function getTags($tagger, $tagged) {
+
+ $tags = array();
+
+ # XXX: store this in memcached
+
+ $profile_tag = new Profile_tag();
+ $profile_tag->tagger = $tagger;
+ $profile_tag->tagged = $tagged;
+
+ $profile_tag->find();
+
+ while ($profile_tag->fetch()) {
+ $tags[] = $profile_tag->tag;
+ }
+
+ $profile_tag->free();
+
+ return $tags;
+ }
+
+ static function setTags($tagger, $tagged, $tags) {
+
+ $oldtags = Profile_tag::getTags($tagger, $tagged);
+
+ # Delete stuff that's old that not in new
+
+ $to_delete = array_diff($oldtags, $newtags);
+
+ # Insert stuff that's in new and not in old
+
+ $to_insert = array_diff($newtags, $oldtags);
+
+ $profile_tag = new Profile_tag();
+
+ $profile_tag->tagger = $tagger;
+ $profile_tag->tagged = $tagged;
+
+ $profile_tag->query('BEGIN');
+
+ foreach ($to_delete as $deltag) {
+ $profile_tag->tag = $deltag;
+ $result = $profile_tag->delete();
+ if (!$result) {
+ common_log_db_error($profile_tag, 'DELETE', __FILE__);
+ return false;
+ }
+ }
+
+ foreach ($to_insert as $instag) {
+ $profile_tag->tag = $instag;
+ $result = $profile_tag->insert();
+ if (!$result) {
+ common_log_db_error($profile_tag, 'INSERT', __FILE__);
+ return false;
+ }
+ }
+
+ $profile_tag->query('COMMIT');
+
+ return true;
+ }
}
$cache->delete(common_cache_key('user:faves:'.$this->id).';last');
}
}
+
+ function getSelfTags() {
+ return Profile_tag::getTags($this->id, $this->id);
+ }
+
+ function setSelfTags($newtags) {
+ return Profile_tag::setTags($this->id, $this->id, $newtags);
+ }
}
[notice_inbox]
user_id = 129
notice_id = 129
-source = 17
created = 142
source = 17
return strtolower(str_replace(array('-', '_', '.'), '', $tag));
}
+function common_valid_profile_tag($str) {
+ return preg_match('/^[A-Za-z0-9_\-\.]{1,64}$/', $str);
+}
+
function common_at_link($sender_id, $nickname) {
$sender = Profile::staticGet($sender_id);
$recipient = common_relative_profile($sender, common_canonical_nickname($nickname));