diff --git a/Zotlabs/Module/Group.php b/Zotlabs/Module/Group.php index 93a089d02..acebe995d 100644 --- a/Zotlabs/Module/Group.php +++ b/Zotlabs/Module/Group.php @@ -7,6 +7,17 @@ require_once('include/group.php'); class Group extends \Zotlabs\Web\Controller { + function init() { + if(! local_channel()) { + notice( t('Permission denied.') . EOL); + return; + } + + \App::$profile_uid = local_channel(); + + nav_set_selected('Privacy Groups'); + } + function post() { if(! local_channel()) { @@ -22,12 +33,10 @@ class Group extends \Zotlabs\Web\Controller { $r = group_add(local_channel(),$name,$public); if($r) { info( t('Privacy group created.') . EOL ); - $r = group_byname(local_channel(),$name); - if($r) - goaway(z_root() . '/group/' . $r); } - else - notice( t('Could not create privacy group.') . EOL ); + else { + notice( t('Could not create privacy group.') . EOL ); + } goaway(z_root() . '/group'); } @@ -74,30 +83,59 @@ class Group extends \Zotlabs\Web\Controller { notice( t('Permission denied') . EOL); return; } - + // Switch to text mode interface if we have more than 'n' contacts or group members - $switchtotext = get_pconfig(local_channel(),'system','groupedit_image_limit'); if($switchtotext === false) $switchtotext = get_config('system','groupedit_image_limit'); if($switchtotext === false) $switchtotext = 400; - - $tpl = get_markup_template('group_edit.tpl'); - $context = array('$submit' => t('Submit')); - - if((argc() == 2) && (argv(1) === 'new')) { - - return replace_macros($tpl, $context + array( - '$title' => t('Create a group of channels.'), - '$gname' => array('groupname',t('Privacy group name: '), '', ''), - '$gid' => 'new', - '$public' => array('public',t('Members are visible to other channels'), false, ''), + + + if((argc() == 1) || ((argc() == 2) && (argv(1) === 'new'))) { + + $new = (((argc() == 2) && (argv(1) === 'new')) ? true : false); + + $groups = q("SELECT id, gname FROM groups WHERE deleted = 0 AND uid = %d ORDER BY gname ASC", + intval(local_channel()) + ); + + $i = 0; + foreach($groups as $group) { + $entries[$i]['name'] = $group['gname']; + $entries[$i]['id'] = $group['id']; + $entries[$i]['count'] = count(group_get_members($group['id'])); + $i++; + } + + $tpl = get_markup_template('privacy_groups.tpl'); + $o = replace_macros($tpl, [ + '$title' => t('Privacy Groups'), + '$add_new_label' => t('Add Group'), + '$new' => $new, + + // new group form + '$gname' => array('groupname',t('Privacy group name')), + '$public' => array('public',t('Members are visible to other channels'), false), '$form_security_token' => get_form_security_token("group_edit"), - )); - - + '$submit' => t('Submit'), + + // groups list + '$title' => t('Privacy Groups'), + '$name_label' => t('Name'), + '$count_label' => t('Members'), + '$entries' => $entries + ]); + + return $o; + } + + + + + $context = array('$submit' => t('Submit')); + $tpl = get_markup_template('group_edit.tpl'); if((argc() == 3) && (argv(1) === 'drop')) { check_form_security_token_redirectOnErr('/group', 'group_drop', 't'); @@ -172,22 +210,17 @@ class Group extends \Zotlabs\Web\Controller { $preselected[] = $member['xchan_hash']; } } - - $drop_tpl = get_markup_template('group_drop.tpl'); - $drop_txt = replace_macros($drop_tpl, array( - '$id' => $group['id'], - '$delete' => t('Delete'), - '$form_security_token' => get_form_security_token("group_drop"), - )); - - + $context = $context + array( - '$title' => t('Privacy group editor'), + '$title' => sprintf(t('Privacy Group: %s'), $group['gname']), + '$details_label' => t('Edit'), '$gname' => array('groupname',t('Privacy group name: '),$group['gname'], ''), '$gid' => $group['id'], '$drop' => $drop_txt, '$public' => array('public',t('Members are visible to other channels'), $group['visible'], ''), - '$form_security_token' => get_form_security_token('group_edit'), + '$form_security_token_edit' => get_form_security_token('group_edit'), + '$delete' => t('Delete Group'), + '$form_security_token_drop' => get_form_security_token("group_drop"), ); } @@ -196,14 +229,14 @@ class Group extends \Zotlabs\Web\Controller { return; $groupeditor = array( - 'label_members' => t('Members'), + 'label_members' => t('Group members'), 'members' => array(), - 'label_contacts' => t('All Connected Channels'), + 'label_contacts' => t('Not in this group'), 'contacts' => array(), ); $sec_token = addslashes(get_form_security_token('group_member_change')); - $textmode = (($switchtotext && (count($members) > $switchtotext)) ? true : false); + $textmode = (($switchtotext && (count($members) > $switchtotext)) ? true : 'card'); foreach($members as $member) { if($member['xchan_url']) { $member['archived'] = (intval($member['abook_archived']) ? true : false); @@ -219,7 +252,7 @@ class Group extends \Zotlabs\Web\Controller { ); if(count($r)) { - $textmode = (($switchtotext && (count($r) > $switchtotext)) ? true : false); + $textmode = (($switchtotext && (count($r) > $switchtotext)) ? true : 'card'); foreach($r as $member) { if(! in_array($member['xchan_hash'],$preselected)) { $member['archived'] = (intval($member['abook_archived']) ? true : false); @@ -230,7 +263,7 @@ class Group extends \Zotlabs\Web\Controller { } $context['$groupeditor'] = $groupeditor; - $context['$desc'] = t('Click on a channel to add or remove.'); + $context['$desc'] = t('Click a channel to toggle membership'); if($change) { $tpl = get_markup_template('groupeditor.tpl'); diff --git a/Zotlabs/Widget/Collections.php b/Zotlabs/Widget/Collections.php index d2b29679a..bc9c812c6 100644 --- a/Zotlabs/Widget/Collections.php +++ b/Zotlabs/Widget/Collections.php @@ -8,6 +8,9 @@ class Collections { function widget($args) { + if(argc() < 2) + return; + $mode = ((array_key_exists('mode',$args)) ? $args['mode'] : 'conversation'); switch($mode) { case 'conversation': diff --git a/app/group.apd b/app/group.apd new file mode 100644 index 000000000..d16b9237c --- /dev/null +++ b/app/group.apd @@ -0,0 +1,6 @@ +version: 1 +url: $baseurl/group +requires: local_channel +name: Privacy Groups +photo: icon:users +categories: Networking diff --git a/include/group.php b/include/group.php index 03ebf7ee5..56bf210ff 100644 --- a/include/group.php +++ b/include/group.php @@ -279,14 +279,6 @@ function group_side($every="connections",$each="group",$edit = false, $group_id } $groups = array(); - - $groups[] = array( - 'text' => t('All Channels'), - 'id' => 0, - 'selected' => (($group_id == 0) ? 'group-selected' : ''), - 'href' => $every . (($every === 'network') ? '?f=&gid=0' : ''), - ); - $r = q("SELECT * FROM groups WHERE deleted = 0 AND uid = %d ORDER BY gname ASC", intval($_SESSION['uid']) diff --git a/include/text.php b/include/text.php index a8c28d7bd..8bade6e90 100644 --- a/include/text.php +++ b/include/text.php @@ -1018,21 +1018,30 @@ function magiclink_url($observer,$myaddr,$url) { -function micropro($contact, $redirect = false, $class = '', $textmode = false) { +function micropro($contact, $redirect = false, $class = '', $mode = false) { if($contact['click']) $url = '#'; else $url = chanlink_hash($contact['xchan_hash']); - return replace_macros(get_markup_template(($textmode)?'micropro_txt.tpl':'micropro_img.tpl'),array( + + $tpl = 'micropro_img.tpl'; + if($mode === true) + $tpl = 'micropro_txt.tpl'; + if($mode === 'card') + $tpl = 'micropro_card.tpl'; + + return replace_macros(get_markup_template($tpl), array( '$click' => (($contact['click']) ? $contact['click'] : ''), '$class' => $class . (($contact['archived']) ? ' archived' : ''), '$oneway' => (($contact['oneway']) ? true : false), '$url' => $url, '$photo' => $contact['xchan_photo_s'], '$name' => $contact['xchan_name'], + '$addr' => $contact['xchan_addr'], '$title' => $contact['xchan_name'] . ' [' . $contact['xchan_addr'] . ']', + '$network' => sprintf(t('Network: %s'), $contact['xchan_network']) )); } diff --git a/view/css/mod_group.css b/view/css/mod_group.css index b828e551d..215064706 100644 --- a/view/css/mod_group.css +++ b/view/css/mod_group.css @@ -1,66 +1,19 @@ - -#group-new-submit-wrapper { - margin-top: 30px; -} -/* -#group-edit-form > label { - float: left; - width: 300px; +.mpall, +.mpgroup { + line-height: 1.2; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } -#group-edit-form input { - float: left; - width: 175px; +#groups-index th:nth-child(1), +#groups-index td:nth-child(1){ + white-space: nowrap; + padding: 7px 3px 7px 10px; } -#group-edit-form .field { - clear: both; -} -*/ -#group-edit-submit-wrapper input { - clear: both; - width: 100px; -} - -#group-edit-select-end { - clear: both; -} -/* -#group-edit-name-label { - float: left; - width: 175px; - margin-top: 20px; - margin-bottom: 20px; -} - -#group-edit-name { - float: left; - width: 225px; - margin-top: 20px; - margin-bottom: 20px; -} - -#group-edit-name-wrapper { - - -} -*/ - -#group_members_select_label { - display: block; - float: left; - width: 175px; -} - -.group_members_select { - float: left; - width: 230px; - overflow: auto; -} - -#group_members_select_end { - clear: both; -} -#group-edit-name-end { - clear: both; +#groups-index th:nth-child(2), +#groups-index td:nth-child(2){ + text-align: center; + padding: 7px 10px 7px 7px; } diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index 87c97f1f5..6ffccb4e9 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -693,31 +693,6 @@ nav .acpopup { margin-bottom: 15px; } -#group-members { - margin-top: 20px; - padding: 10px; - height: 250px; - overflow: auto; - border: 1px solid #ddd; -} - -#group-separator { - margin-top: 10px; - margin-bottom: 10px; -} - -#group-all-contacts { - padding: 10px; - height: 450px; - overflow: auto; - border: 1px solid #ddd; -} - -#group-edit-desc { - margin-top: 15px; -} - - #prof-members { margin-top: 20px; padding: 10px; @@ -830,7 +805,7 @@ div.jGrowl div.jGrowl-notification { .dropdown-notification, .notification, .member-item { - line-height: 1.1em; + line-height: 1.2em; font-size: 0.75rem; overflow: hidden; text-overflow: ellipsis; @@ -1177,6 +1152,7 @@ img.mail-conv-sender-photo { .wall-item-ago, .dropdown-sub-text { color: #777; + display: block; } .wall-item-content, @@ -1416,6 +1392,9 @@ main.fullscreen .generic-content-wrapper { main.fullscreen .section-title-wrapper { border-radius: 0px; + position: sticky; + top: 0; + z-index: 1020; } main.fullscreen .section-content-wrapper, @@ -1429,6 +1408,7 @@ main.fullscreen .section-content-wrapper-np { .atoken-index-row:hover td, .chatroom-index-row:hover td, +.group-index-row:hover td, .wikis-index-row:hover td, .locs-index-row:hover td, [id^="cloud-index-"]:hover td, diff --git a/view/tpl/group_edit.tpl b/view/tpl/group_edit.tpl index d9412a6f7..88f037abe 100755 --- a/view/tpl/group_edit.tpl +++ b/view/tpl/group_edit.tpl @@ -1,26 +1,30 @@ -
-

{{$title}}

- - -
-
- - - {{include file="field_input.tpl" field=$gname}} - {{include file="field_checkbox.tpl" field=$public}} - {{if $drop}}{{$drop}}{{/if}} -
- +
+
+
+ + + +
+

{{$title}}

+
+ + + +
+
+ {{include file="groupeditor.tpl"}}
-
- -
- - -{{if $groupeditor}} -
- {{include file="groupeditor.tpl"}}
-{{/if}} -{{if $desc}}
{{$desc}}
{{/if}}
diff --git a/view/tpl/groupeditor.tpl b/view/tpl/groupeditor.tpl index c79bb0a2a..94c275c7e 100755 --- a/view/tpl/groupeditor.tpl +++ b/view/tpl/groupeditor.tpl @@ -1,16 +1,12 @@ -
-

{{$groupeditor.label_members}}

-
-{{foreach $groupeditor.members as $c}} {{$c}} {{/foreach}} +
+

{{$groupeditor.label_contacts}}

+
+ {{foreach $groupeditor.contacts as $m}} {{$m}} {{/foreach}} +
-
-
-
- -
-

{{$groupeditor.label_contacts}}

-
-{{foreach $groupeditor.contacts as $m}} {{$m}} {{/foreach}} -
-
+
+

{{$groupeditor.label_members}}

+
+ {{foreach $groupeditor.members as $c}} {{$c}} {{/foreach}} +
diff --git a/view/tpl/micropro_card.tpl b/view/tpl/micropro_card.tpl new file mode 100644 index 000000000..c1b621349 --- /dev/null +++ b/view/tpl/micropro_card.tpl @@ -0,0 +1,6 @@ + + {{if $oneway}}{{/if}} + {{$name}} + {{$addr}} + {{$network}} + diff --git a/view/tpl/privacy_groups.tpl b/view/tpl/privacy_groups.tpl new file mode 100644 index 000000000..b4e27ef2c --- /dev/null +++ b/view/tpl/privacy_groups.tpl @@ -0,0 +1,28 @@ +
+
+ +

{{$title}}

+
+ + + + + + + + + {{foreach $entries as $group}} + + + + + {{/foreach}} +
{{$name_label}}{{$count_label}}
{{$group.name}}{{$group.count}}
+