]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/User_group.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / classes / User_group.php
index 89731ee2644160cf06eabf6e7c1cd9cde1d0b1ce..1546414011bcf3e3c700cd2a24d26a7dd31a6291 100644 (file)
@@ -15,24 +15,30 @@ class User_group extends Managed_DataObject
     public $__table = 'user_group';                      // table name
     public $id;                              // int(4)  primary_key not_null
     public $nickname;                        // varchar(64)
-    public $fullname;                        // varchar(255)
-    public $homepage;                        // varchar(255)
+    public $fullname;                        // varchar(191)   not 255 because utf8mb4 takes more space
+    public $homepage;                        // varchar(191)   not 255 because utf8mb4 takes more space
     public $description;                     // text
-    public $location;                        // varchar(255)
-    public $original_logo;                   // varchar(255)
-    public $homepage_logo;                   // varchar(255)
-    public $stream_logo;                     // varchar(255)
-    public $mini_logo;                       // varchar(255)
+    public $location;                        // varchar(191)   not 255 because utf8mb4 takes more space
+    public $original_logo;                   // varchar(191)   not 255 because utf8mb4 takes more space
+    public $homepage_logo;                   // varchar(191)   not 255 because utf8mb4 takes more space
+    public $stream_logo;                     // varchar(191)   not 255 because utf8mb4 takes more space
+    public $mini_logo;                       // varchar(191)   not 255 because utf8mb4 takes more space
     public $created;                         // datetime   not_null default_0000-00-00%2000%3A00%3A00
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
-    public $uri;                             // varchar(255)  unique_key
-    public $mainpage;                        // varchar(255)
+    public $uri;                             // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
+    public $mainpage;                        // varchar(191)   not 255 because utf8mb4 takes more space
     public $join_policy;                     // tinyint
     public $force_scope;                     // tinyint
 
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
 
+    public function getObjectType()
+    {
+        return ActivityObject::GROUP;
+    }
+
+
     public static function schemaDef()
     {
         return array(
@@ -41,21 +47,21 @@ class User_group extends Managed_DataObject
                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'),
 
                 'nickname' => array('type' => 'varchar', 'length' => 64, 'description' => 'nickname for addressing'),
-                'fullname' => array('type' => 'varchar', 'length' => 255, 'description' => 'display name'),
-                'homepage' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL, cached so we dont regenerate'),
+                'fullname' => array('type' => 'varchar', 'length' => 191, 'description' => 'display name'),
+                'homepage' => array('type' => 'varchar', 'length' => 191, 'description' => 'URL, cached so we dont regenerate'),
                 'description' => array('type' => 'text', 'description' => 'group description'),
-                'location' => array('type' => 'varchar', 'length' => 255, 'description' => 'related physical location, if any'),
+                'location' => array('type' => 'varchar', 'length' => 191, 'description' => 'related physical location, if any'),
 
-                'original_logo' => array('type' => 'varchar', 'length' => 255, 'description' => 'original size logo'),
-                'homepage_logo' => array('type' => 'varchar', 'length' => 255, 'description' => 'homepage (profile) size logo'),
-                'stream_logo' => array('type' => 'varchar', 'length' => 255, 'description' => 'stream-sized logo'),
-                'mini_logo' => array('type' => 'varchar', 'length' => 255, 'description' => 'mini logo'),
+                'original_logo' => array('type' => 'varchar', 'length' => 191, 'description' => 'original size logo'),
+                'homepage_logo' => array('type' => 'varchar', 'length' => 191, 'description' => 'homepage (profile) size logo'),
+                'stream_logo' => array('type' => 'varchar', 'length' => 191, 'description' => 'stream-sized logo'),
+                'mini_logo' => array('type' => 'varchar', 'length' => 191, 'description' => 'mini logo'),
 
                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
 
-                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universal identifier'),
-                'mainpage' => array('type' => 'varchar', 'length' => 255, 'description' => 'page for group info to link to'),
+                'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universal identifier'),
+                'mainpage' => array('type' => 'varchar', 'length' => 191, 'description' => 'page for group info to link to'),
                 'join_policy' => array('type' => 'int', 'size' => 'tiny', 'description' => '0=open; 1=requires admin approval'),      
                 'force_scope' => array('type' => 'int', 'size' => 'tiny', 'description' => '0=never,1=sometimes,-1=always'),
             ),
@@ -126,7 +132,7 @@ class User_group extends Managed_DataObject
             // normally stored in mainpage, but older ones may be null
             if (!empty($this->mainpage)) {
                 $url = $this->mainpage;
-            } else {
+            } elseif ($this->isLocal()) {
                 $url = common_local_url('showgroup',
                                         array('nickname' => $this->nickname));
             }
@@ -141,7 +147,7 @@ class User_group extends Managed_DataObject
         if (Event::handle('StartUserGroupGetUri', array($this, &$uri))) {
             if (!empty($this->uri)) {
                 $uri = $this->uri;
-            } else {
+            } elseif ($this->isLocal()) {
                 $uri = common_local_url('groupbyid',
                                         array('id' => $this->id));
             }
@@ -154,8 +160,10 @@ class User_group extends Managed_DataObject
     {
         $url = null;
         if (Event::handle('StartUserGroupPermalink', array($this, &$url))) {
-            $url = common_local_url('groupbyid',
-                                    array('id' => $this->id));
+            if ($this->isLocal()) {
+                $url = common_local_url('groupbyid',
+                                        array('id' => $this->id));
+            }
         }
         Event::handle('EndUserGroupPermalink', array($this, &$url));
         return $url;
@@ -225,24 +233,19 @@ class User_group extends Managed_DataObject
      */
     function getRequests($offset=0, $limit=null)
     {
-        $qry =
-          'SELECT profile.* ' .
-          'FROM profile JOIN group_join_queue '.
-          'ON profile.id = group_join_queue.profile_id ' .
-          'WHERE group_join_queue.group_id = %d ' .
-          'ORDER BY group_join_queue.created DESC ';
+        $rq = new Group_join_queue();
+        $rq->group_id = $this->id;
+
+        $members = new Profile();
+
+        $members->joinAdd(['id', $rq, 'profile_id']);
 
         if ($limit != null) {
-            if (common_config('db','type') == 'pgsql') {
-                $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
-            } else {
-                $qry .= ' LIMIT ' . $offset . ', ' . $limit;
-            }
+            $members->limit($offset, $limit);
         }
 
-        $members = new Profile();
+        $members->find();
 
-        $members->query(sprintf($qry, $this->id));
         return $members;
     }
 
@@ -323,13 +326,21 @@ class User_group extends Managed_DataObject
 
     function setOriginal($filename)
     {
-        $imagefile = new ImageFile($this->id, Avatar::path($filename));
+        // This should be handled by the Profile->setOriginal function so user and group avatars are handled the same
+        $imagefile = new ImageFile(null, Avatar::path($filename));
+
+        $sizes = array('homepage_logo' => AVATAR_PROFILE_SIZE,
+                       'stream_logo' => AVATAR_STREAM_SIZE,
+                       'mini_logo' => AVATAR_MINI_SIZE);
 
         $orig = clone($this);
         $this->original_logo = Avatar::url($filename);
-        $this->homepage_logo = Avatar::url($imagefile->resize(AVATAR_PROFILE_SIZE));
-        $this->stream_logo = Avatar::url($imagefile->resize(AVATAR_STREAM_SIZE));
-        $this->mini_logo = Avatar::url($imagefile->resize(AVATAR_MINI_SIZE));
+        foreach ($sizes as $name=>$size) {
+            $filename = Avatar::filename($this->profile_id, image_type_to_extension($imagefile->preferredType()),
+                                         $size, common_timestamp());
+            $imagefile->resizeTo(Avatar::path($filename), array('width'=>$size, 'height'=>$size));
+            $this->$name = Avatar::url($filename);
+        }
         common_debug(common_log_objstring($this));
         return $this->update($orig);
     }
@@ -821,7 +832,7 @@ class User_group extends Managed_DataObject
     function isPrivate()
     {
         return ($this->join_policy == self::JOIN_POLICY_MODERATE &&
-                $this->force_scope == 1);
+                intval($this->force_scope) === 1);
     }
 
     public function isLocal()