]> git.mxchange.org Git - friendica.git/blobdiff - include/group.php
Merge pull request #2830 from annando/1610-account_type
[friendica.git] / include / group.php
index bbfac7ac1d6819e77d2b592e4b96102e673a2fbd..53c0b78d841b5854f1eb08604a3c69aef0d2aad0 100644 (file)
@@ -156,9 +156,11 @@ function group_add_member($uid,$name,$member,$gid = 0) {
 function group_get_members($gid) {
        $ret = array();
        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 ORDER BY `contact`.`name` ASC ",
+               $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())
                );
@@ -171,14 +173,14 @@ 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` 
-                       INNER JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id` 
-                       WHERE `gid` = %d AND `group_member`.`uid` = %d 
+               $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))
                        $ret = count($r);
        }
@@ -186,8 +188,8 @@ function group_public_members($gid) {
 }
 
 
-function mini_group_select($uid,$gid = 0) {
-       
+function mini_group_select($uid,$gid = 0, $label = "") {
+
        $grps = array();
        $o = '';
 
@@ -203,17 +205,31 @@ function mini_group_select($uid,$gid = 0) {
        }
        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' => t('Default privacy group for new contacts'),
-               '$groups' => $grps 
+               '$label' => $label,
+               '$groups' => $grps
        ));
        return $o;
 }
 
 
-
-
-function group_side($every="contacts",$each="group",$edit = false, $group_id = 0, $cid = 0) {
+/**
+ * @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 = '';
 
@@ -221,7 +237,7 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0
                return '';
 
        $groups = array();
-       
+
        $groups[] = array(
                'text'  => t('Everybody'),
                'id' => 0,
@@ -237,13 +253,13 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0
        $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) {
+
+                       if ($editmode == "full") {
                                $groupedit = array(
                                        'href' => "group/".$rr['id'],
                                        'title' => t('edit'),
@@ -251,7 +267,7 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0
                        } else {
                                $groupedit = null;
                        }
-                       
+
                        $groups[] = array(
                                'id'            => $rr['id'],
                                'cid'           => $cid,
@@ -263,35 +279,47 @@ 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"),
+               '$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,$check_dead = false) {
+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)
                        $ret[] = $rr['contact-id'];
-       if($check_dead) {
+       if($check_dead AND !$use_gcontact) {
                require_once('include/acl_selectors.php');
                $ret = prune_deadguys($ret);
        }
@@ -324,3 +352,54 @@ function groups_containing($uid,$c) {
 
        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 = get_pconfig($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;
+}