X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fgroup.php;h=ce8bc217cd7a9e9419544fe1fee40de08f112386;hb=1ff217cc1373099b0e52ba8de5ab4a1335b0f184;hp=edb547de6d8f00ea31561efebf63c7a3b84dbf4c;hpb=4e220ec391514fbdeaa7d64abfd1752a9b44bbaa;p=friendica.git diff --git a/include/group.php b/include/group.php index edb547de6d..ce8bc217cd 100644 --- a/include/group.php +++ b/include/group.php @@ -1,54 +1,82 @@ 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); + 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` ) - VALUES( %d, '%s' ) ", - intval($uid), - dbesc($name) - ); + $r = dba::insert('group', array('uid' => $uid, 'name' => $name)); $ret = $r; - } + } return $ret; } function group_rmv($uid,$name) { $ret = false; - if(x($uid) && x($name)) { - $r = q("SELECT * FROM `group` WHERE `uid` = %d AND `name` = '%s' LIMIT 1", + if (x($uid) && x($name)) { + $r = q("SELECT id FROM `group` WHERE `uid` = %d AND `name` = '%s' LIMIT 1", intval($uid), dbesc($name) ); - if(count($r)) + if (dbm::is_result($r)) $group_id = $r[0]['id']; - if(! $group_id) + if (! $group_id) return false; + // remove group from default posting lists + $r = q("SELECT def_gid, allow_gid, deny_gid FROM user WHERE uid = %d LIMIT 1", + intval($uid) + ); + if ($r) { + $user_info = $r[0]; + $change = false; + + if ($user_info['def_gid'] == $group_id) { + $user_info['def_gid'] = 0; + $change = true; + } + if (strpos($user_info['allow_gid'], '<' . $group_id . '>') !== false) { + $user_info['allow_gid'] = str_replace('<' . $group_id . '>', '', $user_info['allow_gid']); + $change = true; + } + if (strpos($user_info['deny_gid'], '<' . $group_id . '>') !== false) { + $user_info['deny_gid'] = str_replace('<' . $group_id . '>', '', $user_info['deny_gid']); + $change = true; + } + + if ($change) { + q("UPDATE user SET def_gid = %d, allow_gid = '%s', deny_gid = '%s' WHERE uid = %d", + intval($user_info['def_gid']), + dbesc($user_info['allow_gid']), + dbesc($user_info['deny_gid']), + intval($uid) + ); + } + } + // remove all members $r = q("DELETE FROM `group_member` WHERE `uid` = %d AND `gid` = %d ", intval($uid), @@ -56,7 +84,7 @@ function group_rmv($uid,$name) { ); // remove group - $r = q("UPDATE `group` SET `deleted` = 1 WHERE `uid` = %d AND `name` = '%s' LIMIT 1", + $r = q("UPDATE `group` SET `deleted` = 1 WHERE `uid` = %d AND `name` = '%s'", intval($uid), dbesc($name) ); @@ -69,68 +97,67 @@ function group_rmv($uid,$name) { } function group_byname($uid,$name) { - if((! $uid) || (! strlen($name))) + if ((! $uid) || (! strlen($name))) return false; $r = q("SELECT * FROM `group` WHERE `uid` = %d AND `name` = '%s' LIMIT 1", intval($uid), dbesc($name) ); - if(count($r)) + if (dbm::is_result($r)) return $r[0]['id']; return false; } function group_rmv_member($uid,$name,$member) { $gid = group_byname($uid,$name); - if(! $gid) + if (! $gid) return false; - if(! ( $uid && $gid && $member)) + if (! ( $uid && $gid && $member)) return false; - $r = q("DELETE FROM `group_member` WHERE `uid` = %d AND `gid` = %d AND `contact-id` = %d LIMIT 1 ", + $r = q("DELETE FROM `group_member` WHERE `uid` = %d AND `gid` = %d AND `contact-id` = %d", intval($uid), intval($gid), intval($member) ); return $r; - + } -function group_add_member($uid,$name,$member) { - $gid = group_byname($uid,$name); - if((! $gid) || (! $uid) || (! $member)) +function group_add_member($uid,$name,$member,$gid = 0) { + if (! $gid) + $gid = group_byname($uid,$name); + if ((! $gid) || (! $uid) || (! $member)) return false; - $r = q("SELECT * FROM `group_member` WHERE `uid` = %d AND `id` = %d AND `contact-id` = %d LIMIT 1", + $r = q("SELECT * FROM `group_member` WHERE `uid` = %d AND `gid` = %d AND `contact-id` = %d LIMIT 1", intval($uid), intval($gid), intval($member) ); - if(count($r)) - return true; // You might question this, but + if (dbm::is_result($r)) + return true; // You might question this, but // 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`) - VALUES( %d, %d, %d ) ", - intval($uid), - intval($gid), - intval($member) - ); + if (! dbm::is_result($r)) { + $r = dba::insert('group_member', array('uid' => $uid, 'gid' => $gid, 'contact-id' => $member)); + } return $r; } 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 ", + if (intval($gid)) { + $r = q("SELECT `group_member`.`contact-id`, `contact`.* FROM `group_member` + INNER JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id` + WHERE `gid` = %d AND `group_member`.`uid` = %d AND + NOT `contact`.`self` AND NOT `contact`.`blocked` AND NOT `contact`.`pending` + ORDER BY `contact`.`name` ASC ", intval($gid), intval(local_user()) ); - if(count($r)) + if (dbm::is_result($r)) $ret = $r; } return $ret; @@ -138,32 +165,72 @@ function group_get_members($gid) { 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 + if (intval($gid)) { + $r = q("SELECT `contact`.`id` AS `contact-id` FROM `group_member` + INNER 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)) + ); + if (dbm::is_result($r)) $ret = count($r); } return $ret; } +function mini_group_select($uid,$gid = 0, $label = "") { -function group_side($every="contacts",$each="group",$edit = false, $group_id = 0, $cid = 0) { + $grps = array(); + $o = ''; + + $r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d ORDER BY `name` ASC", + intval($uid) + ); + $grps[] = array('name' => '', 'id' => '0', 'selected' => ''); + if (dbm::is_result($r)) { + foreach ($r as $rr) { + $grps[] = array('name' => $rr['name'], 'id' => $rr['id'], 'selected' => (($gid == $rr['id']) ? 'true' : '')); + } + + } + logger('groups: ' . print_r($grps,true)); + + if ($label == "") + $label = t('Default privacy group for new contacts'); + + $o = replace_macros(get_markup_template('group_selection.tpl'), array( + '$label' => $label, + '$groups' => $grps + )); + return $o; +} + + +/** + * @brief Create group sidebar widget + * + * @param string $every + * @param string $each + * @param string $editmode + * 'standard' => include link 'Edit groups' + * 'extended' => include link 'Create new group' + * 'full' => include link 'Create new group' and provide for each group a link to edit this group + * @param int $group_id + * @param int $cid + * @return string + */ +function group_side($every="contacts",$each="group",$editmode = "standard", $group_id = 0, $cid = 0) { $o = ''; - if(! local_user()) + if (! local_user()) return ''; $groups = array(); - + $groups[] = array( 'text' => t('Everybody'), 'id' => 0, @@ -177,15 +244,15 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0 intval($_SESSION['uid']) ); $member_of = array(); - if($cid) { + if ($cid) { $member_of = groups_containing(local_user(),$cid); - } + } - if(count($r)) { - foreach($r as $rr) { + if (dbm::is_result($r)) { + foreach ($r as $rr) { $selected = (($group_id == $rr['id']) ? ' group-selected' : ''); - - if ($edit) { + + if ($editmode == "full") { $groupedit = array( 'href' => "group/".$rr['id'], 'title' => t('edit'), @@ -193,7 +260,7 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0 } else { $groupedit = null; } - + $groups[] = array( 'id' => $rr['id'], 'cid' => $cid, @@ -205,39 +272,57 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0 ); } } - - + + $tpl = get_markup_template("group_side.tpl"); $o = replace_macros($tpl, array( - '$title' => t('Groups'), + '$title' => t('Groups'), + 'newgroup' => (($editmode == "extended") || ($editmode == "full") ? 1 : ''), + '$editgroupstext' => t('Edit groups'), + 'grouppage' => "group/", '$edittext' => t('Edit group'), '$createtext' => t('Create a new group'), + '$creategroup' => t('Group Name: '), + '$form_security_token' => get_form_security_token("group_edit"), '$ungrouped' => (($every === 'contacts') ? t('Contacts not in any group') : ''), - '$groups' => $groups, - '$add' => t('add'), + '$groups' => $groups, + '$add' => t('add'), )); - - + + return $o; } -function expand_groups($a) { - if(! (is_array($a) && count($a))) +function expand_groups($a,$check_dead = false, $use_gcontact = false) { + 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 )"); + + if ($use_gcontact) + $r = q("SELECT `gcontact`.`id` AS `contact-id` FROM `group_member` + INNER JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id` + INNER JOIN `gcontact` ON `gcontact`.`nurl` = `contact`.`nurl` + WHERE `gid` IN ($groups)"); + else + $r = q("SELECT `contact-id` FROM `group_member` WHERE `gid` IN ( $groups )"); + + $ret = array(); - if(count($r)) - foreach($r as $rr) + if (dbm::is_result($r)) + foreach ($r as $rr) $ret[] = $rr['contact-id']; + if ($check_dead && !$use_gcontact) { + require_once('include/acl_selectors.php'); + $ret = prune_deadguys($ret); + } 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 ", + $r = q("SELECT `group`.`name`, `group`.`id` FROM `group` INNER 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) ); @@ -253,10 +338,62 @@ function groups_containing($uid,$c) { ); $ret = array(); - if(count($r)) { - foreach($r as $rr) + if (dbm::is_result($r)) { + foreach ($r as $rr) { $ret[] = $rr['gid']; + } } return $ret; } +/** + * @brief count unread group items + * + * Count unread items of each groups + * + * @return array + * 'id' => group id + * 'name' => group name + * 'count' => counted unseen group items + * + */ +function groups_count_unseen() { + + $r = q("SELECT `group`.`id`, `group`.`name`, + (SELECT COUNT(*) FROM `item` FORCE INDEX (`uid_unseen_contactid`) + WHERE `uid` = %d AND `unseen` AND + `contact-id` IN (SELECT `contact-id` FROM `group_member` + WHERE `group_member`.`gid` = `group`.`id` AND `group_member`.`uid` = %d)) AS `count` + FROM `group` WHERE `group`.`uid` = %d;", + intval(local_user()), + intval(local_user()), + intval(local_user()) + ); + + return $r; +} + +/** + * @brief Returns the default group for a given user and network + * + * @param int $uid User id + * @param string $network network name + * + * @return int group id + */ +function get_default_group($uid, $network = "") { + + $default_group = 0; + + if ($network == NETWORK_OSTATUS) + $default_group = PConfig::get($uid, "ostatus", "default_group"); + + if ($default_group != 0) + return $default_group; + + $g = q("SELECT `def_gid` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid)); + if ($g && intval($g[0]["def_gid"])) + $default_group = $g[0]["def_gid"]; + + return $default_group; +}