function smarty_function_dhtml_calendar($params, &$smarty) { require_once dirname(__FILE__) . '/../../jscalendar/calendar.php'; $jscalendar_options['firstDate'] = 1; $jscalendar_options['showsTime'] = false; $jscalendar_options['timeFormat'] = "24"; $jscalendar_options['showOthers'] = false; $jscalendar_options['ifFormat'] = "%Y/%m/%d"; $jscalendar_properties['style'] = ''; $jscalendar_properties['name'] = ''; $jscalendar_properties['value'] = ''; if (empty($params['name'])) { $smarty->trigger_error("dhtml_calendar: missing 'name' parameter"); return; } else { $jscalendar_properties['name'] = $params['name']; } if (!empty($params['format'])) { $jscalendar_options['ifFormat'] = $params['format']; } if (!empty($params['value'])) { $jscalendar_properties['value'] = $params['value']; } if (!empty($params['style'])) { $jscalendar_properties['style'] = $params['style']; } if (!empty($params['class'])) { $jscalendar_properties['class'] = $params['class']; } if (strstr($jscalendar_options['ifFormat'], '%H')) { $jscalendar_options['showsTime'] = true; } $calendar = new DHTML_Calendar(dirname(__FILE__) . '/../../jscalendar/'); return $calendar->make_input_field($jscalendar_options, $jscalendar_properties); }
please consider sending it back to me so that I can include it in the calendar distribution. </blockquote> </form> <form action="test.php" method="get"> <input type="hidden" name="submitted" value="1" /> <table> <tr> <td> Date 1: </td> <td> <?php $calendar->make_input_field(array('firstDay' => 1, 'showsTime' => true, 'showOthers' => true, 'ifFormat' => '%Y-%m-%d %I:%M %P', 'timeFormat' => '12'), array('style' => 'width: 15em; color: #840; background-color: #ff8; border: 1px solid #000; text-align: center', 'name' => 'date1', 'value' => strftime('%Y-%m-%d %I:%M %P', strtotime('now')))); ?> </td> </tr> </table> <hr /> <button>Submit</button> </form> <?php } ?> </body>
/** * Esta función genera una cadena que contiene un formulario HTML. Para hacer * esto, toma una plantilla de formulario e inserta en ella los elementos de * formulario. * * @param string $templateName Ruta al archivo de plantilla Smarty a usar. * @param string $title Texto a usar como título del formulario * @param array $arrPreFilledValues Arreglo para asignar variables a mostrar * en el formulario. Este arreglo es idéntico * en formato al arreglo $_POST que se genera * al enviar el formulario lleno, de forma que * se puede usar $_POST directamente para * llenar con valores en caso de que la * validación falle. * * @return string Texto HTML del formulario con valores asignados */ function fetchForm($templateName, $title, $arrPreFilledValues = array()) { /* Función interna para convertir un arreglo especificado en INPUT_EXTRA_PARAM en una cadena de atributos clave=valor adecuada para incluir al final de un widget HTML. Si no existe INPUT_EXTRA_PARAM, o no es un arreglo, se devuelve una cadena vacía */ if (!function_exists('_inputExtraParam_a_atributos')) { function _inputExtraParam_a_atributos(&$arrVars) { if (!isset($arrVars['INPUT_EXTRA_PARAM']) || !is_array($arrVars['INPUT_EXTRA_PARAM']) || count($arrVars['INPUT_EXTRA_PARAM']) <= 0) { return ''; } $listaAttr = array(); foreach ($arrVars['INPUT_EXTRA_PARAM'] as $key => $value) { $listaAttr[] = sprintf('%s="%s"', htmlentities($key, ENT_COMPAT, 'UTF-8'), htmlentities($value, ENT_COMPAT, 'UTF-8')); } return implode(' ', $listaAttr); } } // Función para usar con array_map if (!function_exists('_map_htmlentities')) { function _map_htmlentities($s) { return htmlentities($s, ENT_COMPAT, 'UTF-8'); } } if (!function_exists('_labelName')) { function _labelName($varName, &$arrVars) { $tooltip = ""; if (isset($arrVars['DESCRIPTION'])) { if ($arrVars['DESCRIPTION'] != false && $arrVars['DESCRIPTION'] != "") { $tooltip = 'data-tooltip="' . htmlentities($arrVars['DESCRIPTION'], ENT_COMPAT, 'UTF-8') . '"'; } } if ($tooltip != "") { return sprintf('<label for="%s" %s>%s</label>', htmlentities($varName, ENT_COMPAT, 'UTF-8'), $tooltip, htmlentities($arrVars['LABEL'], ENT_COMPAT, 'UTF-8')); } else { return htmlentities($arrVars['LABEL'], ENT_COMPAT, 'UTF-8'); } } } foreach ($this->arrFormElements as $varName => $arrVars) { if (!isset($arrPreFilledValues[$varName])) { $arrPreFilledValues[$varName] = ""; } $arrMacro = array(); $strInput = ""; $arrVars['EDITABLE'] = isset($arrVars['EDITABLE']) ? $arrVars['EDITABLE'] : ''; // Verificar si se debe mostrar un widget activo para ingreso de valor $bIngresoActivo = $this->modo == 'input' || $this->modo == 'edit' && $arrVars['EDITABLE'] != 'no'; /* El indicar ENT_COMPAT escapa las comillas dobles y deja intactas las comillas simples. Por lo tanto, se asume que todos los usos de $varXXX_escaped serán dentro de comillas dobles, o en texto libre. */ $varName_escaped = htmlentities($varName, ENT_COMPAT, 'UTF-8'); $varValue_escaped = is_array($arrPreFilledValues[$varName]) ? NULL : htmlentities($arrPreFilledValues[$varName], ENT_COMPAT, 'UTF-8'); switch ($arrVars['INPUT_TYPE']) { case "TEXTAREA": $strInput = $bIngresoActivo ? sprintf('<textarea name="%s" rows="%s" cols="%s" %s>%s</textarea>', $varName_escaped, isset($arrVars['ROWS']) ? (int) $arrVars['ROWS'] : 3, isset($arrVars['COLS']) ? (int) $arrVars['COLS'] : 20, _inputExtraParam_a_atributos($arrVars), $varValue_escaped) : $varValue_escaped; break; case "TEXT": $strInput = $bIngresoActivo ? sprintf('<input type="text" name="%s" value="%s" %s />', $varName_escaped, $varValue_escaped, _inputExtraParam_a_atributos($arrVars)) : $varValue_escaped; break; case "CHECKBOX": $checked = 'off'; $disable = 'on'; if ($arrPreFilledValues[$varName] == 'on') { $checked = 'on'; } if ($bIngresoActivo) { $disable = 'off'; } //Funcion definida en misc.lib.php $strInput = checkbox($varName, $checked, $disable); break; case "PASSWORD": $strInput = $bIngresoActivo ? sprintf('<input type="password" name="%s" value="%s" %s />', $varName_escaped, $varValue_escaped, _inputExtraParam_a_atributos($arrVars)) : $varValue_escaped; break; case "HIDDEN": $strInput = sprintf('<input type="hidden" name="%s" value="%s" %s />', $varName_escaped, $varValue_escaped, _inputExtraParam_a_atributos($arrVars)); break; case "FILE": $strInput = $bIngresoActivo ? sprintf('<input type="file" name="%s" %s />', $varName_escaped, _inputExtraParam_a_atributos($arrVars)) : $varValue_escaped; break; case "RADIO": if ($bIngresoActivo) { $strInput = ""; if (is_array($arrVars['INPUT_EXTRA_PARAM'])) { $listaRadio = array(); foreach ($arrVars['INPUT_EXTRA_PARAM'] as $radioValue => $radioLabel) { $listaRadio[] = sprintf('<input type="radio" name="%s" value="%s" %s /> %s ', $varName_escaped, htmlentities($radioValue, ENT_COMPAT, 'UTF-8'), $radioValue == $arrPreFilledValues[$varName] ? 'checked="checked"' : '', htmlentities($radioLabel, ENT_COMPAT, 'UTF-8')); } $strInput = implode("\n", $listaRadio); } } else { $strInput = $varValue_escaped; } break; case "SELECT": if ($bIngresoActivo) { $listaOpts = array(); $keyVals = is_array($arrPreFilledValues[$varName]) ? $arrPreFilledValues[$varName] : array($arrPreFilledValues[$varName]); if (is_array($arrVars['INPUT_EXTRA_PARAM'])) { foreach ($arrVars['INPUT_EXTRA_PARAM'] as $idSeleccion => $nombreSeleccion) { $listaOpts[] = sprintf('<option value="%s" %s>%s</option>', htmlentities($idSeleccion, ENT_COMPAT, 'UTF-8'), in_array($idSeleccion, $keyVals) ? 'selected="selected"' : '', htmlentities($nombreSeleccion, ENT_COMPAT, 'UTF-8')); } } $sNombreSelect = $varName_escaped; $sAttrMultiple = ''; if (isset($arrVars['MULTIPLE']) && $arrVars['MULTIPLE'] != '' && $arrVars['MULTIPLE']) { $sAttrMultiple = 'multiple="multiple"'; $sNombreSelect .= '[]'; } $strInput = sprintf('<select name="%s" id="%s" %s %s %s>%s</select>', $sNombreSelect, $sNombreSelect, $sAttrMultiple, isset($arrVars['SIZE']) && $arrVars['SIZE'] != '' ? sprintf('size="%s"', htmlentities($arrVars['SIZE'], ENT_COMPAT, 'UTF-8')) : '', isset($arrVars['ONCHANGE']) && $arrVars['ONCHANGE'] != '' ? "onchange='{$arrVars['ONCHANGE']}'" : '', implode("\n", $listaOpts)); } else { $strInput = is_array($arrPreFilledValues[$varName]) ? '| ' . implode(' | ', array_map('_map_htmlentities', array_intersect_key($arrVars['INPUT_EXTRA_PARAM'], array_flip($arrPreFilledValues[$varName])))) : (isset($arrVars['INPUT_EXTRA_PARAM'][$arrPreFilledValues[$varName]]) ? htmlentities($arrVars['INPUT_EXTRA_PARAM'][$arrPreFilledValues[$varName]], ENT_COMPAT, 'UTF-8') : ''); } break; case "DATE": if ($bIngresoActivo) { require_once "libs/js/jscalendar/calendar.php"; $time = false; $format = '%d %b %Y'; $timeformat = '12'; $firstDay = 1; if (is_array($arrVars['INPUT_EXTRA_PARAM']) && count($arrVars['INPUT_EXTRA_PARAM']) > 0) { foreach ($arrVars['INPUT_EXTRA_PARAM'] as $key => $value) { if ($key == 'TIME') { $time = $value; } if ($key == 'FORMAT') { $format = $value; } if ($key == 'TIMEFORMAT') { $timeformat = $value; } if ($key == 'FIRSTDAY') { $firstDay = $value; } } } $oCal = new DHTML_Calendar("/libs/js/jscalendar/", "en", "calendar-win2k-2", $time); $this->smarty->assign("HEADER", $oCal->load_files()); $strInput .= $oCal->make_input_field(array('firstDay' => $firstDay, 'showsTime' => true, 'showOthers' => true, 'ifFormat' => $format, 'timeFormat' => $timeformat), array('style' => 'width: 10em; color: #840; background-color: #fafafa; ' . 'border: 1px solid #999999; text-align: center', 'name' => $varName, 'value' => $arrPreFilledValues[$varName])); } else { $strInput = $varValue_escaped; } break; default: $strInput = ""; } $arrMacro['LABEL'] = _labelName($varName, $arrVars); $arrMacro['INPUT'] = $strInput; $this->smarty->assign($varName, $arrMacro); } $this->smarty->assign("title", htmlentities($title, ENT_COMPAT, 'UTF-8')); $this->smarty->assign("mode", $this->modo); return $this->smarty->fetch("file:{$templateName}"); }