OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)
This commit is contained in:
200
app/Domain/Wiki/Controllers/Show.php
Normal file
200
app/Domain/Wiki/Controllers/Show.php
Normal file
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
|
||||
namespace Leantime\Domain\Wiki\Controllers;
|
||||
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Leantime\Core\Auth\Permissions\RequiresPermission;
|
||||
use Leantime\Core\Controller\Controller;
|
||||
use Leantime\Core\Controller\Frontcontroller;
|
||||
use Leantime\Domain\Comments\Services\Comments as CommentService;
|
||||
use Leantime\Domain\Tickets\Services\Tickets as TicketService;
|
||||
use Leantime\Domain\Wiki\Permissions\WikiPermissions;
|
||||
use Leantime\Domain\Wiki\Services\Wiki as WikiService;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class Show extends Controller
|
||||
{
|
||||
private WikiService $wikiService;
|
||||
|
||||
private CommentService $commentService;
|
||||
|
||||
private TicketService $ticketService;
|
||||
|
||||
public function init(WikiService $wikiService, CommentService $commentService, TicketService $ticketService): void
|
||||
{
|
||||
$this->wikiService = $wikiService;
|
||||
$this->commentService = $commentService;
|
||||
$this->ticketService = $ticketService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws BindingResolutionException
|
||||
*/
|
||||
#[RequiresPermission(WikiPermissions::VIEW)]
|
||||
public function get(array $params): Response
|
||||
{
|
||||
|
||||
$currentArticle = '';
|
||||
$wikiHeadlines = [];
|
||||
|
||||
// Get all project wikis, creates one if none exists
|
||||
$wikis = $this->wikiService->getAllProjectWikis(session('currentProject'));
|
||||
|
||||
// Special case: Setting wiki (active action), set wiki, headlines and current Article
|
||||
if (isset($_GET['setWiki'])) {
|
||||
|
||||
$wikiId = (int) $_GET['setWiki'];
|
||||
|
||||
return $this->setWikiAndRedirect($wikiId);
|
||||
|
||||
}
|
||||
|
||||
if (isset($params['id'])) {
|
||||
|
||||
$currentArticle = $this->wikiService->setCurrentArticle($params['id'], session('usersettings.id'));
|
||||
|
||||
if ($currentArticle === false) {
|
||||
$this->wikiService->clearWikiCache();
|
||||
|
||||
return Frontcontroller::redirect(BASE_URL.'/errors/error404');
|
||||
}
|
||||
|
||||
} elseif (
|
||||
session()->exists('lastArticle') &&
|
||||
session('lastArticle') != '' &&
|
||||
! isset($params['id'])) {
|
||||
|
||||
$currentArticle = $this->wikiService->setCurrentArticle(session('lastArticle'), session('usersettings.id'));
|
||||
|
||||
if ($currentArticle) {
|
||||
return Frontcontroller::redirect(BASE_URL.'/wiki/show/'.$currentArticle->id);
|
||||
}
|
||||
|
||||
// If neither session is set nor the params id we are coming in fresh. Grab the article from wiki if there is one
|
||||
} else {
|
||||
|
||||
// False is okay, just an empty wiki
|
||||
$success = $this->wikiService->setCurrentWiki(session('currentWiki'));
|
||||
if ($success === false) {
|
||||
|
||||
// Try getting the first wiki
|
||||
$success = $this->wikiService->setCurrentWiki($wikis[0]->id);
|
||||
|
||||
if ($success === false) {
|
||||
$this->wikiService->clearWikiCache();
|
||||
|
||||
return Frontcontroller::redirect(BASE_URL.'/errors/error404');
|
||||
}
|
||||
}
|
||||
|
||||
$defaultArticle = $this->wikiService->getDefaultArticleForWiki(session('currentWiki'), session('userdata.id'));
|
||||
if ($defaultArticle !== false) {
|
||||
session(['lastArticle' => $defaultArticle->id]);
|
||||
|
||||
return Frontcontroller::redirect(BASE_URL.'/wiki/show/'.$defaultArticle->id);
|
||||
}
|
||||
// If not it's really just empty.
|
||||
|
||||
}
|
||||
|
||||
// At this point we should have a currentWiki. Even if non exist
|
||||
$wikiHeadlines = $this->wikiService->getAllWikiHeadlines(session('currentWiki'), session('userdata.id'));
|
||||
if (! $wikiHeadlines) {
|
||||
$wikiHeadlines = [];
|
||||
}
|
||||
|
||||
// Get the actual wiki content
|
||||
$currentWiki = $this->wikiService->getWiki(session('currentWiki'));
|
||||
if (empty($currentWiki)) {
|
||||
$this->wikiService->clearWikiCache();
|
||||
|
||||
// If we can't find a current wiki at this point something went wrong
|
||||
return Frontcontroller::redirect(BASE_URL.'/errors/error404');
|
||||
}
|
||||
|
||||
// Delete comment
|
||||
if (isset($_GET['delComment']) === true) {
|
||||
$commentId = (int) ($_GET['delComment']);
|
||||
|
||||
$this->commentService->deleteComment($commentId);
|
||||
|
||||
$this->tpl->setNotification($this->language->__('notifications.comment_deleted'), 'success', 'wikicomment_deleted');
|
||||
}
|
||||
|
||||
if (isset($currentArticle->id)) {
|
||||
$comment = $this->commentService->getComments('article', $currentArticle->id, 0);
|
||||
} else {
|
||||
$comment = [];
|
||||
}
|
||||
|
||||
// Get all milestones for the project
|
||||
$allProjectMilestones = $this->ticketService->getAllMilestones([
|
||||
'sprint' => '',
|
||||
'type' => 'milestone',
|
||||
'currentProject' => session('currentProject'),
|
||||
]);
|
||||
|
||||
$this->tpl->assign('comments', $comment);
|
||||
$this->tpl->assign('numComments', count($comment));
|
||||
$this->tpl->assign('currentArticle', $currentArticle);
|
||||
$this->tpl->assign('currentWiki', $currentWiki);
|
||||
$this->tpl->assign('wikis', $wikis);
|
||||
$this->tpl->assign('wikiHeadlines', $wikiHeadlines);
|
||||
$this->tpl->assign('milestones', $allProjectMilestones);
|
||||
|
||||
return $this->tpl->display('wiki.show');
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws BindingResolutionException
|
||||
*/
|
||||
#[RequiresPermission(WikiPermissions::VIEW)]
|
||||
public function post(array $params): Response
|
||||
{
|
||||
|
||||
if (isset($_GET['id']) === true) {
|
||||
$id = (int) ($_GET['id']);
|
||||
$currentArticle = $this->wikiService->getArticle($id, session('currentProject'));
|
||||
|
||||
if (isset($_POST['comment']) === true) {
|
||||
if ($this->commentService->addComment($_POST, 'article', $id, $currentArticle)) {
|
||||
$this->tpl->setNotification(
|
||||
$this->language->__('notifications.comment_create_success'),
|
||||
'success',
|
||||
'wikicomment_created'
|
||||
);
|
||||
} else {
|
||||
$this->tpl->setNotification($this->language->__('notifications.comment_create_error'), 'error');
|
||||
}
|
||||
}
|
||||
|
||||
return Frontcontroller::redirect(BASE_URL.'/wiki/show/'.$id);
|
||||
}
|
||||
|
||||
return Frontcontroller::redirect(BASE_URL.'/wiki/show/');
|
||||
}
|
||||
|
||||
protected function setWikiAndRedirect($id): Response
|
||||
{
|
||||
|
||||
$this->wikiService->clearWikiCache();
|
||||
|
||||
$success = $this->wikiService->setCurrentWiki($id);
|
||||
|
||||
if ($success === false) {
|
||||
$this->wikiService->clearWikiCache();
|
||||
|
||||
return Frontcontroller::redirect(BASE_URL.'/errors/error404');
|
||||
}
|
||||
|
||||
$defaultArticle = $this->wikiService->getDefaultArticleForWiki($id, session('userdata.id'));
|
||||
if ($defaultArticle !== false) {
|
||||
session(['lastArticle' => $defaultArticle->id]);
|
||||
|
||||
return Frontcontroller::redirect(BASE_URL.'/wiki/show/'.$defaultArticle->id);
|
||||
}
|
||||
|
||||
return Frontcontroller::redirect(BASE_URL.'/wiki/show/');
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user