Wiki navigation bar

This commit is contained in:
2022-03-27 22:00:29 +00:00
parent 9c6114cf86
commit 4807b7d4ae
13 changed files with 189 additions and 48 deletions

View File

@ -51,12 +51,12 @@
/**
* @NoAdminRequired
*
* @param string $folderPath
* @param string $title
* @param string $fileId
*/
public function create(string $title, int $fileId) {
return $this->handleReadOnly(function () use ($title, $fileId) {
return $this->service->create($title, $fileId, $this->userId);
*/
public function create(string $folderPath, string $title) {
return $this->handleReadOnly(function () use ($folderPath, $title) {
return $this->service->create($folderPath, $title, $this->userId);
});
}

View File

@ -19,7 +19,7 @@ class Wiki extends Entity implements JsonSerializable {
return [
'id' => $this->id,
'title' => $this->title,
'file_id' => $this->file_id
'fileId' => $this->fileId
];
}
}

View File

@ -7,7 +7,7 @@ use OCP\AppFramework\Db\QBMapper;
class WikiMapper extends QBMapper {
public function __construct(IDBConnection $db) {
parent::__construct($db, 'mywiki_wikis', Note::class);
parent::__construct($db, 'mywiki', Wiki::class);
}
public function usersCount(int $folderId) {
@ -24,18 +24,17 @@ class WikiMapper extends QBMapper {
public function find(int $id, string $userId) {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from($this->getTableName())
->where(
$qb->expr()->eq('id', $qb->createNamedParameter($id))
)->andWhere(
$qb->expr()->eq('user_id', $qb->createNamedParameter($userId))
);
$qb->select('*')
->from($this->getTableName())
->where(
$qb->expr()->eq('id', $qb->createNamedParameter($id))
)->andWhere(
$qb->expr()->eq('user_id', $qb->createNamedParameter($userId))
);
return $this->findEntity($qb);
}
public function findAll(string $userId) {
public function findAll(string $userId, mixed $filter=null) {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
@ -44,6 +43,18 @@ class WikiMapper extends QBMapper {
$qb->expr()->eq('user_id', $qb->createNamedParameter($userId))
);
if ($filter) {
if (array_key_exists('title',$filter) ) {
$qb->where(
$qb->expr()->eq('title', $qb->createNamedParameter($id))
);
}
if (array_key_exists('fileId',$filter) ) {
$qb->where(
$qb->expr()->eq('fileId', $qb->createNamedParameter($id))
);
}
}
return $this->findEntities($qb);
}

View File

@ -96,16 +96,24 @@ class WikiHelper {
return true;
}
public function initWiki(string $title) :bool {
$wiki = [
"title"=>$title,
"folderId"=>$this->wikiFolder->getId(),
"pages"=>$this->rebuildWikiTree()
];
if ( $this->getWikiData() === null ) {
return $this->setWikiData($wiki);
public function initWiki(string $folderPath, string $title) :?int {
$this->wikiFolder = $this->userFolder->get($folderPath);
if ( !$this->isWiki() ) {
return null;
}
return true;
$folderId = $this->wikiFolder->getId();
if ( $this->getWikiData() === null ) {
$wiki = [
"title"=>$title,
"folderId"=>$folderId,
"pages"=>$this->rebuildWikiTree()
];
if ( !$this->setWikiData($wiki) ) {
return null;
}
}
return $folderId;
}
public function add(int $parentId, string $title) {

View File

@ -39,6 +39,7 @@
$table->setPrimaryKey(['id']);
$table->addIndex(['user_id'], 'mywiki_user_id_index');
$table->addIndex(['file_id'], 'mywiki_file_id_index');
}
/*

View File

@ -25,7 +25,7 @@ class WikiService {
}
public function test() {
$folderId = 381;
$folderId = 880;
return $this->wikiHelper->setFolderId($folderId)->reloadWikiTree();
return $this->wikiHelper->setFolderId($folderId)->rename(707, 'UnoMasUno');
return $this->wikiHelper->setFolderId($folderId)->rename(647, 'RenameTest3');
@ -57,17 +57,20 @@ class WikiService {
}
}
public function create(string $title, int $fileId, string $userId) {
$this->wikiHelper->setFolderId($fileId);
if ( $this->wikiHelper->isWiki() ) {
if ( !$this->wikiHelper->initWiki($title) ) {
throw new ReadOnlyException('Error creating wiki');
}
public function create(string $folderPath, string $title, string $userId) {
$folderId = $this->wikiHelper->initWiki($folderPath, $title);
if ( $folderId === null ) {
throw new ReadOnlyException('Error creating wiki');
}
$wikis = $this->mapper->findAll($userId, ['fileId'=>$folderId]);
if ( count($wikis)>0 ) {
return $wikis[0];
}
$wiki = new Wiki();
$wiki->setTitle($title);
$wiki->setFileId($fileId);
$wiki->setFileId($folderId);
$wiki->setUserId($userId);
return $this->mapper->insert($wiki);
}