]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Profile.php
Merge 1.1.x into master
[quix0rs-gnu-social.git] / classes / Profile.php
index f983225fd5df7a341c29915eee2bf81d0820b4c0..8a5be5f358b58916662310e25e341cb702d8e183 100644 (file)
@@ -103,41 +103,61 @@ class Profile extends Managed_DataObject
         return $this->_user;
     }
 
-       protected $_avatars;
-       
+    protected $_avatars;
+
     function getAvatar($width, $height=null)
     {
         if (is_null($height)) {
             $height = $width;
         }
 
-        if (!isset($this->_avatars)) {
-            $this->_avatars = array();
-        }
+        $avatar = $this->_getAvatar($width);
 
-               if (array_key_exists($width, $this->_avatars)) {
-                       return $this->_avatars[$width];
-               }
-               
-        $avatar = null;
+        if (empty($avatar)) {
 
-        if (Event::handle('StartProfileGetAvatar', array($this, $width, &$avatar))) {
-            $avatar = Avatar::pkeyGet(array('profile_id' => $this->id,
-                                            'width' => $width,
-                                            'height' => $height));
-            Event::handle('EndProfileGetAvatar', array($this, $width, &$avatar));
+            if (Event::handle('StartProfileGetAvatar', array($this, $width, &$avatar))) {
+                $avatar = Avatar::pkeyGet(
+                    array(
+                        'profile_id' => $this->id,
+                        'width'      => $width,
+                        'height'     => $height
+                    )
+                );
+                Event::handle('EndProfileGetAvatar', array($this, $width, &$avatar));
+            }
+
+            $this->_fillAvatar($width, $avatar);
         }
 
-               $this->_avatars[$width] = $avatar;
-               
         return $avatar;
     }
 
-       function _fillAvatar($width, $avatar)
-       {
-               $this->_avatars[$width] = $avatar;    
-       }
-       
+    // XXX: @Fix me gargargar
+    function _getAvatar($width)
+    {
+        if (empty($this->_avatars)) {
+            $this->_avatars = array();
+        }
+
+        // GAR! I cannot figure out where _avatars gets pre-filled with the avatar from
+        // the previously used profile! Please shoot me now! --Zach
+        if (array_key_exists($width, $this->_avatars)) {
+            // Don't return cached avatar unless it's really for this profile
+            if ($this->_avatars[$width]->profile_id == $this->id) {
+                return $this->_avatars[$width];
+            }
+        }
+
+        return null;
+    }
+
+    function _fillAvatar($width, $avatar)
+    {
+      //common_debug("Storing avatar of width: {$avatar->width} and profile_id {$avatar->profile_id} in profile {$this->id}.");
+        $this->_avatars[$width] = $avatar;
+
+    }
+
     function getOriginalAvatar()
     {
         $avatar = DB_DataObject::factory('avatar');
@@ -330,6 +350,10 @@ class Profile extends Managed_DataObject
             self::cacheSet($keypart, implode(',', $ids));
         }
 
+        if (!is_null($offset) && !is_null($limit)) {
+            $ids = array_slice($ids, $offset, $limit);
+        }
+
         return User_group::multiGet('id', $ids);
     }
 
@@ -571,6 +595,8 @@ class Profile extends Managed_DataObject
             if (Event::handle('StartJoinGroup', array($group, $this))) {
                 $join = Group_member::join($group->id, $this->id);
                 self::blow('profile:groups:%d', $this->id);
+                self::blow('group:member_ids:%d', $group->id);
+                self::blow('group:member_count:%d', $group->id);
                 Event::handle('EndJoinGroup', array($group, $this));
             }
         }
@@ -591,6 +617,8 @@ class Profile extends Managed_DataObject
         if (Event::handle('StartLeaveGroup', array($group, $this))) {
             Group_member::leave($group->id, $this->id);
             self::blow('profile:groups:%d', $this->id);
+            self::blow('group:member_ids:%d', $group->id);
+            self::blow('group:member_count:%d', $group->id);
             Event::handle('EndLeaveGroup', array($group, $this));
         }
     }
@@ -658,7 +686,7 @@ class Profile extends Managed_DataObject
         $profile = new Profile();
         $tagged = array();
 
-        $cnt = $profile->query(sprintf($qry, $this->id, $this->id, $tag));
+        $cnt = $profile->query(sprintf($qry, $this->id, $this->id, $profile->escape($tag)));
 
         while ($profile->fetch()) {
             $tagged[] = clone($profile);
@@ -1115,11 +1143,27 @@ class Profile extends Managed_DataObject
     function silence()
     {
         $this->grantRole(Profile_role::SILENCED);
+        if (common_config('notice', 'hidespam')) {
+            $this->flushVisibility();
+        }
     }
 
     function unsilence()
     {
         $this->revokeRole(Profile_role::SILENCED);
+        if (common_config('notice', 'hidespam')) {
+            $this->flushVisibility();
+        }
+    }
+
+    function flushVisibility()
+    {
+        // Get all notices
+        $stream = new ProfileNoticeStream($this, $this);
+        $ids = $stream->getNoticeIds(0, CachingNoticeStream::CACHE_WINDOW);
+        foreach ($ids as $id) {
+            self::blow('notice:in-scope-for:%d:null', $id);
+        }
     }
 
     /**
@@ -1150,6 +1194,8 @@ class Profile extends Managed_DataObject
             case Right::SILENCEUSER:
             case Right::DELETEUSER:
             case Right::DELETEGROUP:
+            case Right::TRAINSPAM:
+            case Right::REVIEWSPAM:
                 $result = $this->hasRole(Profile_role::MODERATOR);
                 break;
             case Right::CONFIGURESITE:
@@ -1454,4 +1500,8 @@ class Profile extends Managed_DataObject
     {
         return $this;
     }
+
+    static function pivotGet($key, $values, $otherCols=array()) {
+        return Memcached_DataObject::pivotGet('Profile', $key, $values, $otherCols);
+    }
 }