X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2FProfile.php;h=8dbdcbd97385395f78bdaac90c41a21226f8b998;hb=cff14c7e10b5125874438215fb799bccaa9337ea;hp=3844077e629371adc7677131af778f10dbb12ca1;hpb=3224f7fec9906b00684851759fcb476517d14e48;p=quix0rs-gnu-social.git diff --git a/classes/Profile.php b/classes/Profile.php index 3844077e62..8dbdcbd973 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -125,6 +125,14 @@ class Profile extends Memcached_DataObject return $avatar; } + /** + * Delete attached avatars for this user from the database and filesystem. + * This should be used instead of a batch delete() to ensure that files + * get removed correctly. + * + * @param boolean $original true to delete only the original-size file + * @return + */ function delete_avatars($original=true) { $avatar = new Avatar(); @@ -141,11 +149,32 @@ class Profile extends Memcached_DataObject return true; } + /** + * Gets either the full name (if filled) or the nickname. + * + * @return string + */ function getBestName() { return ($this->fullname) ? $this->fullname : $this->nickname; } + /** + * Gets the full name (if filled) with nickname as a parenthetical, or the nickname alone + * if no fullname is provided. + * + * @return string + */ + function getFancyName() + { + if ($this->fullname) { + // TRANS: Full name of a profile or group followed by nickname in parens + return sprintf(_m('FANCYNAME','%1$s (%2$s)'), $this->fullname, $this->nickname); + } else { + return $this->nickname; + } + } + /** * Get the most recent notice posted by this user, if any. * @@ -199,7 +228,7 @@ class Profile extends Memcached_DataObject } if ($max_id != 0) { - $query .= " and id < $max_id"; + $query .= " and id <= $max_id"; } $query .= ' order by id DESC'; @@ -240,7 +269,7 @@ class Profile extends Memcached_DataObject } if ($max_id != 0) { - $query .= " and id < $max_id"; + $query .= " and id <= $max_id"; } $query .= ' order by id DESC'; @@ -401,10 +430,10 @@ class Profile extends Memcached_DataObject return $profile; } - function getApplications($offset = 0, $limit = null) + function getConnectedApps($offset = 0, $limit = null) { $qry = - 'SELECT a.* ' . + 'SELECT u.* ' . 'FROM oauth_application_user u, oauth_application a ' . 'WHERE u.profile_id = %d ' . 'AND a.id = u.application_id ' . @@ -419,11 +448,11 @@ class Profile extends Memcached_DataObject } } - $application = new Oauth_application(); + $apps = new Oauth_application_user(); - $cnt = $application->query(sprintf($qry, $this->id)); + $cnt = $apps->query(sprintf($qry, $this->id)); - return $application; + return $apps; } function subscriptionCount() @@ -473,6 +502,29 @@ class Profile extends Memcached_DataObject return $cnt; } + /** + * Is this profile subscribed to another profile? + * + * @param Profile $other + * @return boolean + */ + function isSubscribed($other) + { + return Subscription::exists($this, $other); + } + + /** + * Are these two profiles subscribed to each other? + * + * @param Profile $other + * @return boolean + */ + function mutuallySubscribed($other) + { + return $this->isSubscribed($other) && + $other->isSubscribed($this); + } + function hasFave($notice) { $cache = common_memcache(); @@ -620,9 +672,11 @@ class Profile extends Memcached_DataObject $this->_deleteMessages(); $this->_deleteTags(); $this->_deleteBlocks(); + $this->delete_avatars(); - $related = array('Avatar', - 'Reply', + // Warning: delete() will run on the batch objects, + // not on individual objects. + $related = array('Reply', 'Group_member', ); Event::handle('ProfileDeleteRelated', array($this, &$related)); @@ -758,43 +812,52 @@ class Profile extends Memcached_DataObject function grantRole($name) { - $role = new Profile_role(); + if (Event::handle('StartGrantRole', array($this, $name))) { - $role->profile_id = $this->id; - $role->role = $name; - $role->created = common_sql_now(); + $role = new Profile_role(); - $result = $role->insert(); + $role->profile_id = $this->id; + $role->role = $name; + $role->created = common_sql_now(); - if (!$result) { - common_log_db_error($role, 'INSERT', __FILE__); - return false; + $result = $role->insert(); + + if (!$result) { + throw new Exception("Can't save role '$name' for profile '{$this->id}'"); + } + + Event::handle('EndGrantRole', array($this, $name)); } - return true; + return $result; } function revokeRole($name) { - $role = Profile_role::pkeyGet(array('profile_id' => $this->id, - 'role' => $name)); + if (Event::handle('StartRevokeRole', array($this, $name))) { - if (empty($role)) { - // TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. - // TRANS: %1$s is the role name, %2$s is the user ID (number). - throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; does not exist.'),$name, $this->id)); - } + $role = Profile_role::pkeyGet(array('profile_id' => $this->id, + 'role' => $name)); - $result = $role->delete(); + if (empty($role)) { + // TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. + // TRANS: %1$s is the role name, %2$s is the user ID (number). + throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; does not exist.'),$name, $this->id)); + } - if (!$result) { - common_log_db_error($role, 'DELETE', __FILE__); - // TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. - // TRANS: %1$s is the role name, %2$s is the user ID (number). - throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; database error.'),$name, $this->id)); - } + $result = $role->delete(); - return true; + if (!$result) { + common_log_db_error($role, 'DELETE', __FILE__); + // TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. + // TRANS: %1$s is the role name, %2$s is the user ID (number). + throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; database error.'),$name, $this->id)); + } + + Event::handle('EndRevokeRole', array($this, $name)); + + return true; + } } function isSandboxed() @@ -854,6 +917,7 @@ class Profile extends Memcached_DataObject case Right::SANDBOXUSER: case Right::SILENCEUSER: case Right::DELETEUSER: + case Right::DELETEGROUP: $result = $this->hasRole(Profile_role::MODERATOR); break; case Right::CONFIGURESITE: