diff options
Diffstat (limited to 'app/Controller/ConfigController.php')
-rw-r--r-- | app/Controller/ConfigController.php | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/app/Controller/ConfigController.php b/app/Controller/ConfigController.php new file mode 100644 index 00000000..8bcf4c35 --- /dev/null +++ b/app/Controller/ConfigController.php @@ -0,0 +1,198 @@ +<?php + +namespace Kanboard\Controller; + +/** + * Config Controller + * + * @package Kanboard/Controller + * @author Frederic Guillot + */ +class ConfigController extends BaseController +{ + /** + * Display the about page + * + * @access public + */ + public function index() + { + $this->response->html($this->helper->layout->config('config/about', array( + 'db_size' => $this->configModel->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->configModel->save($values)) { + $this->languageModel->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->languageModel->getLanguages(), + 'timezones' => $this->timezoneModel->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->colorModel->getList(), + 'default_columns' => implode(', ', $this->boardModel->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->configModel->downloadDatabase()); + } + + /** + * Optimize the Sqlite database + * + * @access public + */ + public function optimizeDb() + { + $this->checkCSRFParam(); + $this->configModel->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->configModel->regenerateToken($type.'_token'); + + $this->flash->success(t('Token regenerated.')); + $this->response->redirect($this->helper->url->to('ConfigController', $type)); + } +} |