From ab48a09f0d674b703467975b376c5ac7352670ae Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sat, 28 May 2016 11:31:54 -0400 Subject: Rename controllers --- app/Controller/AvatarFile.php | 94 -------------- app/Controller/AvatarFileController.php | 94 ++++++++++++++ app/Controller/Captcha.php | 29 ----- app/Controller/CaptchaController.php | 29 +++++ app/Controller/Config.php | 198 ----------------------------- app/Controller/ConfigController.php | 198 +++++++++++++++++++++++++++++ app/Controller/Currency.php | 71 ----------- app/Controller/CurrencyController.php | 71 +++++++++++ app/Controller/Doc.php | 92 -------------- app/Controller/DocumentationController.php | 92 ++++++++++++++ app/Controller/Feed.php | 55 -------- app/Controller/FeedController.php | 55 ++++++++ app/Controller/ICalendarController.php | 101 +++++++++++++++ app/Controller/Ical.php | 101 --------------- app/Controller/Search.php | 67 ---------- app/Controller/SearchController.php | 67 ++++++++++ 16 files changed, 707 insertions(+), 707 deletions(-) delete mode 100644 app/Controller/AvatarFile.php create mode 100644 app/Controller/AvatarFileController.php delete mode 100644 app/Controller/Captcha.php create mode 100644 app/Controller/CaptchaController.php delete mode 100644 app/Controller/Config.php create mode 100644 app/Controller/ConfigController.php delete mode 100644 app/Controller/Currency.php create mode 100644 app/Controller/CurrencyController.php delete mode 100644 app/Controller/Doc.php create mode 100644 app/Controller/DocumentationController.php delete mode 100644 app/Controller/Feed.php create mode 100644 app/Controller/FeedController.php create mode 100644 app/Controller/ICalendarController.php delete mode 100644 app/Controller/Ical.php delete mode 100644 app/Controller/Search.php create mode 100644 app/Controller/SearchController.php (limited to 'app/Controller') diff --git a/app/Controller/AvatarFile.php b/app/Controller/AvatarFile.php deleted file mode 100644 index 1891a2fc..00000000 --- a/app/Controller/AvatarFile.php +++ /dev/null @@ -1,94 +0,0 @@ -getUser(); - - $this->response->html($this->helper->layout->user('avatar_file/show', array( - 'user' => $user, - ))); - } - - /** - * Upload Avatar - */ - public function upload() - { - $user = $this->getUser(); - - if (! $this->avatarFile->uploadImageFile($user['id'], $this->request->getFileInfo('avatar'))) { - $this->flash->failure(t('Unable to upload the file.')); - } - - $this->response->redirect($this->helper->url->to('AvatarFile', 'show', array('user_id' => $user['id']))); - } - - /** - * Remove Avatar image - */ - public function remove() - { - $this->checkCSRFParam(); - $user = $this->getUser(); - $this->avatarFile->remove($user['id']); - $this->userSession->refresh($user['id']); - $this->response->redirect($this->helper->url->to('AvatarFile', 'show', array('user_id' => $user['id']))); - } - - /** - * Show Avatar image (public) - */ - public function image() - { - $user_id = $this->request->getIntegerParam('user_id'); - $size = $this->request->getStringParam('size', 48); - $filename = $this->avatarFile->getFilename($user_id); - $etag = md5($filename.$size); - - $this->response->withCache(365 * 86400, $etag); - $this->response->withContentType('image/jpeg'); - - if ($this->request->getHeader('If-None-Match') !== '"'.$etag.'"') { - $this->response->send(); - $this->render($filename, $size); - } else { - $this->response->status(304); - } - } - - /** - * Render thumbnail from object storage - * - * @access private - * @param string $filename - * @param integer $size - */ - private function render($filename, $size) - { - try { - $blob = $this->objectStorage->get($filename); - - Thumbnail::createFromString($blob) - ->resize($size, $size) - ->toOutput(); - } catch (ObjectStorageException $e) { - $this->logger->error($e->getMessage()); - } - } -} diff --git a/app/Controller/AvatarFileController.php b/app/Controller/AvatarFileController.php new file mode 100644 index 00000000..0e2ed1bb --- /dev/null +++ b/app/Controller/AvatarFileController.php @@ -0,0 +1,94 @@ +getUser(); + + $this->response->html($this->helper->layout->user('avatar_file/show', array( + 'user' => $user, + ))); + } + + /** + * Upload Avatar + */ + public function upload() + { + $user = $this->getUser(); + + if (! $this->avatarFile->uploadImageFile($user['id'], $this->request->getFileInfo('avatar'))) { + $this->flash->failure(t('Unable to upload the file.')); + } + + $this->response->redirect($this->helper->url->to('AvatarFileController', 'show', array('user_id' => $user['id']))); + } + + /** + * Remove Avatar image + */ + public function remove() + { + $this->checkCSRFParam(); + $user = $this->getUser(); + $this->avatarFile->remove($user['id']); + $this->userSession->refresh($user['id']); + $this->response->redirect($this->helper->url->to('AvatarFileController', 'show', array('user_id' => $user['id']))); + } + + /** + * Show Avatar image (public) + */ + public function image() + { + $user_id = $this->request->getIntegerParam('user_id'); + $size = $this->request->getStringParam('size', 48); + $filename = $this->avatarFile->getFilename($user_id); + $etag = md5($filename.$size); + + $this->response->withCache(365 * 86400, $etag); + $this->response->withContentType('image/jpeg'); + + if ($this->request->getHeader('If-None-Match') !== '"'.$etag.'"') { + $this->response->send(); + $this->render($filename, $size); + } else { + $this->response->status(304); + } + } + + /** + * Render thumbnail from object storage + * + * @access private + * @param string $filename + * @param integer $size + */ + private function render($filename, $size) + { + try { + $blob = $this->objectStorage->get($filename); + + Thumbnail::createFromString($blob) + ->resize($size, $size) + ->toOutput(); + } catch (ObjectStorageException $e) { + $this->logger->error($e->getMessage()); + } + } +} diff --git a/app/Controller/Captcha.php b/app/Controller/Captcha.php deleted file mode 100644 index f6c717b3..00000000 --- a/app/Controller/Captcha.php +++ /dev/null @@ -1,29 +0,0 @@ -response->withContentType('image/jpeg')->send(); - - $builder = new CaptchaBuilder; - $builder->build(); - $this->sessionStorage->captcha = $builder->getPhrase(); - $builder->output(); - } -} diff --git a/app/Controller/CaptchaController.php b/app/Controller/CaptchaController.php new file mode 100644 index 00000000..43b2f823 --- /dev/null +++ b/app/Controller/CaptchaController.php @@ -0,0 +1,29 @@ +response->withContentType('image/jpeg')->send(); + + $builder = new CaptchaBuilder; + $builder->build(); + $this->sessionStorage->captcha = $builder->getPhrase(); + $builder->output(); + } +} diff --git a/app/Controller/Config.php b/app/Controller/Config.php deleted file mode 100644 index abf6565c..00000000 --- a/app/Controller/Config.php +++ /dev/null @@ -1,198 +0,0 @@ -response->html($this->helper->layout->config('config/about', array( - 'db_size' => $this->config->getDatabaseSize(), - 'db_version' => $this->db->getDriver()->getDatabaseVersion(), - 'user_agent' => $this->request->getServerVariable('HTTP_USER_AGENT'), - 'title' => t('Settings').' > '.t('About'), - ))); - } - - /** - * Save settings - * - */ - public function save() - { - $values = $this->request->getValues(); - $redirect = $this->request->getStringParam('redirect', 'application'); - - switch ($redirect) { - case 'application': - $values += array('password_reset' => 0); - break; - case 'project': - $values += array( - 'subtask_restriction' => 0, - 'subtask_time_tracking' => 0, - 'cfd_include_closed_tasks' => 0, - 'disable_private_project' => 0, - ); - break; - case 'integrations': - $values += array('integration_gravatar' => 0); - break; - case 'calendar': - $values += array('calendar_user_subtasks_time_tracking' => 0); - break; - } - - if ($this->config->save($values)) { - $this->language->loadCurrentLanguage(); - $this->flash->success(t('Settings saved successfully.')); - } else { - $this->flash->failure(t('Unable to save your settings.')); - } - - $this->response->redirect($this->helper->url->to('config', $redirect)); - } - - /** - * Display the application settings page - * - * @access public - */ - public function application() - { - $this->response->html($this->helper->layout->config('config/application', array( - 'languages' => $this->language->getLanguages(), - 'timezones' => $this->timezone->getTimezones(), - 'date_formats' => $this->dateParser->getAvailableFormats($this->dateParser->getDateFormats()), - 'datetime_formats' => $this->dateParser->getAvailableFormats($this->dateParser->getDateTimeFormats()), - 'time_formats' => $this->dateParser->getAvailableFormats($this->dateParser->getTimeFormats()), - 'title' => t('Settings').' > '.t('Application settings'), - ))); - } - - /** - * Display the project settings page - * - * @access public - */ - public function project() - { - $this->response->html($this->helper->layout->config('config/project', array( - 'colors' => $this->color->getList(), - 'default_columns' => implode(', ', $this->board->getDefaultColumns()), - 'title' => t('Settings').' > '.t('Project settings'), - ))); - } - - /** - * Display the board settings page - * - * @access public - */ - public function board() - { - $this->response->html($this->helper->layout->config('config/board', array( - 'title' => t('Settings').' > '.t('Board settings'), - ))); - } - - /** - * Display the calendar settings page - * - * @access public - */ - public function calendar() - { - $this->response->html($this->helper->layout->config('config/calendar', array( - 'title' => t('Settings').' > '.t('Calendar settings'), - ))); - } - - /** - * Display the integration settings page - * - * @access public - */ - public function integrations() - { - $this->response->html($this->helper->layout->config('config/integrations', array( - 'title' => t('Settings').' > '.t('Integrations'), - ))); - } - - /** - * Display the webhook settings page - * - * @access public - */ - public function webhook() - { - $this->response->html($this->helper->layout->config('config/webhook', array( - 'title' => t('Settings').' > '.t('Webhook settings'), - ))); - } - - /** - * Display the api settings page - * - * @access public - */ - public function api() - { - $this->response->html($this->helper->layout->config('config/api', array( - 'title' => t('Settings').' > '.t('API'), - ))); - } - - /** - * Download the Sqlite database - * - * @access public - */ - public function downloadDb() - { - $this->checkCSRFParam(); - $this->response->withFileDownload('db.sqlite.gz'); - $this->response->binary($this->config->downloadDatabase()); - } - - /** - * Optimize the Sqlite database - * - * @access public - */ - public function optimizeDb() - { - $this->checkCSRFParam(); - $this->config->optimizeDatabase(); - $this->flash->success(t('Database optimization done.')); - $this->response->redirect($this->helper->url->to('config', 'index')); - } - - /** - * Regenerate webhook token - * - * @access public - */ - public function token() - { - $type = $this->request->getStringParam('type'); - - $this->checkCSRFParam(); - $this->config->regenerateToken($type.'_token'); - - $this->flash->success(t('Token regenerated.')); - $this->response->redirect($this->helper->url->to('config', $type)); - } -} diff --git a/app/Controller/ConfigController.php b/app/Controller/ConfigController.php new file mode 100644 index 00000000..a5af0246 --- /dev/null +++ b/app/Controller/ConfigController.php @@ -0,0 +1,198 @@ +response->html($this->helper->layout->config('config/about', array( + 'db_size' => $this->config->getDatabaseSize(), + 'db_version' => $this->db->getDriver()->getDatabaseVersion(), + 'user_agent' => $this->request->getServerVariable('HTTP_USER_AGENT'), + 'title' => t('Settings').' > '.t('About'), + ))); + } + + /** + * Save settings + * + */ + public function save() + { + $values = $this->request->getValues(); + $redirect = $this->request->getStringParam('redirect', 'application'); + + switch ($redirect) { + case 'application': + $values += array('password_reset' => 0); + break; + case 'project': + $values += array( + 'subtask_restriction' => 0, + 'subtask_time_tracking' => 0, + 'cfd_include_closed_tasks' => 0, + 'disable_private_project' => 0, + ); + break; + case 'integrations': + $values += array('integration_gravatar' => 0); + break; + case 'calendar': + $values += array('calendar_user_subtasks_time_tracking' => 0); + break; + } + + if ($this->config->save($values)) { + $this->language->loadCurrentLanguage(); + $this->flash->success(t('Settings saved successfully.')); + } else { + $this->flash->failure(t('Unable to save your settings.')); + } + + $this->response->redirect($this->helper->url->to('ConfigController', $redirect)); + } + + /** + * Display the application settings page + * + * @access public + */ + public function application() + { + $this->response->html($this->helper->layout->config('config/application', array( + 'languages' => $this->language->getLanguages(), + 'timezones' => $this->timezone->getTimezones(), + 'date_formats' => $this->dateParser->getAvailableFormats($this->dateParser->getDateFormats()), + 'datetime_formats' => $this->dateParser->getAvailableFormats($this->dateParser->getDateTimeFormats()), + 'time_formats' => $this->dateParser->getAvailableFormats($this->dateParser->getTimeFormats()), + 'title' => t('Settings').' > '.t('Application settings'), + ))); + } + + /** + * Display the project settings page + * + * @access public + */ + public function project() + { + $this->response->html($this->helper->layout->config('config/project', array( + 'colors' => $this->color->getList(), + 'default_columns' => implode(', ', $this->board->getDefaultColumns()), + 'title' => t('Settings').' > '.t('Project settings'), + ))); + } + + /** + * Display the board settings page + * + * @access public + */ + public function board() + { + $this->response->html($this->helper->layout->config('config/board', array( + 'title' => t('Settings').' > '.t('Board settings'), + ))); + } + + /** + * Display the calendar settings page + * + * @access public + */ + public function calendar() + { + $this->response->html($this->helper->layout->config('config/calendar', array( + 'title' => t('Settings').' > '.t('Calendar settings'), + ))); + } + + /** + * Display the integration settings page + * + * @access public + */ + public function integrations() + { + $this->response->html($this->helper->layout->config('config/integrations', array( + 'title' => t('Settings').' > '.t('Integrations'), + ))); + } + + /** + * Display the webhook settings page + * + * @access public + */ + public function webhook() + { + $this->response->html($this->helper->layout->config('config/webhook', array( + 'title' => t('Settings').' > '.t('Webhook settings'), + ))); + } + + /** + * Display the api settings page + * + * @access public + */ + public function api() + { + $this->response->html($this->helper->layout->config('config/api', array( + 'title' => t('Settings').' > '.t('API'), + ))); + } + + /** + * Download the Sqlite database + * + * @access public + */ + public function downloadDb() + { + $this->checkCSRFParam(); + $this->response->withFileDownload('db.sqlite.gz'); + $this->response->binary($this->config->downloadDatabase()); + } + + /** + * Optimize the Sqlite database + * + * @access public + */ + public function optimizeDb() + { + $this->checkCSRFParam(); + $this->config->optimizeDatabase(); + $this->flash->success(t('Database optimization done.')); + $this->response->redirect($this->helper->url->to('ConfigController', 'index')); + } + + /** + * Regenerate webhook token + * + * @access public + */ + public function token() + { + $type = $this->request->getStringParam('type'); + + $this->checkCSRFParam(); + $this->config->regenerateToken($type.'_token'); + + $this->flash->success(t('Token regenerated.')); + $this->response->redirect($this->helper->url->to('ConfigController', $type)); + } +} diff --git a/app/Controller/Currency.php b/app/Controller/Currency.php deleted file mode 100644 index 872d6929..00000000 --- a/app/Controller/Currency.php +++ /dev/null @@ -1,71 +0,0 @@ -response->html($this->helper->layout->config('currency/index', array( - 'config_values' => array('application_currency' => $this->config->get('application_currency')), - 'values' => $values, - 'errors' => $errors, - 'rates' => $this->currency->getAll(), - 'currencies' => $this->currency->getCurrencies(), - 'title' => t('Settings').' > '.t('Currency rates'), - ))); - } - - /** - * Validate and save a new currency rate - * - * @access public - */ - public function create() - { - $values = $this->request->getValues(); - list($valid, $errors) = $this->currencyValidator->validateCreation($values); - - if ($valid) { - if ($this->currency->create($values['currency'], $values['rate'])) { - $this->flash->success(t('The currency rate have been added successfully.')); - return $this->response->redirect($this->helper->url->to('currency', 'index')); - } else { - $this->flash->failure(t('Unable to add this currency rate.')); - } - } - - return $this->index($values, $errors); - } - - /** - * Save reference currency - * - * @access public - */ - public function reference() - { - $values = $this->request->getValues(); - - if ($this->config->save($values)) { - $this->flash->success(t('Settings saved successfully.')); - } else { - $this->flash->failure(t('Unable to save your settings.')); - } - - $this->response->redirect($this->helper->url->to('currency', 'index')); - } -} diff --git a/app/Controller/CurrencyController.php b/app/Controller/CurrencyController.php new file mode 100644 index 00000000..5a0fac37 --- /dev/null +++ b/app/Controller/CurrencyController.php @@ -0,0 +1,71 @@ +response->html($this->helper->layout->config('currency/index', array( + 'config_values' => array('application_currency' => $this->config->get('application_currency')), + 'values' => $values, + 'errors' => $errors, + 'rates' => $this->currency->getAll(), + 'currencies' => $this->currency->getCurrencies(), + 'title' => t('Settings').' > '.t('Currency rates'), + ))); + } + + /** + * Validate and save a new currency rate + * + * @access public + */ + public function create() + { + $values = $this->request->getValues(); + list($valid, $errors) = $this->currencyValidator->validateCreation($values); + + if ($valid) { + if ($this->currency->create($values['currency'], $values['rate'])) { + $this->flash->success(t('The currency rate have been added successfully.')); + return $this->response->redirect($this->helper->url->to('CurrencyController', 'index')); + } else { + $this->flash->failure(t('Unable to add this currency rate.')); + } + } + + return $this->index($values, $errors); + } + + /** + * Save reference currency + * + * @access public + */ + public function reference() + { + $values = $this->request->getValues(); + + if ($this->config->save($values)) { + $this->flash->success(t('Settings saved successfully.')); + } else { + $this->flash->failure(t('Unable to save your settings.')); + } + + $this->response->redirect($this->helper->url->to('CurrencyController', 'index')); + } +} diff --git a/app/Controller/Doc.php b/app/Controller/Doc.php deleted file mode 100644 index 5caf5f5f..00000000 --- a/app/Controller/Doc.php +++ /dev/null @@ -1,92 +0,0 @@ -request->getStringParam('file', 'index'); - - if (!preg_match('/^[a-z0-9\-]+/', $page)) { - $page = 'index'; - } - - if ($this->language->getCurrentLanguage() === 'fr_FR') { - $filename = __DIR__.'/../../doc/fr/' . $page . '.markdown'; - } else { - $filename = __DIR__ . '/../../doc/' . $page . '.markdown'; - } - - if (!file_exists($filename)) { - $filename = __DIR__.'/../../doc/index.markdown'; - } - - $this->response->html($this->helper->layout->app('doc/show', $this->render($filename))); - } - - /** - * Display keyboard shortcut - */ - public function shortcuts() - { - $this->response->html($this->template->render('config/keyboard_shortcuts')); - } - - /** - * Prepare Markdown file - * - * @access private - * @param string $filename - * @return array - */ - private function render($filename) - { - $data = file_get_contents($filename); - $content = preg_replace_callback('/\((.*.markdown)\)/', array($this, 'replaceMarkdownUrl'), $data); - $content = preg_replace_callback('/\((screenshots.*\.png)\)/', array($this, 'replaceImageUrl'), $content); - - list($title, ) = explode("\n", $data, 2); - - return array( - 'content' => Parsedown::instance()->text($content), - 'title' => $title !== 'Documentation' ? t('Documentation: %s', $title) : $title, - ); - } - - /** - * Regex callback to replace Markdown links - * - * @access public - * @param array $matches - * @return string - */ - public function replaceMarkdownUrl(array $matches) - { - return '('.$this->helper->url->to('doc', 'show', array('file' => str_replace('.markdown', '', $matches[1]))).')'; - } - - /** - * Regex callback to replace image links - * - * @access public - * @param array $matches - * @return string - */ - public function replaceImageUrl(array $matches) - { - if ($this->language->getCurrentLanguage() === 'fr_FR') { - return '('.$this->helper->url->base().'doc/fr/'.$matches[1].')'; - } - - return '('.$this->helper->url->base().'doc/'.$matches[1].')'; - } -} diff --git a/app/Controller/DocumentationController.php b/app/Controller/DocumentationController.php new file mode 100644 index 00000000..379e3dab --- /dev/null +++ b/app/Controller/DocumentationController.php @@ -0,0 +1,92 @@ +request->getStringParam('file', 'index'); + + if (!preg_match('/^[a-z0-9\-]+/', $page)) { + $page = 'index'; + } + + if ($this->language->getCurrentLanguage() === 'fr_FR') { + $filename = __DIR__.'/../../doc/fr/' . $page . '.markdown'; + } else { + $filename = __DIR__ . '/../../doc/' . $page . '.markdown'; + } + + if (!file_exists($filename)) { + $filename = __DIR__.'/../../doc/index.markdown'; + } + + $this->response->html($this->helper->layout->app('doc/show', $this->render($filename))); + } + + /** + * Display keyboard shortcut + */ + public function shortcuts() + { + $this->response->html($this->template->render('config/keyboard_shortcuts')); + } + + /** + * Prepare Markdown file + * + * @access private + * @param string $filename + * @return array + */ + private function render($filename) + { + $data = file_get_contents($filename); + $content = preg_replace_callback('/\((.*.markdown)\)/', array($this, 'replaceMarkdownUrl'), $data); + $content = preg_replace_callback('/\((screenshots.*\.png)\)/', array($this, 'replaceImageUrl'), $content); + + list($title, ) = explode("\n", $data, 2); + + return array( + 'content' => Parsedown::instance()->text($content), + 'title' => $title !== 'Documentation' ? t('Documentation: %s', $title) : $title, + ); + } + + /** + * Regex callback to replace Markdown links + * + * @access public + * @param array $matches + * @return string + */ + public function replaceMarkdownUrl(array $matches) + { + return '('.$this->helper->url->to('DocumentationController', 'show', array('file' => str_replace('.markdown', '', $matches[1]))).')'; + } + + /** + * Regex callback to replace image links + * + * @access public + * @param array $matches + * @return string + */ + public function replaceImageUrl(array $matches) + { + if ($this->language->getCurrentLanguage() === 'fr_FR') { + return '('.$this->helper->url->base().'doc/fr/'.$matches[1].')'; + } + + return '('.$this->helper->url->base().'doc/'.$matches[1].')'; + } +} diff --git a/app/Controller/Feed.php b/app/Controller/Feed.php deleted file mode 100644 index 7554a499..00000000 --- a/app/Controller/Feed.php +++ /dev/null @@ -1,55 +0,0 @@ -request->getStringParam('token'); - $user = $this->user->getByToken($token); - - // Token verification - if (empty($user)) { - throw AccessForbiddenException::getInstance()->withoutLayout(); - } - - $this->response->xml($this->template->render('feed/user', array( - 'events' => $this->helper->projectActivity->getProjectsEvents($this->projectPermission->getActiveProjectIds($user['id'])), - 'user' => $user, - ))); - } - - /** - * RSS feed for a project - * - * @access public - */ - public function project() - { - $token = $this->request->getStringParam('token'); - $project = $this->project->getByToken($token); - - if (empty($project)) { - throw AccessForbiddenException::getInstance()->withoutLayout(); - } - - $this->response->xml($this->template->render('feed/project', array( - 'events' => $this->helper->projectActivity->getProjectEvents($project['id']), - 'project' => $project, - ))); - } -} diff --git a/app/Controller/FeedController.php b/app/Controller/FeedController.php new file mode 100644 index 00000000..e453ecb9 --- /dev/null +++ b/app/Controller/FeedController.php @@ -0,0 +1,55 @@ +request->getStringParam('token'); + $user = $this->user->getByToken($token); + + // Token verification + if (empty($user)) { + throw AccessForbiddenException::getInstance()->withoutLayout(); + } + + $this->response->xml($this->template->render('feed/user', array( + 'events' => $this->helper->projectActivity->getProjectsEvents($this->projectPermission->getActiveProjectIds($user['id'])), + 'user' => $user, + ))); + } + + /** + * RSS feed for a project + * + * @access public + */ + public function project() + { + $token = $this->request->getStringParam('token'); + $project = $this->project->getByToken($token); + + if (empty($project)) { + throw AccessForbiddenException::getInstance()->withoutLayout(); + } + + $this->response->xml($this->template->render('feed/project', array( + 'events' => $this->helper->projectActivity->getProjectEvents($project['id']), + 'project' => $project, + ))); + } +} diff --git a/app/Controller/ICalendarController.php b/app/Controller/ICalendarController.php new file mode 100644 index 00000000..78ea4d67 --- /dev/null +++ b/app/Controller/ICalendarController.php @@ -0,0 +1,101 @@ +request->getStringParam('token'); + $user = $this->user->getByToken($token); + + // Token verification + if (empty($user)) { + throw AccessForbiddenException::getInstance()->withoutLayout(); + } + + // Common filter + $queryBuilder = new QueryBuilder(); + $queryBuilder + ->withQuery($this->taskFinder->getICalQuery()) + ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) + ->withFilter(new TaskAssigneeFilter($user['id'])); + + // Calendar properties + $calendar = new iCalendar('Kanboard'); + $calendar->setName($user['name'] ?: $user['username']); + $calendar->setDescription($user['name'] ?: $user['username']); + $calendar->setPublishedTTL('PT1H'); + + $this->renderCalendar($queryBuilder, $calendar); + } + + /** + * Get project iCalendar + * + * @access public + */ + public function project() + { + $token = $this->request->getStringParam('token'); + $project = $this->project->getByToken($token); + + // Token verification + if (empty($project)) { + throw AccessForbiddenException::getInstance()->withoutLayout(); + } + + // Common filter + $queryBuilder = new QueryBuilder(); + $queryBuilder + ->withQuery($this->taskFinder->getICalQuery()) + ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) + ->withFilter(new TaskProjectFilter($project['id'])); + + // Calendar properties + $calendar = new iCalendar('Kanboard'); + $calendar->setName($project['name']); + $calendar->setDescription($project['name']); + $calendar->setPublishedTTL('PT1H'); + + $this->renderCalendar($queryBuilder, $calendar); + } + + /** + * Common method to render iCal events + * + * @access private + * @param QueryBuilder $queryBuilder + * @param iCalendar $calendar + */ + private function renderCalendar(QueryBuilder $queryBuilder, iCalendar $calendar) + { + $start = $this->request->getStringParam('start', strtotime('-2 month')); + $end = $this->request->getStringParam('end', strtotime('+6 months')); + + $this->helper->ical->addTaskDateDueEvents($queryBuilder, $calendar, $start, $end); + + $formatter = new TaskICalFormatter($this->container); + $this->response->ical($formatter->setCalendar($calendar)->format()); + } +} diff --git a/app/Controller/Ical.php b/app/Controller/Ical.php deleted file mode 100644 index 091ea5f4..00000000 --- a/app/Controller/Ical.php +++ /dev/null @@ -1,101 +0,0 @@ -request->getStringParam('token'); - $user = $this->user->getByToken($token); - - // Token verification - if (empty($user)) { - throw AccessForbiddenException::getInstance()->withoutLayout(); - } - - // Common filter - $queryBuilder = new QueryBuilder(); - $queryBuilder - ->withQuery($this->taskFinder->getICalQuery()) - ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) - ->withFilter(new TaskAssigneeFilter($user['id'])); - - // Calendar properties - $calendar = new iCalendar('Kanboard'); - $calendar->setName($user['name'] ?: $user['username']); - $calendar->setDescription($user['name'] ?: $user['username']); - $calendar->setPublishedTTL('PT1H'); - - $this->renderCalendar($queryBuilder, $calendar); - } - - /** - * Get project iCalendar - * - * @access public - */ - public function project() - { - $token = $this->request->getStringParam('token'); - $project = $this->project->getByToken($token); - - // Token verification - if (empty($project)) { - throw AccessForbiddenException::getInstance()->withoutLayout(); - } - - // Common filter - $queryBuilder = new QueryBuilder(); - $queryBuilder - ->withQuery($this->taskFinder->getICalQuery()) - ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)) - ->withFilter(new TaskProjectFilter($project['id'])); - - // Calendar properties - $calendar = new iCalendar('Kanboard'); - $calendar->setName($project['name']); - $calendar->setDescription($project['name']); - $calendar->setPublishedTTL('PT1H'); - - $this->renderCalendar($queryBuilder, $calendar); - } - - /** - * Common method to render iCal events - * - * @access private - * @param QueryBuilder $queryBuilder - * @param iCalendar $calendar - */ - private function renderCalendar(QueryBuilder $queryBuilder, iCalendar $calendar) - { - $start = $this->request->getStringParam('start', strtotime('-2 month')); - $end = $this->request->getStringParam('end', strtotime('+6 months')); - - $this->helper->ical->addTaskDateDueEvents($queryBuilder, $calendar, $start, $end); - - $formatter = new TaskICalFormatter($this->container); - $this->response->ical($formatter->setCalendar($calendar)->format()); - } -} diff --git a/app/Controller/Search.php b/app/Controller/Search.php deleted file mode 100644 index a092cba6..00000000 --- a/app/Controller/Search.php +++ /dev/null @@ -1,67 +0,0 @@ -projectUserRole->getProjectsByUser($this->userSession->getId()); - $search = urldecode($this->request->getStringParam('search')); - $nb_tasks = 0; - - $paginator = $this->paginator - ->setUrl('search', 'index', array('search' => $search)) - ->setMax(30) - ->setOrder('tasks.id') - ->setDirection('DESC'); - - if ($search !== '' && ! empty($projects)) { - $paginator - ->setQuery($this->taskLexer - ->build($search) - ->withFilter(new TaskProjectsFilter(array_keys($projects))) - ->getQuery() - ) - ->calculate(); - - $nb_tasks = $paginator->getTotal(); - } - - $this->response->html($this->helper->layout->app('search/index', array( - 'values' => array( - 'search' => $search, - 'controller' => 'search', - 'action' => 'index', - ), - 'paginator' => $paginator, - 'title' => t('Search tasks').($nb_tasks > 0 ? ' ('.$nb_tasks.')' : '') - ))); - } - - public function activity() - { - $search = urldecode($this->request->getStringParam('search')); - $events = $this->helper->projectActivity->searchEvents($search); - $nb_events = count($events); - - $this->response->html($this->helper->layout->app('search/activity', array( - 'values' => array( - 'search' => $search, - 'controller' => 'search', - 'action' => 'activity', - ), - 'title' => t('Search in activity stream').($nb_events > 0 ? ' ('.$nb_events.')' : ''), - 'nb_events' => $nb_events, - 'events' => $events, - ))); - } -} diff --git a/app/Controller/SearchController.php b/app/Controller/SearchController.php new file mode 100644 index 00000000..88718cf7 --- /dev/null +++ b/app/Controller/SearchController.php @@ -0,0 +1,67 @@ +projectUserRole->getProjectsByUser($this->userSession->getId()); + $search = urldecode($this->request->getStringParam('search')); + $nb_tasks = 0; + + $paginator = $this->paginator + ->setUrl('SearchController', 'index', array('search' => $search)) + ->setMax(30) + ->setOrder('tasks.id') + ->setDirection('DESC'); + + if ($search !== '' && ! empty($projects)) { + $paginator + ->setQuery($this->taskLexer + ->build($search) + ->withFilter(new TaskProjectsFilter(array_keys($projects))) + ->getQuery() + ) + ->calculate(); + + $nb_tasks = $paginator->getTotal(); + } + + $this->response->html($this->helper->layout->app('search/index', array( + 'values' => array( + 'search' => $search, + 'controller' => 'SearchController', + 'action' => 'index', + ), + 'paginator' => $paginator, + 'title' => t('Search tasks').($nb_tasks > 0 ? ' ('.$nb_tasks.')' : '') + ))); + } + + public function activity() + { + $search = urldecode($this->request->getStringParam('search')); + $events = $this->helper->projectActivity->searchEvents($search); + $nb_events = count($events); + + $this->response->html($this->helper->layout->app('search/activity', array( + 'values' => array( + 'search' => $search, + 'controller' => 'SearchController', + 'action' => 'activity', + ), + 'title' => t('Search in activity stream').($nb_events > 0 ? ' ('.$nb_events.')' : ''), + 'nb_events' => $nb_events, + 'events' => $events, + ))); + } +} -- cgit v1.2.3