X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fgroup.php;h=4a35912e5d288d126770ffe9dbee351e4a7fc71e;hb=64d0616762efcff413a335f2fdde4d8219d44895;hp=e92e4480bae2da99a471a10816fe34446b96abef;hpb=f5826105bfc514599b2c5b6692bca14ca4bc5d78;p=friendica.git diff --git a/include/group.php b/include/group.php old mode 100644 new mode 100755 index e92e4480ba..4a35912e5d --- a/include/group.php +++ b/include/group.php @@ -6,9 +6,27 @@ function group_add($uid,$name) { $ret = false; if(x($uid) && x($name)) { $r = group_byname($uid,$name); // check for dups - if($r !== false) + if($r !== false) { + + // This could be a problem. + // Let's assume we've just created a group which we once deleted + // all the old members are gone, but the group remains so we don't break any security + // access lists. What we're doing here is reviving the dead group, but old content which + // was restricted to this group may now be seen by the new group members. + + $z = q("SELECT * FROM `group` WHERE `id` = %d LIMIT 1", + intval($r) + ); + if(count($z) && $z[0]['deleted']) { + $r = q("UPDATE `group` SET `deleted` = 0 WHERE `uid` = %d AND `name` = '%s' LIMIT 1", + intval($uid), + dbesc($name) + ); + notice( t('A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name.') . EOL); + } return true; - $r = q("INSERT INTO `group` ( `uid`', `name` ) + } + $r = q("INSERT INTO `group` ( `uid`, `name` ) VALUES( %d, '%s' ) ", intval($uid), dbesc($name) @@ -25,7 +43,7 @@ function group_rmv($uid,$name) { $r = q("SELECT * FROM `group` WHERE `uid` = %d AND `name` = '%s' LIMIT 1", intval($uid), dbesc($name) - } + ); if(count($r)) $group_id = $r[0]['id']; if(! $group_id) @@ -38,7 +56,7 @@ function group_rmv($uid,$name) { ); // remove group - $r = q("DELETE FROM `group` WHERE `uid` = %d AND `id` = %d LIMIT 1", + $r = q("UPDATE `group` SET `deleted` = 1 WHERE `uid` = %d AND `name` = '%s' LIMIT 1", intval($uid), dbesc($name) ); @@ -46,7 +64,6 @@ function group_rmv($uid,$name) { $ret = $r; } - // TODO!! remove this group from all content ACL's !! return $ret; } @@ -92,7 +109,7 @@ function group_add_member($uid,$name,$member) { ); if(count($r)) return true; // You might question this, but - // we indicate success because the group was in fact created + // we indicate success because the group member was in fact created // -- It was just created at another time if(! count($r)) $r = q("INSERT INTO `group_member` (`uid`, `gid`, `contact-id`) @@ -102,4 +119,143 @@ function group_add_member($uid,$name,$member) { intval($member) ); return $r; -} \ No newline at end of file +} + +function group_get_members($gid) { + $ret = array(); + if(intval($gid)) { + $r = q("SELECT `group_member`.`contact-id`, `contact`.* FROM `group_member` + LEFT JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id` + WHERE `gid` = %d AND `group_member`.`uid` = %d ORDER BY `contact`.`name` ASC ", + intval($gid), + intval(local_user()) + ); + if(count($r)) + $ret = $r; + } + return $ret; +} + +function group_public_members($gid) { + $ret = 0; + if(intval($gid)) { + $r = q("SELECT `contact`.`id` AS `contact-id` FROM `group_member` + LEFT JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id` + WHERE `gid` = %d AND `group_member`.`uid` = %d + AND `contact`.`network` = '%s' AND `contact`.`notify` != '' ", + intval($gid), + intval(local_user()), + dbesc(NETWORK_OSTATUS) + ); + if(count($r)) + $ret = count($r); + } + return $ret; +} + + + +function group_side($every="contacts",$each="group",$edit = false, $group_id = 0, $cid = 0) { + + $o = ''; + + if(! local_user()) + return ''; + + $groups = array(); + + $groups[] = array( + 'text' => t('Everybody'), + 'id' => 0, + 'selected' => (($group_id == 0) ? 'group-selected' : ''), + 'href' => $every, + ); + + + + $r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d ORDER BY `name` ASC", + intval($_SESSION['uid']) + ); + $member_of = array(); + if($cid) { + $member_of = groups_containing(local_user(),$cid); + } + + if(count($r)) { + foreach($r as $rr) { + $selected = (($group_id == $rr['id']) ? ' group-selected' : ''); + + if ($edit) { + $groupedit = array( + 'href' => "group/".$rr['id'], + 'title' => t('edit'), + ); + } else { + $groupedit = null; + } + + $groups[] = array( + 'id' => $rr['id'], + 'cid' => $cid, + 'text' => $rr['name'], + 'selected' => $selected, + 'href' => $each."/".$rr['id'], + 'edit' => $groupedit, + 'ismember' => in_array($rr['id'],$member_of), + ); + } + } + + + $tpl = get_markup_template("group_side.tpl"); + $o = replace_macros($tpl, array( + '$title' => t('Groups'), + '$edittext' => t('Edit group'), + '$createtext' => t('Create a new group'), + '$groups' => $groups, + '$add' => t('add'), + )); + + + return $o; +} + +function expand_groups($a) { + if(! (is_array($a) && count($a))) + return array(); + $groups = implode(',', $a); + $groups = dbesc($groups); + $r = q("SELECT `contact-id` FROM `group_member` WHERE `gid` IN ( $groups )"); + $ret = array(); + if(count($r)) + foreach($r as $rr) + $ret[] = $rr['contact-id']; + return $ret; +} + + +function member_of($c) { + + $r = q("SELECT `group`.`name`, `group`.`id` FROM `group` LEFT JOIN `group_member` ON `group_member`.`gid` = `group`.`id` WHERE `group_member`.`contact-id` = %d AND `group`.`deleted` = 0 ORDER BY `group`.`name` ASC ", + intval($c) + ); + + return $r; + +} + +function groups_containing($uid,$c) { + + $r = q("SELECT `gid` FROM `group_member` WHERE `uid` = %d AND `group_member`.`contact-id` = %d ", + intval($uid), + intval($c) + ); + + $ret = array(); + if(count($r)) { + foreach($r as $rr) + $ret[] = $rr['gid']; + } + + return $ret; +}