Project

General

Profile

Revision 24182db6

ID24182db61a81996d45d6f1609e5427416d25bd44
Parent 20676527
Child 67b3acd3

Added by Francois POIROTTE about 9 years ago

[#1418] Filtrage sur la date.

Améliore le formulaire de filtrage concernant les dates :
- Un exemple de date au format attendu est donnée en exemple via un
placeholder pour les navigateurs supportant cette fonctionnalité.
- Il est également disponible au survol du champ par la souris.
- Le format a été rendu plus laxiste : une date sans heure peut être
saisie (ex : "25/12/2015" au lieu de "25/12/2015 00:00:00".

Change-Id: I192e5841c04b1b993d1d31dd197956783adfef91
Refs: #1418.
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/1685
Tested-by: Build system <>
Reviewed-by: Thomas BURGUIERE <>

View differences:

vigiboard/controllers/plugins/date.py
31 31
from vigiboard.controllers.plugins import VigiboardRequestPlugin, ITEMS
32 32
from vigiboard.lib import dateformat
33 33

  
34

  
35
class ExampleDateFormat(object):
36
    """
37
    Une classe permettant d'obtenir un exemple de date
38
    correspondant au format de la locale de l'utilisateur.
39
    """
40
    def __str__(self):
41
        """
42
        Retourne l'heure courante au format attendu,
43
        encodée en UTF-8.
44

  
45
        @return: Heure courante au format attendu (en UTF-8).
46
        @rtype: C{str}
47
        """
48
        return unicode(self).encode('utf-8')
49

  
50
    def __unicode__(self):
51
        """
52
        Retourne l'heure courante au format attendu.
53

  
54
        @return: Heure courante au format attendu.
55
        @rtype: C{unicode}
56
        """
57
        format = dateformat.get_date_format()
58
        date = datetime.strftime(datetime.now(), format).decode('utf-8')
59
        return _('Eg. %(date)s') % {'date': date}
60

  
61

  
34 62
class PluginDate(VigiboardRequestPlugin):
35 63
    """Plugin pour l'ajout d'une colonne Date."""
36 64
    def get_search_fields(self):
......
44 72
                validator=dateformat.DateFormatConverter(if_missing=None),
45 73
                date_format=dateformat.get_date_format,
46 74
                calendar_lang=dateformat.get_calendar_lang,
75
                attrs={
76
                    # Affiche un exemple de date au survol
77
                    # et en tant qu'indication (placeholder).
78
                    'title': ExampleDateFormat(),
79
                    'placeholder': ExampleDateFormat()
80
                },
47 81
            ),
48 82
            twf.CalendarDateTimePicker(
49 83
                'to_date',
......
53 87
                validator=dateformat.DateFormatConverter(if_missing=None),
54 88
                date_format=dateformat.get_date_format,
55 89
                calendar_lang=dateformat.get_calendar_lang,
90
                attrs={
91
                    # Affiche un exemple de date au survol
92
                    # et en tant qu'indication (placeholder).
93
                    'title': ExampleDateFormat(),
94
                    'placeholder': ExampleDateFormat()
95
                },
56 96
            ),
57 97
        ]
58 98

  
vigiboard/i18n/de/LC_MESSAGES/vigiboard.po
8 8
"Project-Id-Version: vigiboard 2.0.0\n"
9 9
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
10 10
"POT-Creation-Date: 2010-11-19 10:22+0100\n"
11
"PO-Revision-Date: 2014-09-05 13:41+0200\n"
11
"PO-Revision-Date: 2015-04-21 11:49+0200\n"
12 12
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 13
"Language-Team: de_DE <LL@li.org>\n"
14 14
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
......
288 288
msgid "Silence rule #%s has been successfully deleted."
289 289
msgstr ""
290 290

  
291
#: vigiboard/controllers/plugins/date.py:38
291
#: vigiboard/controllers/plugins/date.py:59
292
#, python-format
293
msgid "Eg. %(date)s"
294
msgstr ""
295

  
296
#: vigiboard/controllers/plugins/date.py:66
292 297
msgid "Last occurrence"
293 298
msgstr ""
294 299

  
295
#: vigiboard/controllers/plugins/date.py:41
300
#: vigiboard/controllers/plugins/date.py:69
296 301
msgid "Between"
297 302
msgstr ""
298 303

  
299
#: vigiboard/controllers/plugins/date.py:42
300
#: vigiboard/controllers/plugins/date.py:51
304
#: vigiboard/controllers/plugins/date.py:70
305
#: vigiboard/controllers/plugins/date.py:85
301 306
#: vigiboard/controllers/plugins/groups.py:41
302 307
msgid "Choose"
303 308
msgstr "Auswählen"
304 309

  
305
#: vigiboard/controllers/plugins/date.py:50
310
#: vigiboard/controllers/plugins/date.py:84
306 311
msgid "And"
307 312
msgstr ""
308 313

  
314
#: vigiboard/controllers/plugins/details.py:195
315
#: vigiboard/controllers/plugins/state.py:47
316
msgid "Current state"
317
msgstr ""
318

  
309 319
#: vigiboard/controllers/plugins/groups.py:42
310 320
msgid "Clear"
311 321
msgstr "Löschen"
......
326 336
msgid "Priority"
327 337
msgstr "Priorität"
328 338

  
329
#: vigiboard/controllers/plugins/state.py:47
330
msgid "Current state"
331
msgstr ""
332

  
333 339
#: vigiboard/controllers/plugins/status.py:53
334 340
msgid "All alerts"
335 341
msgstr ""
......
360 366
#. TRANSLATORS:
361 367
#. http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
362 368
#. TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
363
#: vigiboard/lib/dateformat.py:35 vigiboard/lib/dateformat.py:58
364
#: vigiboard/lib/dateformat.py:70
369
#: vigiboard/lib/dateformat.py:38
365 370
#, python-format
366 371
msgid "%Y-%m-%d %I:%M:%S %p"
367
msgstr "%Y-%m-%d %I:%M:%S %p"
372
msgstr "%d.%m.%Y %H:%M:%S"
373

  
374
#. TRANSLATORS: Format de date Python/JavaScript.
375
#. TRANSLATORS:
376
#. http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
377
#. TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
378
#: vigiboard/lib/dateformat.py:67
379
#, python-format
380
msgid "%Y-%m-%d"
381
msgstr "%d.%m.%Y"
368 382

  
369 383
#: vigiboard/public/js/main.js:39
370 384
msgid "Search Event"
vigiboard/i18n/en/LC_MESSAGES/vigiboard.po
1 1
# English translations for vigilo-vigiboard.
2
# Copyright (C) 2014 ORGANIZATION
2
# Copyright (C) 2015 ORGANIZATION
3 3
# This file is distributed under the same license as the vigilo-vigiboard
4 4
# project.
5
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
6 6
#
7 7
msgid ""
8 8
msgstr ""
9 9
"Project-Id-Version: vigilo-vigiboard 3.5\n"
10 10
"Report-Msgid-Bugs-To: contact@projet-vigilo.org\n"
11
"POT-Creation-Date: 2014-09-05 13:41+0200\n"
12
"PO-Revision-Date: 2014-09-05 13:41+0200\n"
11
"POT-Creation-Date: 2015-04-21 11:49+0200\n"
12
"PO-Revision-Date: 2015-04-21 11:49+0200\n"
13 13
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14 14
"Language-Team: en <LL@li.org>\n"
15 15
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
......
304 304
msgid "Silence rule #%s has been successfully deleted."
305 305
msgstr "Silence rule #%s has been successfully deleted."
306 306

  
307
#: vigiboard/controllers/plugins/date.py:38
307
#: vigiboard/controllers/plugins/date.py:59
308
#, python-format
309
msgid "Eg. %(date)s"
310
msgstr "Eg. %(date)s"
311

  
312
#: vigiboard/controllers/plugins/date.py:66
308 313
msgid "Last occurrence"
309 314
msgstr "Last occurrence"
310 315

  
311
#: vigiboard/controllers/plugins/date.py:41
316
#: vigiboard/controllers/plugins/date.py:69
312 317
msgid "Between"
313 318
msgstr "Between"
314 319

  
315
#: vigiboard/controllers/plugins/date.py:42
316
#: vigiboard/controllers/plugins/date.py:51
320
#: vigiboard/controllers/plugins/date.py:70
321
#: vigiboard/controllers/plugins/date.py:85
317 322
#: vigiboard/controllers/plugins/groups.py:41
318 323
msgid "Choose"
319 324
msgstr "Choose"
320 325

  
321
#: vigiboard/controllers/plugins/date.py:50
326
#: vigiboard/controllers/plugins/date.py:84
322 327
msgid "And"
323 328
msgstr "And"
324 329

  
330
#: vigiboard/controllers/plugins/details.py:195
331
#: vigiboard/controllers/plugins/state.py:47
332
msgid "Current state"
333
msgstr "Current state"
334

  
325 335
#: vigiboard/controllers/plugins/groups.py:42
326 336
msgid "Clear"
327 337
msgstr "Clear"
......
342 352
msgid "Priority"
343 353
msgstr "Priority"
344 354

  
345
#: vigiboard/controllers/plugins/state.py:47
346
msgid "Current state"
347
msgstr "Current state"
348

  
349 355
#: vigiboard/controllers/plugins/status.py:53
350 356
msgid "All alerts"
351 357
msgstr "All alerts"
......
376 382
#. TRANSLATORS:
377 383
#. http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
378 384
#. TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
379
#: vigiboard/lib/dateformat.py:35 vigiboard/lib/dateformat.py:58
380
#: vigiboard/lib/dateformat.py:70
385
#: vigiboard/lib/dateformat.py:38
381 386
#, python-format
382 387
msgid "%Y-%m-%d %I:%M:%S %p"
383 388
msgstr "%Y-%m-%d %I:%M:%S %p"
384 389

  
390
#. TRANSLATORS: Format de date Python/JavaScript.
391
#. TRANSLATORS:
392
#. http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
393
#. TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
394
#: vigiboard/lib/dateformat.py:67
395
#, python-format
396
msgid "%Y-%m-%d"
397
msgstr "%Y-%m-%d"
398

  
385 399
#: vigiboard/public/js/main.js:39
386 400
msgid "Search Event"
387 401
msgstr "Search Event"
vigiboard/i18n/fr/LC_MESSAGES/vigiboard.po
8 8
"Project-Id-Version: vigiboard 0.1\n"
9 9
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
10 10
"POT-Creation-Date: 2009-07-06 11:19+0200\n"
11
"PO-Revision-Date: 2014-09-05 13:41+0200\n"
11
"PO-Revision-Date: 2015-04-21 11:49+0200\n"
12 12
"Last-Translator: Thomas ANDREJAK <thomas.andrejak@c-s.fr>\n"
13 13
"Language-Team: fr_FR <LL@li.org>\n"
14 14
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
......
288 288
#, python-format
289 289
msgid "An exception has been raised while deleting the silence rules: %s"
290 290
msgstr ""
291
"Une exception a été levée lors de la suppression des règles de "
292
"silence : %s"
291
"Une exception a été levée lors de la suppression des règles de silence : "
292
"%s"
293 293

  
294 294
#: vigiboard/controllers/silence.py:624
295 295
#, python-format
......
317 317
msgid "Silence rule #%s has been successfully deleted."
318 318
msgstr "La règle de silence #%s a été supprimée avec succès."
319 319

  
320
#: vigiboard/controllers/plugins/date.py:38
320
#: vigiboard/controllers/plugins/date.py:59
321
#, python-format
322
msgid "Eg. %(date)s"
323
msgstr "P.ex. %(date)s"
324

  
325
#: vigiboard/controllers/plugins/date.py:66
321 326
msgid "Last occurrence"
322 327
msgstr "Dernière occurrence"
323 328

  
324
#: vigiboard/controllers/plugins/date.py:41
329
#: vigiboard/controllers/plugins/date.py:69
325 330
msgid "Between"
326 331
msgstr "Entre"
327 332

  
328
#: vigiboard/controllers/plugins/date.py:42
329
#: vigiboard/controllers/plugins/date.py:51
333
#: vigiboard/controllers/plugins/date.py:70
334
#: vigiboard/controllers/plugins/date.py:85
330 335
#: vigiboard/controllers/plugins/groups.py:41
331 336
msgid "Choose"
332 337
msgstr "Choisir"
333 338

  
334
#: vigiboard/controllers/plugins/date.py:50
339
#: vigiboard/controllers/plugins/date.py:84
335 340
msgid "And"
336 341
msgstr "Et"
337 342

  
343
#: vigiboard/controllers/plugins/details.py:195
344
#: vigiboard/controllers/plugins/state.py:47
345
msgid "Current state"
346
msgstr "État courant"
347

  
338 348
#: vigiboard/controllers/plugins/groups.py:42
339 349
msgid "Clear"
340 350
msgstr "Effacer"
......
355 365
msgid "Priority"
356 366
msgstr "Priorité"
357 367

  
358
#: vigiboard/controllers/plugins/state.py:47
359
msgid "Current state"
360
msgstr "État courant"
361

  
362 368
#: vigiboard/controllers/plugins/status.py:53
363 369
msgid "All alerts"
364 370
msgstr "Toutes les alertes"
......
389 395
#. TRANSLATORS:
390 396
#. http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
391 397
#. TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
392
#: vigiboard/lib/dateformat.py:35 vigiboard/lib/dateformat.py:58
393
#: vigiboard/lib/dateformat.py:70
398
#: vigiboard/lib/dateformat.py:38
394 399
#, python-format
395 400
msgid "%Y-%m-%d %I:%M:%S %p"
396 401
msgstr "%d/%m/%Y %H:%M:%S"
397 402

  
403
#. TRANSLATORS: Format de date Python/JavaScript.
404
#. TRANSLATORS:
405
#. http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
406
#. TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
407
#: vigiboard/lib/dateformat.py:67
408
#, python-format
409
msgid "%Y-%m-%d"
410
msgstr "%d/%m/%Y"
411

  
398 412
#: vigiboard/public/js/main.js:39
399 413
msgid "Search Event"
400 414
msgstr "Rechercher un événement"
vigiboard/i18n/vigiboard.pot
1 1
# Translations template for vigilo-vigiboard.
2
# Copyright (C) 2014 ORGANIZATION
2
# Copyright (C) 2015 ORGANIZATION
3 3
# This file is distributed under the same license as the vigilo-vigiboard
4 4
# project.
5
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
6 6
#
7 7
#, fuzzy
8 8
msgid ""
9 9
msgstr ""
10 10
"Project-Id-Version: vigilo-vigiboard 3.5\n"
11 11
"Report-Msgid-Bugs-To: contact@projet-vigilo.org\n"
12
"POT-Creation-Date: 2014-09-05 13:41+0200\n"
12
"POT-Creation-Date: 2015-04-21 11:49+0200\n"
13 13
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14 14
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
15 15
"Language-Team: LANGUAGE <LL@li.org>\n"
......
284 284
msgid "Silence rule #%s has been successfully deleted."
285 285
msgstr ""
286 286

  
287
#: vigiboard/controllers/plugins/date.py:38
287
#: vigiboard/controllers/plugins/date.py:59
288
#, python-format
289
msgid "Eg. %(date)s"
290
msgstr ""
291

  
292
#: vigiboard/controllers/plugins/date.py:66
288 293
msgid "Last occurrence"
289 294
msgstr ""
290 295

  
291
#: vigiboard/controllers/plugins/date.py:41
296
#: vigiboard/controllers/plugins/date.py:69
292 297
msgid "Between"
293 298
msgstr ""
294 299

  
295
#: vigiboard/controllers/plugins/date.py:42
296
#: vigiboard/controllers/plugins/date.py:51
300
#: vigiboard/controllers/plugins/date.py:70
301
#: vigiboard/controllers/plugins/date.py:85
297 302
#: vigiboard/controllers/plugins/groups.py:41
298 303
msgid "Choose"
299 304
msgstr ""
300 305

  
301
#: vigiboard/controllers/plugins/date.py:50
306
#: vigiboard/controllers/plugins/date.py:84
302 307
msgid "And"
303 308
msgstr ""
304 309

  
310
#: vigiboard/controllers/plugins/details.py:195
311
#: vigiboard/controllers/plugins/state.py:47
312
msgid "Current state"
313
msgstr ""
314

  
305 315
#: vigiboard/controllers/plugins/groups.py:42
306 316
msgid "Clear"
307 317
msgstr ""
......
322 332
msgid "Priority"
323 333
msgstr ""
324 334

  
325
#: vigiboard/controllers/plugins/state.py:47
326
msgid "Current state"
327
msgstr ""
328

  
329 335
#: vigiboard/controllers/plugins/status.py:53
330 336
msgid "All alerts"
331 337
msgstr ""
......
354 360
#. TRANSLATORS:
355 361
#. http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
356 362
#. TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
357
#: vigiboard/lib/dateformat.py:35 vigiboard/lib/dateformat.py:58
358
#: vigiboard/lib/dateformat.py:70
363
#: vigiboard/lib/dateformat.py:38
359 364
#, python-format
360 365
msgid "%Y-%m-%d %I:%M:%S %p"
361 366
msgstr ""
362 367

  
368
#. TRANSLATORS: Format de date Python/JavaScript.
369
#. TRANSLATORS:
370
#. http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
371
#. TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
372
#: vigiboard/lib/dateformat.py:67
373
#, python-format
374
msgid "%Y-%m-%d"
375
msgstr ""
376

  
363 377
#: vigiboard/public/js/main.js:39
364 378
msgid "Search Event"
365 379
msgstr ""
vigiboard/lib/dateformat.py
32 32
def get_date_format():
33 33
    # @HACK: nécessaire car l_() retourne un object LazyString
34 34
    # qui n'est pas sérialisable en JSON.
35
    # TRANSLATORS: Format de date et heure Python/JavaScript.
36
    # TRANSLATORS: http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
37
    # TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
35 38
    return _('%Y-%m-%d %I:%M:%S %p').encode('utf-8')
36 39

  
37 40
class DateFormatConverter(FancyValidator):
......
52 55
            str_date = str_date.encode('utf-8')
53 56

  
54 57
        try:
55
            # TRANSLATORS: Format de date et heure Python/JavaScript.
56
            # TRANSLATORS: http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
57
            # TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
58
            date = datetime.strptime(str_date, _('%Y-%m-%d %I:%M:%S %p').encode('utf8'))
58
            # On tente d'interpréter la saisie de l'utilisateur
59
            # selon un format date + heure.
60
            date = datetime.strptime(str_date, get_date_format())
59 61
        except ValueError:
60
            raise Invalid(self.message('invalid', state), value, state)
62
            try:
63
                # 2è essai : on essaye d'interpréter uniquement une date.
64
                # TRANSLATORS: Format de date Python/JavaScript.
65
                # TRANSLATORS: http://www.dynarch.com/static/jscalendar-1.0/doc/html/reference.html#node_sec_5.3.5
66
                # TRANSLATORS: http://docs.python.org/release/2.5/lib/module-time.html
67
                date = datetime.strptime(str_date, _('%Y-%m-%d').encode('utf8'))
68
            except ValueError:
69
                raise Invalid(self.message('invalid', state), value, state)
61 70
        return date
62 71

  
63 72
    def _from_python(self, value, state):
......
65 74
            raise Invalid(self.message('invalid', state), value, state)
66 75

  
67 76
        # Même format que pour _to_python.
68
        return datetime.strftime(
69
                    value,
70
                    _('%Y-%m-%d %I:%M:%S %p').encode('utf8')
71
                ).decode('utf-8')
77
        return datetime.strftime(value, get_date_format()).decode('utf-8')

Also available in: Unified diff