From 85f050849473b4ca16567f4261f6dbb3fbf9f0c4 Mon Sep 17 00:00:00 2001
From: rabuzarus <rabuzarus@t-online.de>
Date: Mon, 18 Feb 2019 03:00:10 +0100
Subject: [PATCH 1/3] own function for processing data of directory entries

---
 mod/directory.php                             | 123 +++++++++---------
 view/templates/directory_header.tpl           |   2 +-
 view/theme/frio/css/style.css                 |   2 +-
 .../theme/frio/templates/directory_header.tpl |  60 ++++-----
 4 files changed, 97 insertions(+), 90 deletions(-)

diff --git a/mod/directory.php b/mod/directory.php
index 6ef3134517..a1e37d6770 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -45,6 +45,8 @@ function directory_content(App $a)
 	}
 
 	$o = '';
+	$entries = [];
+
 	Nav::setSelected('directory');
 
 	if (!empty($a->data['search'])) {
@@ -98,7 +100,7 @@ function directory_content(App $a)
 	$limit = $pager->getStart()."," . $pager->getItemsPerPage();
 
 	$r = DBA::p("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`,
-			`contact`.`addr`, `contact`.`url` AS profile_url FROM `profile`
+			`contact`.`addr`, `contact`.`url` AS `profile_url` FROM `profile`
 			LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
 			LEFT JOIN `contact` ON `contact`.`uid` = `user`.`uid`
 			WHERE `is-default` $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed` AND `contact`.`self`
@@ -111,39 +113,68 @@ function directory_content(App $a)
 			$photo = 'photo';
 		}
 
-		$entries = [];
-
 		while ($rr = DBA::fetch($r)) {
-			$itemurl = (($rr['addr'] != "") ? $rr['addr'] : $rr['profile_url']);
+			$entries[] = format_directory_entry($rr, $photo);
+		}
+		DBA::close($r);
+	} else {
+		info(L10n::t("No entries \x28some entries may be hidden\x29.") . EOL);
+	}
 
-			$profile_link = $rr['profile_url'];
+	$tpl = Renderer::getMarkupTemplate('directory_header.tpl');
 
-			$pdesc = (($rr['pdesc']) ? $rr['pdesc'] . '<br />' : '');
+	$o .= Renderer::replaceMacros($tpl, [
+		'$search'    => $search,
+		'$globaldir' => L10n::t('Global Directory'),
+		'$gdirpath'  => $gdirpath,
+		'$desc'      => L10n::t('Find on this site'),
+		'$contacts'  => $entries,
+		'$finding'   => L10n::t('Results for:'),
+		'$findterm'  => (strlen($search) ? $search : ""),
+		'$title'     => L10n::t('Site Directory'),
+		'$search_mod' => 'directory',
+		'$submit'    => L10n::t('Find'),
+		'$paginate'  => $pager->renderFull($total),
+	]);
+
+	return $o;
+}
+
+/**
+ * Format contact/profile/user data from the database into an usable
+ * array for displaying directory entries.
+ * 
+ * @param type $r The directory entry from the database.
+ * @param string $photo_size Avatar size (thumb, photo or micro).
+ * 
+ * @return array
+ */
+function format_directory_entry($arr, $photo_size = 'photo')
+{
+			$itemurl = (($arr['addr'] != "") ? $arr['addr'] : $arr['profile_url']);
+
+			$profile_link = $arr['profile_url'];
+
+			$pdesc = (($arr['pdesc']) ? $arr['pdesc'] . '<br />' : '');
 
 			$details = '';
-			if (strlen($rr['locality'])) {
-				$details .= $rr['locality'];
+			if (strlen($arr['locality'])) {
+				$details .= $arr['locality'];
 			}
-			if (strlen($rr['region'])) {
-				if (strlen($rr['locality'])) {
+			if (strlen($arr['region'])) {
+				if (strlen($arr['locality'])) {
 					$details .= ', ';
 				}
-				$details .= $rr['region'];
+				$details .= $arr['region'];
 			}
-			if (strlen($rr['country-name'])) {
+			if (strlen($arr['country-name'])) {
 				if (strlen($details)) {
 					$details .= ', ';
 				}
-				$details .= $rr['country-name'];
+				$details .= $arr['country-name'];
 			}
-//			if(strlen($rr['dob'])) {
-//				if(($years = age($rr['dob'],$rr['timezone'],'')) != 0)
-//					$details .= '<br />' . L10n::t('Age: ') . $years;
-//			}
-//			if(strlen($rr['gender']))
-//				$details .= '<br />' . L10n::t('Gender: ') . $rr['gender'];
 
-			$profile = $rr;
+			$profile = $arr;
 
 			if (!empty($profile['address'])
 				|| !empty($profile['locality'])
@@ -156,10 +187,10 @@ function directory_content(App $a)
 				$location = '';
 			}
 
-			$gender   = (!empty($profile['gender']) ? L10n::t('Gender:')   : false);
-			$marital  = (!empty($profile['marital']) ? L10n::t('Status:')   : false);
+			$gender   = (!empty($profile['gender'])   ? L10n::t('Gender:')   : false);
+			$marital  = (!empty($profile['marital'])  ? L10n::t('Status:')   : false);
 			$homepage = (!empty($profile['homepage']) ? L10n::t('Homepage:') : false);
-			$about    = (!empty($profile['about']) ? L10n::t('About:')    : false);
+			$about    = (!empty($profile['about'])    ? L10n::t('About:')    : false);
 
 			$location_e = $location;
 
@@ -168,17 +199,17 @@ function directory_content(App $a)
 			];
 
 			$entry = [
-				'id'           => $rr['id'],
+				'id'           => $arr['id'],
 				'url'          => Contact::magicLInk($profile_link),
 				'itemurl'      => $itemurl,
-				'thumb'        => ProxyUtils::proxifyUrl($rr[$photo], false, ProxyUtils::SIZE_THUMB),
-				'img_hover'    => $rr['name'],
-				'name'         => $rr['name'],
+				'thumb'        => ProxyUtils::proxifyUrl($arr[$photo_size], false, ProxyUtils::SIZE_THUMB),
+				'img_hover'    => $arr['name'],
+				'name'         => $arr['name'],
 				'details'      => $details,
-				'account_type' => Contact::getAccountType($rr),
+				'account_type' => Contact::getAccountType($arr),
 				'profile'      => $profile,
 				'location'     => $location_e,
-				'tags'         => $rr['pub_keywords'],
+				'tags'         => $arr['pub_keywords'],
 				'gender'       => $gender,
 				'pdesc'        => $pdesc,
 				'marital'      => $marital,
@@ -188,38 +219,12 @@ function directory_content(App $a)
 
 			];
 
-			$arr = ['contact' => $rr, 'entry' => $entry];
+			$hook = ['contact' => $arr, 'entry' => $entry];
 
-			Hook::callAll('directory_item', $arr);
+			Hook::callAll('directory_item', $hook);
 
 			unset($profile);
 			unset($location);
 
-			if (!$arr['entry']) {
-				continue;
-			}
-
-			$entries[] = $arr['entry'];
-		}
-		DBA::close($r);
-
-		$tpl = Renderer::getMarkupTemplate('directory_header.tpl');
-
-		$o .= Renderer::replaceMacros($tpl, [
-			'$search'    => $search,
-			'$globaldir' => L10n::t('Global Directory'),
-			'$gdirpath'  => $gdirpath,
-			'$desc'      => L10n::t('Find on this site'),
-			'$contacts'  => $entries,
-			'$finding'   => L10n::t('Results for:'),
-			'$findterm'  => (strlen($search) ? $search : ""),
-			'$title'     => L10n::t('Site Directory'),
-			'$submit'    => L10n::t('Find'),
-			'$paginate'  => $pager->renderFull($total),
-		]);
-	} else {
-		info(L10n::t("No entries \x28some entries may be hidden\x29.") . EOL);
-	}
-
-	return $o;
-}
+			return $hook['entry'];
+}
\ No newline at end of file
diff --git a/view/templates/directory_header.tpl b/view/templates/directory_header.tpl
index 4c9fe1298e..06776aa00e 100644
--- a/view/templates/directory_header.tpl
+++ b/view/templates/directory_header.tpl
@@ -9,7 +9,7 @@
 
 
 <div id="directory-search-wrapper">
-	<form id="directory-search-form" action="directory" method="get" >
+	<form id="directory-search-form" action="{{$search_mod}}" method="get" >
 		<span class="dirsearch-desc">{{$desc nofilter}}</span>
 		<input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="{{$search}}" />
 		<input type="submit" name="submit" id="directory-search-submit" value="{{$submit}}" class="button" />
diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css
index 6759195ee5..eba1a2ed27 100644
--- a/view/theme/frio/css/style.css
+++ b/view/theme/frio/css/style.css
@@ -2315,7 +2315,7 @@ ul.dropdown-menu li:hover {
 .generic-page-wrapper, .profile_photo-content-wrapper, .videos-content-wrapper,
  .suggest-content-wrapper, .common-content-wrapper, .help-content-wrapper,
 .allfriends-content-wrapper, .match-content-wrapper, .dirfind-content-wrapper,
-.directory-content-wrapper, .manage-content-wrapper, .notes-content-wrapper,
+.manage-content-wrapper, .notes-content-wrapper,
 .message-content-wrapper, .apps-content-wrapper,
 #adminpage, .delegate-content-wrapper, .uexport-content-wrapper,
 .viewcontacts-content-wrapper, .dfrn_request-content-wrapper,
diff --git a/view/theme/frio/templates/directory_header.tpl b/view/theme/frio/templates/directory_header.tpl
index 98ec3f5e2f..087614b0dc 100644
--- a/view/theme/frio/templates/directory_header.tpl
+++ b/view/theme/frio/templates/directory_header.tpl
@@ -1,40 +1,42 @@
 
-{{if $gdirpath}}
-<ul class="list-unstyled pull-right">
-	<li><div id="global-directory-link"><a href="{{$gdirpath}}">{{$globaldir}}</a></div></li>
-</ul>
-{{/if}}
+<div class="generic-page-wrapper">
+	{{if $gdirpath}}
+	<ul class="list-unstyled pull-right">
+		<li><div id="global-directory-link"><a href="{{$gdirpath}}">{{$globaldir}}</a></div></li>
+	</ul>
+	{{/if}}
 
-{{include file="section_title.tpl"}}
+	{{include file="section_title.tpl"}}
 
 
-{{* The search input field to search for contacts *}}
-<div id="directory-search-wrapper">
-	<form id="directory-search-form" class="navbar-form" role="search" action="directory" method="get" >
-		<div class="row">
-			<div class="col-md-2"></div>
-			<div class="col-md-8 ">
-				<div class="form-group form-group-search">
-					<input type="text" name="search" id="directory-search" class="search-input form-control form-search" onfocus="this.select();" value="{{$search}}" placeholder="{{$desc nofilter}}"/>
-					<button class="btn btn-default btn-sm form-button-search" type="submit" id="directory-search-submit">{{$submit}}</button>
+	{{* The search input field to search for contacts *}}
+	<div id="directory-search-wrapper">
+		<form id="directory-search-form" class="navbar-form" role="search" action="{{$search_mod}}" method="get" >
+			<div class="row">
+				<div class="col-md-2"></div>
+				<div class="col-md-8 ">
+					<div class="form-group form-group-search">
+						<input type="text" name="search" id="directory-search" class="search-input form-control form-search" onfocus="this.select();" value="{{$search}}" placeholder="{{$desc nofilter}}"/>
+						<button class="btn btn-default btn-sm form-button-search" type="submit" id="directory-search-submit">{{$submit}}</button>
+					</div>
 				</div>
+				<div class="col-md-2"></div>
 			</div>
-			<div class="col-md-2"></div>
-		</div>
-	</form>
-</div>
+		</form>
+	</div>
 
-<hr>
+	<hr>
 
-<div id="directory-search-end" class="clear"></div>
+	<div id="directory-search-end" class="clear"></div>
 
-{{* format each contact with the contact_template.tpl *}}
-<ul id="viewcontact_wrapper" class="viewcontact_wrapper media-list">
-{{foreach $contacts as $contact}}
-	<li>{{include file="contact_template.tpl"}}</li>
-{{/foreach}}
-</ul>
+	{{* format each contact with the contact_template.tpl *}}
+	<ul id="viewcontact_wrapper" class="viewcontact_wrapper media-list">
+	{{foreach $contacts as $contact}}
+		<li>{{include file="contact_template.tpl"}}</li>
+	{{/foreach}}
+	</ul>
 
-<div class="directory-end" ></div>
+	<div class="directory-end" ></div>
 
-{{$paginate nofilter}}
+	{{$paginate nofilter}}
+</div>
\ No newline at end of file

From 2b7c331afbb3adc739c2857f11cb70174adcff89 Mon Sep 17 00:00:00 2001
From: rabuzarus <trebor@central-unit>
Date: Mon, 18 Feb 2019 13:03:21 +0100
Subject: [PATCH 2/3] forumdirectory: some polishing

---
 mod/directory.php                             | 130 +++++++++---------
 view/templates/directory_header.tpl           |   1 -
 .../theme/frio/templates/directory_header.tpl |   3 +-
 3 files changed, 66 insertions(+), 68 deletions(-)

diff --git a/mod/directory.php b/mod/directory.php
index a1e37d6770..a3fc965c84 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -144,87 +144,87 @@ function directory_content(App $a)
  * Format contact/profile/user data from the database into an usable
  * array for displaying directory entries.
  * 
- * @param type $r The directory entry from the database.
+ * @param type $arr The directory entry from the database.
  * @param string $photo_size Avatar size (thumb, photo or micro).
  * 
  * @return array
  */
-function format_directory_entry($arr, $photo_size = 'photo')
+function format_directory_entry(array $arr, $photo_size = 'photo')
 {
-			$itemurl = (($arr['addr'] != "") ? $arr['addr'] : $arr['profile_url']);
+	$itemurl = (($arr['addr'] != "") ? $arr['addr'] : $arr['profile_url']);
 
-			$profile_link = $arr['profile_url'];
+	$profile_link = $arr['profile_url'];
 
-			$pdesc = (($arr['pdesc']) ? $arr['pdesc'] . '<br />' : '');
+	$pdesc = (($arr['pdesc']) ? $arr['pdesc'] . '<br />' : '');
 
-			$details = '';
-			if (strlen($arr['locality'])) {
-				$details .= $arr['locality'];
-			}
-			if (strlen($arr['region'])) {
-				if (strlen($arr['locality'])) {
-					$details .= ', ';
-				}
-				$details .= $arr['region'];
-			}
-			if (strlen($arr['country-name'])) {
-				if (strlen($details)) {
-					$details .= ', ';
-				}
-				$details .= $arr['country-name'];
-			}
+	$details = '';
+	if (strlen($arr['locality'])) {
+		$details .= $arr['locality'];
+	}
+	if (strlen($arr['region'])) {
+		if (strlen($arr['locality'])) {
+			$details .= ', ';
+		}
+		$details .= $arr['region'];
+	}
+	if (strlen($arr['country-name'])) {
+		if (strlen($details)) {
+			$details .= ', ';
+		}
+		$details .= $arr['country-name'];
+	}
 
-			$profile = $arr;
+	$profile = $arr;
 
-			if (!empty($profile['address'])
-				|| !empty($profile['locality'])
-				|| !empty($profile['region'])
-				|| !empty($profile['postal-code'])
-				|| !empty($profile['country-name'])
-			) {
-				$location = L10n::t('Location:');
-			} else {
-				$location = '';
-			}
+	if (!empty($profile['address'])
+		|| !empty($profile['locality'])
+		|| !empty($profile['region'])
+		|| !empty($profile['postal-code'])
+		|| !empty($profile['country-name'])
+	) {
+		$location = L10n::t('Location:');
+	} else {
+		$location = '';
+	}
 
-			$gender   = (!empty($profile['gender'])   ? L10n::t('Gender:')   : false);
-			$marital  = (!empty($profile['marital'])  ? L10n::t('Status:')   : false);
-			$homepage = (!empty($profile['homepage']) ? L10n::t('Homepage:') : false);
-			$about    = (!empty($profile['about'])    ? L10n::t('About:')    : false);
+	$gender   = (!empty($profile['gender'])   ? L10n::t('Gender:')   : false);
+	$marital  = (!empty($profile['marital'])  ? L10n::t('Status:')   : false);
+	$homepage = (!empty($profile['homepage']) ? L10n::t('Homepage:') : false);
+	$about    = (!empty($profile['about'])    ? L10n::t('About:')    : false);
 
-			$location_e = $location;
+	$location_e = $location;
 
-			$photo_menu = [
-				'profile' => [L10n::t("View Profile"), Contact::magicLink($profile_link)]
-			];
+	$photo_menu = [
+		'profile' => [L10n::t("View Profile"), Contact::magicLink($profile_link)]
+	];
 
-			$entry = [
-				'id'           => $arr['id'],
-				'url'          => Contact::magicLInk($profile_link),
-				'itemurl'      => $itemurl,
-				'thumb'        => ProxyUtils::proxifyUrl($arr[$photo_size], false, ProxyUtils::SIZE_THUMB),
-				'img_hover'    => $arr['name'],
-				'name'         => $arr['name'],
-				'details'      => $details,
-				'account_type' => Contact::getAccountType($arr),
-				'profile'      => $profile,
-				'location'     => $location_e,
-				'tags'         => $arr['pub_keywords'],
-				'gender'       => $gender,
-				'pdesc'        => $pdesc,
-				'marital'      => $marital,
-				'homepage'     => $homepage,
-				'about'        => $about,
-				'photo_menu'   => $photo_menu,
+	$entry = [
+		'id'           => $arr['id'],
+		'url'          => Contact::magicLInk($profile_link),
+		'itemurl'      => $itemurl,
+		'thumb'        => ProxyUtils::proxifyUrl($arr[$photo_size], false, ProxyUtils::SIZE_THUMB),
+		'img_hover'    => $arr['name'],
+		'name'         => $arr['name'],
+		'details'      => $details,
+		'account_type' => Contact::getAccountType($arr),
+		'profile'      => $profile,
+		'location'     => $location_e,
+		'tags'         => $arr['pub_keywords'],
+		'gender'       => $gender,
+		'pdesc'        => $pdesc,
+		'marital'      => $marital,
+		'homepage'     => $homepage,
+		'about'        => $about,
+		'photo_menu'   => $photo_menu,
 
-			];
+	];
 
-			$hook = ['contact' => $arr, 'entry' => $entry];
+	$hook = ['contact' => $arr, 'entry' => $entry];
 
-			Hook::callAll('directory_item', $hook);
+	Hook::callAll('directory_item', $hook);
 
-			unset($profile);
-			unset($location);
+	unset($profile);
+	unset($location);
 
-			return $hook['entry'];
-}
\ No newline at end of file
+	return $hook['entry'];
+}
diff --git a/view/templates/directory_header.tpl b/view/templates/directory_header.tpl
index 06776aa00e..14b1074dc9 100644
--- a/view/templates/directory_header.tpl
+++ b/view/templates/directory_header.tpl
@@ -7,7 +7,6 @@
 	</ul>
 {{/if}}
 
-
 <div id="directory-search-wrapper">
 	<form id="directory-search-form" action="{{$search_mod}}" method="get" >
 		<span class="dirsearch-desc">{{$desc nofilter}}</span>
diff --git a/view/theme/frio/templates/directory_header.tpl b/view/theme/frio/templates/directory_header.tpl
index 087614b0dc..36812916d6 100644
--- a/view/theme/frio/templates/directory_header.tpl
+++ b/view/theme/frio/templates/directory_header.tpl
@@ -8,7 +8,6 @@
 
 	{{include file="section_title.tpl"}}
 
-
 	{{* The search input field to search for contacts *}}
 	<div id="directory-search-wrapper">
 		<form id="directory-search-form" class="navbar-form" role="search" action="{{$search_mod}}" method="get" >
@@ -39,4 +38,4 @@
 	<div class="directory-end" ></div>
 
 	{{$paginate nofilter}}
-</div>
\ No newline at end of file
+</div>

From 3ba7907b57a018617d57c9ae216ecbf03e914803 Mon Sep 17 00:00:00 2001
From: rabuzarus <trebor@central-unit>
Date: Mon, 18 Feb 2019 13:27:26 +0100
Subject: [PATCH 3/3] forumdirectory: type is array

---
 mod/directory.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mod/directory.php b/mod/directory.php
index a3fc965c84..256c9bbbd5 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -144,7 +144,7 @@ function directory_content(App $a)
  * Format contact/profile/user data from the database into an usable
  * array for displaying directory entries.
  * 
- * @param type $arr The directory entry from the database.
+ * @param array $arr The directory entry from the database.
  * @param string $photo_size Avatar size (thumb, photo or micro).
  * 
  * @return array