+
+ public static function schemaDef()
+ {
+ return array(
+ 'fields' => array(
+ 'group_id' => array('type' => 'int', 'not null' => true, 'description' => 'group profile is blocked from'),
+ 'blocked' => array('type' => 'int', 'not null' => true, 'description' => 'profile that is blocked'),
+ 'blocker' => array('type' => 'int', 'not null' => true, 'description' => 'user making the block'),
+ 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date of blocking'),
+ ),
+ 'primary key' => array('group_id', 'blocked'),
+ 'foreign keys' => array(
+ 'group_block_group_id_fkey' => array('user_group', array('group_id' => 'id')),
+ 'group_block_blocked_fkey' => array('profile', array('blocked' => 'id')),
+ 'group_block_blocker_fkey' => array('user', array('blocker' => 'id')),
+ ),
+ );
+ }
+
+ 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;
+ }
+
+ static function unblockProfile($group, $profile)
+ {
+ $block = Group_block::pkeyGet(array('group_id' => $group->id,
+ 'blocked' => $profile->id));
+
+ if (empty($block)) {
+ return null;
+ }
+
+ $result = $block->delete();
+
+ if (!$result) {
+ common_log_db_error($block, 'DELETE', __FILE__);
+ return null;
+ }
+
+ return true;
+ }