/** * @param string $name The element name * @param string $value The date displayed in this widget * @param array $attributes An array of HTML attributes to be merged with the default HTML attributes * @param array $errors An array of errors for the field * * @return string An HTML tag string * * @see sfWidgetForm */ public function render($name, $value = null, $attributes = array(), $errors = array()) { $prefix = $this->generateId($name); $image = ''; if (false !== $this->getOption('image')) { $image = sprintf(', buttonImage: %s, buttonImageOnly: true', $this->getOption('image')); } return parent::render($name, $value, $attributes, $errors) . $this->renderTag('input', array('type' => 'hidden', 'size' => 10, 'id' => $id = $this->generateId($name) . '_jquery_control', 'disabled' => 'disabled')) . sprintf(<<<EOF <script type="text/javascript"> function %s_read_linked() { \$("#%s").val(\$("#%s").val() + "/" + \$("#%s").val() + "/" + \$("#%s").val()); return {}; } function %s_update_linked(date) { \$("#%s").val(date.substring(3, 5)); \$("#%s").val(date.substring(0, 2)); \$("#%s").val(date.substring(6, 10)); } \$("#%s").datepicker(\$.extend({}, { minDate: new Date(%s, 1 - 1, 1), maxDate: new Date(%s, 12 - 1, 31), beforeShow: %s_read_linked, onSelect: %s_update_linked, showOn: "both" %s }, \$.datepicker.regional["%s"], %s)); </script> EOF , $prefix, $id, $this->generateId($name . '[day]'), $this->generateId($name . '[month]'), $this->generateId($name . '[year]'), $prefix, $this->generateId($name . '[day]'), $this->generateId($name . '[month]'), $this->generateId($name . '[year]'), $id, min($this->getOption('years')), max($this->getOption('years')), $prefix, $prefix, $image, $this->getOption('culture'), $this->getOption('config')); }
public function render($name, $value = null, $attributes = array(), $errors = array()) { $themes = sfConfig::get('dm_dmDatePickerPlugin_themes'); $wrapperClass = ''; if (isset($themes[$this->getOption('theme')]) && isset($themes[$this->getOption('theme')]['wrapper_class']) && $themes[$this->getOption('theme')]['wrapper_class']) { $wrapperClass = $themes[$this->getOption('theme')]['wrapper_class']; } return sprintf('<div %s %s %s %s %s %s %s %s %s class="sfWidgetFormDmDatePicker">%s</div>', sprintf('data-ui-date-format="%s"', $this->getOption('ui_date_format')), sprintf('data-ui-number-of-months="%s"', $this->getOption('ui_number_of_months')), sprintf('data-ui-show-button-panel="%s"', $this->getOption('ui_show_button_panel') ? 'true' : 'false'), sprintf('data-ui-change-month="%s"', $this->getOption('ui_change_month') ? 'true' : 'false'), sprintf('data-ui-change-year="%s"', $this->getOption('ui_change_year') ? 'true' : 'false'), sprintf('data-ui-constrain-input="%s"', $this->getOption('constrain_input') ? 'true' : 'false'), sprintf('data-ui-wrapper-class="%s"', $wrapperClass), sprintf('data-ui-button-open="%s"', htmlentities($this->getOption('ui_button_open'))), sprintf('data-ui-button-clear="%s"', htmlentities($this->getOption('ui_button_clear'))), parent::render($name, $value, $attributes, $errors)); }
/** * @param string $name The element name * @param string $value The date displayed in this widget * @param array $attributes An array of HTML attributes to be merged with the default HTML attributes * @param array $errors An array of errors for the field * * @return string An HTML tag string * * @see sfWidgetForm */ public function render($name, $value = null, $attributes = array(), $errors = array()) { $prefix = $this->generateId($name); $image = ''; if (false !== $this->getOption('image')) { $image = sprintf(', buttonImage: "%s", buttonImageOnly: true', $this->getOption('image')); } return parent::render($name, $value, $attributes, $errors) . $this->renderTag('input', array('type' => 'hidden', 'size' => 10, 'id' => $id = $this->generateId($name) . '_jquery_control', 'disabled' => 'disabled')) . sprintf(<<<EOF <script type="text/javascript"> function wfd_%s_read_linked() { jQuery("#%s").val(jQuery("#%s").val() + "-" + jQuery("#%s").val() + "-" + jQuery("#%s").val()); return {}; } function wfd_%s_update_linked(date) { \t jQuery("#%s").val(parseInt(date.substring(0, 4),10)); jQuery("#%s").val(parseInt(date.substring(5, 7),10)); jQuery("#%s").val(parseInt(date.substring(8),10)); \t } function wfd_%s_check_linked_days() { // var daysInMonth = 32 - new Date(jQuery("#%s").val(), jQuery("#%s").val() - 1, 32).getDate(); // jQuery("#%s option").attr("disabled", ""); // jQuery("#%s option:gt(" + (%s) +")").attr("disabled", "disabled"); // if (jQuery("#%s").val() > daysInMonth) // { // jQuery("#%s").val(daysInMonth); // } } jQuery(document).ready(function() { jQuery("#%s").datepicker(jQuery.extend({}, { flat: true, mode: 'multiple', minDate: new Date(%s, 1 - 1, 1), maxDate: new Date(%s, 12 - 1, 31), beforeShow: wfd_%s_read_linked, onSelect: wfd_%s_update_linked, showOn: "button" %s }, jQuery.datepicker.regional["%s"], %s, {dateFormat: "yy-mm-dd"})); }); jQuery("#%s, #%s, #%s").change(wfd_%s_check_linked_days); </script> EOF , $prefix, $id, $this->generateId($name . '[year]'), $this->generateId($name . '[month]'), $this->generateId($name . '[day]'), $prefix, $this->generateId($name . '[year]'), $this->generateId($name . '[month]'), $this->generateId($name . '[day]'), $prefix, $this->generateId($name . '[year]'), $this->generateId($name . '[month]'), $this->generateId($name . '[day]'), $this->generateId($name . '[day]'), $this->getOption('can_be_empty') ? 'daysInMonth' : 'daysInMonth - 1', $this->generateId($name . '[day]'), $this->generateId($name . '[day]'), $id, min($this->getOption('years')), max($this->getOption('years')), $prefix, $prefix, $image, $this->getOption('culture'), $this->getOption('config'), $this->generateId($name . '[day]'), $this->generateId($name . '[month]'), $this->generateId($name . '[year]'), $prefix); }
public function configure() { self::$years = range(2010, 2015); $sfWidegetFormDate = new sfWidgetFormDate(array('format' => '%year%年%month%月%day%日', 'years' => array_combine(self::$years, self::$years), 'can_be_empty' => false)); //$sfWidegetFormDate->render('start_date', array('year' => date('Y'), 'month' => date('n'), 'day' => date('j'))); $sfWidegetFormDate->render('date'); $this->setWidgets(array('from_address' => new sfWidgetFormInputText(), 'from_lat' => new sfWidgetFormInputText(), 'from_lon' => new sfWidgetFormInputText(), 'to_address' => new sfWidgetFormInputText(), 'to_lat' => new sfWidgetFormInputText(), 'to_lon' => new sfWidgetFormInputText(), 'add_event_depart_date' => $sfWidegetFormDate, 'add_event_depart_time' => new sfWidgetFormTime(), 'detail' => new sfWidgetFormTextarea())); $this->widgetSchema->setLabels(array('from_address' => '出発地', 'from_lat' => '出発地の緯度', 'from_lon' => '出発地の経度', 'to_address' => '目的地', 'to_lat' => '目的地の緯度', 'to_lon' => '目的地の経度', 'add_event_depart_date' => '出発日', 'add_event_depart_time' => '出発時刻', 'detail' => '詳細')); $this->setValidators(array('from_address' => new sfValidatorString(array(), array('required' => '出発地を入力してください。')), 'from_lat' => new sfValidatorString(array(), array('required' => '出発地の緯度を入力してください。')), 'from_lon' => new sfValidatorString(array(), array('required' => '出発地の経度を入力してください。')), 'to_address' => new sfValidatorString(array(), array('required' => '目的地を入力してください。')), 'to_lat' => new sfValidatorString(array(), array('required' => '目的地の緯度を入力してください。')), 'to_lon' => new sfValidatorString(array(), array('required' => '目的地の経度を入力してください。')), 'add_event_depart_date' => new sfValidatorDate(array(), array('required' => '日付を選択してください。')), 'add_event_depart_time' => new sfValidatorTime(array(), array('required' => '時刻を選択してください。')), 'detail' => new sfValidatorString(array(), array('required' => '詳細を入力してください。')))); $this->validatorSchema->setOption('allow_extra_fields', true); }
public function configure() { $year = (int) date('Y'); self::$years = range($year, $year + 1); $sfWidegetFormDate = new sfWidgetFormDate(array('format' => '%year%年<br>%month%月%day%日', 'years' => array_combine(self::$years, self::$years), 'can_be_empty' => false)); $min = array('00' => '00', '15' => 15, '30' => 30, '45' => 45); //$sfWidegetFormDate->render('start_date', array('year' => date('Y'), 'month' => date('n'), 'day' => date('j'))); $sfWidegetFormDate->render('date'); $this->setWidgets(array('from_address' => new sfWidgetFormInputText(), 'from_lat' => new sfWidgetFormInputHidden(), 'from_lon' => new sfWidgetFormInputHidden(), 'to_address' => new sfWidgetFormInputText(), 'to_lat' => new sfWidgetFormInputHidden(), 'to_lon' => new sfWidgetFormInputHidden(), 'depart_date' => $sfWidegetFormDate, 'depart_time' => new sfWidgetFormTime(array('can_be_empty' => false, 'minutes' => $min)), 'category' => new sfWidgetFormChoice(array('choices' => self::$categories)))); $this->widgetSchema->setLabels(array('from_address' => '出発地', 'from_lat' => '出発地の緯度', 'from_lon' => '出発地の経度', 'to_address' => '目的地', 'to_lat' => '目的地の緯度', 'to_lon' => '目的地の経度', 'depart_date' => '出発日', 'depart_time' => '出発時刻', 'category' => 'タクシー選択')); $this->setValidators(array('from_address' => new sfValidatorString(array(), array('required' => '出発地を入力してください。')), 'from_lat' => new sfValidatorString(array(), array('required' => '出発地の緯度を入力してください。')), 'from_lon' => new sfValidatorString(array(), array('required' => '出発地の経度を入力してください。')), 'to_address' => new sfValidatorString(array(), array('required' => '目的地を入力してください。')), 'to_lat' => new sfValidatorString(array(), array('required' => '目的地の緯度を入力してください。')), 'to_lon' => new sfValidatorString(array(), array('required' => '目的地の経度を入力してください。')), 'depart_date' => new sfValidatorDate(array(), array('required' => '日付を選択してください。')), 'depart_time' => new sfValidatorTime(array(), array('required' => '時刻を選択してください。')), 'category' => new sfValidatorChoice(array('choices' => array_keys(self::$categories)), array('required' => 'タクシーを選択してください。')))); $this->validatorSchema->setOption('allow_extra_fields', true); }
public static function renderFormFieldByType($f, $values) { $value = isset($values[$f['id']]) ? $values[$f['id']] : ''; $attributes = array(); switch ($f['type']) { case 'file': $html = ''; if ($value > 0) { if ($a = Doctrine_Core::getTable('Attachments')->find($value)) { $html = '<br>' . Attachments::getLink($a) . input_hidden_tag('extra_fields_files[' . $f['id'] . ']', $value) . '<br>' . input_checkbox_tag('extra_fields_files_delete[' . $f['id'] . ']', $value) . ' <label for="extra_fields_files_delete_' . $f['id'] . '">' . __('Delete') . '</label>'; $attributes['class'] = ''; } } return input_file_tag('extra_fields[' . $f['id'] . ']', '', $attributes) . $html; break; case 'number': return input_tag('extra_fields[' . $f['id'] . ']', $value, $attributes); break; case 'text': case 'url': $attributes['size'] = '40'; return input_tag('extra_fields[' . $f['id'] . ']', $value, $attributes); break; case 'textarea': return textarea_tag('extra_fields[' . $f['id'] . ']', $value, $attributes); break; case 'textarea_wysiwyg': if (isset($attributes['class'])) { $attributes['class'] .= ' editor'; } else { $attributes['class'] = 'editor'; } return textarea_tag('extra_fields[' . $f['id'] . ']', $value, $attributes); break; case 'date': if (isset($attributes['class'])) { $attributes['class'] .= ' datepicker'; } else { $attributes['class'] = 'datepicker'; } $attributes['size'] = '11'; return input_tag('extra_fields[' . $f['id'] . ']', $value, $attributes); break; case 'date_range': if (isset($attributes['class'])) { $attributes['class'] .= ' datepicker'; } else { $attributes['class'] = 'datepicker'; } $attributes['size'] = '11'; if (strlen($value) > 0) { $value = explode('|', $value); } else { $value = array('', ''); } return __('From') . ': ' . input_tag('extra_fields[' . $f['id'] . '][from]', $value[0], $attributes) . ' ' . __('To') . ': ' . input_tag('extra_fields[' . $f['id'] . '][to]', $value[1], $attributes); break; case 'date_time': if (isset($attributes['class'])) { $attributes['class'] .= ' datetimepicker'; } else { $attributes['class'] = 'datetimepicker'; } $attributes['size'] = '17'; return input_tag('extra_fields[' . $f['id'] . ']', $value, $attributes); break; case 'date_dropdown': $years = range(date('Y') - 100, date('Y') + 20); $w = new sfWidgetFormDate(array('years' => array_combine($years, $years), 'format' => __('Year') . ':%year% ' . __('Month') . ':%month% ' . __('Day') . ':%day%')); return $w->render('extra_fields[' . $f['id'] . ']', $value, $attributes); break; case 'pull_down': $choices = array(); foreach (explode("\n", $f['default_values']) as $v) { $choices[trim($v)] = trim($v); } return select_tag('extra_fields[' . $f['id'] . ']', $value, array('choices' => $choices), $attributes); break; case 'checkbox': $choices = array(); foreach (explode("\n", $f['default_values']) as $v) { $choices[trim($v)] = trim($v); } return '<div id="checkboxesList' . $f['id'] . '" class="checkboxesList">' . select_tag('extra_fields[' . $f['id'] . ']', explode("\n", $value), array('choices' => $choices, 'expanded' => true, 'multiple' => true), $attributes) . '</div>'; break; case 'radiobox': $choices = array(); foreach (explode("\n", $f['default_values']) as $v) { $choices[trim($v)] = trim($v); } return select_tag('extra_fields[' . $f['id'] . ']', $value, array('choices' => $choices, 'expanded' => true), $attributes); break; } }
$dom->validateOnParse = true; // ->render() $t->diag('->render()'); foreach (array($year . '-10-15' => array('year' => $year, 'month' => 10, 'day' => 15), time() => array('year' => date('Y'), 'month' => date('m'), 'day' => date('d')), 'tomorrow' => array('year' => date('Y', time() + 86400), 'month' => date('m', time() + 86400), 'day' => date('d', time() + 86400))) as $date => $values) { $dom->loadHTML($w->render('foo', $date)); $css = new sfDomCssSelector($dom); // selected date $t->is($css->matchSingle('#foo_year option[value="' . $values['year'] . '"][selected="selected"]')->getValue(), $values['year'], '->render() renders a select tag for the year'); $t->is($css->matchSingle('#foo_month option[value="' . $values['month'] . '"][selected="selected"]')->getValue(), $values['month'], '->render() renders a select tag for the month'); $t->is($css->matchSingle('#foo_day option[value="' . $values['day'] . '"][selected="selected"]')->getValue(), $values['day'], '->render() renders a select tag for the day'); } // pre-epoch date $t->diag('pre-epoch date'); $years = range(1901, 1920); $w1 = new sfWidgetFormDate(array('years' => array_combine($years, $years))); $dom->loadHTML($w1->render('foo', '1910-01-15')); $css = new sfDomCssSelector($dom); $t->is($css->matchSingle('#foo_year option[value="1910"][selected="selected"]')->getValue(), 1910, '->render() renders a select tag for the year'); $t->is($css->matchSingle('#foo_month option[value="01"][selected="selected"]')->getValue(), 01, '->render() renders a select tag for the month'); $t->is($css->matchSingle('#foo_day option[value="15"][selected="selected"]')->getValue(), 15, '->render() renders a select tag for the day'); // date as an array $t->diag('date as an array'); $values = array('year' => $year, 'month' => 10, 'day' => 15); $dom->loadHTML($w->render('foo', $values)); $css = new sfDomCssSelector($dom); $t->is($css->matchSingle('#foo_year option[value="' . $values['year'] . '"][selected="selected"]')->getValue(), $values['year'], '->render() renders a select tag for the year'); $t->is($css->matchSingle('#foo_month option[value="' . $values['month'] . '"][selected="selected"]')->getValue(), $values['month'], '->render() renders a select tag for the month'); $t->is($css->matchSingle('#foo_day option[value="' . $values['day'] . '"][selected="selected"]')->getValue(), $values['day'], '->render() renders a select tag for the day'); // invalid date $t->diag('invalid date'); $dom->loadHTML($w->render('foo', array('year' => null, 'month' => 10)));
/** * @param string $name The element name * @param string $value The date displayed in this widget * @param array $attributes An array of HTML attributes to be merged with the default HTML attributes * @param array $errors An array of errors for the field * * @return string An HTML tag string * * @see sfWidgetFormJQueryDate * @see sfWidgetForm */ public function render($name, $value = null, $attributes = array(), $errors = array()) { $prefix = $this->generateId($name); $image = ''; if (false !== $this->getOption('image')) { $image = sprintf(', buttonImage: "%s", buttonImageOnly: true', $this->getOption('image')); } $time_str = ''; if ($this->getOption('with_time')) { $widget = new sfWidgetFormTime(array('empty_values' => array_merge(array('hour' => '', 'minute' => '', 'second' => ''), $this->getOption('empty_values')), 'with_seconds' => $this->getOption('with_seconds'))); $time_str = $widget->render($name, $value, $attributes, $errors); } $script_to_format = '<script type="text/javascript"> function wfd_%1$s_read_linked() { var day = 1; var month = 1; var year = %2$s; if (jQuery("#%3$s").val() != "") { year = jQuery("#%3$s").val(); } else if (jQuery("#%3$s").hasClass("to_date")) { year = %4$s; } if (jQuery("#%5$s").val() != "") { month = jQuery("#%5$s").val(); } else if (jQuery("#%5$s").hasClass("to_date")) { month = 12; } if (jQuery("#%5$s").val() == "") { jQuery("#%6$s").val(""); } var daysInMonth = 32 - new Date(year, month - 1, 32).getDate(); if ((jQuery("#%3$s").val() != "") && (jQuery("#%5$s").val() != "") && (jQuery("#%6$s").val() != "")) { day = jQuery("#%6$s").val(); } else if (jQuery("#%3$s").hasClass("to_date")) { day = daysInMonth; } jQuery("#%7$s").val(year + "-" + month + "-" + day); if(jQuery("#%7$s").val() == "%4$s-12-31") { jQuery("#%7$s").val( jQuery(".from_date[id$=\\"_year\\"]").val() + "-" + jQuery(".from_date[id$=\\"_month\\"]").val() + "-" + jQuery(".from_date[id$=\\"_day\\"]").val() ); } return {}; } function wfd_%1$s_update_linked(date) { a_date = date.split("-"); jQuery("#%3$s").val(parseInt(a_date[0],10)); jQuery("#%5$s").val(parseInt(a_date[1],10)); jQuery("#%6$s").val(parseInt(a_date[2],10)); } function wfd_%1$s_check_linked_days() { var daysInMonth = 32 - new Date(jQuery("#%3$s").val(), jQuery("#%5$s").val() - 1, 32).getDate(); jQuery("#%6$s option").removeAttr("disabled"); jQuery("#%6$s option:gt(" + (%8$s) +")").attr("disabled", "disabled"); if (jQuery("#%6$s").val() > daysInMonth) { jQuery("#%6$s").val(daysInMonth); } } jQuery(document).ready(function() { jQuery("#%7$s").datepicker(jQuery.extend({}, { minDate: new Date(%2$s, 1 - 1, 1), maxDate: new Date(%9$s, 12 - 1, 31), yearRange: "%2$s:%9$s", beforeShow: wfd_%1$s_read_linked, onSelect: wfd_%1$s_update_linked, changeMonth: true, changeYear: true, showButtonPanel: false, beforeShow: function(input, inst) { var newclass = "%13$s"; if (newclass != "" && !inst.dpDiv.parent().hasClass(newclass) && jQuery("#%7$s").closest("form").hasClass(newclass)){ inst.dpDiv.wrap("<div class=\\""+newclass+"\\"></div>") } }, showOn: "button" %10$s }, jQuery.datepicker.regional["%11$s"], %12$s, {dateFormat: "yy-mm-dd"})); }); jQuery("#%6$s, #%5$s, #%3$s").change(wfd_%1$s_check_linked_days); </script>'; return parent::render($name, $value, $attributes, $errors) . $this->renderTag('input', array('type' => 'hidden', 'size' => 10, 'id' => $id = $this->generateId($name) . '_jquery_control', 'disabled' => 'disabled')) . sprintf($script_to_format, $prefix, min($this->getOption('years')), $this->generateId($name . '[year]'), date('Y'), $this->generateId($name . '[month]'), $this->generateId($name . '[day]'), $id, $this->getOption('can_be_empty') ? 'daysInMonth' : 'daysInMonth - 1', max($this->getOption('years')), $image, $this->getOption('culture'), $this->getOption('config'), $this->getOption('wrap_class')) . $time_str; }
/** * @param string $name The element name * @param string $value The date displayed in this widget * @param array $attributes An array of HTML attributes to be merged with the default HTML attributes * @param array $errors An array of errors for the field * * @return string An HTML tag string * * @see sfWidgetForm */ public function render($name, $value = null, $attributes = array(), $errors = array()) { $prefix = $this->generateId($name); // Spike Broehm: hyphens are not valid in function names $prefix = str_replace('-', '_', $prefix); $image = ''; if (false !== $this->getOption('image')) { $image = sprintf(', buttonImage: "%s", buttonImageOnly: true', $this->getOption('image')); } return '<div class="a-date-wrapper" id="' . $prefix . '-date">' . '<span style="display: none">' . parent::render($name, $value, $attributes, $errors) . '</span>' . $this->renderTag('input', array('type' => 'text', 'size' => 10, 'id' => $id = $this->generateId($name) . '_jquery_control', 'class' => isset($attributes['class']) ? $attributes['class'] : '', 'onBlur' => $prefix . "_update_linked(\$('#{$id}').val())")) . sprintf(<<<EOF <script type="text/javascript"> function %s_read_linked() { var sel = '#%s'; var month = '#%s'; var day = '#%s'; var year = '#%s'; val = \$(month).val() + "/" + \$(day).val() + "/" + \$(year).val(); if (val === '//') { val = ''; } \$(sel).val(val); return {}; } function %s_update_linked(date) { var components = date.match(/(\\d+)\\/(\\d+)\\/(\\d\\d\\d\\d)/); var month = "#%s"; var day = "#%s"; var year = "#%s"; if (!components) { if (date.length) { alert("The date must be in MM/DD/YYYY format. Example: 09/29/2009. Hint: select a date from the calendar."); \$('#{$id}').focus(); } // TODO: an option to make it mandatory \$(month).val(''); \$(day).val(''); \$(year).val(''); return; } \$(month).val(components[1]); \$(day).val(components[2]); \$(year).val(components[3]); // Something we can bind to update other fields \$('#{$id}').trigger('aDateUpdated'); } \$(function() { %s_read_linked(); \$("#%s").datepicker(\$.extend({}, { dateFormat: "mm/dd/yyyy", minDate: new Date(%s, 1 - 1, 1), maxDate: new Date(%s, 12 - 1, 31), beforeShow: %s_read_linked, onSelect: %s_update_linked, showOn: "both", \t\tshowAnim: \t"fadeIn" %s }, \$.datepicker.regional["%s"], %s)); \t// General useability stuff that the original date widget was lacking because it was made by robots and not actual human beings \t\$('.ui-datepicker-trigger').attr('title','Choose A Date').hover(function(){ \t\t\$(this).fadeTo(0,.5); \t},function(){ \t\t\$(this).fadeTo(0,1);\t \t}); \t\t }); </script> EOF , $prefix, $id, $this->generateId($name . '[month]'), $this->generateId($name . '[day]'), $this->generateId($name . '[year]'), $prefix, $this->generateId($name . '[month]'), $this->generateId($name . '[day]'), $this->generateId($name . '[year]'), $prefix, $id, min($this->getOption('years')), max($this->getOption('years')), $prefix, $prefix, $image, $this->getOption('culture'), $this->getOption('config')) . '</div>'; }