fix(ui): Use display names instead of ids

fixes #1628

Signed-off-by: Marcel Klehr <mklehr@gmx.net>
This commit is contained in:
Marcel Klehr 2023-02-19 14:19:13 +01:00
parent a54ebb83e6
commit 0711ec3544
7 changed files with 54 additions and 113 deletions

View File

@ -42,7 +42,7 @@ Requirements:
<database>pgsql</database>
<lib>intl</lib>
<lib>mbstring</lib>
<nextcloud min-version="25" max-version="25" />
<nextcloud min-version="25" max-version="26" />
</dependencies>
<background-jobs>
<job>OCA\Bookmarks\BackgroundJobs\CrawlJob</job>

View File

@ -13,7 +13,6 @@ use OCA\Bookmarks\Db\PublicFolder;
use OCA\Bookmarks\Db\PublicFolderMapper;
use OCA\Bookmarks\Db\Share;
use OCA\Bookmarks\Db\SharedFolder;
use OCA\Bookmarks\Db\SharedFolderMapper;
use OCA\Bookmarks\Db\ShareMapper;
use OCA\Bookmarks\Db\TreeMapper;
use OCA\Bookmarks\Exception\ChildrenOrderValidationError;
@ -30,52 +29,26 @@ use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IUserManager;
use Psr\Log\LoggerInterface;
class FoldersController extends ApiController {
private $userId;
private string $userId;
/** @var FolderMapper */
private $folderMapper;
private FolderMapper $folderMapper;
private PublicFolderMapper $publicFolderMapper;
/** @var PublicFolderMapper */
private $publicFolderMapper;
private ShareMapper $shareMapper;
/** @var SharedFolderMapper */
private $sharedFolderMapper;
private Authorizer $authorizer;
/** @var ShareMapper */
private $shareMapper;
/**
* @var Authorizer
*/
private $authorizer;
/**
* @var TreeMapper
*/
private $treeMapper;
/**
* @var int|null
*/
private $rootFolderId;
/**
* @var TreeCacheManager
*/
private $hashManager;
/**
* @var FolderService
*/
private $folders;
/**
* @var BookmarkService
*/
private $bookmarks;
/**
* @var \Psr\Log\LoggerInterface
*/
private $logger;
private TreeMapper $treeMapper;
private ?int $rootFolderId = null;
private TreeCacheManager $hashManager;
private FolderService $folders;
private BookmarkService $bookmarks;
private LoggerInterface $logger;
private IUserManager $userManager;
/**
* FoldersController constructor.
@ -84,20 +57,19 @@ class FoldersController extends ApiController {
* @param $request
* @param FolderMapper $folderMapper
* @param PublicFolderMapper $publicFolderMapper
* @param SharedFolderMapper $sharedFolderMapper
* @param ShareMapper $shareMapper
* @param TreeMapper $treeMapper
* @param Authorizer $authorizer
* @param TreeCacheManager $hashManager
* @param FolderService $folders
* @param BookmarkService $bookmarks
* @param \Psr\Log\LoggerInterface $logger
* @param LoggerInterface $logger
* @param IUserManager $userManager
*/
public function __construct($appName, $request, FolderMapper $folderMapper, PublicFolderMapper $publicFolderMapper, SharedFolderMapper $sharedFolderMapper, ShareMapper $shareMapper, TreeMapper $treeMapper, Authorizer $authorizer, TreeCacheManager $hashManager, FolderService $folders, BookmarkService $bookmarks, \Psr\Log\LoggerInterface $logger) {
public function __construct($appName, $request, FolderMapper $folderMapper, PublicFolderMapper $publicFolderMapper, ShareMapper $shareMapper, TreeMapper $treeMapper, Authorizer $authorizer, TreeCacheManager $hashManager, FolderService $folders, BookmarkService $bookmarks, LoggerInterface $logger, IUserManager $userManager) {
parent::__construct($appName, $request);
$this->folderMapper = $folderMapper;
$this->publicFolderMapper = $publicFolderMapper;
$this->sharedFolderMapper = $sharedFolderMapper;
$this->shareMapper = $shareMapper;
$this->treeMapper = $treeMapper;
$this->authorizer = $authorizer;
@ -107,6 +79,7 @@ class FoldersController extends ApiController {
$this->logger = $logger;
$this->authorizer->setCORS(true);
$this->userManager = $userManager;
}
/**
@ -166,6 +139,7 @@ class FoldersController extends ApiController {
$returnFolder = $folder->toArray();
$parent = $this->treeMapper->findParentOf(TreeMapper::TYPE_FOLDER, $folder->getId());
$returnFolder['parent_folder'] = $this->toExternalFolderId($parent->getId());
$returnFolder['userDisplayName'] = $this->userManager->get($returnFolder['userId'])->getDisplayName();
return $returnFolder;
}
if ($folder instanceof SharedFolder) {
@ -175,9 +149,10 @@ class FoldersController extends ApiController {
$share = $this->shareMapper->findByFolderAndUser($folder->getFolderId(), $folder->getUserId());
$returnFolder = $folder->toArray();
$returnFolder['id'] = $folder->getFolderId();
$returnFolder['user_id'] = $share->getOwner();
$returnFolder['userId'] = $share->getOwner();
$parent = $this->treeMapper->findParentOf(TreeMapper::TYPE_SHARE, $folder->getId());
$returnFolder['parent_folder'] = $this->toExternalFolderId($parent->getId());
$returnFolder['userDisplayName'] = $this->userManager->get($returnFolder['userId'])->getDisplayName();
return $returnFolder;
}

View File

@ -38,9 +38,7 @@ class Folder extends Entity {
}
/**
* @return array
*
* @psalm-return array{id: int, title: string, userId: string}
* @return array{id: int, title: string, userId: string}
*/
public function toArray(): array {
return ['id' => $this->id, 'title' => $this->title, 'userId' => $this->userId];

View File

@ -22,6 +22,7 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IUserManager;
use PDO;
use function call_user_func;
@ -49,60 +50,28 @@ class TreeMapper extends QBMapper {
protected $entityColumns = [];
/** @var IEventDispatcher */
private $eventDispatcher;
private IEventDispatcher $eventDispatcher;
/**
* @var BookmarkMapper
*/
protected $bookmarkMapper;
protected BookmarkMapper $bookmarkMapper;
/**
* @var FolderMapper
*/
protected $folderMapper;
protected FolderMapper $folderMapper;
/**
* @var TreeCacheManager
*/
protected $treeCache;
protected TreeCacheManager $treeCache;
/**
* @var ShareMapper
*/
private $shareMapper;
/**
* @var SharedFolderMapper
*/
private $sharedFolderMapper;
/**
* @var TagMapper
*/
private $tagMapper;
/**
* @var IConfig
*/
private $config;
/**
* @var PublicFolderMapper
*/
private $publicFolderMapper;
/**
* @var IQueryBuilder
*/
private $insertQuery;
/**
* @var IQueryBuilder
*/
private $parentQuery;
/**
* @var array
*/
private $getChildrenQuery;
/**
* @var IQueryBuilder
*/
private $getChildrenOrderQuery;
private ShareMapper $shareMapper;
private SharedFolderMapper $sharedFolderMapper;
private PublicFolderMapper $publicFolderMapper;
private IQueryBuilder $insertQuery;
private IQueryBuilder $parentQuery;
private array $getChildrenQuery;
private IQueryBuilder $getChildrenOrderQuery;
private IUserManager $userManager;
/**
* FolderMapper constructor.
@ -117,8 +86,9 @@ class TreeMapper extends QBMapper {
* @param IConfig $config
* @param PublicFolderMapper $publicFolderMapper
* @param TreeCacheManager $treeCache
* @param IUserManager $userManager
*/
public function __construct(IDBConnection $db, IEventDispatcher $eventDispatcher, FolderMapper $folderMapper, BookmarkMapper $bookmarkMapper, ShareMapper $shareMapper, SharedFolderMapper $sharedFolderMapper, TagMapper $tagMapper, IConfig $config, \OCA\Bookmarks\Db\PublicFolderMapper $publicFolderMapper, TreeCacheManager $treeCache) {
public function __construct(IDBConnection $db, IEventDispatcher $eventDispatcher, FolderMapper $folderMapper, BookmarkMapper $bookmarkMapper, ShareMapper $shareMapper, SharedFolderMapper $sharedFolderMapper, PublicFolderMapper $publicFolderMapper, TreeCacheManager $treeCache, IUserManager $userManager) {
parent::__construct($db, 'bookmarks_tree');
$this->eventDispatcher = $eventDispatcher;
$this->folderMapper = $folderMapper;
@ -131,8 +101,6 @@ class TreeMapper extends QBMapper {
self::TYPE_FOLDER => Folder::$columns,
self::TYPE_BOOKMARK => Bookmark::$columns,
];
$this->tagMapper = $tagMapper;
$this->config = $config;
$this->publicFolderMapper = $publicFolderMapper;
$this->insertQuery = $this->getInsertQuery();
@ -145,6 +113,7 @@ class TreeMapper extends QBMapper {
];
$this->treeCache = $treeCache;
$this->userManager = $userManager;
}
/**
@ -712,6 +681,7 @@ class TreeMapper extends QBMapper {
}
$folders = array_map(function (Folder $folder) use ($layers, $folderId) {
$array = $folder->toArray();
$array['userDisplayName'] = $this->userManager->get($array['userId'])->getDisplayName();
$array['parent_folder'] = $folderId;
if ($layers !== 0) {
$array['children'] = $this->getSubFolders($folder->getId(), $layers - 1);
@ -726,6 +696,7 @@ class TreeMapper extends QBMapper {
$array = $sharedFolder->toArray();
$array['id'] = $share->getFolderId();
$array['userId'] = $share->getOwner();
$array['userDisplayName'] = $this->userManager->get($array['userId'])->getDisplayName();
$array['parent_folder'] = $folderId;
if ($layers !== 0) {
$array['children'] = $this->getSubFolders($share->getFolderId(), $layers - 1);

View File

@ -34,7 +34,7 @@
<template #tags>
<div class="folder__tags">
<div v-if="!isOwner && !isSharedPublicly" class="folder__tag">
{{ t('bookmarks', 'Shared by {user}', {user: folder.userId}) }}
{{ t('bookmarks', 'Shared by {user}', {user: folder.userDisplayName}) }}
</div>
</div>
</template>

View File

@ -17,7 +17,7 @@
<InformationVariantIcon />
</template>
<h3>{{ t('bookmarks', 'Owner') }}</h3>
<NcUserBubble :user="folder.userId" :display-name="folder.userId" />
<NcUserBubble :user="folder.userId" :display-name="folder.userDisplayName" />
<h3>{{ t('bookmarks', 'Bookmarks') }}</h3>
{{ bookmarkCount }}
</NcAppSidebarTab>

View File

@ -201,18 +201,15 @@ class FolderControllerTest extends TestCase {
$this->groupManager = OC::$server->get(IGroupManager::class);
$loggerInterface = OC::$server->get(LoggerInterface::class);
/** @var IUserManager */
$userManager = OC::$server->get(IUserManager::class);
$this->group = $this->groupManager->createGroup('foobar');
$this->group->addUser($userManager->get($this->otherUser));
$this->group->addUser($this->userManager->get($this->otherUser));
$this->authorizer = OC::$server->get(Authorizer::class);
$this->controller = new FoldersController('bookmarks', $this->request, $this->folderMapper, $this->publicFolderMapper, $this->sharedFolderMapper, $this->shareMapper, $this->treeMapper, $this->authorizer, $this->hashManager, $this->folders, $this->bookmarks, $loggerInterface);
$this->otherController = new FoldersController('bookmarks', $this->request, $this->folderMapper, $this->publicFolderMapper, $this->sharedFolderMapper, $this->shareMapper, $this->treeMapper, $this->authorizer, $this->hashManager, $this->folders, $this->bookmarks, $loggerInterface);
$this->public = new FoldersController('bookmarks', $this->publicRequest, $this->folderMapper, $this->publicFolderMapper, $this->sharedFolderMapper, $this->shareMapper, $this->treeMapper, $this->authorizer, $this->hashManager, $this->folders, $this->bookmarks, $loggerInterface);
$this->noauth = new FoldersController('bookmarks', $this->request, $this->folderMapper, $this->publicFolderMapper, $this->sharedFolderMapper, $this->shareMapper, $this->treeMapper, $this->authorizer, $this->hashManager, $this->folders, $this->bookmarks, $loggerInterface);
$this->controller = new FoldersController('bookmarks', $this->request, $this->folderMapper, $this->publicFolderMapper, $this->shareMapper, $this->treeMapper, $this->authorizer, $this->hashManager, $this->folders, $this->bookmarks, $loggerInterface, $this->userManager);
$this->otherController = new FoldersController('bookmarks', $this->request, $this->folderMapper, $this->publicFolderMapper, $this->shareMapper, $this->treeMapper, $this->authorizer, $this->hashManager, $this->folders, $this->bookmarks, $loggerInterface, $this->userManager);
$this->public = new FoldersController('bookmarks', $this->publicRequest, $this->folderMapper, $this->publicFolderMapper, $this->shareMapper, $this->treeMapper, $this->authorizer, $this->hashManager, $this->folders, $this->bookmarks, $loggerInterface, $this->userManager);
$this->noauth = new FoldersController('bookmarks', $this->request, $this->folderMapper, $this->publicFolderMapper, $this->shareMapper, $this->treeMapper, $this->authorizer, $this->hashManager, $this->folders, $this->bookmarks, $loggerInterface, $this->userManager);
}
/**