public function update(ItemUpdateRequest $request, $openItemId, Dispatcher $event)
{
$user = $this->userService->getCurrentUser();
$item = $this->itemService->getByOpenItemId($openItemId);
if ($item->updated_at != \Input::get('updated_at')) {
return \Redirect::back()->with("updated_at", "コンフリクトの可能性があるため更新できませんでした。")->withInput();
}
if ($item == null) {
\App::abort(404);
}
$user_id = $user->id;
if ($item->user_id !== $user->id) {
$user_id = $item->user_id;
}
$object = app('stdClass');
$object->user_id = $user_id;
$object->title = \Input::get('title');
$object->body = \Input::get('body');
$object->published = \Input::get('published');
$item = $this->itemService->update($item->id, $object);
$result = $this->itemService->createHistory($item, $user);
$tags = \Input::get('tags');
if (!empty($tags)) {
$tag_names = explode(",", $tags);
$tag_ids = $this->tagService->getTagIdsByTagNames($tag_names);
$item = $this->itemService->getById($item->id);
$this->tagService->syncTags($item, $tag_ids);
}
// fire EditEvent
// TODO: do not create instance in controller method
$event->fire(new EditEvent($openItemId, (int) $user->id));
return \Redirect::route('items.show', [$openItemId]);
}