/** * 글 등록 post * * @return \Illuminate\Http\RedirectResponse */ public function store() { if ($this->permissionHandler->hasCreate($this->boardId) === false) { throw new AccessDeniedHttpException(); } /** @var \Xpressengine\Http\Request $request */ $request = app('request'); $user = Auth::user(); // get rules /** @var BoardValidator $validator */ $validator = app('xe.board.validator'); $rules = $validator->getCreateRule($user, $this->config); $this->validate($request, $rules); $inputs = $request->all(); // replace purifying content to origin content value $inputs['content'] = $request->originAll()['content']; // make document entity $doc = new DocumentEntity($this->handler->documentFilter($inputs)); $doc->id = (new Keygen())->generate(); $doc->instanceId = $this->boardId; // 공지 $doc->notice(false); if ($request->get('status') == 'notice' && $this->isManager) { $doc->notice(true); } // make board item entity $item = $this->handler->makeItem($doc, $request, $user); // 암호 설정 /** @var \Xpressengine\Plugins\Board\IdentifyManager $identifyManager */ $identifyManager = app('xe.board.identify'); if ($doc->certifyKey != null) { $doc->certifyKey = $identifyManager->hash($doc->certifyKey); } $item->setDocument($doc); XeDB::beginTransaction(); // document insert $this->handler->add($item, $this->config); // 태그 등록 /** @var \Xpressengine\Tag\TagHandler $tag */ $tag = app('xe.tag'); $hashTags = array_unique($request->get('_hashTags', [])); $tag->set($this->boardId, $doc->id, $hashTags); XeDB::commit(); // 답글인 경우 부모글이 있는 곳으로 이동한다.(최대한..) if (Input::get('parentId') != '') { return Redirect::to($this->urlHandler->get('index', $this->urlHandler->queryStringToArray(Input::get('queryString')))); } else { return Redirect::to($this->urlHandler->get('index')); } }
/** * create board item entity by document entity * * @param DocumentEntity $doc document entity * @param Request $request request * @param MemberEntityInterface $user user * @return ItemEntity */ public function makeItem(DocumentEntity $doc, Request $request = null, MemberEntityInterface $user = null) { if ($request !== null && $user !== null) { if ($request->get('notice') === '1') { $doc->notice(); } // 비회원 글쓰기 또는 익명 글쓰기 처리 if ($user instanceof Guest) { $doc->guest(); } elseif ($request->get('anonymity') == '1') { $doc->anonymity($this->config->get('anonymityName')); } else { $doc->setAuthor($user); } } $item = new ItemEntity(); $item->setDocument($doc); if ($request !== null) { // set files if (($fileIds = $request->get('_files')) !== null) { $item->setFiles($this->storage->getsIn($fileIds)); } } return $item; }