/** * 게시판 생성 * * @param array $params parameters * @return ConfigEntity */ public function create(array $params) { if (empty($params['boardId']) === true) { throw new RequiredValueException(['key' => 'boardId']); } $config = $this->configHandler->get($params['boardId']); if ($config !== null) { throw new AlreadyExistsInstanceException(); } $this->conn->beginTransaction(); $documentConfig = $this->document->createInstance($params['boardId'], $params); // create comment config(create new comment instance) $this->commentHandler->createInstance($documentConfig->get('instanceId'), $documentConfig->get('division')); $this->commentHandler->configure($this->commentHandler->getInstanceId($documentConfig->get('instanceId')), ['useWysiwyg' => true]); $params['documentGroup'] = $documentConfig->get('group'); $params['commentGroup'] = 'comments_' . $documentConfig->get('instanceId'); $config = $this->configHandler->add($params); $this->permissionHandler->setByInstanceId($params['boardId'], new Grant()); $this->conn->commit(); return $config; }
/** * bind classes * * @return void */ private function bindClasses() { /** @var \Illuminate\Foundation\Application $app */ $app = app(); $app->singleton('xe.plugin.board', function ($app) { return $this; }); $app->bind('Xpressengine\\Plugins\\Board\\Plugin', 'xe.plugin.board'); // Handler $app->singleton('xe.board.handler', function ($app) { /** @var Handler $proxyHandler */ $proxyHandler = $app['xe.interception']->proxy(Handler::class); $readCounter = app('xe.counter')->make($app['request'], 'read'); $readCounter->setGuest(); $voteCounter = app('xe.counter')->make($app['request'], 'vote', ['assent', 'dissent']); $handler = new $proxyHandler(app('xe.document'), app('xe.storage'), app('xe.tag'), $readCounter, $voteCounter); return $handler; }); $app->bind('Xpressengine\\Plugins\\Board\\Handler', 'xe.board.handler'); // ConfigHandler $app->singleton('xe.board.config', function ($app) { /** * @var $configManager ConfigManager * @var $dynamicFieldHandler DynamicFieldHandler * @var $documentHandler DocumentHandler */ $configManager = app('xe.config'); $dynamicFieldHandler = app('xe.dynamicField'); $documentHandler = app('xe.document'); return new ConfigHandler($configManager, $dynamicFieldHandler->getConfigHandler(), $documentHandler->getConfigHandler()); }); $app->bind('Xpressengine\\Plugins\\Board\\ConfigHandler', 'xe.board.config'); // UrlHandler $app->singleton('xe.board.url', function ($app) { return new UrlHandler(); }); $app->bind('Xpressengine\\Plugins\\Board\\UrlHandler', 'xe.board.url'); // Vlidator $app->singleton('xe.board.validator', function ($app) { return new Validator($app['xe.board.config'], $app['xe.dynamicField']); }); $app->bind('Xpressengine\\Plugins\\Board\\Validator', 'xe.board.validator'); // IdentifyManager $app->singleton('xe.board.identify', function ($app) { /** * @var $session \Illuminate\Session\SessionManager * @var $documentHandler DocumentHandler */ $session = app('session'); $documentHandler = app('xe.document'); return new IdentifyManager($session, $documentHandler, app('hash')); }); $app->bind('Xpressengine\\Plugins\\Board\\IdentifyManager', 'xe.board.identify'); $app->singleton('xe.board.instance', function ($app) { /** * @var $documentHandler DocumentHandler * @var $dynamicFieldHandler DynamicFieldHandler */ $documentHandler = app('xe.document'); $dynamicFieldHandler = app('xe.dynamicField'); return new InstanceManager($app['xe.db']->connection('document'), $documentHandler, $dynamicFieldHandler, $app['xe.board.config'], $app['xe.board.permission'], $app['xe.plugin.comment']->getHandler()); }); $app->bind('Xpressengine\\Plugins\\Board\\InstanceManager', 'xe.board.instance'); // BoardPermissionHandler $app->singleton('xe.board.permission', function ($app) { $boardPermission = new BoardPermissionHandler($app['xe.permission'], $app['xe.board.config']); $boardPermission->setPrefix(BoardModule::getId()); return $boardPermission; }); $app->bind('Xpressengine\\Plugins\\Board\\BoardPermissionHandler', 'xe.board.permission'); }
/** * 미리보기 * * @param Request $request request * @param Validator $validator validator * @param BoardPermissionHandler $boardPermission board permission handler * @return mixed */ public function preview(Request $request, Validator $validator, BoardPermissionHandler $boardPermission) { if (Gate::denies(BoardPermissionHandler::ACTION_CREATE, new Instance($boardPermission->name($this->instanceId)))) { throw new AccessDeniedHttpException(); } /** @var UserInterface $user */ $user = Auth::user(); // get rules $this->validate($request, $validator->getCreateRule($user, $this->config)); $content = $request->originAll()['content']; $title = htmlspecialchars($request->originAll()['title'], ENT_COMPAT | ENT_HTML401, 'UTF-8', false); $writer = $user->getDisplayName(); if ($request->get('writer', '') !== '') { $writer = $request->get('writer'); } if ($this->config->get('anonymity') === true) { $writer = $this->config->get('anonymityName'); } if ($request->get('categoryItemId', '') !== '') { } $showCategoryItem = null; if ($request->get('categoryItemId', '') !== '') { $showCategoryItem = CategoryItem::find($request->get('categoryItemId')); } /** @var \Xpressengine\Editor\AbstractEditor $editor */ $editor = XeEditor::get($this->instanceId); $format = $editor->htmlable() ? Board::FORMAT_HTML : Board::FORMAT_NONE; return XePresenter::make('preview', ['config' => $this->config, 'handler' => $this->handler, 'currentDate' => date('Y-m-d H:i:s'), 'title' => $title, 'content' => $content, 'writer' => $writer, 'format' => $format, 'showCategoryItem' => $showCategoryItem]); }
/** * update * * @param Request $request * @param BoardPermissionHandler $boardPermission * @param string $boardId board id * @return \Illuminate\Http\RedirectResponse */ public function update(Request $request, BoardPermissionHandler $boardPermission, $boardId) { if ($request->get('useCaptcha') === 'true') { $driver = config('captcha.driver'); $captcha = config("captcha.apis.{$driver}.siteKey"); if (!$captcha) { throw new ConfigurationNotExistsException(); } } $config = $this->configHandler->get($boardId); $permissionNames = []; $permissionNames['read'] = ['readMode', 'readRating', 'readUser', 'readExcept']; $permissionNames['list'] = ['listMode', 'listRating', 'listUser', 'listExcept']; $permissionNames['create'] = ['createMode', 'createRating', 'createUser', 'createExcept']; $permissionNames['manage'] = ['manageMode', 'manageRating', 'manageUser', 'manageExcept']; $inputs = $request->except(array_merge(['_token'], $permissionNames['read'], $permissionNames['list'], $permissionNames['create'], $permissionNames['manage'])); foreach ($inputs as $key => $value) { $config->set($key, $value); } foreach ($config->getPureAll() as $key => $value) { if ($config->getParent()->get($key) != null && isset($inputs[$key]) === false) { unset($config[$key]); } } XeDB::beginTransaction(); $config = $this->instanceManager->updateConfig($config->getPureAll()); $boardPermission->set($request, $boardId); XeDB::commit(); return redirect()->to($this->urlHandler->managerUrl('edit', ['boardId' => $boardId])); }