public $subscribe_policy; // tinyint(1)
public $urlshorteningservice; // varchar(50) default_ur1.ca
public $inboxed; // tinyint(1)
- public $design_id; // int(4)
- public $viewdesigns; // tinyint(1) default_1
+ public $private_stream; // tinyint(1) default_0
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
+ protected $_profile = -1;
+
/**
* @return Profile
*/
function getProfile()
{
- $profile = Profile::staticGet('id', $this->id);
- if (empty($profile)) {
- throw new UserNoProfileException($this);
+ if (is_int($this->_profile) && $this->_profile == -1) { // invalid but distinct from null
+ $this->_profile = Profile::staticGet('id', $this->id);
+ if (empty($this->_profile)) {
+ throw new UserNoProfileException($this);
+ }
}
- return $profile;
+
+ return $this->_profile;
}
function isSubscribed($other)
$user->nickname = $nickname;
+ $invite = null;
+
// Users who respond to invite email have proven their ownership of that address
if (!empty($code)) {
$user->emailmicroid = 1;
$user->emailpost = 1;
$user->jabbermicroid = 1;
- $user->viewdesigns = 1;
$user->created = common_sql_now();
return false;
}
+ // Mark that this invite was converted
+
+ if (!empty($invite)) {
+ $invite->convert($user);
+ }
+
if (!empty($email) && !$user->email) {
$confirm = new Confirm_address();
return Fave::stream($this->id, $offset, $limit, $own, $since_id, $max_id);
}
- function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
+ function noticeInbox($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, false);
+ $stream = new InboxNoticeStream($this);
+ return $stream->getNotices($offset, $limit, $since_id, $before_id);
}
- function noticesWithFriendsThreaded($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
+ // DEPRECATED, use noticeInbox()
+
+ function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNoticesThreaded($this->id, $offset, $limit, $since_id, $before_id, false);
+ return $this->noticeInbox($offset, $limit, $since_id, $before_id);
}
- function noticeInbox($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
+ // DEPRECATED, use noticeInbox()
+
+ function noticesWithFriendsThreaded($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, true);
+ return $this->noticeInbox($offset, $limit, $since_id, $before_id);
}
+ // DEPRECATED, use noticeInbox()
+
function noticeInboxThreaded($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNoticesThreaded($this->id, $offset, $limit, $since_id, $before_id, true);
+ return $this->noticeInbox($offset, $limit, $since_id, $before_id);
}
+ // DEPRECATED, use noticeInbox()
+
function friendsTimeline($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, false);
+ return $this->noticeInbox($offset, $limit, $since_id, $before_id);
}
+ // DEPRECATED, use noticeInbox()
+
function ownFriendsTimeline($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, true);
+ $this->noticeInbox($offset, $limit, $since_id, $before_id);
}
function blowFavesCache()
function getSelfTags()
{
- return Profile_tag::getTags($this->id, $this->id);
+ return Profile_tag::getTagsArray($this->id, $this->id, $this->id);
}
- function setSelfTags($newtags)
+ function setSelfTags($newtags, $privacy)
{
- return Profile_tag::setTags($this->id, $this->id, $newtags);
+ return Profile_tag::setTags($this->id, $this->id, $newtags, $privacy);
}
function block($other)
return $profile;
}
- function getDesign()
- {
- return Design::staticGet('id', $this->design_id);
- }
-
function hasRight($right)
{
$profile = $this->getProfile();
function repeatedToMe($offset=0, $limit=20, $since_id=null, $max_id=null)
{
- throw new Exception("Not implemented since inbox change.");
+ // TRANS: Exception thrown when trying view "repeated to me".
+ throw new Exception(_('Not implemented since inbox change.'));
}
function shareLocation()
return $apps;
}
+
+ /**
+ * Magic function called at serialize() time.
+ *
+ * We use this to drop a couple process-specific references
+ * from DB_DataObject which can cause trouble in future
+ * processes.
+ *
+ * @return array of variable names to include in serialization.
+ */
+
+ function __sleep()
+ {
+ $vars = parent::__sleep();
+ $skip = array('_profile');
+ return array_diff($vars, $skip);
+ }
+
+ static function recoverPassword($nore)
+ {
+ $user = User::staticGet('email', common_canonical_email($nore));
+
+ if (!$user) {
+ try {
+ $user = User::staticGet('nickname', common_canonical_nickname($nore));
+ } catch (NicknameException $e) {
+ // invalid
+ }
+ }
+
+ // See if it's an unconfirmed email address
+
+ if (!$user) {
+ // Warning: it may actually be legit to have multiple folks
+ // who have claimed, but not yet confirmed, the same address.
+ // We'll only send to the first one that comes up.
+ $confirm_email = new Confirm_address();
+ $confirm_email->address = common_canonical_email($nore);
+ $confirm_email->address_type = 'email';
+ $confirm_email->find();
+ if ($confirm_email->fetch()) {
+ $user = User::staticGet($confirm_email->user_id);
+ } else {
+ $confirm_email = null;
+ }
+ } else {
+ $confirm_email = null;
+ }
+
+ if (!$user) {
+ // TRANS: Information on password recovery form if no known username or e-mail address was specified.
+ throw new ClientError(_('No user with that email address or username.'));
+ return;
+ }
+
+ // Try to get an unconfirmed email address if they used a user name
+
+ if (!$user->email && !$confirm_email) {
+ $confirm_email = new Confirm_address();
+ $confirm_email->user_id = $user->id;
+ $confirm_email->address_type = 'email';
+ $confirm_email->find();
+ if (!$confirm_email->fetch()) {
+ $confirm_email = null;
+ }
+ }
+
+ if (!$user->email && !$confirm_email) {
+ // TRANS: Client error displayed on password recovery form if a user does not have a registered e-mail address.
+ throw new ClientException(_('No registered email address for that user.'));
+ return;
+ }
+
+ // Success! We have a valid user and a confirmed or unconfirmed email address
+
+ $confirm = new Confirm_address();
+ $confirm->code = common_confirmation_code(128);
+ $confirm->address_type = 'recover';
+ $confirm->user_id = $user->id;
+ $confirm->address = (!empty($user->email)) ? $user->email : $confirm_email->address;
+
+ if (!$confirm->insert()) {
+ common_log_db_error($confirm, 'INSERT', __FILE__);
+ // TRANS: Server error displayed if e-mail address confirmation fails in the database on the password recovery form.
+ throw new ServerException(_('Error saving address confirmation.'));
+ return;
+ }
+
+ // @todo FIXME: needs i18n.
+ $body = "Hey, $user->nickname.";
+ $body .= "\n\n";
+ $body .= 'Someone just asked for a new password ' .
+ 'for this account on ' . common_config('site', 'name') . '.';
+ $body .= "\n\n";
+ $body .= 'If it was you, and you want to confirm, use the URL below:';
+ $body .= "\n\n";
+ $body .= "\t".common_local_url('recoverpassword',
+ array('code' => $confirm->code));
+ $body .= "\n\n";
+ $body .= 'If not, just ignore this message.';
+ $body .= "\n\n";
+ $body .= 'Thanks for your time, ';
+ $body .= "\n";
+ $body .= common_config('site', 'name');
+ $body .= "\n";
+
+ $headers = _mail_prepare_headers('recoverpassword', $user->nickname, $user->nickname);
+ // TRANS: Subject for password recovery e-mail.
+ mail_to_user($user, _('Password recovery requested'), $body, $headers, $confirm->address);
+ }
}