/**
  * 게시판 생성
  *
  * @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;
 }
Example #2
0
 /**
  * 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]));
 }