[frio] Improve Group Editing (#5349)
* Improve group-editing and edit-navigation. Use icons next to groups and header for navigation to editing groups and adding new groups. Also use icon from group-sidebar for editing groups. * Unify look&feel of contact search bars. * Remove nogroup page and replace with /group/none. * Make sure proper items are selected in aside. * Use icon instead of link for 'View Contacs' on profile page. * Fix none-working /group/none. * Fix highlighting for everyone in group aside.
This commit is contained in:
		
					parent
					
						
							
								09b7e217c7
							
						
					
				
			
			
				commit
				
					
						32ef5623ab
					
				
			
		
					 16 changed files with 180 additions and 177 deletions
				
			
		|  | @ -87,7 +87,7 @@ function contacts_init(App $a) | ||||||
| 		$findpeople_widget = Widget::findPeople(); | 		$findpeople_widget = Widget::findPeople(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	$groups_widget = Group::sidebarWidget('contacts', 'group', 'full', 0, $contact_id); | 	$groups_widget = Group::sidebarWidget('contacts', 'group', 'full', 'everyone', $contact_id); | ||||||
| 
 | 
 | ||||||
| 	$a->page['aside'] .= replace_macros(get_markup_template("contacts-widget-sidebar.tpl"), [ | 	$a->page['aside'] .= replace_macros(get_markup_template("contacts-widget-sidebar.tpl"), [ | ||||||
| 		'$vcard_widget' => $vcard_widget, | 		'$vcard_widget' => $vcard_widget, | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ use Friendica\Model\Group; | ||||||
| 
 | 
 | ||||||
| function group_init(App $a) { | function group_init(App $a) { | ||||||
| 	if (local_user()) { | 	if (local_user()) { | ||||||
| 		$a->page['aside'] = Group::sidebarWidget('contacts', 'group', 'extended', (($a->argc > 1) ? intval($a->argv[1]) : 0)); | 		$a->page['aside'] = Group::sidebarWidget('contacts', 'group', 'extended', (($a->argc > 1) ? $a->argv[1] : 'everyone')); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -99,6 +99,7 @@ function group_content(App $a) { | ||||||
| 
 | 
 | ||||||
| 	$context = [ | 	$context = [ | ||||||
| 		'$submit' => L10n::t('Save Group'), | 		'$submit' => L10n::t('Save Group'), | ||||||
|  | 		'$submit_filter' => L10n::t('Filter'), | ||||||
| 	]; | 	]; | ||||||
| 
 | 
 | ||||||
| 	if (($a->argc == 2) && ($a->argv[1] === 'new')) { | 	if (($a->argc == 2) && ($a->argv[1] === 'new')) { | ||||||
|  | @ -112,6 +113,29 @@ function group_content(App $a) { | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if (($a->argc == 2) && ($a->argv[1] === 'none')) { | ||||||
|  | 		require_once 'mod/contacts.php'; | ||||||
|  | 
 | ||||||
|  | 		$id = -1; | ||||||
|  | 		$nogroup = True; | ||||||
|  | 		$group = [ | ||||||
|  | 			'id' => $id, | ||||||
|  | 			'name' => L10n::t('Contacts not in any group'), | ||||||
|  | 		]; | ||||||
|  | 
 | ||||||
|  | 		$members = []; | ||||||
|  | 		$preselected = []; | ||||||
|  | 		$entry = []; | ||||||
|  | 
 | ||||||
|  | 		$context = $context + [ | ||||||
|  | 			'$title' => $group['name'], | ||||||
|  | 			'$gname' => ['groupname', L10n::t('Group Name: '), $group['name'], ''], | ||||||
|  | 			'$gid' => $id, | ||||||
|  | 			'$editable' => 0, | ||||||
|  | 		]; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 	if (($a->argc == 3) && ($a->argv[1] === 'drop')) { | 	if (($a->argc == 3) && ($a->argv[1] === 'drop')) { | ||||||
| 		check_form_security_token_redirectOnErr('/group', 'group_drop', 't'); | 		check_form_security_token_redirectOnErr('/group', 'group_drop', 't'); | ||||||
| 
 | 
 | ||||||
|  | @ -199,12 +223,13 @@ function group_content(App $a) { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 		$context = $context + [ | 		$context = $context + [ | ||||||
| 			'$title' => L10n::t('Group Editor'), | 			'$title' => $group['name'], | ||||||
| 			'$gname' => ['groupname', L10n::t('Group Name: '), $group['name'], ''], | 			'$gname' => ['groupname', L10n::t('Group Name: '), $group['name'], ''], | ||||||
| 			'$gid' => $group['id'], | 			'$gid' => $group['id'], | ||||||
| 			'$drop' => $drop_txt, | 			'$drop' => $drop_txt, | ||||||
| 			'$form_security_token' => get_form_security_token('group_edit'), | 			'$form_security_token' => get_form_security_token('group_edit'), | ||||||
| 			'$edit_name' => L10n::t('Edit Group Name') | 			'$edit_name' => L10n::t('Edit Group Name'), | ||||||
|  | 			'$editable' => 1, | ||||||
| 		]; | 		]; | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
|  | @ -242,9 +267,14 @@ function group_content(App $a) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if ($nogroup) { | ||||||
|  | 		$r = Contact::getUngroupedList(local_user()); | ||||||
|  | 	} else { | ||||||
| 		$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `blocked` AND NOT `pending` AND NOT `self` ORDER BY `name` ASC", | 		$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `blocked` AND NOT `pending` AND NOT `self` ORDER BY `name` ASC", | ||||||
| 			intval(local_user()) | 			intval(local_user()) | ||||||
| 		); | 		); | ||||||
|  | 		$context['$desc'] = L10n::t('Click on a contact to add or remove.'); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	if (DBM::is_result($r)) { | 	if (DBM::is_result($r)) { | ||||||
| 		// Format the data of the contacts who aren't in the contact group
 | 		// Format the data of the contacts who aren't in the contact group
 | ||||||
|  | @ -252,13 +282,17 @@ function group_content(App $a) { | ||||||
| 			if (! in_array($member['id'], $preselected)) { | 			if (! in_array($member['id'], $preselected)) { | ||||||
| 				$entry = _contact_detail_for_template($member); | 				$entry = _contact_detail_for_template($member); | ||||||
| 				$entry['label'] = 'contacts'; | 				$entry['label'] = 'contacts'; | ||||||
| 				$entry['photo_menu'] = ''; | 				if (!$nogroup) | ||||||
|  | 					$entry['photo_menu'] = []; | ||||||
|  | 
 | ||||||
|  | 				if (!$nogroup) { | ||||||
| 					$entry['change_member'] = [ | 					$entry['change_member'] = [ | ||||||
| 						'title'     => L10n::t("Add contact to group"), | 						'title'     => L10n::t("Add contact to group"), | ||||||
| 						'gid'       => $group['id'], | 						'gid'       => $group['id'], | ||||||
| 						'cid'       => $member['id'], | 						'cid'       => $member['id'], | ||||||
| 						'sec_token' => $sec_token | 						'sec_token' => $sec_token | ||||||
| 					]; | 					]; | ||||||
|  | 				} | ||||||
| 
 | 
 | ||||||
| 				$groupeditor['contacts'][] = $entry; | 				$groupeditor['contacts'][] = $entry; | ||||||
| 			} | 			} | ||||||
|  | @ -266,7 +300,6 @@ function group_content(App $a) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	$context['$groupeditor'] = $groupeditor; | 	$context['$groupeditor'] = $groupeditor; | ||||||
| 	$context['$desc'] = L10n::t('Click on a contact to add or remove.'); |  | ||||||
| 
 | 
 | ||||||
| 	// If there are to many contacts we could provide an alternative view mode
 | 	// If there are to many contacts we could provide an alternative view mode
 | ||||||
| 	$total = count($groupeditor['members']) + count($groupeditor['contacts']); | 	$total = count($groupeditor['members']) + count($groupeditor['contacts']); | ||||||
|  |  | ||||||
|  | @ -8,18 +8,13 @@ use Friendica\Core\L10n; | ||||||
| use Friendica\Database\DBM; | use Friendica\Database\DBM; | ||||||
| use Friendica\Model\Contact; | use Friendica\Model\Contact; | ||||||
| use Friendica\Model\Group; | use Friendica\Model\Group; | ||||||
|  | use Friendica\Core\System; | ||||||
| 
 | 
 | ||||||
| function nogroup_init(App $a) | function nogroup_init(App $a) | ||||||
| { | { | ||||||
| 	if (! local_user()) { | 	if (! local_user()) { | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	if (! x($a->page, 'aside')) { |  | ||||||
| 		$a->page['aside'] = ''; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	$a->page['aside'] .= Group::sidebarWidget('contacts', 'group', 'extended'); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function nogroup_content(App $a) | function nogroup_content(App $a) | ||||||
|  | @ -29,41 +24,5 @@ function nogroup_content(App $a) | ||||||
| 		return ''; | 		return ''; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	$r = Contact::getUngroupedList(local_user()); | 	goaway(System::baseUrl() . '/group/none'); | ||||||
| 	if (DBM::is_result($r)) { |  | ||||||
| 		$a->set_pager_total($r[0]['total']); |  | ||||||
| 	} |  | ||||||
| 	$r = Contact::getUngroupedList(local_user(), $a->pager['start'], $a->pager['itemspage']); |  | ||||||
| 	if (DBM::is_result($r)) { |  | ||||||
| 		foreach ($r as $rr) { |  | ||||||
| 			$contact_details = Contact::getDetailsByURL($rr['url'], local_user(), $rr); |  | ||||||
| 
 |  | ||||||
| 			$contacts[] = [ |  | ||||||
| 				'img_hover' => L10n::t('Visit %s\'s profile [%s]', $contact_details['name'], $rr['url']), |  | ||||||
| 				'edit_hover' => L10n::t('Edit contact'), |  | ||||||
| 				'photo_menu' => Contact::photoMenu($rr), |  | ||||||
| 				'id' => $rr['id'], |  | ||||||
| 				'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB), |  | ||||||
| 				'name' => $contact_details['name'], |  | ||||||
| 				'username' => $contact_details['name'], |  | ||||||
| 				'details'       => $contact_details['location'], |  | ||||||
| 				'tags'          => $contact_details['keywords'], |  | ||||||
| 				'about'         => $contact_details['about'], |  | ||||||
| 				'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']), |  | ||||||
| 				'url' => $rr['url'], |  | ||||||
| 				'network' => ContactSelector::networkToName($rr['network'], $rr['url']), |  | ||||||
| 			]; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	$tpl = get_markup_template("nogroup-template.tpl"); |  | ||||||
| 	$o = replace_macros( |  | ||||||
| 		$tpl, |  | ||||||
| 		[ |  | ||||||
| 		'$header' => L10n::t('Contacts who are not members of a group'), |  | ||||||
| 		'$contacts' => $contacts, |  | ||||||
| 		'$paginate' => paginate($a)] |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	return $o; |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -696,30 +696,9 @@ class Contact extends BaseObject | ||||||
| 	 * | 	 * | ||||||
| 	 * @return array | 	 * @return array | ||||||
| 	 */ | 	 */ | ||||||
| 	public static function getUngroupedList($uid, $start = 0, $count = 0) | 	public static function getUngroupedList($uid) | ||||||
| 	{ | 	{ | ||||||
| 		if (!$count) { | 		return q("SELECT *
 | ||||||
| 			$r = q( |  | ||||||
| 				"SELECT COUNT(*) AS `total`
 |  | ||||||
| 				 FROM `contact` |  | ||||||
| 				 WHERE `uid` = %d |  | ||||||
| 				 AND NOT `self` |  | ||||||
| 				 AND NOT `blocked` |  | ||||||
| 				 AND NOT `pending` |  | ||||||
| 				 AND `id` NOT IN ( |  | ||||||
| 					SELECT DISTINCT(`contact-id`) |  | ||||||
| 					FROM `group_member` |  | ||||||
| 					WHERE `uid` = %d |  | ||||||
| 				)",
 |  | ||||||
| 				intval($uid), |  | ||||||
| 				intval($uid) |  | ||||||
| 			); |  | ||||||
| 
 |  | ||||||
| 			return $r; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		$r = q( |  | ||||||
| 			"SELECT *
 |  | ||||||
| 			   FROM `contact` | 			   FROM `contact` | ||||||
| 			   WHERE `uid` = %d | 			   WHERE `uid` = %d | ||||||
| 			   AND NOT `self` | 			   AND NOT `self` | ||||||
|  | @ -730,15 +709,7 @@ class Contact extends BaseObject | ||||||
| 			   	FROM `group_member` | 			   	FROM `group_member` | ||||||
| 			   	INNER JOIN `group` ON `group`.`id` = `group_member`.`gid` | 			   	INNER JOIN `group` ON `group`.`id` = `group_member`.`gid` | ||||||
| 			   	WHERE `group`.`uid` = %d | 			   	WHERE `group`.`uid` = %d | ||||||
| 			) | 			   )", intval($uid), intval($uid));
 | ||||||
| 			LIMIT %d, %d",
 |  | ||||||
| 			intval($uid), |  | ||||||
| 			intval($uid), |  | ||||||
| 			intval($start), |  | ||||||
| 			intval($count) |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| 		return $r; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/** | 	/** | ||||||
|  |  | ||||||
|  | @ -361,7 +361,7 @@ class Group extends BaseObject | ||||||
| 	 * @param int $cid | 	 * @param int $cid | ||||||
| 	 * @return string | 	 * @return string | ||||||
| 	 */ | 	 */ | ||||||
| 	public static function sidebarWidget($every = 'contacts', $each = 'group', $editmode = 'standard', $group_id = 0, $cid = 0) | 	public static function sidebarWidget($every = 'contacts', $each = 'group', $editmode = 'standard', $group_id = '', $cid = 0) | ||||||
| 	{ | 	{ | ||||||
| 		$o = ''; | 		$o = ''; | ||||||
| 
 | 
 | ||||||
|  | @ -373,7 +373,7 @@ class Group extends BaseObject | ||||||
| 			[ | 			[ | ||||||
| 				'text' => L10n::t('Everybody'), | 				'text' => L10n::t('Everybody'), | ||||||
| 				'id' => 0, | 				'id' => 0, | ||||||
| 				'selected' => (($group_id == 0) ? 'group-selected' : ''), | 				'selected' => (($group_id === 'everyone') ? 'group-selected' : ''), | ||||||
| 				'href' => $every, | 				'href' => $every, | ||||||
| 			] | 			] | ||||||
| 		]; | 		]; | ||||||
|  | @ -417,6 +417,7 @@ class Group extends BaseObject | ||||||
| 			'grouppage' => 'group/', | 			'grouppage' => 'group/', | ||||||
| 			'$edittext' => L10n::t('Edit group'), | 			'$edittext' => L10n::t('Edit group'), | ||||||
| 			'$ungrouped' => $every === 'contacts' ? L10n::t('Contacts not in any group') : '', | 			'$ungrouped' => $every === 'contacts' ? L10n::t('Contacts not in any group') : '', | ||||||
|  | 			'$ungrouped_selected' => (($group_id === 'none') ? 'group-selected' : ''), | ||||||
| 			'$createtext' => L10n::t('Create a new group'), | 			'$createtext' => L10n::t('Create a new group'), | ||||||
| 			'$creategroup' => L10n::t('Group Name: '), | 			'$creategroup' => L10n::t('Group Name: '), | ||||||
| 			'$editgroupstext' => L10n::t('Edit groups'), | 			'$editgroupstext' => L10n::t('Edit groups'), | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
| <h2>{{$title}}</h2> | <h2>{{$title}}</h2> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | {{if $editable == 1}} | ||||||
| <div id="group-edit-wrapper" > | <div id="group-edit-wrapper" > | ||||||
| 	<form action="group/{{$gid}}" id="group-edit-form" method="post" > | 	<form action="group/{{$gid}}" id="group-edit-form" method="post" > | ||||||
| 		<input type='hidden' name='form_security_token' value='{{$form_security_token}}'> | 		<input type='hidden' name='form_security_token' value='{{$form_security_token}}'> | ||||||
|  | @ -14,6 +15,7 @@ | ||||||
| 		<div id="group-edit-select-end" ></div> | 		<div id="group-edit-select-end" ></div> | ||||||
| 	</form> | 	</form> | ||||||
| </div> | </div> | ||||||
|  | {{/if}} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| {{if $groupeditor}} | {{if $groupeditor}} | ||||||
|  | @ -21,4 +23,4 @@ | ||||||
| 		{{include file="groupeditor.tpl"}} | 		{{include file="groupeditor.tpl"}} | ||||||
| 	</div> | 	</div> | ||||||
| {{/if}} | {{/if}} | ||||||
| {{if $desc}}<div id="group-edit-desc">{{$desc}}</div>{{/if}} | {{if $desc}}<div class="clear" id="group-edit-desc">{{$desc}}</div>{{/if}} | ||||||
|  |  | ||||||
|  | @ -36,7 +36,7 @@ | ||||||
| 	<div id="sidebar-edit-groups"><a href="{{$grouppage}}">{{$editgroupstext}}</a></div> | 	<div id="sidebar-edit-groups"><a href="{{$grouppage}}">{{$editgroupstext}}</a></div> | ||||||
| 	{{/if}} | 	{{/if}} | ||||||
| 
 | 
 | ||||||
| 	{{if $ungrouped}}<div id="sidebar-ungrouped"><a href="nogroup">{{$ungrouped}}</a></div>{{/if}} | 	{{if $ungrouped}}<div id="sidebar-ungrouped"><a class="{{if $ungrouped_selected}}group-selected{{/if}}" href="nogroup">{{$ungrouped}}</a></div>{{/if}} | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| 
 | 
 | ||||||
| {{* Template for the contact group list *}} | {{* Template for the contact group list *}} | ||||||
| 
 | 
 | ||||||
|  | {{if $editable == 1}} | ||||||
| {{* The contacts who are already members of the contact group *}} | {{* The contacts who are already members of the contact group *}} | ||||||
| <div id="group"> | <div id="group"> | ||||||
| 	<h3>{{$groupeditor.label_members}}</h3> | 	<h3>{{$groupeditor.label_members}}</h3> | ||||||
|  | @ -34,27 +35,27 @@ | ||||||
| 	<div id="group-members-end"></div> | 	<div id="group-members-end"></div> | ||||||
| 		<hr id="group-separator" /> | 		<hr id="group-separator" /> | ||||||
| </div> | </div> | ||||||
|  | {{/if}} | ||||||
| 
 | 
 | ||||||
| {{* The contacts who are not members of the contact group *}} | {{* The contacts who are not members of the contact group *}} | ||||||
| <div id="contacts"> | <div id="contacts"> | ||||||
| 	<h3>{{$groupeditor.label_contacts}}</h3> | 	<h3>{{$groupeditor.label_contacts}}</h3> | ||||||
| 	<div id="group-all-contacts" class="contact_list"> | 	<div id="group-all-contacts" class="contact_list"> | ||||||
| 		{{foreach $groupeditor.contacts as $m}} | 		{{foreach $groupeditor.contacts as $m}} | ||||||
|  | 			<div class="contact-block-textdiv mpall"> | ||||||
|  | 				{{if $editable == 1}} | ||||||
|  | 				<a class="contact-block-link mpall  fakelink" target="redir" onclick="groupChangeMember({{$m.change_member.gid}},{{$m.change_member.cid}},'{{$m.change_member.sec_token}}'); return true;" title="{{$m.name}} [{{$m.itemurl}}]" alt="{{$m.name}}"> | ||||||
|  | 				{{else}} | ||||||
|  | 				<a class="contact-block-link mpall" href="{{$m.url}}" title="{{$m.name}} [{{$m.itemurl}}]" alt="{{$m.name}}"> | ||||||
|  | 				{{/if}} | ||||||
| 					{{* If there are too many contacts we use another view mode *}} | 					{{* If there are too many contacts we use another view mode *}} | ||||||
| 					{{if $shortmode}} | 					{{if $shortmode}} | ||||||
| 			<div class="contact-block-textdiv mpall"> |  | ||||||
| 				<a class="contact-block-link mpall  fakelink" target="redir" onclick="groupChangeMember({{$m.change_member.gid}},{{$m.change_member.cid}},'{{$m.change_member.sec_token}}'); return true;" title="{{$m.name}} [{{$m.itemurl}}]" alt="{{$m.name}}"> |  | ||||||
| 						{{$m.name}} | 						{{$m.name}} | ||||||
| 				</a> |  | ||||||
| 			</div> |  | ||||||
| 					{{else}} | 					{{else}} | ||||||
| 			{{* The normal view mode *}} |  | ||||||
| 			<div class="contact-block-div mpall"> |  | ||||||
| 				<a class="contact-block-link mpall  fakelink" target="redir" onclick="groupChangeMember({{$m.change_member.gid}},{{$m.change_member.cid}},'{{$m.change_member.sec_token}}'); return true;"> |  | ||||||
| 						<img class="contact-block-img mpall " src="{{$m.thumb}}" title="{{$m.name}} [{{$m.itemurl}}]" alt="{{$m.name}}"> | 						<img class="contact-block-img mpall " src="{{$m.thumb}}" title="{{$m.name}} [{{$m.itemurl}}]" alt="{{$m.name}}"> | ||||||
|  | 					{{/if}} | ||||||
| 				</a> | 				</a> | ||||||
| 			</div> | 			</div> | ||||||
| 			{{/if}} |  | ||||||
| 		{{/foreach}} | 		{{/foreach}} | ||||||
| 	</div> | 	</div> | ||||||
| 	<div id="group-all-contacts-end"></div> | 	<div id="group-all-contacts-end"></div> | ||||||
|  |  | ||||||
|  | @ -1021,7 +1021,7 @@ aside .widget li, | ||||||
|     padding-top: 2px; |     padding-top: 2px; | ||||||
|     padding-bottom: 2px; |     padding-bottom: 2px; | ||||||
|     padding-left: 20px; |     padding-left: 20px; | ||||||
|     padding-right: 20px; |     padding-right: 10px; | ||||||
| } | } | ||||||
| aside .widget li:hover, | aside .widget li:hover, | ||||||
| aside .widget li.selected, | aside .widget li.selected, | ||||||
|  | @ -1220,13 +1220,29 @@ aside #follow-sidebar .form-group-search .form-button-search { | ||||||
|     padding: 2px 8px; |     padding: 2px 8px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | div#sidebar-group-header h3 { | ||||||
|  |     float: left; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | div#sidebar-group-list { | ||||||
|  |     clear: both; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .group-new-form { | ||||||
|  |     clear: both; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .group-edit-tool { | ||||||
|  |     color: #555; | ||||||
|  | } | ||||||
| aside #group-sidebar .group-edit-tool, | aside #group-sidebar .group-edit-tool, | ||||||
| aside #saved-search-list .savedsearchdrop { | aside #saved-search-list .savedsearchdrop { | ||||||
|     opacity: 0.1; |     opacity: 0.1; | ||||||
|     transition: all 0.25s ease-in-out; |     transition: all 0.25s ease-in-out; | ||||||
| } | } | ||||||
| aside #group-sidebar .sidebar-group-li:hover .group-edit-tool, | aside #group-sidebar .group-edit-tool:hover, | ||||||
| aside #saved-search-list .saved-search-li:hover .savedsearchdrop { | aside #saved-search-list .saved-search-li:hover .savedsearchdrop { | ||||||
|  |     color: #555; | ||||||
|     opacity: 0.8; |     opacity: 0.8; | ||||||
|     transition: all 0.25s ease-in-out; |     transition: all 0.25s ease-in-out; | ||||||
| } | } | ||||||
|  | @ -2308,7 +2324,7 @@ ul li:hover .contact-wrapper .contact-action-link:hover { | ||||||
| 
 | 
 | ||||||
| /* group edit page */ | /* group edit page */ | ||||||
| .group-actions { | .group-actions { | ||||||
|     margin-top: 20px; |     margin-top: 4px; | ||||||
|     margin-bottom: 10px; |     margin-bottom: 10px; | ||||||
|     font-size: 30px; |     font-size: 30px; | ||||||
| } | } | ||||||
|  | @ -2321,8 +2337,12 @@ ul li:hover .contact-wrapper .contact-action-link:hover { | ||||||
| .contact-group-actions .fa-plus-circle { color: #008000;} | .contact-group-actions .fa-plus-circle { color: #008000;} | ||||||
| 
 | 
 | ||||||
| #group-edit-wrapper { | #group-edit-wrapper { | ||||||
|  |     margin-top: 14px; | ||||||
|     display: none; |     display: none; | ||||||
| } | } | ||||||
|  | #group-edit-header { | ||||||
|  |     display: block; | ||||||
|  | } | ||||||
| #group-update-wrapper .contact-photo-overlay { | #group-update-wrapper .contact-photo-overlay { | ||||||
|     display: none; |     display: none; | ||||||
| } | } | ||||||
|  | @ -2331,7 +2351,7 @@ ul li:hover .contact-wrapper .contact-action-link:hover { | ||||||
|     margin-top: -10px; |     margin-top: -10px; | ||||||
|     display: flex; |     display: flex; | ||||||
| } | } | ||||||
| #group-update-wrapper .viewcontact_wrapper .contact-action-link { | #group-update-wrapper .viewcontact_wrapper .contact-group-link { | ||||||
|     opacity: 0.8; |     opacity: 0.8; | ||||||
|     font-size: 20px; |     font-size: 20px; | ||||||
|     line-height: 50px; |     line-height: 50px; | ||||||
|  |  | ||||||
|  | @ -372,11 +372,13 @@ function openClose(theID) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function showHide(theID) { | function showHide(theID) { | ||||||
| 	if(document.getElementById(theID).style.display == "block") { | 	var elem = document.getElementById(theID); | ||||||
| 		document.getElementById(theID).style.display = "none" | 
 | ||||||
|  | 	if( $(elem).is(':visible') ) { | ||||||
|  | 		elem.style.display = "none"; | ||||||
| 	} | 	} | ||||||
| 	else { | 	else { | ||||||
| 		document.getElementById(theID).style.display = "block" | 		elem.style.display = "block"; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								view/theme/frio/templates/contact_block.tpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								view/theme/frio/templates/contact_block.tpl
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | 
 | ||||||
|  | <div id="contact-block"> | ||||||
|  | 	<h3 class="contact-block-h4 pull-left">{{$contacts}}</h3> | ||||||
|  | {{if $micropro}} | ||||||
|  | 	<a class="pull-right" href="viewcontacts/{{$nickname}}"> | ||||||
|  | 	<i class="faded-icon fa fa-eye" aria-hidden="true"></i><span class="sr-only">{{$viewcontacts}}</span> | ||||||
|  | 	</a> | ||||||
|  | 	<div class='contact-block-content'> | ||||||
|  | 	{{foreach $micropro as $m}} | ||||||
|  | 		{{$m}} | ||||||
|  | 	{{/foreach}} | ||||||
|  | 	</div> | ||||||
|  | {{/if}} | ||||||
|  | </div> | ||||||
|  | <div class="clear"></div> | ||||||
|  | @ -84,7 +84,7 @@ | ||||||
| 			{{* The button to add or remove contacts from a contact group - group edit page *}} | 			{{* The button to add or remove contacts from a contact group - group edit page *}} | ||||||
| 			{{if $contact.change_member}} | 			{{if $contact.change_member}} | ||||||
| 			<div class="contact-group-actions pull-right nav-pills preferences"> | 			<div class="contact-group-actions pull-right nav-pills preferences"> | ||||||
| 				<button type="button" class="contact-action-link btn-link" onclick="groupChangeMember({{$contact.change_member.gid}},{{$contact.change_member.cid}},'{{$contact.change_member.sec_token}}'); return true;" data-toggle="tooltip" title="{{$contact.change_member.title}}"> | 				<button type="button" class="contact-action-link contact-group-link btn-link" onclick="groupChangeMember({{$contact.change_member.gid}},{{$contact.change_member.cid}},'{{$contact.change_member.sec_token}}'); return true;" data-toggle="tooltip" title="{{$contact.change_member.title}}"> | ||||||
| 					{{if $contact.label == "members"}} | 					{{if $contact.label == "members"}} | ||||||
| 					<i class="fa fa-times-circle" aria-hidden="true"></i> | 					<i class="fa fa-times-circle" aria-hidden="true"></i> | ||||||
| 					{{elseif $contact.label == "contacts"}} | 					{{elseif $contact.label == "contacts"}} | ||||||
|  |  | ||||||
|  | @ -16,15 +16,11 @@ | ||||||
| 	<div id="contacts-search-wrapper"> | 	<div id="contacts-search-wrapper"> | ||||||
| 		<form id="contacts-search-form" class="navbar-form" role="search" action="{{$cmd}}" method="get" > | 		<form id="contacts-search-form" class="navbar-form" role="search" action="{{$cmd}}" method="get" > | ||||||
| 			<div class="row"> | 			<div class="row"> | ||||||
| 				<div class="col-md-2"></div> |  | ||||||
| 				<div class="col-md-8 "> |  | ||||||
| 				<div class="form-group form-group-search"> | 				<div class="form-group form-group-search"> | ||||||
| 					<input type="text" name="search" id="contacts-search" class="search-input form-control form-search" onfocus="this.select();" value="{{$search|escape:'html'}}" placeholder="{{$desc}}"/> | 					<input type="text" name="search" id="contacts-search" class="search-input form-control form-search" onfocus="this.select();" value="{{$search|escape:'html'}}" placeholder="{{$desc}}"/> | ||||||
| 					<button class="btn btn-default btn-sm form-button-search" type="submit" id="contacts-search-submit">{{$submit}}</button> | 					<button class="btn btn-default btn-sm form-button-search" type="submit" id="contacts-search-submit">{{$submit}}</button> | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 				<div class="col-md-2"></div> |  | ||||||
| 			</div> |  | ||||||
| 		</form> | 		</form> | ||||||
| 	</div> | 	</div> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| 
 | 
 | ||||||
| <div id="id_{{$field.0}}_wrapper" class="form-group field input"> | <div id="id_{{$field.0}}_wrapper" class="form-group field input"> | ||||||
|  | 	{{if !isset($label) || $label != false }} | ||||||
| 	<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}}<span class="required"> {{$field.4}}</span>{{/if}}</label> | 	<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}}<span class="required"> {{$field.4}}</span>{{/if}}</label> | ||||||
|  | 	{{/if}} | ||||||
| 	<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}"{{if $field.6 eq "email"}} type="email"{{elseif $field.6 eq "url"}} type="url"{{else}} type="text"{{/if}} value="{{$field.2|escape:'html'}}"{{if $field.4 eq "required"}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5}}{{/if}} aria-describedby="{{$field.0}}_tip"> | 	<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}"{{if $field.6 eq "email"}} type="email"{{elseif $field.6 eq "url"}} type="url"{{else}} type="text"{{/if}} value="{{$field.2|escape:'html'}}"{{if $field.4 eq "required"}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5}}{{/if}} aria-describedby="{{$field.0}}_tip"> | ||||||
| 	{{if $field.3}} | 	{{if $field.3}} | ||||||
| 	<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3}}</span> | 	<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3}}</span> | ||||||
|  |  | ||||||
|  | @ -7,54 +7,52 @@ | ||||||
| <script type="text/javascript" src="view/theme/frio/js/mod_group.js"></script> | <script type="text/javascript" src="view/theme/frio/js/mod_group.js"></script> | ||||||
| 
 | 
 | ||||||
| <div class="generic-page-wrapper"> | <div class="generic-page-wrapper"> | ||||||
| 
 | 	{{if $editable == 1}} | ||||||
| 	{{* The buttons for editing the contact group (edit name / remove contact group) *}} | 	{{* The buttons for editing the contact group (edit name / remove contact group) *}} | ||||||
| 	<div class="group-actions pull-right"> | 	<div class="group-actions pull-right"> | ||||||
| 		<button type="button" id="group-rename" class="btn btn-clear" onclick="openClose('group-edit-wrapper'); return false;" title="{{$edit_name}}" data-toggle="tooltip"> | 		<button type="button" id="group-rename" class="btn btn-clear" onclick="showHide('group-edit-wrapper'); showHide('group-edit-header'); return false;" title="{{$edit_name}}" data-toggle="tooltip"> | ||||||
| 			<i class="fa fa-pencil" aria-hidden="true"></i> | 			<i class="fa fa-pencil" aria-hidden="true"></i> | ||||||
| 		</button> | 		</button> | ||||||
| 		{{if $drop}}{{$drop}}{{/if}} | 		{{if $drop}}{{$drop}}{{/if}} | ||||||
| 	</div> | 	</div> | ||||||
|  | 	{{/if}} | ||||||
| 
 | 
 | ||||||
| 	{{include file="section_title.tpl"}} | 	<div class="section-title-wrapper"> | ||||||
|  | 		<div id="group-edit-header"> | ||||||
|  | 			<h2>{{$title}}</h2> | ||||||
|  | 		</div> | ||||||
| 
 | 
 | ||||||
| 		{{* Edit the name of the group *}} | 		{{* Edit the name of the group *}} | ||||||
| 	<div id="group-edit-wrapper" class="panel panel-inline"> | 		<div id="group-edit-wrapper"> | ||||||
| 		<form action="group/{{$gid}}" id="group-edit-form" method="post"> |  | ||||||
| 			<input type='hidden' name='form_security_token' value='{{$form_security_token}}'> |  | ||||||
| 
 | 
 | ||||||
| 			{{include file="field_input.tpl" field=$gname}} | 			<form action="group/{{$gid}}" id="group-edit-form" method="post"> | ||||||
|  | 
 | ||||||
|  | 				<div class="pull-left"> | ||||||
|  | 				{{include file="field_input.tpl" field=$gname label=false}} | ||||||
|  | 				</div> | ||||||
| 				<div id="group-edit-submit-wrapper" class="form-group pull-right"> | 				<div id="group-edit-submit-wrapper" class="form-group pull-right"> | ||||||
| 					<button class="btn btn-primary btn-small" type="submit" name="submit" value="{{$submit|escape:'html'}}"> | 					<button class="btn btn-primary btn-small" type="submit" name="submit" value="{{$submit|escape:'html'}}"> | ||||||
| 						{{$submit|escape:'html'}} | 						{{$submit|escape:'html'}} | ||||||
| 					</button> | 					</button> | ||||||
| 				</div> | 				</div> | ||||||
| 			<div id="group-edit-select-end" class="clear"></div> |  | ||||||
| 			</form> | 			</form> | ||||||
| 		</div> | 		</div> | ||||||
| 
 | 
 | ||||||
|  | 		<div class="clear"></div> | ||||||
|  | 	</div> | ||||||
|  | 
 | ||||||
| 	{{* The search input field to search for contacts *}} | 	{{* The search input field to search for contacts *}} | ||||||
| 	<div id="contacts-search-wrapper"> | 	<div id="contacts-search-wrapper"> | ||||||
| 		<div id="contacts-search-form" class="navbar-form" role="search"> | 		<form id="contacts-search-form" class="navbar-form" role="search" method="get" > | ||||||
| 			<div class="row"> | 			<div class="row"> | ||||||
| 				<div class="col-md-2"></div> |  | ||||||
| 				<div class="col-md-8 "> |  | ||||||
| 				<div class="form-group form-group-search"> | 				<div class="form-group form-group-search"> | ||||||
| 						<input type="text" | 					<input type="text" name="search" id="contacts-search" class="search-input form-control form-search" onfocus="this.select();" onkeyup="filterList(); return false;" /> | ||||||
| 							name="filter" | 					<button class="btn btn-default btn-sm form-button-search" onclick="filterList(); return false;">{{$submit_filter}}</button> | ||||||
| 							id="contacts-search" |  | ||||||
| 							class="search-input form-control form-search" |  | ||||||
| 							onkeyup="filterList(); return false;" |  | ||||||
| 							onfocus="this.select(); return false;" |  | ||||||
| 						/> |  | ||||||
| 					</div> |  | ||||||
| 				</div> |  | ||||||
| 				<div class="col-md-2"></div> |  | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
|  | 		</form> | ||||||
| 	</div> | 	</div> | ||||||
| 
 | 
 | ||||||
| 	<hr> |  | ||||||
| 	<div id="contacts-search-end"></div> | 	<div id="contacts-search-end"></div> | ||||||
| 
 | 
 | ||||||
| 	{{if $groupeditor}} | 	{{if $groupeditor}} | ||||||
|  |  | ||||||
|  | @ -1,6 +1,22 @@ | ||||||
| <div class="widget" id="group-sidebar"> | <div class="widget" id="group-sidebar"> | ||||||
|  | 	<div id="sidebar-group-header"> | ||||||
| 	<h3>{{$title}}</h3> | 	<h3>{{$title}}</h3> | ||||||
| 
 | 	{{if ! $newgroup}} | ||||||
|  | 	<a class="group-edit-tool pull-right" href="{{$grouppage}}"> | ||||||
|  | 	<i class="faded-icon fa fa-pencil" aria-hidden="true"></i><span class="sr-only">{{$editgroupstext}}</span> | ||||||
|  | 	</a> | ||||||
|  | 	{{else}} | ||||||
|  | 	<a class="group-edit-tool pull-right" id="sidebar-new-group" onclick="javascript:$('#group-new-form').fadeIn('fast');"> | ||||||
|  | 	<i class="faded-icon fa fa-plus" aria-hidden="true"></i><span class="sr-only">{{$createtext}}</span> | ||||||
|  | 	</a> | ||||||
|  | 	<form id="group-new-form" action="group/new" method="post" style="display:none;"> | ||||||
|  | 		<div class="form-group"> | ||||||
|  | 			<input type="hidden" name="form_security_token" value="{{$form_security_token}}"> | ||||||
|  | 			<input name="groupname" id="id_groupname" class="form-control input-sm" placeholder="{{$creategroup}}"> | ||||||
|  | 		</div> | ||||||
|  | 	</form> | ||||||
|  | 	{{/if}} | ||||||
|  | 	</div> | ||||||
| 	<div id="sidebar-group-list"> | 	<div id="sidebar-group-list"> | ||||||
| 		{{* The list of available groups *}} | 		{{* The list of available groups *}} | ||||||
| 		<ul role="menu" id="sidebar-group-ul"> | 		<ul role="menu" id="sidebar-group-ul"> | ||||||
|  | @ -29,23 +45,10 @@ | ||||||
| 					<a id="sidebar-group-element-{{$group.id}}" class="sidebar-group-element" href="{{$group.href}}">{{$group.text}}</a> | 					<a id="sidebar-group-element-{{$group.id}}" class="sidebar-group-element" href="{{$group.href}}">{{$group.text}}</a> | ||||||
| 				</li> | 				</li> | ||||||
| 			{{/foreach}} | 			{{/foreach}} | ||||||
|  | 
 | ||||||
|  | 			{{if $ungrouped}}<li class="{{if $ungrouped_selected}}selected{{/if}} sidebar-group-li" id="sidebar-ungrouped"><a href="nogroup">{{$ungrouped}}</a></li>{{/if}} | ||||||
| 		</ul> | 		</ul> | ||||||
| 	</div> | 	</div> | ||||||
| 
 | 
 | ||||||
| 	{{if $newgroup}} |  | ||||||
| 	<div id="sidebar-new-group"> |  | ||||||
| 		{{* show the input field by clicking "new group" *}} |  | ||||||
| 		<button type="button" class="btn-link" onclick="javascript:$('#group-new-form').fadeIn('fast');">{{$createtext}}</button> |  | ||||||
| 		<form id="group-new-form" action="group/new" method="post" style="display:none;"> |  | ||||||
| 			<div class="form-group"> |  | ||||||
| 				<input type="hidden" name="form_security_token" value="{{$form_security_token}}"> |  | ||||||
| 				<input name="groupname" id="id_groupname" class="form-control input-sm" placeholder="{{$creategroup}}"> |  | ||||||
| 			</div> |  | ||||||
| 		</form> |  | ||||||
| 	</div> |  | ||||||
| 	{{else}} |  | ||||||
| 	<div id="sidebar-edit-groups"><a href="{{$grouppage}}">{{$editgroupstext}}</a></div> |  | ||||||
| 	{{/if}} |  | ||||||
| 
 | 
 | ||||||
| 	{{if $ungrouped}}<div id="sidebar-ungrouped"><a href="nogroup">{{$ungrouped}}</a></div>{{/if}} |  | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue