Rev 419 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/** phpMyEdit - instant MySQL table editor and code generator** extensions/phpMyEdit-calpopup.class.php - phpMyEdit calendar popup extension* ____________________________________________________________** Contribution of Adam Hammond <php@pixolet.co.uk>, London, UK* Copyright (c) 2003-2006 Platon Group, http://platon.sk/* All rights reserved.** See README file for more information about this software.* See COPYING file for license information.** Download the latest version from* http://platon.sk/projects/phpMyEdit/*//* $Platon: phpMyEdit/extensions/phpMyEdit-calpopup.class.php,v 1.9 2006-01-22 21:44:17 nepto Exp $ *//*OVERVIEW--------NOTE...This extension will not work with the CVS version of PMEcalPopup extends the standard phpMyEdit class to allowa calendar popup helper to be put on any text field.This extension uses the free jsCalendar code fromhttp://dynarch.com/mishoo/calendar.epl website.REQUIREMENTS------------The requirement is a properly installed jsCalendar script.All browsers supported by jsCalendar are supported by thisextension.USAGE-----This extension enables the display of a popup calendar selectionagainst selected fields.In order to use it, you should:1. Load the jsCalendar scripts in the <head>...</head> section ofyour phpMyEdit calling program, substituting the correct paths:<script type="text/javascript" src="js/calendar.js"></script><script type="text/javascript" src="js/lang/calendar-en.js"></script><script type="text/javascript" src="js/calendar-setup.js"></script>2. Choose your preferred jsCalendar CSS file (see jsCalendardocumentation) and add the following in the <head>...</head>section of your phpMyEdit calling program, substituting thecorrect path:<link rel="stylesheet" type="text/css" media="screen"href="css/calendar-system.css">NOTE: To avoid an unwanted side effect in the CSS styleproduced by phpMyEditSetup.php, add a 'width:auto' propertyinto the '.calendar table' entry in your selected jsCalendarstyle sheet.3. Call to phpMyEdit-calPopup.class.php insteadof phpMyEdit.class.php.Example:require_once 'extensions/phpMyEdit-calpopup.class.php';new phpMyEdit_calpopup($opts);4. Add 'calendar' parameter to the field definitions where youwant a calendar popup in your phpMyEdit calling program.Example:$opts['fdd']['col_name'] = array('name' => 'Column','select' => 'T','options' => 'ACPVD','required' => true,'calendar' => true);This is will display a button next to the field which pops upa calendar when clicked. If that field has a 'strftimemask'parameter set, it will use this for the date format.For more advanced usage, you can set the 'calendar' parameterto an array of valid jsCalendar Calendar.setup options(see jSCalendar document for details). Note that not allof these options make sense to use in phpMyEdit, and someof them will actively break the function.Example:$opts['fdd']['col_name'] = array('name' => 'Column','select' => 'T','options' => 'ACPVD','required' => true,'calendar' => array('ifFormat' => '%Y/%m/%d', // defaults to the ['strftimemask']'firstDay' => 1, // 0 = Sunday, 1 = Monday'singleClick' => true, // single or double click to close'weekNumbers' => true, // Show week numbers'showsTime' => false, // Show time as well as date'timeFormat' => '24', // 12 or 24 hour clock'label' => '...', // button label (used by phpMyEdit)'date' => '2003-12-19 10:00' // Initial date/time for popup// (see notes below)));NOTES-----1. The popup will normally set the initial value to the currentfield value or to current date/time. 'date' option will alwaysoverride this, even if there is a current date/time valuein the field. If you want a default value only if the fieldis currently empty, use the phpMyEdit 'default' option.2. Only the options listed above may be set by the user, any otheroptions will be ignored.SEARCH KEYWORD--------------Search for "CalPopup" string in this source code,to find all extension related modifications.*/require_once dirname(__FILE__).'/../phpMyEdit.class.php';class phpMyEdit_calpopup extends phpMyEdit{/* CalPopup mod start *//* Array for collecting list of fields with calendar popups */var $calendars;/* Array of valid options for passing to Calendar.setup */var $valid_opts = array('button','ifFormat','singleClick','firstDay','weekNumbers','showsTime','timeFormat','date');/*** Checks to see if the calendar parameter is set on the field** @param k current field name* @param curval current value of field (set to null for default)** If the calendar parameter is set on the field, this function displays* the button. It then pushes the Calendar.setup parameters into an array,* including the user specified ones in the calling program is they exist.* This array is then added to the $calendars array indexed by the field* name. This allows for multiple fields with calendar popups.*/function CalPopup_helper($k, $curval) /* {{{ */{if (@$this->fdd[$k]['calendar']) {$cal_ar['ifFormat'] = '%Y-%m-%d %H:%M';$cal_ar['showsTime'] = true;$cal_ar['singleClick'] = false;if (isset($curval)) {if (substr($curval, 0, 4) != '0000')$cal_ar['date'] = $curval;}if (isset($this->fdd[$k]['strftimemask'])) {$cal_ar['ifFormat'] = $this->fdd[$k]['strftimemask'];}if (is_array($this->fdd[$k]['calendar'])) {foreach($this->fdd[$k]['calendar'] as $ck => $cv) {$cal_ar[$ck] = $cv;}}$cal_ar['button'] = 'pme_calpopup_button_'.$this->fds[$k];$this->calendars[$this->fds[$k]] = $cal_ar;$label = @$this->fdd[$k]['calendar']['label'];strlen($label) || $label = '...';echo '<button id="',$cal_ar['button'],'">',$label,'</button>';}} /* }}} *//* CalPopup mod end */function display_add_record() /* {{{ */{for ($tab = 0, $k = 0; $k < $this->num_fds; $k++) {if (isset($this->fdd[$k]['tab']) && $this->tabs_enabled() && $k > 0) {$tab++;echo '</table>',"\n";echo '</div>',"\n";echo '<div id="phpMyEdit_tab',$tab,'">',"\n";echo '<table class="',$this->getCSSclass('main'),'" summary="',$this->tb,'">',"\n";}if (! $this->displayed[$k]) {continue;}if ($this->hidden($k)) {echo $this->htmlHidden($this->fds[$k], $row["qf$k"]);continue;}$css_postfix = @$this->fdd[$k]['css']['postfix'];$css_class_name = $this->getCSSclass('input', null, 'next', $css_postfix);echo '<tr class="',$this->getCSSclass('row', null, true, $css_postfix),'">',"\n";echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'">',$this->fdd[$k]['name'],'</td>',"\n";echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';echo $this->getColAttributes($k),">\n";if ($this->col_has_values($k)) {$vals = $this->set_values($k);$selected = @$this->fdd[$k]['default'];$multiple = $this->col_has_multiple_select($k);$readonly = $this->readonly($k);$strip_tags = true;$escape = true;echo $this->htmlSelect($this->fds[$k], $css_class_name, $vals, $selected,$multiple, $readonly, $strip_tags, $escape);} elseif (isset ($this->fdd[$k]['textarea'])) {echo '<textarea class="',$css_class_name,'" name="',$this->fds[$k],'"';echo ($this->readonly($k) ? ' disabled' : '');if (intval($this->fdd[$k]['textarea']['rows']) > 0) {echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';}if (intval($this->fdd[$k]['textarea']['cols']) > 0) {echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';}if (isset($this->fdd[$k]['textarea']['wrap'])) {echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';} else {echo ' wrap="virtual"';}echo '>',htmlspecialchars($this->fdd[$k]['default']),'</textarea>',"\n";} else {// Simple edit box required$size_ml_props = '';$maxlen = intval($this->fdd[$k]['maxlen']);$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);$size && $size_ml_props .= ' size="'.$size.'"';$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';/* CalPopup mod start */if (@$this->fdd[$k]['calendar']) {$size_ml_props .= ' id="pme_calpopup_input_'.$this->fds[$k].'"';}/* CalPopup mod end */echo '<input class="',$css_class_name,'" type="text" ';echo ($this->readonly($k) ? 'disabled ' : ''),' name="',$this->fds[$k],'"';echo $size_ml_props,' value="';echo htmlspecialchars($this->fdd[$k]['default']),'">';/* CalPopup mod start *//* Call CalPopup helper function */$this->CalPopup_helper($k, null);/* CalPopup mod end */}echo '</td>',"\n";if ($this->guidance) {$css_class_name = $this->getCSSclass('help', null, true, $css_postfix);$cell_value = $this->fdd[$k]['help'] ? $this->fdd[$k]['help'] : ' ';echo '<td class="',$css_class_name,'">',$cell_value,'</td>',"\n";}echo '</tr>',"\n";}} /* }}} */function display_change_field($row, $k) /* {{{ */{$css_postfix = @$this->fdd[$k]['css']['postfix'];$css_class_name = $this->getCSSclass('input', null, true, $css_postfix);echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';echo $this->getColAttributes($k),">\n";if ($this->col_has_values($k)) {$vals = $this->set_values($k);$multiple = $this->col_has_multiple_select($k);$readonly = $this->readonly($k);$strip_tags = true;$escape = true;echo $this->htmlSelect($this->fds[$k], $css_class_name, $vals, $row["qf$k"],$multiple, $readonly, $strip_tags, $escape);} elseif (isset($this->fdd[$k]['textarea'])) {echo '<textarea class="',$css_class_name,'" name="',$this->fds[$k],'"';echo ($this->readonly($k) ? ' disabled' : '');if (intval($this->fdd[$k]['textarea']['rows']) > 0) {echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';}if (intval($this->fdd[$k]['textarea']['cols']) > 0) {echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';}if (isset($this->fdd[$k]['textarea']['wrap'])) {echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';} else {echo ' wrap="virtual"';}echo '>',htmlspecialchars($row["qf$k"]),'</textarea>',"\n";} else {$size_ml_props = '';$maxlen = intval($this->fdd[$k]['maxlen']);$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);$size && $size_ml_props .= ' size="'.$size.'"';$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';/* CalPopup mod start */if (@$this->fdd[$k]['calendar']) {$size_ml_props .= ' id="pme_calpopup_input_'.$this->fds[$k].'"';}/* CalPopup mod end */echo '<input class="',$css_class_name,'" type="text" ';echo ($this->readonly($k) ? 'disabled ' : ''),'name="',$this->fds[$k],'" value="';echo htmlspecialchars($row["qf$k"]),'" ',$size_ml_props,'>',"\n";/* CalPopup mod start *//* Call CalPopup helper function */$this->CalPopup_helper($k, htmlspecialchars($row["qf$k"]));/* CalPopup mod end */}echo '</td>',"\n";} /* }}} */function form_end() /* {{{ */{if ($this->display['form']) {echo '</form>',"\n";/* CalPopup mod start *//* Add script calls to the end of the form for all fieldswith calendar popups. */if (isset($this->calendars)) {echo '<script type="text/javascript"><!--',"\n";foreach($this->calendars as $ck => $cv) {echo 'Calendar.setup({',"\n";foreach ($cv as $ck1 => $cv1) {if (in_array($ck1, $this->valid_opts)) {echo "\t",str_pad($ck1, 15),' : "',$cv1,'",',"\n";}}echo "\t",str_pad('inputField', 15),' : "pme_calpopup_input_',$ck,'"',"\n";echo '});',"\n";};echo '// --></script>',"\n";};/* CalPopup mod end */};} /* }}} */}?>