Example #1
0
 /**
  * 전달된 rule 에 다이나믹필드 의 rule 을 추가해서 반환
  *
  * @param ConfigEntity $config board config entity
  * @param array        $rules  rule
  * @return array
  */
 public function makeRule(ConfigEntity $config, array $rules = null)
 {
     if ($rules === null) {
         $rules = $this->basic();
     }
     // add dynamic field rule
     /** @var \Xpressengine\Config\ConfigEntity $dynamicFieldConfig */
     foreach ($this->configHandler->getDynamicFields($config) as $dynamicFieldConfig) {
         /** @var \Xpressengine\DynamicField\AbstractType $type */
         $rules = array_merge($rules, $this->dynamicField->getRules($dynamicFieldConfig));
     }
     return $rules;
 }
 /**
  * get articles
  *
  * @param Request                $request         request
  * @param BoardPermissionHandler $boardPermission board permission
  * @param null                   $id              document id
  * @return mixed
  */
 public function articles(Request $request, BoardPermissionHandler $boardPermission, $menuUrl, $id = null)
 {
     if (Gate::denies(BoardPermissionHandler::ACTION_LIST, new Instance($boardPermission->name($this->instanceId)))) {
         throw new AccessDeniedHttpException();
     }
     $query = $this->handler->getModel($this->config)->where('instanceId', $this->instanceId)->visible();
     if ($this->config->get('category') === true) {
         $query->leftJoin('board_category', sprintf('%s.%s', $query->getQuery()->from, 'id'), '=', sprintf('%s.%s', 'board_category', 'targetId'));
     }
     if ($request->has('favorite') === true) {
         $query->leftJoin('board_favorites', sprintf('%s.%s', $query->getQuery()->from, 'id'), '=', sprintf('%s.%s', 'board_favorites', 'targetId'));
         $query->where('board_favorites.userId', Auth::user()->getId());
     }
     $this->handler->makeWhere($query, $request, $this->config);
     $this->handler->makeOrder($query, $request, $this->config);
     // eager loading favorite list
     $query->with(['favorite' => function ($favoriteQuery) {
         $favoriteQuery->where('userId', Auth::user()->getId());
     }, 'slug', 'data']);
     Event::fire('xe.plugin.board.articles', [$query]);
     if ($id !== null) {
         $request->query->set('page', $this->handler->pageResolver($query, $this->config, $id));
     }
     $paginate = $query->paginate($this->config->get('perPage'))->appends($request->except('page'));
     $fieldTypes = (array) $this->configHandler->getDynamicFields($this->config);
     $categories = [];
     if ($this->config->get('category') === true) {
         $categoryItems = Category::find($this->config->get('categoryId'))->items;
         foreach ($categoryItems as $categoryItem) {
             $categories[] = ['value' => $categoryItem->id, 'text' => $categoryItem->word];
         }
     }
     return XePresenter::makeApi(['paginate' => $paginate, 'categories' => $categories, 'fieldTypes' => $fieldTypes]);
 }
 /**
  * 게시판 요약 정보 반환
  *
  * @param string  $instanceId instance id
  * @param Handler $handler    board handler
  * @return string
  */
 public function summary($instanceId, Handler $handler)
 {
     $documentCount = $handler->countByBoardId($instanceId);
     $configs = $this->configHandler->getDynamicFields($this->configHandler->get($instanceId));
     $dynamicFieldCount = count($configs);
     return ['documentCount' => $documentCount, 'dynamicFieldCount' => $dynamicFieldCount];
 }
 /**
  * 게시판 요약 정보 반환
  *
  * @param string  $instanceId instance id
  * @param Handler $handler    board handler
  * @return string
  */
 public function summary($instanceId, Handler $handler)
 {
     $documentCount = $this->document->getModel($instanceId)->where('instanceId', $instanceId)->count();
     $configs = $this->configHandler->getDynamicFields($this->configHandler->get($instanceId));
     $dynamicFieldCount = count($configs);
     return ['documentCount' => $documentCount, 'dynamicFieldCount' => $dynamicFieldCount];
 }
Example #5
0
 protected function createDefaultConfig()
 {
     // create default config
     /**
      * @var $configManager ConfigManager
      * @var $dynamicFieldHandler DynamicFieldHandler
      * @var $documentHandler DocumentHandler
      */
     $configManager = app('xe.config');
     $dynamicFieldHandler = app('xe.dynamicField');
     $documentHandler = app('xe.document');
     $configHandler = new ConfigHandler($configManager, $dynamicFieldHandler->getConfigHandler(), $documentHandler->getConfigHandler());
     $configHandler->getDefault();
     // create default permission
     $permission = new BoardPermissionHandler(app('xe.permission'));
     $permission->addGlobal();
     // create toggle menu
     XeToggleMenu::setActivates('module/board@board', null, ['module/board@board/toggleMenu/xpressengine@trashItem']);
 }
 /**
  * change instance id
  *
  * @return \Xpressengine\Presenter\RendererInterface
  */
 public function copy()
 {
     $documentIds = Input::get('id');
     $documentIds = is_array($documentIds) ? $documentIds : [$documentIds];
     $instanceId = Input::get('instanceId');
     foreach ($documentIds as $id) {
         XeDB::beginTransaction();
         $this->handler->copy($id, $this->configHandler->get($instanceId), (new Keygen())->generate());
         XeDB::commit();
     }
     return $this->presenter->makeApi([]);
 }
Example #7
0
 /**
  * @return void
  */
 public function install()
 {
     // create default config
     /**
      * @var $configManager ConfigManager
      * @var $dynamicFieldHandler DynamicFieldHandler
      * @var $documentHandler DocumentHandler
      */
     $configManager = app('xe.config');
     $dynamicFieldHandler = app('xe.dynamicField');
     $documentHandler = app('xe.document');
     $configHandler = new ConfigHandler($configManager, $dynamicFieldHandler->getConfigHandler(), $documentHandler->getConfigHandler());
     $configHandler->getDefault();
     // create default permission
     /**
      * @var $permission PermissionFactory
      * @var $group Assignor
      */
     $permission = app('xe.permission');
     $group = app('xe.member.groups');
     $action = new Action();
     $permission = new PermissionHandler($permission, $group, $action, $configHandler);
     $permission->setDefault($permission->getDefault());
     // create slug database table
     $m = new Migrations\BoardMigration();
     $m->install();
     // put board translation source
     /** @var Translator $trans */
     $trans = app('xe.translator');
     $trans->putFromLangDataSource('board', base_path('plugins/board/langs/lang.php'));
     // set config for counter
     /** @var Counter $counter */
     $counter = app('xe.counter');
     $counter->getConfigHandler()->set(ReadCounter::COUNTER_NAME, Counter::TYPE_SESSION);
     $counter->getConfigHandler()->set(VoteCounter::COUNTER_NAME, Counter::TYPE_ID);
 }
 /**
  * set current page
  *
  * @param Request       $request       request
  * @param Handler       $handler       handler
  * @param ConfigHandler $configHandler config handler
  * @param BoardSlug     $slug          slug model
  * @return void
  */
 protected function setCurrentPage(Request $request, Handler $handler, ConfigHandler $configHandler, BoardSlug $slug)
 {
     $instanceId = $slug->instanceId;
     // 이 slug 가 포함된 페이지 출력
     $config = $configHandler->get($instanceId);
     $query = $handler->getModel($config)->where('instanceId', $instanceId)->visible();
     $orderType = $request->get('orderType', '');
     if ($orderType === '' && $config->get('orderType') != null) {
         $orderType = $config->get('orderType', '');
     }
     if ($orderType == '') {
         $query->where('head', '>=', $slug->board->head);
     } elseif ($orderType == 'assentCount') {
         $query->where('assentCount', '>', $slug->board->assentCount)->orWhere(function ($query) use($slug) {
             $query->where('assentCount', '=', $slug->board->assentCount);
             $query->where('head', '>=', $slug->board->head);
         });
     } elseif ($orderType == 'recentlyCreated') {
         $query->where(Board::CREATED_AT, '>', $slug->board->{Board::CREATED_AT})->orWhere(function ($query) use($slug) {
             $query->where(Board::CREATED_AT, '=', $slug->board->{Board::CREATED_AT});
             $query->where('head', '>=', $slug->board->head);
         });
     } elseif ($orderType == 'recentlyUpdated') {
         $query->where(Board::UPDATED_AT, '>', $slug->board->{Board::UPDATED_AT})->orWhere(function ($query) use($slug) {
             $query->where(Board::UPDATED_AT, '=', $slug->board->{Board::UPDATED_AT});
             $query->where('head', '>=', $slug->board->head);
         });
     }
     Event::fire('xe.plugin.board.archive', [$query, $slug->board]);
     $count = $query->count() ?: 1;
     $page = (int) ($count / $config->get('perPage'));
     if ($count % $config->get('perPage') != 0) {
         ++$page;
     }
     $request->query->set('page', $page);
 }
 /**
  * move to copy
  *
  * @return \Illuminate\Http\RedirectResponse|Redirect
  */
 public function copy(Request $request)
 {
     $documentIds = $request->get('id');
     $documentIds = is_array($documentIds) ? $documentIds : [$documentIds];
     $instanceId = $request->get('instanceId');
     $config = $this->configHandler->get($instanceId);
     if ($config === null) {
         throw new NotFoundConfigHttpException(['instanceId' => $instanceId]);
     }
     $items = Board::find($documentIds);
     foreach ($items as $item) {
         $this->handler->setModelConfig($item, $this->configHandler->get($item->instanceId));
         $user = new Guest();
         if ($item->userId != '') {
             $user = User::find($item->userId);
         }
         $this->handler->copy($item, $user, $config);
     }
     Session::flash('alert', ['type' => 'success', 'message' => xe_trans('xe::processed')]);
     return $this->presenter->makeApi([]);
 }
Example #10
0
 /**
  * 휴지통 이동
  *
  * @return \Illuminate\Http\RedirectResponse|\Xpressengine\Presenter\RendererInterface
  */
 public function trash()
 {
     $id = Input::get('id');
     $author = Auth::user();
     $item = $this->handler->get($id, $this->boardId);
     // 관리자 또는 본인 글이 아니면 접근 할 수 없음
     if ($author->getRating() !== 'super' && $author->getId() != $item->id) {
         throw new NotFoundDocumentException();
     }
     $config = $this->configHandler->get($item->instanceId);
     $item = $this->handler->trash($item, $config);
     // post 로 처리하고.. 이전 페이지로.. 항상 ajax
     return Redirect::to($this->urlHandler->get('index'))->with(['alert' => ['type' => 'success', 'message' => '벌렸습니다.']]);
 }
Example #11
0
 /**
  * get revision document entity
  *
  * @param string $revisionId revision id
  * @return DocumentEntity
  */
 public function getRevision($revisionId)
 {
     return $this->document->getRevision($revisionId, $this->configHandler->getDynamicFields($this->config->get('boardId')));
 }