public function updateConfig(Request $request)
 {
     /** @var \Xpressengine\Config\ConfigManager $configManager */
     $configManager = app('xe.config');
     $configManager->put('openseminar', ['document_point' => $request->get('document_point'), 'comment_point' => $request->get('comment_point')]);
     return Redirect::to(route('manage.openseminar_1212.index'));
 }
 public function index(Request $request)
 {
     // filter input
     $field = [];
     $field['component'] = $request->get('component');
     $field['status'] = $request->get('status');
     $field['keyword'] = $request->get('query');
     if ($field['keyword'] === '') {
         $field['keyword'] = null;
     }
     $collection = Plugin::getAllPlugins(true);
     $plugins = $collection->fetch($field);
     $componentTypes = $this->getComponentTypes();
     return Presenter::make('index', ['plugins' => $plugins, 'componentTypes' => $componentTypes]);
 }
예제 #3
0
 public function createSetting(Request $request, ThemeHandler $themeHandler)
 {
     $instanceId = $request->get('theme');
     $title = $request->get('title');
     $theme = $themeHandler->getTheme($instanceId);
     $configs = $themeHandler->getThemeConfigList($theme->getId());
     $last = array_pop($configs);
     $lastId = $last->name;
     $prefix = $themeHandler->getConfigId($theme->getId());
     $id = str_replace([$prefix, $themeHandler->configDelimiter], '', $lastId);
     $id = (int) $id + 1;
     $newId = $instanceId . $themeHandler->configDelimiter . $id;
     $themeHandler->setThemeConfig($newId, '_configTitle', $title);
     return redirect()->route('settings.theme.config', ['theme' => $newId])->with('alert', ['type' => 'success', 'message' => '생성되었습니다.']);
 }
예제 #4
0
 public function handle(Request $request, Closure $next)
 {
     app('events')->listen('locale.changed', function ($locale) {
         app('xe.translator')->setLocale($locale);
     });
     // check locale at request & set locale
     $locale = $request->get('_l');
     if (!$locale) {
         $locale = $request->cookie('locale', app('xe.translator')->getLocale());
     }
     app()->setLocale($locale);
     app('cookie')->queue(cookie()->forever('locale', $locale));
     app('router')->matched(function ($route, $request) use($locale) {
         $key = self::class . '://' . $request->method() . '/' . $route->getPath() . '/' . $locale;
         app('xe.translator')->setCurrentCacheKey($key);
     });
     if ($request->has('xe_use_request_preprocessor') && $this->available()) {
         $this->prepare($request);
     }
     /** @var Response $response */
     $response = $next($request);
     if ($request->has('xe_use_request_preprocessor') && $this->available()) {
         $this->conduct($request);
     }
     return $response;
 }
 public function install(Request $request, PluginHandler $handler, PluginProvider $provider, ComposerFileWriter $writer, SessionManager $session)
 {
     $id = $request->get('pluginId');
     $handler->getAllPlugins(true);
     if ($handler->getPlugin($id) !== null) {
         throw new HttpException(422, 'Plugin already installed.');
     }
     // 자료실에서 플러그인 정보 조회
     $pluginData = $provider->find($id);
     if ($pluginData === null) {
         throw new HttpException(422, "Can not find the plugin(" . $id . ") that should be installed from the Market-place.");
     }
     $title = $pluginData->title;
     $name = $pluginData->name;
     $version = $pluginData->latest_release->version;
     $operation = $handler->getOperation($writer);
     if ($operation['status'] === ComposerFileWriter::STATUS_RUNNING) {
         throw new HttpException(422, "이미 진행중인 요청이 있습니다.");
     }
     $timeLimit = config('xe.plugin.operation.time_limit');
     $writer->reset()->cleanOperation();
     $writer->install($name, $version, Carbon::now()->addSeconds($timeLimit)->toDateTimeString())->write();
     $this->reserveOperation($writer, $timeLimit);
     $session->flash('alert', ['type' => 'success', 'message' => '새로운 플러그인을 설치중입니다.']);
     return XePresenter::makeApi(['type' => 'success', 'message' => '새로운 플러그인을 설치중입니다.']);
 }
 public function updateSetting(Request $request)
 {
     $themeHandler = app('xe.theme');
     $siteHandler = app('xe.site');
     $newConfig = $request->only(['site_title', 'favicon']);
     $config = app('xe.site')->getSiteConfig();
     // resolve site_title
     $config['site_title'] = $newConfig['site_title'];
     // resolve favicon
     $uploadedFavicon = array_get($newConfig, 'favicon');
     if ($uploadedFavicon !== null) {
         // remove old favicon file
         if (isset($config['favicon'])) {
             $oldLogoFileId = $config['favicon'];
             $oldLogoFile = Storage::get($oldLogoFileId);
             Storage::remove($oldLogoFile);
         }
         $favicon = Storage::upload($uploadedFavicon, 'filebox');
         $config['favicon'] = $favicon->id;
     }
     $siteHandler->putSiteConfig($config);
     // resolve index instance
     $indexInstance = $request->get('indexInstance');
     $siteHandler->setHomeInstanceId($indexInstance);
     // resolve theme
     $theme = $request->only(['theme_desktop', 'theme_mobile']);
     $theme = ['desktop' => $theme['theme_desktop'], 'mobile' => $theme['theme_mobile']];
     $themeHandler->setSiteTheme($theme);
     return \Redirect::back()->with('alert', ['type' => 'success', 'message' => '저장되었습니다.']);
 }
예제 #7
0
 public function updateSetting(SiteHandler $siteHandler, ThemeHandler $themeHandler, Request $request)
 {
     $newConfig = $request->only(['site_title', 'favicon']);
     $oldConfig = $siteHandler->getSiteConfig();
     /* resolve site_title */
     $oldConfig['site_title'] = $newConfig['site_title'];
     /* resolve favicon */
     $uploaded = array_get($newConfig, 'favicon');
     if ($uploaded !== null) {
         // remove old favicon file
         if ($oldId = $oldConfig->get('favicon.id')) {
             $oldId = $oldConfig->get('favicon.id');
             if ($oldId !== null) {
                 $oldFile = File::find($oldId);
                 if ($oldFile !== null) {
                     app('xe.storage')->remove($oldFile);
                 }
             }
         }
         $saved = app('xe.storage')->upload($uploaded, 'filebox');
         $favicon = ['id' => $saved->id, 'filename' => $saved->clientname];
         $media = app('xe.media');
         $mediaFile = null;
         if ($media->is($saved)) {
             $mediaFile = $media->make($saved);
             $favicon['path'] = $mediaFile->url();
         }
         $oldConfig['favicon'] = $favicon;
     }
     $siteHandler->putSiteConfig($oldConfig);
     // resolve index instance
     $indexInstance = $request->get('indexInstance');
     $siteHandler->setHomeInstanceId($indexInstance);
     return \Redirect::back()->with('alert', ['type' => 'success', 'message' => '저장되었습니다.']);
 }
 public function getEdit(Request $request)
 {
     $themeId = $request->get('theme');
     $fileName = $request->get('file');
     $type = $request->get('type', 'template');
     // TODO: validate themeid, fileName
     if ($themeId === null) {
         $e = new InvalidArgumentHttpException();
         $e->setMessage('잘못된 요청입니다.');
         throw $e;
     }
     $theme = \Theme::getTheme($themeId);
     /** @var ThemeEntity $theme */
     $files = $theme->getEditFiles();
     if ($fileName === null) {
         $fileName = key($files[$type]);
     }
     if (!is_writable($files[$type][$fileName])) {
         \View::share('_alert', ['type' => 'danger', 'message' => '파일을 수정할 권한이 없습니다. 웹서버의 계정이 편집할 파일의 쓰기(w)권한을 가지고 있어야 합니다.']);
     }
     $fileContent = file_get_contents($files[$type][$fileName]);
     $editFile = ['fileName' => $fileName, 'path' => $files[$type][$fileName], 'content' => $fileContent];
     return \Presenter::make('theme.edit', ['theme' => $theme, 'files' => $files, 'editFile' => $editFile, 'type' => $type]);
 }
 /**
  * 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);
 }
예제 #10
0
 /**
  * delete group
  *
  * @param Request $request
  *
  * @return \Illuminate\Http\RedirectResponse
  * @throws Exception
  */
 public function destroy(Request $request)
 {
     $groupIds = $request->get('id');
     $joinConfig = \app('xe.config')->get('user.join');
     $joinGroup = $joinConfig->get('joinGroup');
     $groups = $this->groups->query()->whereIn('id', $groupIds)->get();
     XeDB::beginTransaction();
     try {
         foreach ($groups as $group) {
             if ($joinGroup !== $group->id) {
                 $this->groups->delete($group);
             }
         }
     } catch (Exception $e) {
         XeDB::rollBack();
         throw $e;
     }
     XeDB::commit();
     return redirect()->back()->with('alert', ['type' => 'success', 'message' => '삭제되었습니다.']);
 }
예제 #11
0
 /**
  * get voted user list
  *
  * @param Request $request
  * @param $menuUrl
  * @param $option
  * @param $id
  * @return mixed
  */
 public function votedUserList(Request $request, $menuUrl, $option, $id)
 {
     $startId = $request->get('startId');
     $limit = $request->get('limit', 10);
     $item = $this->handler->getModel($this->config)->find($id);
     $this->handler->setModelConfig($item, $this->config);
     $counter = $this->handler->getVoteCounter();
     $logModel = $counter->newModel();
     $query = $logModel->where('counterName', $counter->getName())->where('targetId', $id)->where('counterOption', $option);
     if ($startId != null) {
         $query->where('id', '<', $startId);
     }
     $logs = $query->orderBy('id', 'desc')->take($limit)->get();
     $list = [];
     foreach ($logs as $log) {
         /** @var User $user */
         $user = $log->user;
         $profilePage = '#';
         if ($user->getId() != '') {
             $profilePage = route('member.profile', ['member' => $user->getId()]);
         }
         $list[] = ['id' => $user->getId(), 'displayName' => $user->getDisplayName(), 'profileImage' => $user->getProfileImage(), 'createdAt' => (string) $log->createdAt, 'profilePage' => $profilePage];
     }
     $nextStartId = 0;
     if (count($logs) == $limit) {
         $nextStartId = $logs->last()->id;
     }
     return XePresenter::makeApi(['item' => $item, 'list' => $list, 'nextStartId' => $nextStartId]);
 }
예제 #12
0
 /**
  * 인터셥센을 이용해 서드파티가 처리할 수 있도록 메소드 사용
  *
  * @param Builder      $query   board model query builder
  * @param Request      $request request
  * @param ConfigEntity $config  board config entity
  * @return Builder
  */
 public function makeOrder(Builder $query, Request $request, ConfigEntity $config)
 {
     $orderType = $request->get('orderType', '');
     if ($orderType === '' && $config->get('orderType') != null) {
         $orderType = $config->get('orderType', '');
     }
     if ($orderType == '') {
         $query->orderBy('head', 'desc');
     } elseif ($orderType == 'assentCount') {
         $query->orderBy('assentCount', 'desc')->orderBy('head', 'desc');
     } elseif ($orderType == 'recentlyCreated') {
         $query->orderBy(Board::CREATED_AT, 'desc')->orderBy('head', 'desc');
     } elseif ($orderType == 'recentlyUpdated') {
         $query->orderBy(Board::UPDATED_AT, 'desc')->orderBy('head', 'desc');
     }
     $query->getProxyManager()->orders($query->getQuery(), $request->all());
     return $query;
 }
 /**
  * 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([]);
 }
 /**
  * destroy
  *
  * @return \Xpressengine\Presenter\RendererInterface
  */
 public function destroy(Request $request)
 {
     /**
      * @var \Xpressengine\DynamicField\DynamicFieldHandler $dynamicField
      */
     $dynamicField = app('xe.dynamicField');
     /**
      * @var \Xpressengine\DynamicField\ConfigHandler $configHandler
      */
     $configHandler = $dynamicField->getConfigHandler();
     $config = $configHandler->get($request->get('group'), $request->get('id'));
     $dynamicField->setConnection(XeDB::connection($request->get('databaseName')));
     $dynamicField->drop($config);
     return XePresenter::makeApi(['id' => $request->get('id')]);
 }
예제 #15
0
 /**
  * 멘션 suggestion 리스트
  *
  * @param Request $request
  * @return mixed
  */
 public function mention(Request $request)
 {
     $suggestions = [];
     $string = $request->get('string');
     $users = User::where('displayName', 'like', $string . '%')->where('id', '<>', Auth::user()->getId())->get();
     foreach ($users as $user) {
         $suggestions[] = ['id' => $user->getId(), 'displayName' => $user->getDisplayName(), 'profileImage' => $user->profileImage];
     }
     return XePresenter::makeApi($suggestions);
 }
 public function children(Request $request, $id)
 {
     if ($request->get('id') === null) {
         $children = Category::find($id)->getProgenitors();
     } else {
         /** @var CategoryItem $item */
         if (!($item = CategoryItem::find($request->get('id')))) {
             throw new InvalidArgumentHttpException();
         }
         $children = $item->getChildren();
     }
     foreach ($children as $child) {
         $child->readableWord = xe_trans($child->word);
     }
     return XePresenter::makeApi($children->toArray());
 }
 public function storeCategory(Request $request, CategoryHandler $categoryHandler)
 {
     $input = ['name' => $request->get('categoryName')];
     $category = $categoryHandler->create($input);
     return XePresenter::makeApi($category->getAttributes());
 }