X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FProfile.php;h=f4452391c25819dadb930e08d7d2c9eb1d93db64;hb=b374e5f08b0a5b0321ddd0ac77baf4675274aba2;hp=5709a15d01060513b7b63b956d63f227edafdf56;hpb=cfaaf3c13cd97b73c4a7033f7714e36e294e3d9b;p=quix0rs-gnu-social.git diff --git a/classes/Profile.php b/classes/Profile.php index 5709a15d01..f4452391c2 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -17,24 +17,21 @@ * along with this program. If not, see . */ -if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } +if (!defined('GNUSOCIAL')) { exit(1); } /** * Table Definition for profile */ class Profile extends Managed_DataObject { - ###START_AUTOCODE - /* the code below is auto generated do not remove the above tag */ - public $__table = 'profile'; // table name public $id; // int(4) primary_key not_null public $nickname; // varchar(64) multiple_key not_null - public $fullname; // varchar(191) multiple_key not 255 because utf8mb4 takes more space - public $profileurl; // varchar(191) not 255 because utf8mb4 takes more space - public $homepage; // varchar(191) multiple_key not 255 because utf8mb4 takes more space + public $fullname; // text() + public $profileurl; // text() + public $homepage; // text() public $bio; // text() multiple_key - public $location; // varchar(191) multiple_key not 255 because utf8mb4 takes more space + public $location; // text() public $lat; // decimal(10,7) public $lon; // decimal(10,7) public $location_id; // int(4) @@ -49,11 +46,11 @@ class Profile extends Managed_DataObject 'fields' => array( 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'), 'nickname' => array('type' => 'varchar', 'length' => 64, 'not null' => true, 'description' => 'nickname or username', 'collate' => 'utf8mb4_general_ci'), - 'fullname' => array('type' => 'varchar', 'length' => 191, 'description' => 'display name', 'collate' => 'utf8mb4_general_ci'), - 'profileurl' => array('type' => 'varchar', 'length' => 191, 'description' => 'URL, cached so we dont regenerate'), - 'homepage' => array('type' => 'varchar', 'length' => 191, 'description' => 'identifying URL', 'collate' => 'utf8mb4_general_ci'), + 'fullname' => array('type' => 'text', 'description' => 'display name', 'collate' => 'utf8mb4_general_ci'), + 'profileurl' => array('type' => 'text', 'description' => 'URL, cached so we dont regenerate'), + 'homepage' => array('type' => 'text', 'description' => 'identifying URL', 'collate' => 'utf8mb4_general_ci'), 'bio' => array('type' => 'text', 'description' => 'descriptive biography', 'collate' => 'utf8mb4_general_ci'), - 'location' => array('type' => 'varchar', 'length' => 191, 'description' => 'physical location', 'collate' => 'utf8mb4_general_ci'), + 'location' => array('type' => 'text', 'description' => 'physical location', 'collate' => 'utf8mb4_general_ci'), 'lat' => array('type' => 'numeric', 'precision' => 10, 'scale' => 7, 'description' => 'latitude'), 'lon' => array('type' => 'numeric', 'precision' => 10, 'scale' => 7, 'description' => 'longitude'), 'location_id' => array('type' => 'int', 'description' => 'location id if possible'), @@ -76,9 +73,6 @@ class Profile extends Managed_DataObject return $def; } - - /* the code above is auto generated do not remove the tag below */ - ###END_AUTOCODE public static function getByEmail($email) { @@ -144,7 +138,7 @@ class Profile extends Managed_DataObject public function hasPassword() { try { - return !empty($this->getUser()->hasPassword()); + return $this->getUser()->hasPassword(); } catch (NoSuchUserException $e) { return false; } @@ -767,6 +761,36 @@ class Profile extends Managed_DataObject return Subscription::exists($this, $other); } + function readableBy(Profile $other=null) + { + // If it's not a private stream, it's readable by anyone + if (!$this->isPrivateStream()) { + return true; + } + + // If it's a private stream, $other must be a subscriber to $this + return is_null($other) ? false : $other->isSubscribed($this); + } + + function requiresSubscriptionApproval(Profile $other=null) + { + if (!$this->isLocal()) { + // We don't know for remote users, and we'll always be able to send + // the request. Whether it'll work immediately or require moderation + // can be determined in another function. + return false; + } + + // Assume that profiles _we_ subscribe to are permitted. Could be made configurable. + if (!is_null($other) && $this->isSubscribed($other)) { + return false; + } + + // If the local user either has a private stream (implies the following) + // or user has a moderation policy for new subscriptions, return true. + return $this->getUser()->private_stream || $this->getUser()->subscribe_policy === User::SUBSCRIBE_POLICY_MODERATE; + } + /** * Check if a pending subscription request is outstanding for this... * @@ -877,6 +901,11 @@ class Profile extends Managed_DataObject function delete($useWhere=false) { + // just in case it hadn't been done before... (usually set before adding deluser to queue handling!) + if (!$this->hasRole(Profile_role::DELETED)) { + $this->grantRole(Profile_role::DELETED); + } + $this->_deleteNotices(); $this->_deleteSubscriptions(); $this->_deleteTags(); @@ -1237,8 +1266,9 @@ class Profile extends Managed_DataObject { // XXX: not really a pkey, but should work - $notice = Notice::pkeyGet(array('profile_id' => $this->id, - 'repeat_of' => $notice->id)); + $notice = Notice::pkeyGet(array('profile_id' => $this->getID(), + 'repeat_of' => $notice->getID(), + 'verb' => ActivityVerb::SHARE)); return !empty($notice); } @@ -1407,6 +1437,11 @@ class Profile extends Managed_DataObject return $this->fullname; } + public function getHomepage() + { + return $this->homepage; + } + public function getDescription() { return $this->bio; @@ -1428,6 +1463,11 @@ class Profile extends Managed_DataObject $user = User::getKV('id', $this->id); if ($user instanceof User) { $uri = $user->getUri(); + } else { + $group = User_group::getKV('profile_id', $this->id); + if ($group instanceof User_group) { + $uri = $group->getUri(); + } } Event::handle('EndGetProfileUri', array($this, &$uri)); @@ -1583,8 +1623,20 @@ class Profile extends Managed_DataObject return $this; } - public function sameAs(Profile $other) + /** + * Test whether the given profile is the same as the current class, + * for testing identities. + * + * @param Profile $other The other profile, usually from Action's $this->scoped + * + * @return boolean + */ + public function sameAs(Profile $other=null) { + if (is_null($other)) { + // In case $this->scoped is null or something, i.e. not a current/legitimate profile. + return false; + } return $this->getID() === $other->getID(); }