]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
The rest of the things necessary to make group block work
authorEvan Prodromou <evan@controlyourself.ca>
Sun, 14 Jun 2009 22:47:39 +0000 (15:47 -0700)
committerEvan Prodromou <evan@controlyourself.ca>
Sun, 14 Jun 2009 22:47:39 +0000 (15:47 -0700)
Link to the group block form. Hide join button if the current user is
blocked.

actions/groupmembers.php
actions/joingroup.php
actions/showgroup.php
classes/Group_block.php
classes/User_group.php
lib/grouplist.php
lib/router.php

index 079dad9e94c3219221b6f6a43312852ef2d52701..150b60a54e10cf3347bdce12c03883c1720a5e9f 100644 (file)
@@ -180,7 +180,7 @@ class GroupMemberListItem extends ProfileListItem
         $user = common_current_user();
 
         if (!empty($user) && $user->id != $this->profile->id && $user->isAdmin($this->group)) {
-            $bf = new GroupBlockForm($this->out, $this->profile,
+            $bf = new GroupBlockForm($this->out, $this->profile, $this->group,
                                 array('action' => 'groupmembers',
                                       'nickname' => $this->group->nickname));
             $bf->show();
index a5d82ddc7780e3afeda2f38f9c16030773931fd1..0e4f96eaf5002e9bb2fd749beb7c49df8f9f1bad 100644 (file)
@@ -96,6 +96,11 @@ class JoingroupAction extends Action
             return false;
         }
 
+        if (Group_block::isBlocked($this->group, $cur->getProfile())) {
+            $this->clientError(_('You have been blocked from that group by the admin.'), 403);
+            return false;
+        }
+
         return true;
     }
 
index 3ce45adc674d26114618c7941c765975cb0c5202..537f09278bcd351211806f8401716501493a8a53 100644 (file)
@@ -283,7 +283,7 @@ class ShowgroupAction extends Action
             if ($cur->isMember($this->group)) {
                 $lf = new LeaveForm($this, $this->group);
                 $lf->show();
-            } else {
+            } else if (!Group_block::isBlocked($this->group, $cur->getProfile())) {
                 $jf = new JoinForm($this, $this->group);
                 $jf->show();
             }
index 437046a9c3767d51baac48f0b65d79d47ba107f5..d945fd57a922ec3ba788658c26107a8a069b768a 100644 (file)
@@ -1,10 +1,29 @@
 <?php
 /**
  * Table Definition for group_block
+ *
+ * Laconica - a distributed open-source microblogging tool
+ * Copyright (C) 2008, Controlez-Vous, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-require_once 'classes/Memcached_DataObject';
 
-class Group_block extends Memcached_DataObject 
+if (!defined('LACONICA')) { exit(1); }
+
+require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
+
+class Group_block extends Memcached_DataObject
 {
     ###START_AUTOCODE
     /* the code below is auto generated do not remove the above tag */
@@ -20,4 +39,57 @@ class Group_block extends Memcached_DataObject
 
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
+
+    function &pkeyGet($kv)
+    {
+        return Memcached_DataObject::pkeyGet('Group_block', $kv);
+    }
+
+    static function isBlocked($group, $profile)
+    {
+        $block = Group_block::pkeyGet(array('group_id' => $group->id,
+                                            'blocked' => $profile->id));
+        return !empty($block);
+    }
+
+    static function blockProfile($group, $profile, $blocker)
+    {
+        // Insert the block
+
+        $block = new Group_block();
+
+        $block->query('BEGIN');
+
+        $block->group_id = $group->id;
+        $block->blocked  = $profile->id;
+        $block->blocker  = $blocker->id;
+
+        $result = $block->insert();
+
+        if (!$result) {
+            common_log_db_error($block, 'INSERT', __FILE__);
+            return null;
+        }
+
+        // Delete membership if any
+
+        $member = new Group_member();
+
+        $member->group_id   = $group->id;
+        $member->profile_id = $profile->id;
+
+        if ($member->find(true)) {
+            $result = $member->delete();
+            if (!$result) {
+                common_log_db_error($member, 'DELETE', __FILE__);
+                return null;
+            }
+        }
+
+        // Commit, since both have been done
+
+        $block->query('COMMIT');
+
+        return $block;
+    }
 }
index a135015baca3a1f2d67601ebb9ae6f03d4c5dd0f..1be34b60bd34ec96ac3dedd00acc4f6553445cd9 100644 (file)
@@ -137,4 +137,9 @@ class User_group extends Memcached_DataObject
         common_debug(common_log_objstring($this));
         return $this->update($orig);
     }
+
+    function getBestName()
+    {
+        return ($this->fullname) ? $this->fullname : $this->nickname;
+    }
 }
index 1b854749982198e68f89de742d2c1fd306e3ce1c..1ded5160bdcd655e2c1b2656d7eee3d8af6c3aab 100644 (file)
@@ -166,7 +166,7 @@ class GroupList extends Widget
             if ($user->isMember($this->group)) {
                 $lf = new LeaveForm($this->out, $this->group);
                 $lf->show();
-            } else {
+            } else if (!Group_block::isBlocked($this->group, $user->getProfile())) {
                 $jf = new JoinForm($this->out, $this->group);
                 $jf->show();
             }
index 456d1793e3245bf333343aae7ee4213245420fda..469d9a17155d567a85ca16904219275945959eac 100644 (file)
@@ -101,7 +101,7 @@ class Router
         $main = array('login', 'logout', 'register', 'subscribe',
                       'unsubscribe', 'confirmaddress', 'recoverpassword',
                       'invite', 'favor', 'disfavor', 'sup',
-                      'block', 'subedit');
+                      'block', 'subedit', 'groupblock');
 
         foreach ($main as $a) {
             $m->connect('main/'.$a, array('action' => $a));
@@ -164,10 +164,10 @@ class Router
                     array('action' => 'newnotice'),
                     array('replyto' => '[A-Za-z0-9_-]+'));
 
-        $m->connect('notice/:notice/file', 
-            array('action' => 'file'), 
+        $m->connect('notice/:notice/file',
+            array('action' => 'file'),
             array('notice' => '[0-9]+'));
-        
+
         $m->connect('notice/:notice',
                     array('action' => 'shownotice'),
                     array('notice' => '[0-9]+'));