+
+ /**
+ * search for Profiles
+ *
+ * @param int $start
+ * @param int $count
+ * @param null $search
+ *
+ * @return array [ 'total' => 123, 'entries' => [...] ];
+ *
+ * @throws \Exception
+ */
+ public static function searchProfiles($start = 0, $count = 100, $search = null)
+ {
+ $publish = (Config::get('system', 'publish_all') ? '' : " AND `publish` = 1 ");
+ $total = 0;
+
+ if (!empty($search)) {
+ $searchTerm = '%' . $search . '%';
+ $cnt = DBA::fetchFirst("SELECT COUNT(*) AS `total`
+ FROM `profile`
+ LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
+ WHERE `is-default` $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed`
+ AND ((`profile`.`name` LIKE ?) OR
+ (`user`.`nickname` LIKE ?) OR
+ (`profile`.`pdesc` LIKE ?) OR
+ (`profile`.`locality` LIKE ?) OR
+ (`profile`.`region` LIKE ?) OR
+ (`profile`.`country-name` LIKE ?) OR
+ (`profile`.`gender` LIKE ?) OR
+ (`profile`.`marital` LIKE ?) OR
+ (`profile`.`sexual` LIKE ?) OR
+ (`profile`.`about` LIKE ?) OR
+ (`profile`.`romance` LIKE ?) OR
+ (`profile`.`work` LIKE ?) OR
+ (`profile`.`education` LIKE ?) OR
+ (`profile`.`pub_keywords` LIKE ?) OR
+ (`profile`.`prv_keywords` LIKE ?))",
+ $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm,
+ $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm);
+ } else {
+ $cnt = DBA::fetchFirst("SELECT COUNT(*) AS `total`
+ FROM `profile`
+ LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
+ WHERE `is-default` $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed`");
+ }
+
+ if (DBA::isResult($cnt)) {
+ $total = $cnt['total'];
+ }
+
+ $order = " ORDER BY `name` ASC ";
+ $profiles = [];
+
+ // If nothing found, don't try to select details
+ if ($total > 0) {
+ if (!empty($search)) {
+ $searchTerm = '%' . $search . '%';
+
+ $profiles = 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`
+ 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`
+ AND ((`profile`.`name` LIKE ?) OR
+ (`user`.`nickname` LIKE ?) OR
+ (`profile`.`pdesc` LIKE ?) OR
+ (`profile`.`locality` LIKE ?) OR
+ (`profile`.`region` LIKE ?) OR
+ (`profile`.`country-name` LIKE ?) OR
+ (`profile`.`gender` LIKE ?) OR
+ (`profile`.`marital` LIKE ?) OR
+ (`profile`.`sexual` LIKE ?) OR
+ (`profile`.`about` LIKE ?) OR
+ (`profile`.`romance` LIKE ?) OR
+ (`profile`.`work` LIKE ?) OR
+ (`profile`.`education` LIKE ?) OR
+ (`profile`.`pub_keywords` LIKE ?) OR
+ (`profile`.`prv_keywords` LIKE ?))
+ $order LIMIT ?,?",
+ $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm,
+ $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm,
+ $start, $count
+ );
+ } else {
+ $profiles = 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`
+ 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`
+ $order LIMIT ?,?",
+ $start, $count
+ );
+ }
+ }
+
+ if (DBA::isResult($profiles) && $total > 0) {
+ return [
+ 'total' => $total,
+ 'entries' => DBA::toArray($profiles),
+ ];
+
+ } else {
+ return [
+ 'total' => $total,
+ 'entries' => [],
+ ];
+ }
+ }