X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2FUser.php;h=491f68df24e77cde5d2c5650d77005da527ab36c;hb=9c29b9ad629b573b6f09b681a0673805fc61ef6a;hp=8986053c5870243314f36dabf28ced7983c560e7;hpb=95717c2b16a1cdaae59a3a1c40412b4ffc5a0764;p=quix0rs-gnu-social.git diff --git a/classes/User.php b/classes/User.php index 8986053c58..491f68df24 100644 --- a/classes/User.php +++ b/classes/User.php @@ -1,18 +1,18 @@ . */ @@ -22,6 +22,7 @@ if (!defined('LACONICA')) { exit(1); } * Table Definition for user */ require_once 'DB/DataObject.php'; +require_once 'Validate.php'; class User extends DB_DataObject { @@ -33,6 +34,24 @@ class User extends DB_DataObject public $nickname; // varchar(64) unique_key public $password; // varchar(255) public $email; // varchar(255) unique_key + public $incomingemail; // varchar(255) unique_key + public $emailnotifysub; // tinyint(1) default_1 + public $emailmicroid; // tinyint(1) default_1 + public $language; // varchar(50) + public $timezone; // varchar(50) + public $emailpost; // tinyint(1) default_1 + public $jabber; // varchar(255) unique_key + public $jabbernotify; // tinyint(1) + public $jabberreplies; // tinyint(1) + public $jabbermicroid; // tinyint(1) default_1 + public $updatefrompresence; // tinyint(1) + public $sms; // varchar(64) unique_key + public $carrier; // int(4) + public $smsnotify; // tinyint(1) + public $smsreplies; // tinyint(1) + public $smsemail; // varchar(255) + public $uri; // varchar(255) unique_key + public $autosubscribe; // tinyint(1) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP @@ -41,7 +60,7 @@ class User extends DB_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - + function getProfile() { $profile = DB_DataObject::factory('profile'); $profile->id = $this->id; @@ -51,7 +70,7 @@ class User extends DB_DataObject } return NULL; } - + function isSubscribed($other) { assert(!is_null($other)); $sub = DB_DataObject::factory('subscription'); @@ -59,4 +78,158 @@ class User extends DB_DataObject $sub->subscribed = $other->id; return $sub->find(); } + + # 'update' won't write key columns, so we have to do it ourselves. + + function updateKeys(&$orig) { + $parts = array(); + foreach (array('nickname', 'email', 'jabber', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) { + if (strcmp($this->$k, $orig->$k) != 0) { + $parts[] = $k . ' = ' . $this->_quote($this->$k); + } + } + if (count($parts) == 0) { + # No changes + return true; + } + $toupdate = implode(', ', $parts); + $qry = 'UPDATE ' . $this->tableName() . ' SET ' . $toupdate . + ' WHERE id = ' . $this->id; + return $this->query($qry); + } + + function allowed_nickname($nickname) { + # XXX: should already be validated for size, content, etc. + static $blacklist = array('rss', 'xrds', 'doc', 'main', + 'settings', 'notice', 'user', + 'search', 'avatar'); + $merged = array_merge($blacklist, common_config('nickname', 'blacklist')); + return !in_array($nickname, $merged); + } + + function getCurrentNotice($dt=NULL) { + $profile = $this->getProfile(); + if (!$profile) { + return NULL; + } + return $profile->getCurrentNotice($dt); + } + + function getCarrier() { + return Sms_carrier::staticGet($this->carrier); + } + + function subscribeTo($other) { + $sub = new Subscription(); + $sub->subscriber = $this->id; + $sub->subscribed = $other->id; + + $sub->created = DB_DataObject_Cast::dateTime(); # current time + + if (!$sub->insert()) { + return false; + } + + return true; + } + + function noticesWithFriends($offset=0, $limit=20) { + + $notice = new Notice(); + + $notice->query('SELECT notice.* ' . + 'FROM notice JOIN subscription on notice.profile_id = subscription.subscribed ' . + 'WHERE subscription.subscriber = ' . $this->id . ' ' . + 'ORDER BY created DESC, notice.id DESC ' . + 'LIMIT ' . $offset . ', ' . $limit); + + return $notice; + } + + static function register($fields) { + + extract($fields); + + $profile = new Profile(); + + $profile->query('BEGIN'); + + $profile->nickname = $nickname; + $profile->profileurl = common_profile_url($nickname); + + if ($fullname) { + $profile->fullname = $fullname; + } + if ($homepage) { + $profile->homepage = $homepage; + } + if ($bio) { + $profile->bio = $bio; + } + if ($location) { + $profile->location = $location; + } + $profile->created = DB_DataObject_Cast::dateTime(); # current time + + $id = $profile->insert(); + + if (!$id) { + common_log_db_error($profile, 'INSERT', __FILE__); + return FALSE; + } + + $user = new User(); + + $user->id = $id; + $user->nickname = $nickname; + $user->password = common_munge_password($password, $id); + $user->created = DB_DataObject_Cast::dateTime(); # current time + $user->uri = common_user_uri($user); + + $result = $user->insert(); + + if (!$result) { + common_log_db_error($user, 'INSERT', __FILE__); + return FALSE; + } + + # Everyone is subscribed to themself + + $subscription = new Subscription(); + $subscription->subscriber = $user->id; + $subscription->subscribed = $user->id; + $subscription->created = $user->created; + + $result = $subscription->insert(); + + if (!$result) { + common_log_db_error($subscription, 'INSERT', __FILE__); + return FALSE; + } + + if ($email) { + + $confirm = new Confirm_address(); + $confirm->code = common_confirmation_code(128); + $confirm->user_id = $user->id; + $confirm->address = $email; + $confirm->address_type = 'email'; + + $result = $confirm->insert(); + if (!$result) { + common_log_db_error($confirm, 'INSERT', __FILE__); + return FALSE; + } + } + + $profile->query('COMMIT'); + + if ($email) { + mail_confirm_address($confirm->code, + $profile->nickname, + $email); + } + + return $user; + } }