summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Controller/Config.php1
-rw-r--r--app/Controller/Project.php2
-rw-r--r--app/Controller/Task.php10
-rw-r--r--app/Locales/de_DE/translations.php4
-rw-r--r--app/Locales/es_ES/translations.php4
-rw-r--r--app/Locales/fi_FI/translations.php4
-rw-r--r--app/Locales/fr_FR/translations.php6
-rw-r--r--app/Locales/it_IT/translations.php4
-rw-r--r--app/Locales/pl_PL/translations.php4
-rw-r--r--app/Locales/pt_BR/translations.php4
-rw-r--r--app/Locales/ru_RU/translations.php4
-rw-r--r--app/Locales/sv_SE/translations.php4
-rw-r--r--app/Locales/zh_CN/translations.php4
-rw-r--r--app/Model/DateParser.php19
-rw-r--r--app/Schema/Mysql.php8
-rw-r--r--app/Schema/Postgres.php8
-rw-r--r--app/Schema/Sqlite.php8
-rw-r--r--app/Templates/config_application.php4
-rw-r--r--app/Templates/project_export.php4
-rw-r--r--app/Templates/task_edit.php2
-rw-r--r--app/Templates/task_new.php2
-rw-r--r--assets/css/app.css6
-rw-r--r--assets/js/app.js3
23 files changed, 84 insertions, 35 deletions
diff --git a/app/Controller/Config.php b/app/Controller/Config.php
index 869d4331..7c8373c3 100644
--- a/app/Controller/Config.php
+++ b/app/Controller/Config.php
@@ -78,6 +78,7 @@ class Config extends Base
'title' => t('Application settings'),
'languages' => $this->config->getLanguages(),
'timezones' => $this->config->getTimezones(),
+ 'date_formats' => $this->dateParser->getAvailableFormats(),
)));
}
diff --git a/app/Controller/Project.php b/app/Controller/Project.php
index 7b174ef4..48f6f10e 100644
--- a/app/Controller/Project.php
+++ b/app/Controller/Project.php
@@ -86,6 +86,8 @@ class Project extends Base
'to' => $to,
),
'errors' => array(),
+ 'date_format' => $this->config->get('application_date_format'),
+ 'date_formats' => $this->dateParser->getAvailableFormats(),
'menu' => 'projects',
'project' => $project,
'title' => t('Tasks Export')
diff --git a/app/Controller/Task.php b/app/Controller/Task.php
index fc7103ef..163929d2 100644
--- a/app/Controller/Task.php
+++ b/app/Controller/Task.php
@@ -92,6 +92,8 @@ class Task extends Base
'users_list' => $this->projectPermission->getUsersList($project_id),
'colors_list' => $this->color->getList(),
'categories_list' => $this->category->getList($project_id),
+ 'date_format' => $this->config->get('application_date_format'),
+ 'date_formats' => $this->dateParser->getAvailableFormats(),
'menu' => 'tasks',
'title' => t('New task')
)));
@@ -138,6 +140,8 @@ class Task extends Base
'users_list' => $this->projectPermission->getUsersList($values['project_id']),
'colors_list' => $this->color->getList(),
'categories_list' => $this->category->getList($values['project_id']),
+ 'date_format' => $this->config->get('application_date_format'),
+ 'date_formats' => $this->dateParser->getAvailableFormats(),
'menu' => 'tasks',
'title' => t('New task')
)));
@@ -153,7 +157,7 @@ class Task extends Base
$task = $this->getTask();
if (! empty($task['date_due'])) {
- $task['date_due'] = date(t('m/d/Y'), $task['date_due']);
+ $task['date_due'] = date($this->config->get('application_date_format'), $task['date_due']);
}
else {
$task['date_due'] = '';
@@ -169,6 +173,8 @@ class Task extends Base
'users_list' => $this->projectPermission->getUsersList($task['project_id']),
'colors_list' => $this->color->getList(),
'categories_list' => $this->category->getList($task['project_id']),
+ 'date_format' => $this->config->get('application_date_format'),
+ 'date_formats' => $this->dateParser->getAvailableFormats(),
'ajax' => $ajax,
'menu' => 'tasks',
'title' => t('Edit a task')
@@ -219,6 +225,8 @@ class Task extends Base
'users_list' => $this->projectPermission->getUsersList($values['project_id']),
'colors_list' => $this->color->getList(),
'categories_list' => $this->category->getList($values['project_id']),
+ 'date_format' => $this->config->get('application_date_format'),
+ 'date_formats' => $this->dateParser->getAvailableFormats(),
'menu' => 'tasks',
'title' => t('Edit a task'),
'ajax' => $this->request->isAjax(),
diff --git a/app/Locales/de_DE/translations.php b/app/Locales/de_DE/translations.php
index 93721f65..4e72cfc0 100644
--- a/app/Locales/de_DE/translations.php
+++ b/app/Locales/de_DE/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => 'Eine Beschreibung wird benötigt',
'Edit this task' => 'Aufgabe bearbeiten',
'Due Date' => 'Fällig am',
- 'm/d/Y' => 'd.m.Y',
- 'month/day/year' => 'TT.MM.JJJJ',
'Invalid date' => 'Ungültiges Datum',
'Must be done before %B %e, %Y' => 'Muss vor dem %d.%m.%Y erledigt werden',
'%B %e, %Y' => '%d.%m.%Y',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Locales/es_ES/translations.php b/app/Locales/es_ES/translations.php
index 8b92b9a5..4e7bc537 100644
--- a/app/Locales/es_ES/translations.php
+++ b/app/Locales/es_ES/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => 'La descripción es obligatoria',
'Edit this task' => 'Editar esta tarea',
'Due Date' => 'Fecha límite',
- 'm/d/Y' => 'd/m/Y',
- 'month/day/year' => 'día/mes/año',
'Invalid date' => 'Fecha no válida',
'Must be done before %B %e, %Y' => 'Debe de estar hecho antes del %d/%m/%Y',
'%B %e, %Y' => '%d/%m/%Y',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Locales/fi_FI/translations.php b/app/Locales/fi_FI/translations.php
index 923ba970..f5618b8b 100644
--- a/app/Locales/fi_FI/translations.php
+++ b/app/Locales/fi_FI/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => 'Kuvaus vaaditaan',
'Edit this task' => 'Muokkaa tehtävää',
'Due Date' => 'Deadline',
- 'm/d/Y' => 'd.m.Y',
- 'month/day/year' => 'päivä.kuukausi.vuosi',
'Invalid date' => 'Virheellinen päiväys',
'Must be done before %B %e, %Y' => 'Täytyy suorittaa ennen %d.%m.%Y',
'%B %e, %Y' => '%d.%m.%Y',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Locales/fr_FR/translations.php b/app/Locales/fr_FR/translations.php
index 19c15f86..8c9c74ea 100644
--- a/app/Locales/fr_FR/translations.php
+++ b/app/Locales/fr_FR/translations.php
@@ -209,11 +209,9 @@ return array(
'The description is required' => 'La description est obligatoire',
'Edit this task' => 'Modifier cette tâche',
'Due Date' => 'Date d\'échéance',
- 'm/d/Y' => 'd/m/Y', // Date format parsed with php
- 'month/day/year' => 'jour/mois/année', // Help shown to the user
'Invalid date' => 'Date invalide',
'Must be done before %B %e, %Y' => 'Doit être fait avant le %d/%m/%Y',
- '%B %e, %Y' => '%d/%m/%Y',
+ '%B %e, %Y' => '%d %B %Y',
'Automatic actions' => 'Actions automatisées',
'Your automatic action have been created successfully.' => 'Votre action automatisée a été ajouté avec succès.',
'Unable to create your automatic action.' => 'Impossible de créer votre action automatisée.',
@@ -534,4 +532,6 @@ return array(
'Application URL' => 'URL de l\'application',
'Example: http://example.kanboard.net/ (used by email notifications)' => 'Exemple : http://exemple.kanboard.net/ (utilisé pour les notifications)',
'Token regenerated.' => 'Jeton de sécurité regénéré.',
+ 'Date format' => 'Format de date',
+ 'ISO format is always accepted, example: "%s" and "%s"' => 'Le format ISO est toujours accepté, exemple : « %s » et « %s »',
);
diff --git a/app/Locales/it_IT/translations.php b/app/Locales/it_IT/translations.php
index e5b5eb57..24d13360 100644
--- a/app/Locales/it_IT/translations.php
+++ b/app/Locales/it_IT/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => 'Si richiede una descrizione',
'Edit this task' => 'Modificare questo compito',
'Due Date' => 'Data di scadenza',
- 'm/d/Y' => 'd/m/Y',
- 'month/day/year' => 'giorno/mese/anno',
'Invalid date' => 'Data sbagliata',
// 'Must be done before %B %e, %Y' => '',
// '%B %e, %Y' => '',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Locales/pl_PL/translations.php b/app/Locales/pl_PL/translations.php
index cdf200b9..41e5555d 100644
--- a/app/Locales/pl_PL/translations.php
+++ b/app/Locales/pl_PL/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => 'Opis jest wymagany',
'Edit this task' => 'Edytuj zadanie',
'Due Date' => 'Termin',
- 'm/d/Y' => 'd/m/Y',
- 'month/day/year' => 'dzień/miesiąc/rok',
'Invalid date' => 'Błędna data',
'Must be done before %B %e, %Y' => 'Termin do %e %B %Y',
'%B %e, %Y' => '%e %B %Y',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Locales/pt_BR/translations.php b/app/Locales/pt_BR/translations.php
index 1524355d..89f789c3 100644
--- a/app/Locales/pt_BR/translations.php
+++ b/app/Locales/pt_BR/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => 'A descrição é obrigatória',
'Edit this task' => 'Editar esta tarefa',
'Due Date' => 'Data de vencimento',
- 'm/d/Y' => 'd/m/Y',
- 'month/day/year' => 'dia/mês/ano',
'Invalid date' => 'Data inválida',
'Must be done before %B %e, %Y' => 'Deve ser feito antes de %d %B %Y',
'%B %e, %Y' => '%d %B %Y',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Locales/ru_RU/translations.php b/app/Locales/ru_RU/translations.php
index e5e3e8bc..e658c09c 100644
--- a/app/Locales/ru_RU/translations.php
+++ b/app/Locales/ru_RU/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => 'Требуется описание',
'Edit this task' => 'Изменить задачу',
'Due Date' => 'Срок',
- 'm/d/Y' => 'м/д/Г',
- 'month/day/year' => 'месяц/день/год',
'Invalid date' => 'Неверная дата',
'Must be done before %B %e, %Y' => 'Должно быть сделано до %d/%m/%Y',
'%B %e, %Y' => '%d/%m/%Y',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Locales/sv_SE/translations.php b/app/Locales/sv_SE/translations.php
index 4c8aef81..9c9eac02 100644
--- a/app/Locales/sv_SE/translations.php
+++ b/app/Locales/sv_SE/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => 'En beskrivning måste lämnas',
'Edit this task' => 'Ändra denna uppgift',
'Due Date' => 'Måldatum',
- 'm/d/Y' => 'd/m/Y',
- 'month/day/year' => 'dag/månad/år',
'Invalid date' => 'Ej tillåtet datum',
'Must be done before %B %e, %Y' => 'Måste vara klart innan %B %e, %Y',
'%B %e, %Y' => '%d %B %Y',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Locales/zh_CN/translations.php b/app/Locales/zh_CN/translations.php
index 3285e9a6..41afd362 100644
--- a/app/Locales/zh_CN/translations.php
+++ b/app/Locales/zh_CN/translations.php
@@ -209,8 +209,6 @@ return array(
'The description is required' => '必须得有描述',
'Edit this task' => '编辑该任务',
'Due Date' => '到期',
- 'm/d/Y' => 'Y/m/d',
- 'month/day/year' => '年/月/日',
'Invalid date' => '无效日期',
'Must be done before %B %e, %Y' => '必须在%Y年%m月%d日前完成',
'%B %e, %Y' => '%Y/%m/%d',
@@ -534,4 +532,6 @@ return array(
// 'Application URL' => '',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '',
// 'Token regenerated.' => '',
+ // 'Date format' => '',
+ // 'ISO format is always accepted, example: "%s" and "%s"' => '',
);
diff --git a/app/Model/DateParser.php b/app/Model/DateParser.php
index b051fb6e..88e67686 100644
--- a/app/Model/DateParser.php
+++ b/app/Model/DateParser.php
@@ -57,7 +57,7 @@ class DateParser extends Base
}
/**
- * Return the list of supported date formats
+ * Return the list of supported date formats (for the parser)
*
* @access public
* @return array
@@ -65,13 +65,28 @@ class DateParser extends Base
public function getDateFormats()
{
return array(
- t('m/d/Y'),
+ $this->config->get('application_date_format', 'm/d/Y'),
'Y-m-d',
'Y_m_d',
);
}
/**
+ * Return the list of available date formats (for the config page)
+ *
+ * @access public
+ * @return array
+ */
+ public function getAvailableFormats()
+ {
+ return array(
+ 'm/d/Y' => date('m/d/Y'),
+ 'd/m/Y' => date('d/m/Y'),
+ 'Y/m/d' => date('Y/m/d'),
+ );
+ }
+
+ /**
* For a given timestamp, reset the date to midnight
*
* @access public
diff --git a/app/Schema/Mysql.php b/app/Schema/Mysql.php
index e6a33ee5..8b6ba5ae 100644
--- a/app/Schema/Mysql.php
+++ b/app/Schema/Mysql.php
@@ -5,7 +5,13 @@ namespace Schema;
use PDO;
use Core\Security;
-const VERSION = 29;
+const VERSION = 30;
+
+function version_30($pdo)
+{
+ $rq = $pdo->prepare('INSERT INTO settings VALUES (?, ?)');
+ $rq->execute(array('application_date_format', 'm/d/Y'));
+}
function version_29($pdo)
{
diff --git a/app/Schema/Postgres.php b/app/Schema/Postgres.php
index 0eeb2a72..90a3da40 100644
--- a/app/Schema/Postgres.php
+++ b/app/Schema/Postgres.php
@@ -5,7 +5,13 @@ namespace Schema;
use PDO;
use Core\Security;
-const VERSION = 10;
+const VERSION = 11;
+
+function version_11($pdo)
+{
+ $rq = $pdo->prepare('INSERT INTO settings VALUES (?, ?)');
+ $rq->execute(array('application_date_format', 'm/d/Y'));
+}
function version_10($pdo)
{
diff --git a/app/Schema/Sqlite.php b/app/Schema/Sqlite.php
index 5986d327..b39532f1 100644
--- a/app/Schema/Sqlite.php
+++ b/app/Schema/Sqlite.php
@@ -5,7 +5,13 @@ namespace Schema;
use Core\Security;
use PDO;
-const VERSION = 29;
+const VERSION = 30;
+
+function version_30($pdo)
+{
+ $rq = $pdo->prepare('INSERT INTO settings VALUES (?, ?)');
+ $rq->execute(array('application_date_format', 'm/d/Y'));
+}
function version_29($pdo)
{
diff --git a/app/Templates/config_application.php b/app/Templates/config_application.php
index 251a45dc..97071bd0 100644
--- a/app/Templates/config_application.php
+++ b/app/Templates/config_application.php
@@ -16,6 +16,10 @@
<?= Helper\form_label(t('Timezone'), 'application_timezone') ?>
<?= Helper\form_select('application_timezone', $timezones, $values, $errors) ?><br/>
+ <?= Helper\form_label(t('Date format'), 'application_date_format') ?>
+ <?= Helper\form_select('application_date_format', $date_formats, $values, $errors) ?><br/>
+ <p class="form-help"><?= t('ISO format is always accepted, example: "%s" and "%s"', date('Y-m-d'), date('Y_m_d')) ?></p>
+
<div class="form-actions">
<input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
</div>
diff --git a/app/Templates/project_export.php b/app/Templates/project_export.php
index 46b4f369..02eb389f 100644
--- a/app/Templates/project_export.php
+++ b/app/Templates/project_export.php
@@ -11,10 +11,10 @@
<?= Helper\form_hidden('project_id', $values) ?>
<?= Helper\form_label(t('Start Date'), 'from') ?>
- <?= Helper\form_text('from', $values, $errors, array('required', 'placeholder="'.t('month/day/year').'"'), 'form-date') ?><br/>
+ <?= Helper\form_text('from', $values, $errors, array('required', 'placeholder="'.Helper\in_list($date_format, $date_formats).'"'), 'form-date') ?><br/>
<?= Helper\form_label(t('End Date'), 'to') ?>
- <?= Helper\form_text('to', $values, $errors, array('required', 'placeholder="'.t('month/day/year').'"'), 'form-date') ?>
+ <?= Helper\form_text('to', $values, $errors, array('required', 'placeholder="'.Helper\in_list($date_format, $date_formats).'"'), 'form-date') ?>
<div class="form-help"><?= t('Others formats accepted: %s and %s', date('Y-m-d'), date('Y_m_d')) ?></div>
diff --git a/app/Templates/task_edit.php b/app/Templates/task_edit.php
index 4038717e..73e00a31 100644
--- a/app/Templates/task_edit.php
+++ b/app/Templates/task_edit.php
@@ -34,7 +34,7 @@
<?= Helper\form_number('score', $values, $errors) ?><br/>
<?= Helper\form_label(t('Due Date'), 'date_due') ?>
- <?= Helper\form_text('date_due', $values, $errors, array('placeholder="'.t('month/day/year').'"'), 'form-date') ?><br/>
+ <?= Helper\form_text('date_due', $values, $errors, array('placeholder="'.Helper\in_list($date_format, $date_formats).'"'), 'form-date') ?><br/>
<div class="form-help"><?= t('Others formats accepted: %s and %s', date('Y-m-d'), date('Y_m_d')) ?></div>
</div>
diff --git a/app/Templates/task_new.php b/app/Templates/task_new.php
index e07d436c..867bcbc9 100644
--- a/app/Templates/task_new.php
+++ b/app/Templates/task_new.php
@@ -39,7 +39,7 @@
<?= Helper\form_number('score', $values, $errors) ?><br/>
<?= Helper\form_label(t('Due Date'), 'date_due') ?>
- <?= Helper\form_text('date_due', $values, $errors, array('placeholder="'.t('month/day/year').'"'), 'form-date') ?><br/>
+ <?= Helper\form_text('date_due', $values, $errors, array('placeholder="'.Helper\in_list($date_format, $date_formats).'"'), 'form-date') ?><br/>
<div class="form-help"><?= t('Others formats accepted: %s and %s', date('Y-m-d'), date('Y_m_d')) ?></div>
</div>
diff --git a/assets/css/app.css b/assets/css/app.css
index 7fff0ead..a5c88cc3 100644
--- a/assets/css/app.css
+++ b/assets/css/app.css
@@ -187,17 +187,17 @@ select {
}
::-webkit-input-placeholder {
- color: #bbb;
+ color: #ddd;
padding-top: 2px;
}
::-ms-input-placeholder {
- color: #bbb;
+ color: #ddd;
padding-top: 2px;
}
::-moz-placeholder {
- color: #bbb;
+ color: #ddd;
padding-top: 2px;
}
diff --git a/assets/js/app.js b/assets/js/app.js
index c474efb8..395dfb6e 100644
--- a/assets/js/app.js
+++ b/assets/js/app.js
@@ -64,7 +64,8 @@ var Kanboard = (function() {
$(".form-date").datepicker({
showOtherMonths: true,
selectOtherMonths: true,
- dateFormat: 'yy-mm-dd'
+ dateFormat: 'yy-mm-dd',
+ constrainInput: false
});
}
};