/** * 전달된 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]; }
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([]); }
/** * @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([]); }
/** * 휴지통 이동 * * @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' => '벌렸습니다.']]); }
/** * 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'))); }