| 1 |
<?php |
<?php |
| 2 |
|
// $Id$ |
| 3 |
|
|
| 4 |
// $id |
/** |
| 5 |
|
* Implementation of hook_form_alter(). Adds a datepicker for start date |
| 6 |
|
* and end date fields. |
| 7 |
|
*/ |
| 8 |
function datepicker_form_alter(&$form, $form_state, $form_id) { |
function datepicker_form_alter(&$form, $form_state, $form_id) { |
| 9 |
if (isset($form['type']['#value']) && $form_id == $form['type']['#value'] .'_node_form') { |
if (isset($form['type']['#value']) && $form_id == $form['type']['#value'] .'_node_form') { |
| 10 |
// node edit form |
// Node edit form |
| 11 |
if (variable_get('event_nodeapi_'. $form['type']['#value'], 'never') != 'never') { |
if (variable_get('event_nodeapi_'. $form['type']['#value'], 'never') != 'never') { |
| 12 |
$path = drupal_get_path('module', 'datepicker'); |
$path = drupal_get_path('module', 'datepicker'); |
| 13 |
drupal_add_css($path .'/datePicker.css'); |
drupal_add_css($path . '/datePicker.css'); |
| 14 |
drupal_add_js($path .'/date.js'); |
drupal_add_js($path . '/date.js'); |
| 15 |
drupal_add_js($path .'/jquery.datePicker.js'); |
drupal_add_js($path . '/jquery.datePicker.js'); |
| 16 |
$form['event']['start_exploded']['#suffix'] = '<a id="event-datepicker-start" href="#">'. t('Select start date') .'</a>'; |
|
| 17 |
|
// Define the fields which should have a datepicker |
| 18 |
datepicker_add_picker('start'); |
datepicker_add_picker('start'); |
|
$form['event']['end_exploded']['#suffix'] = '<a id="event-datepicker-end" href="#">'. t('Select end date') .'</a>'; |
|
| 19 |
datepicker_add_picker('end'); |
datepicker_add_picker('end'); |
| 20 |
|
|
| 21 |
|
// datepicker.js will link each of the added fields to a datepicker |
| 22 |
|
drupal_add_js($path . '/datepicker.js','module','footer'); |
| 23 |
} |
} |
| 24 |
} |
} |
| 25 |
} |
} |
| 26 |
|
|
| 27 |
function datepicker_add_picker($value) { |
/** |
| 28 |
$js = <<<JAVASCRIPT_CODE |
* Adds a variable with the field name to a Drupal.settings.datepicker.fields |
| 29 |
$(function() { |
* to be able to generate the datepickers on-the-fly. |
| 30 |
$('#event-datepicker-$value') |
* |
| 31 |
.datePicker( |
* @param $field |
| 32 |
// associate the link with a date picker |
* The field name that will be dicriminating when looking for <select> |
| 33 |
{ |
* elements, it is also used to define the ID of the trigger link |
| 34 |
createButton:false, |
*/ |
| 35 |
startDate:'01/01/2007', |
function datepicker_add_picker($field) { |
| 36 |
endDate:'31/12/2012' |
// Add the field name to Drupal.settings.datepicker.fields |
| 37 |
} |
drupal_add_js(array('datepicker' => array('fields' => $field)), 'setting'); |
|
).bind( |
|
|
// when the link is clicked display the date picker |
|
|
'click', |
|
|
function() |
|
|
{ |
|
|
updateSelects($(this).dpGetSelected()[0]); |
|
|
$(this).dpDisplay(); |
|
|
return false; |
|
|
} |
|
|
).bind( |
|
|
// when a date is selected update the SELECTs |
|
|
'dateSelected', |
|
|
function(e, selectedDate, \$td, state) |
|
|
{ |
|
|
updateSelects(selectedDate); |
|
|
} |
|
|
).bind( |
|
|
'dpClosed', |
|
|
function(e, selected) |
|
|
{ |
|
|
updateSelects(selected[0]); |
|
|
} |
|
|
); |
|
|
|
|
|
var updateSelects = function (selectedDate) |
|
|
{ |
|
|
var selectedDate = new Date(selectedDate); |
|
|
$('#edit-event-$value-exploded-day').val(selectedDate.getDate()); |
|
|
$('#edit-event-$value-exploded-month option[value=' + selectedDate.asString('mm') + ']').attr('selected', 'selected'); |
|
|
$('#edit-event-$value-exploded-year').val(selectedDate.getFullYear()); |
|
|
} |
|
|
// listen for when the selects are changed and update the picker |
|
|
$('#edit-event-$value-exploded-day, #edit-event-$value-exploded-month, #edit-event-$value-exploded-year') |
|
|
.bind( |
|
|
'change', |
|
|
function() |
|
|
{ |
|
|
var d = new Date( |
|
|
$('#edit-event-$value-exploded-year').val(), |
|
|
$('#edit-event-$value-exploded-month').val()-1, |
|
|
$('#edit-event-$value-exploded-day').val() |
|
|
); |
|
|
$('#event-datepicker-$value').dpSetSelected(d.asString()); |
|
|
} |
|
|
); |
|
|
|
|
|
// and update the datePicker to reflect it... |
|
|
$('#edit-event-$value-exploded-day').trigger('change'); |
|
|
}); |
|
|
JAVASCRIPT_CODE; |
|
|
drupal_add_js($js,'inline','footer'); |
|
| 38 |
} |
} |
|
|
|