]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #3560 input/date and output/date support ISO 8601 (YYYY-MM-DD) and Unix timesta...
authorcash <cash.costello@gmail.com>
Mon, 4 Jul 2011 16:01:31 +0000 (12:01 -0400)
committercash <cash.costello@gmail.com>
Mon, 4 Jul 2011 16:01:31 +0000 (12:01 -0400)
js/lib/ui.js
views/default/input/date.php
views/default/output/date.php

index fd20acbd182aede7671d83c99c33c871b713b401..4426917edbab6278e83e13c6cfbbbcc5fe288426 100644 (file)
@@ -20,7 +20,7 @@ elgg.ui.init = function () {
        $('.elgg-requires-confirmation').live('click', elgg.ui.requiresConfirmation);
 
        if ($('.elgg-input-date').length) {
-               $('.elgg-input-date').datepicker();
+               elgg.ui.initDatePicker();
        }
 }
 
@@ -53,7 +53,7 @@ elgg.ui.toggles = function(event) {
  *     targetSelector: The selector used to find the popup
  *     target:         The popup jQuery element as found by the selector
  *     source:         The jquery element whose click event initiated a popup.
- *     
+ *
  * The return value of the function is used as the options object to .position().
  * Handles can also return false to abort the default behvior and override it with their own.
  *
@@ -87,7 +87,7 @@ elgg.ui.popsUp = function(event) {
        if (!options) {
                return;
        }
-       
+
        // hide if already open
        if ($target.is(':visible')) {
                $target.fadeOut();
@@ -120,7 +120,7 @@ elgg.ui.popupClose = function(event) {
                if (!$target.is(':visible')) {
                        return;
                }
-               
+
                // didn't click inside the target
                if ($eventTarget.closest(target).length > 0) {
                        inTarget = true;
@@ -246,5 +246,34 @@ elgg.ui.LoginHandler = function(hook, type, params, options) {
        return null;
 };
 
+/**
+ * Initialize the date picker
+ *
+ * Uses the class .elgg-input-date as the selector.
+ *
+ * If the class .elgg-input-timestamp is set on the input element, the onSelect
+ * method converts the date text to a unix timestamp in seconds. That value is
+ * stored in a hidden element indicated by the id on the input field.
+ *
+ * @return void
+ */
+elgg.ui.initDatePicker = function() {
+       $('.elgg-input-date').datepicker({
+               // ISO-8601
+               dateFormat: 'yy-mm-dd',
+               onSelect: function(dateText) {
+                       if ($(this).is('.elgg-input-timestamp')) {
+                               // convert to unix timestamp
+                               var date = $.datepicker.parseDate('yy-mm-dd', dateText);
+                               var timestamp = $.datepicker.formatDate('@', date);
+                               timestamp = timestamp / 1000;
+
+                               var id = $(this).attr('id');
+                               $('input[name="' + id + '"]').val(timestamp);
+                       }
+               }
+       });
+}
+
 elgg.register_hook_handler('init', 'system', elgg.ui.init);
 elgg.register_hook_handler('getOptions', 'ui.popup', elgg.ui.LoginHandler);
\ No newline at end of file
index e21a5f8f5e4ae9717a7edfbaabb18fbccc344d0a..ceeb2105ca3f71574120823a9b35d50fdb9f3747 100644 (file)
@@ -3,11 +3,18 @@
  * Elgg date input
  * Displays a text field with a popup date picker.
  *
- * @package Elgg
- * @subpackage Core
+ * The elgg.ui JavaScript library initializes the jQueryUI datepicker based
+ * on the CSS class .elgg-input-date. It uses the ISO 8601 standard for date
+ * representation: yyyy-mm-dd.
  *
- * @uses $vars['value'] The current value, if any (as a unix timestamp)
- * @uses $vars['class'] Additional CSS class
+ * Unix timestamps are supported by setting the 'timestamp' parameter to true.
+ * The date is still displayed to the user in a text format but is submitted as
+ * a unix timestamp in seconds.
+ *
+ * @uses $vars['value']     The current value, if any (as a unix timestamp)
+ * @uses $vars['class']     Additional CSS class
+ * @uses $vars['timestamp'] Store as a Unix timestamp in seconds. Default = false
+ *                          Note: you cannot use an id with the timestamp option.
  */
 
 //@todo popup_calendar deprecated in 1.8.  Remove in 2.0
@@ -20,16 +27,30 @@ if (isset($vars['class'])) {
 $defaults = array(
        'value' => '',
        'disabled' => false,
+       'timestamp' => false,
 );
 
 $vars = array_merge($defaults, $vars);
 
+$timestamp = $vars['timestamp'];
+unset($vars['timestamp']);
+
+if ($timestamp) {
+       echo elgg_view('input/hidden', array(
+               'name' => $vars['name'],
+               'value' => $vars['value'],
+       ));
 
-if ($vars['value'] > 86400) {
-       $vars['value'] = date('n/d/Y', $vars['value']);
+       $vars['class'] = "{$vars['class']} elgg-input-timestamp";
+       $vars['id'] = $vars['name'];
+       unset($vars['name']);
+       unset($vars['internalname']);
 }
 
-$attributes = elgg_format_attributes($vars);
+// convert timestamps to text for display
+if (is_numeric($vars['value'])) {
+       $vars['value'] = gmdate('Y/m/d', $vars['value']);
+}
 
-?>
-<input type="text" <?php echo $attributes; ?> />
\ No newline at end of file
+$attributes = elgg_format_attributes($vars);
+echo "<input type=\"text\" $attributes />";
index fda7668e771a2aa3dcd0ac4603afa4d991691826..7c98dddc952fd421186fc23fb52511323917ae97 100644 (file)
@@ -6,10 +6,12 @@
  * @package Elgg
  * @subpackage Core
  *
- * @uses $vars['value'] A UNIX epoch timestamp
- *
+ * @uses $vars['value'] Date as text or a Unix timestamp in seconds
  */
 
-if ($vars['value'] > 86400) {
-       echo date("n/d/Y", $vars['value']);
-}
\ No newline at end of file
+// convert timestamps to text for display
+if (is_numeric($vars['value'])) {
+       $vars['value'] = gmdate('Y/m/d', $vars['value']);
+}
+
+echo $vars['value'];