From: Michael <heluecht@pirati.ca>
Date: Fri, 24 Apr 2020 11:04:50 +0000 (+0000)
Subject: Owner-view added
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=02aed490e2f7d0862d002a0a984cd5a0442ee75c;p=friendica.git

Owner-view added
---

diff --git a/src/Model/Tag.php b/src/Model/Tag.php
index e2ce5ad0d5..cf453f2431 100644
--- a/src/Model/Tag.php
+++ b/src/Model/Tag.php
@@ -231,13 +231,18 @@ class Tag
 	 */
 	public static function remove(int $uriid, int $type, string $name, string $url = '')
 	{
-		$tag = DBA::fetchFirst("SELECT `id` FROM `tag` INNER JOIN `post-tag` ON `post-tag`.`tid` = `tag`.`id`
-			WHERE `uri-id` = ? AND `type` = ? AND `name` = ? AND `url` = ?", $uriid, $type, $name, $url);
+		$condition = ['uri-id' => $uriid, 'type' => $type, 'url' => $url];
+		if ($type == self::HASHTAG) {
+			$condition['name'] = $name;
+		}
+
+		$tag = DBA::selectFirst('tag-view', ['tid', 'cid'], $condition);
 		if (!DBA::isResult($tag)) {
 			return;
 		}
-		Logger::info('Removing tag/mention', ['uri-id' => $uriid, 'tid' => $tag['id'], 'name' => $name, 'url' => $url, 'callstack' => System::callstack(8)]);
-		DBA::delete('post-tag', ['uri-id' => $uriid, 'tid' => $tag['id']]);
+
+		Logger::info('Removing tag/mention', ['uri-id' => $uriid, 'tid' => $tag['tid'], 'name' => $name, 'url' => $url, 'callstack' => System::callstack(8)]);
+		DBA::delete('post-tag', ['uri-id' => $uriid, 'type' => $type, 'tid' => $tag['tid'], 'cid' => $tag['cid']]);
 	}
 
 	/**
diff --git a/src/Model/User.php b/src/Model/User.php
index 4ef5ffa33c..e7f2f89ad6 100644
--- a/src/Model/User.php
+++ b/src/Model/User.php
@@ -195,66 +195,46 @@ class User
 	 */
 	public static function getOwnerDataById($uid, $check_valid = true)
 	{
-		$r = DBA::fetchFirst(
-			"SELECT
-			`contact`.*,
-			`user`.`prvkey` AS `uprvkey`,
-			`user`.`timezone`,
-			`user`.`nickname`,
-			`user`.`sprvkey`,
-			`user`.`spubkey`,
-			`user`.`page-flags`,
-			`user`.`account-type`,
-			`user`.`prvnets`,
-			`user`.`account_removed`,
-			`user`.`hidewall`
-			FROM `contact`
-			INNER JOIN `user`
-				ON `user`.`uid` = `contact`.`uid`
-			WHERE `contact`.`uid` = ?
-			AND `contact`.`self`
-			LIMIT 1",
-			$uid
-		);
-		if (!DBA::isResult($r)) {
+		$owner = DBA::selectFirst('owner-view', [], ['uid' => $uid]);
+		if (!DBA::isResult($owner)) {
 			return false;
 		}
 
-		if (empty($r['nickname'])) {
+		if (empty($owner['nickname'])) {
 			return false;
 		}
 
 		if (!$check_valid) {
-			return $r;
+			return $owner;
 		}
 
 		// Check if the returned data is valid, otherwise fix it. See issue #6122
 
 		// Check for correct url and normalised nurl
-		$url = DI::baseUrl() . '/profile/' . $r['nickname'];
-		$repair = ($r['url'] != $url) || ($r['nurl'] != Strings::normaliseLink($r['url']));
+		$url = DI::baseUrl() . '/profile/' . $owner['nickname'];
+		$repair = ($owner['url'] != $url) || ($owner['nurl'] != Strings::normaliseLink($owner['url']));
 
 		if (!$repair) {
 			// Check if "addr" is present and correct
-			$addr = $r['nickname'] . '@' . substr(DI::baseUrl(), strpos(DI::baseUrl(), '://') + 3);
-			$repair = ($addr != $r['addr']);
+			$addr = $owner['nickname'] . '@' . substr(DI::baseUrl(), strpos(DI::baseUrl(), '://') + 3);
+			$repair = ($addr != $owner['addr']);
 		}
 
 		if (!$repair) {
 			// Check if the avatar field is filled and the photo directs to the correct path
 			$avatar = Photo::selectFirst(['resource-id'], ['uid' => $uid, 'profile' => true]);
 			if (DBA::isResult($avatar)) {
-				$repair = empty($r['avatar']) || !strpos($r['photo'], $avatar['resource-id']);
+				$repair = empty($owner['avatar']) || !strpos($owner['photo'], $avatar['resource-id']);
 			}
 		}
 
 		if ($repair) {
 			Contact::updateSelfFromUserID($uid);
 			// Return the corrected data and avoid a loop
-			$r = self::getOwnerDataById($uid, false);
+			$owner = self::getOwnerDataById($uid, false);
 		}
 
-		return $r;
+		return $owner;
 	}
 
 	/**
@@ -1290,17 +1270,10 @@ class User
 			'active_users_monthly'  => 0,
 		];
 
-		$userStmt = DBA::p("SELECT `user`.`uid`, `user`.`login_date`, `contact`.`last-item`
-			FROM `user`
-			INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`
-			WHERE `user`.`verified`
-				AND `user`.`login_date` > ?
-				AND NOT `user`.`blocked`
-				AND NOT `user`.`account_removed`
-				AND NOT `user`.`account_expired`",
-				DBA::NULL_DATETIME
-		);
-
+		$userStmt = DBA::select('owner-view', ['uid', 'login_date', 'last-item'],
+			["`verified` AND `login_date` > ? AND NOT `blocked`
+			AND NOT `account_removed` AND NOT `account_expired`",
+			DBA::NULL_DATETIME]);
 		if (!DBA::isResult($userStmt)) {
 			return $statistics;
 		}
@@ -1332,39 +1305,27 @@ class User
 	 * @param int    $count Count of the items per page (Default is @see Pager::ITEMS_PER_PAGE)
 	 * @param string $type  The type of users, which should get (all, bocked, removed)
 	 * @param string $order Order of the user list (Default is 'contact.name')
-	 * @param string $order_direction Order direction (Default is ASC)
+	 * @param bool   $descending Order direction (Default is ascending)
 	 *
 	 * @return array The list of the users
 	 * @throws Exception
 	 */
-	public static function getList($start = 0, $count = Pager::ITEMS_PER_PAGE, $type = 'all', $order = 'contact.name', $order_direction = '+')
+	public static function getList($start = 0, $count = Pager::ITEMS_PER_PAGE, $type = 'all', $order = 'name', bool $descending = false)
 	{
-		$sql_order           = '`' . str_replace('.', '`.`', $order) . '`';
-		$sql_order_direction = ($order_direction === '+') ? 'ASC' : 'DESC';
-
+		$param = ['limit' => [$start, $count], 'order' => [$order => $descending]];
+		$condition = [];
 		switch ($type) {
 			case 'active':
-				$sql_extra = 'AND `user`.`blocked` = 0';
+				$condition['blocked'] = false;
 				break;
 			case 'blocked':
-				$sql_extra = 'AND `user`.`blocked` = 1';
+				$condition['blocked'] = true;
 				break;
 			case 'removed':
-				$sql_extra = 'AND `user`.`account_removed` = 1';
-				break;
-			case 'all':
-			default:
-				$sql_extra = '';
+				$condition['account_removed'] = true;
 				break;
 		}
 
-		$usersStmt = DBA::p("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date`, `contact`.`nick`, `contact`.`created`
-				FROM `user`
-				INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`
-				WHERE `user`.`verified` $sql_extra
-				ORDER BY $sql_order $sql_order_direction LIMIT ?, ?", $start, $count
-		);
-
-		return DBA::toArray($usersStmt);
+		return DBA::selectToArray('owner-view', [], $condition, $param);
 	}
 }
diff --git a/src/Module/Admin/Users.php b/src/Module/Admin/Users.php
index 3ef91aadf7..822ac0c013 100644
--- a/src/Module/Admin/Users.php
+++ b/src/Module/Admin/Users.php
@@ -157,15 +157,15 @@ class Users extends BaseAdmin
 		$pager = new Pager(DI::l10n(), DI::args()->getQueryString(), 100);
 
 		$valid_orders = [
-			'contact.name',
-			'user.email',
-			'user.register_date',
-			'user.login_date',
+			'name',
+			'email',
+			'register_date',
+			'login_date',
 			'lastitem_date',
-			'user.page-flags'
+			'page-flags'
 		];
 
-		$order = 'contact.name';
+		$order = 'name';
 		$order_direction = '+';
 		if (!empty($_GET['o'])) {
 			$new_order = $_GET['o'];
@@ -179,7 +179,7 @@ class Users extends BaseAdmin
 			}
 		}
 
-		$users = User::getList($pager->getStart(), $pager->getItemsPerPage(), 'all', $order, $order_direction);
+		$users = User::getList($pager->getStart(), $pager->getItemsPerPage(), 'all', $order, ($order_direction == '-'));
 
 		$adminlist = explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email')));
 		$_setup_users = function ($e) use ($adminlist) {
diff --git a/static/dbview.config.php b/static/dbview.config.php
index ad33a78823..0d44df0311 100755
--- a/static/dbview.config.php
+++ b/static/dbview.config.php
@@ -53,5 +53,104 @@ return [
 			LEFT JOIN `tag` ON `post-tag`.`tid` = `tag`.`id`
 			LEFT JOIN `contact` ON `post-tag`.`cid` = `contact`.`id`"
 	],
+	"owner-view" => [
+		"fields" => [
+			"id" => ["contact", "id"],
+			"uid" => ["contact", "uid"],
+			"created" => ["contact", "created"],
+			"updated" => ["contact", "updated"],
+			"self" => ["contact", "self"],
+			"remote_self" => ["contact", "remote_self"],
+			"rel" => ["contact", "rel"],
+			"duplex" => ["contact", "duplex"],
+			"network" => ["contact", "network"],
+			"protocol" => ["contact", "protocol"],
+			"name" => ["contact", "name"],
+			"nick" => ["contact", "nick"],
+			"location" => ["contact", "location"],
+			"about" => ["contact", "about"],
+			"keywords" => ["contact", "keywords"],
+			"gender" => ["contact", "gender"],
+			"xmpp" => ["contact", "xmpp"],
+			"attag" => ["contact", "attag"],
+			"avatar" => ["contact", "avatar"],
+			"photo" => ["contact", "photo"],
+			"thumb" => ["contact", "thumb"],
+			"micro" => ["contact", "micro"],
+			"site-pubkey" => ["contact", "site-pubkey"],
+			"issued-id" => ["contact", "issued-id"],
+			"dfrn-id" => ["contact", "dfrn-id"],
+			"url" => ["contact", "url"],
+			"nurl" => ["contact", "nurl"],
+			"addr" => ["contact", "addr"],
+			"alias" => ["contact", "alias"],
+			"pubkey" => ["contact", "pubkey"],
+			"prvkey" => ["contact", "prvkey"],
+			"batch" => ["contact", "batch"],
+			"request" => ["contact", "request"],
+			"notify" => ["contact", "notify"],
+			"poll" => ["contact", "poll"],
+			"confirm" => ["contact", "confirm"],
+			"poco" => ["contact", "poco"],
+			"aes_allow" => ["contact", "aes_allow"],
+			"ret-aes" => ["contact", "ret-aes"],
+			"usehub" => ["contact", "usehub"],
+			"subhub" => ["contact", "subhub"],
+			"hub-verify" => ["contact", "hub-verify"],
+			"last-update" => ["contact", "last-update"],
+			"success_update" => ["contact", "success_update"],
+			"failure_update" => ["contact", "failure_update"],
+			"name-date" => ["contact", "name-date"],
+			"uri-date" => ["contact", "uri-date"],
+			"avatar-date" => ["contact", "avatar-date"],
+			"term-date" => ["contact", "term-date"],
+			"last-item" => ["contact", "last-item"],			
+			"lastitem_date" => ["contact", "last-item"],
+			"priority" => ["contact", "priority"],
+			"blocked" => ["contact", "blocked"],
+			"block_reason" => ["contact", "block_reason"],
+			"readonly" => ["contact", "readonly"],
+			"writable" => ["contact", "writable"],
+			"forum" => ["contact", "forum"],
+			"prv" => ["contact", "prv"],
+			"contact-type" => ["contact", "contact-type"],
+			"hidden" => ["contact", "hidden"],
+			"archive" => ["contact", "archive"],
+			"pending" => ["contact", "pending"],
+			"deleted" => ["contact", "deleted"],
+			"rating" => ["contact", "rating"],
+			"unsearchable" => ["contact", "unsearchable"],
+			"sensitive" => ["contact", "sensitive"],
+			"baseurl" => ["contact", "baseurl"],
+			"reason" => ["contact", "reason"],
+			"closeness" => ["contact", "closeness"],
+			"info" => ["contact", "info"],
+			"profile-id" => ["contact", "profile-id"],
+			"bdyear" => ["contact", "bdyear"],
+			"bd" => ["contact", "bd"],
+			"notify_new_posts" => ["notify_new_posts"],
+			"fetch_further_information" => ["fetch_further_information"],
+			"ffi_keyword_blacklist" => ["ffi_keyword_blacklist"],
+			"email" => ["user", "email"],
+			"uprvkey" => ["user", "prvkey"],
+			"timezone" => ["user", "timezone"],
+			"nickname" => ["user", "nickname"],
+			"sprvkey" => ["user", "sprvkey"],
+			"spubkey" => ["user", "spubkey"],
+			"page-flags" => ["user", "page-flags"],
+			"account-type" => ["user", "account-type"],
+			"prvnets" => ["user", "prvnets"],
+			"account_removed" => ["user", "account_removed"],
+			"hidewall" => ["user", "hidewall"],
+			"login_date" => ["user", "login_date"],
+			"register_date" => ["user", "register_date"],
+			"verified" => ["user", "verified"],
+			"account_removed" => ["user", "account_removed"],
+			"account_expired" => ["user", "account_expired"],
+			"account_expires_on" => ["user", "account_expires_on"],
+		],
+		"query" => "FROM `user`
+			INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`"
+	]
 ];