Blame | Last modification | View Log | RSS feed
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');/*** CodeIgniter** An open source application development framework for PHP 4.3.2 or newer** @package CodeIgniter* @author ExpressionEngine Dev Team* @copyright Copyright (c) 2008, EllisLab, Inc.* @license http://codeigniter.com/user_guide/license.html* @link http://codeigniter.com* @since Version 1.0* @filesource*/// ------------------------------------------------------------------------/*Instructions:Load the plugin using:$this->load->plugin('js_calendar');Once loaded you'll add the calendar script to the <head> of your page like this:<?php echo js_calendar_script('my_form'); ?>The above function will be passed the name of your form.Then to show the actual calendar you'll do this:<?php echo js_calendar_write('entry_date', time(), true);?><form name="my_form"><input type="text" name="entry_date" value="" onblur="update_calendar(this.name, this.value);" /><p><a href="javascript:void(0);" onClick="set_to_time('entry_date', '<?php echo time();?>')" >Today</a></p></form>Note: The first parameter is the name of the field containing your date, the second parameter contains the "now" time,and the third tells the calendar whether to highlight the current day or not.Lastly, you'll need some CSS for your calendar:.calendar {border: 1px #6975A3 solid;background-color: transparent;}.calheading {background-color: #7C8BC0;color: #fff;font-family: Lucida Grande, Verdana, Geneva, Sans-serif;font-size: 11px;font-weight: bold;text-align: center;}.calnavleft {background-color: #7C8BC0;font-family: Lucida Grande, Verdana, Geneva, Sans-serif;font-size: 10px;font-weight: bold;color: #fff;padding: 4px;cursor: pointer;}.calnavright {background-color: #7C8BC0;font-family: Lucida Grande, Verdana, Geneva, Sans-serif;font-size: 10px;font-weight: bold;color: #fff;text-align: right;padding: 4px;cursor: pointer;}.caldayheading {background-color: #000;color: #fff;font-family: Lucida Grande, Verdana, Geneva, Sans-serif;font-size: 10px;text-align: center;padding: 6px 2px 6px 2px;}.caldaycells{color: #000;background-color: #D1D7E6;font-family: Lucida Grande, Verdana, Geneva, Sans-serif;font-size: 11px;text-align: center;padding: 4px;border: 1px #E0E5F1 solid;cursor: pointer;}.caldaycellhover{color: #fff;background-color: #B3BCD4;font-family: Lucida Grande, Verdana, Geneva, Sans-serif;font-size: 11px;text-align: center;padding: 4px;border: 1px #B3BCD4 solid;cursor: pointer;}.caldayselected{background-color: #737FAC;color: #fff;font-family: Lucida Grande, Verdana, Geneva, Sans-serif;font-size: 11px;font-weight: bold;text-align: center;border: 1px #566188 solid;padding: 3px;cursor: pointer;}.calblanktop {background-color: #fff;padding: 4px;}.calblankbot {background-color: #fff;padding: 4px;}*/function js_calendar_script($form_name = 'entryform'){$CI =& get_instance();$CI->load->language('calendar');ob_start();?><script type="text/javascript"><!--var form_name = "<?php echo $form_name; ?>";var format = 'us'; // eu or usvar days = new Array('<?php echo $CI->lang->line('cal_su');?>', // Sunday, short name'<?php echo $CI->lang->line('cal_mo');?>', // Monday, short name'<?php echo $CI->lang->line('cal_tu');?>', // Tuesday, short name'<?php echo $CI->lang->line('cal_wed');?>', // Wednesday, short name'<?php echo $CI->lang->line('cal_thu');?>', // Thursday, short name'<?php echo $CI->lang->line('cal_fri');?>', // Friday, short name'<?php echo $CI->lang->line('cal_sat');?>' // Saturday, short name);var months = new Array('<?php echo $CI->lang->line('cal_january');?>','<?php echo $CI->lang->line('cal_february');?>','<?php echo $CI->lang->line('cal_march');?>','<?php echo $CI->lang->line('cal_april');?>','<?php echo $CI->lang->line('cal_mayl');?>','<?php echo $CI->lang->line('cal_june');?>','<?php echo $CI->lang->line('cal_july');?>','<?php echo $CI->lang->line('cal_august');?>','<?php echo $CI->lang->line('cal_september');?>','<?php echo $CI->lang->line('cal_october');?>','<?php echo $CI->lang->line('cal_november');?>','<?php echo $CI->lang->line('cal_december');?>');var last_click = new Array();var current_month = '';var current_year = '';var last_date = '';function calendar(id, d, highlight, adjusted){if (adjusted == undefined){var d = new Date(d * 1000);}this.id = id;this.highlight = highlight;this.date_obj = d;this.write = build_calendar;this.total_days = total_days;this.month = d.getMonth();this.date = d.getDate();this.day = d.getDay();this.year = d.getFullYear();this.hours = d.getHours();this.minutes = d.getMinutes();this.seconds = d.getSeconds();this.date_str = date_str;if (highlight == false){this.selected_date = '';}else{this.selected_date = this.year + '' + this.month + '' + this.date;}// Set the "selected date"d.setDate(1);this.firstDay = d.getDay();//then reset the date object to the correct dated.setDate(this.date);}// Build the body of the calendarfunction build_calendar(){var str = '';// Calendar Headingstr += '<div id="cal' + this.id + '">';str += '<table class="calendar" cellspacing="0" cellpadding="0" border="0" >';str += '<tr>';str += '<td class="calnavleft" onClick="change_month(-1, \'' + this.id + '\')"><<<\/td>';str += '<td colspan="5" class="calheading">' + months[this.month] + ' ' + this.year + '<\/td>';str += '<td class="calnavright" onClick="change_month(1, \'' + this.id + '\')">>><\/td>';str += '<\/tr>';// Day Namesstr += '<tr>';for (i = 0; i < 7; i++){str += '<td class="caldayheading">' + days[i] + '<\/td>';}str += '<\/tr>';// Day Cellsstr += '<tr>';selDate = (last_date != '') ? last_date : this.date;for (j = 0; j < 42; j++){var displayNum = (j - this.firstDay + 1);if (j < this.firstDay) // leading empty cells{str += '<td class="calblanktop"> <\/td>';}else if (displayNum == selDate && this.highlight == true) // Selected date{str += '<td id="' + this.id +'selected" class="caldayselected" onClick="set_date(this,\'' + this.id + '\')">' + displayNum + '<\/td>';}else if (displayNum > this.total_days()){str += '<td class="calblankbot"> <\/td>'; // trailing empty cells}else // Unselected days{str += '<td id="" class="caldaycells" onClick="set_date(this,\'' + this.id + '\'); return false;" onMouseOver="javascript:cell_highlight(this,\'' + displayNum + '\',\'' + this.id + '\');" onMouseOut="javascript:cell_reset(this,\'' + displayNum + '\',\'' + this.id + '\');" >' + displayNum + '<\/td>';}if (j % 7 == 6){str += '<\/tr><tr>';}}str += '<\/tr>';str += '<\/table>';str += '<\/div>';return str;}// Total number of days in a monthfunction total_days(){switch(this.month){case 1: // Check for leap yearif (( this.date_obj.getFullYear() % 4 == 0&& this.date_obj.getFullYear() % 100 != 0)|| this.date_obj.getFullYear() % 400 == 0)return 29;elsereturn 28;case 3:return 30;case 5:return 30;case 8:return 30;case 10:return 30default:return 31;}}// Highlight Cell on Mouseoverfunction cell_highlight(td, num, cal){cal = eval(cal);if (last_click[cal.id] != num){td.className = "caldaycellhover";}}// Reset Cell on MouseOutfunction cell_reset(td, num, cal){cal = eval(cal);if (last_click[cal.id] == num){td.className = "caldayselected";}else{td.className = "caldaycells";}}// Clear Fieldfunction clear_field(id){eval("document." + form_name + "." + id + ".value = ''");document.getElementById(id + "selected").className = "caldaycells";document.getElementById(id + "selected").id = "";cal = eval(id);cal.selected_date = '';}// Set date to specified timefunction set_to_time(id, raw){if (document.getElementById(id + "selected")){document.getElementById(id + "selected").className = "caldaycells";document.getElementById(id + "selected").id = "";}document.getElementById('cal' + id).innerHTML = '<div id="tempcal'+id+'"> <'+'/div>';var nowDate = new Date();nowDate.setTime = raw * 1000;current_month = nowDate.getMonth();current_year = nowDate.getFullYear();current_date = nowDate.getDate();oldcal = eval(id);oldcal.selected_date = current_year + '' + current_month + '' + current_date;cal = new calendar(id, nowDate, true, true);cal.selected_date = current_year + '' + current_month + '' + current_date;last_date = cal.date;document.getElementById('tempcal'+id).innerHTML = cal.write();insert_date(cal);}// Set date to what is in the fieldvar lastDates = new Array();function update_calendar(id, dateValue){if (lastDates[id] == dateValue) return;lastDates[id] = dateValue;var fieldString = dateValue.replace(/\s+/g, ' ');while (fieldString.substring(0,1) == ' '){fieldString = fieldString.substring(1, fieldString.length);}var dateString = fieldString.split(' ');var dateParts = dateString[0].split('-')if (dateParts.length < 3) return;var newYear = dateParts[0];var newMonth = dateParts[1];var newDay = dateParts[2];if (isNaN(newDay) || newDay < 1 || (newDay.length != 1 && newDay.length != 2)) return;if (isNaN(newYear) || newYear < 1 || newYear.length != 4) return;if (isNaN(newMonth) || newMonth < 1 || (newMonth.length != 1 && newMonth.length != 2)) return;if (newMonth > 12) newMonth = 12;if (newDay > 28){switch(newMonth - 1){case 1: // Check for leap yearif ((newYear % 4 == 0 && newYear % 100 != 0) || newYear % 400 == 0){if (newDay > 29) newDay = 29;}else{if (newDay > 28) newDay = 28;}case 3:if (newDay > 30) newDay = 30;case 5:if (newDay > 30) newDay = 30;case 8:if (newDay > 30) newDay = 30;case 10:if (newDay > 30) newDay = 30;default:if (newDay > 31) newDay = 31;}}if (document.getElementById(id + "selected")){document.getElementById(id + "selected").className = "caldaycells";document.getElementById(id + "selected").id = "";}document.getElementById('cal' + id).innerHTML = '<div id="tempcal'+id+'"> <'+'/div>';var nowDate = new Date();nowDate.setDate(newDay);nowDate.setMonth(newMonth - 1);nowDate.setYear(newYear);nowDate.setHours(12);current_month = nowDate.getMonth();current_year = nowDate.getFullYear();cal = new calendar(id, nowDate, true, true);document.getElementById('tempcal'+id).innerHTML = cal.write();}// Set the datefunction set_date(td, cal){cal = eval(cal);// If the user is clicking a cell that is already// selected we'll de-select it and clear the form fieldif (last_click[cal.id] == td.firstChild.nodeValue){td.className = "caldaycells";last_click[cal.id] = '';remove_date(cal);cal.selected_date = '';return;}// Onward!if (document.getElementById(cal.id + "selected")){document.getElementById(cal.id + "selected").className = "caldaycells";document.getElementById(cal.id + "selected").id = "";}td.className = "caldayselected";td.id = cal.id + "selected";cal.selected_date = cal.date_obj.getFullYear() + '' + cal.date_obj.getMonth() + '' + cal.date;cal.date_obj.setDate(td.firstChild.nodeValue);cal = new calendar(cal.id, cal.date_obj, true, true);cal.selected_date = cal.date_obj.getFullYear() + '' + cal.date_obj.getMonth() + '' + cal.date;last_date = cal.date;//cal.datelast_click[cal.id] = cal.date;// Insert the date into the forminsert_date(cal);}/*// Insert the date into the form fieldfunction insert_date(cal){cal = eval(cal);fval = eval("document." + form_name + "." + cal.id);if (fval.value == ''){fval.value = cal.date_str('y');}else{time = fval.value.substring(10);new_date = cal.date_str('n') + time;fval.value = new_date;}}*/// Remove the date from the form fieldfunction remove_date(cal){cal = eval(cal);fval = eval("document." + form_name + "." + cal.id);fval.value = '';}// Change to a new monthfunction change_month(mo, cal){cal = eval(cal);if (current_month != ''){cal.date_obj.setMonth(current_month);cal.date_obj.setYear(current_year);current_month = '';current_year = '';}var newMonth = cal.date_obj.getMonth() + mo;var newDate = cal.date_obj.getDate();if (newMonth == 12){cal.date_obj.setYear(cal.date_obj.getFullYear() + 1)newMonth = 0;}else if (newMonth == -1){cal.date_obj.setYear(cal.date_obj.getFullYear() - 1)newMonth = 11;}if (newDate > 28){var newYear = cal.date_obj.getFullYear();switch(newMonth){case 1: // Check for leap yearif ((newYear % 4 == 0 && newYear % 100 != 0) || newYear % 400 == 0){if (newDate > 29) newDate = 29;}else{if (newDate > 28) newDate = 28;}case 3:if (newDate > 30) newDate = 30;case 5:if (newDate > 30) newDate = 30;case 8:if (newDate > 30) newDate = 30;case 10:if (newDate > 30) newDate = 30;default:if (newDate > 31) newDate = 31;}}cal.date_obj.setDate(newDate);cal.date_obj.setMonth(newMonth);new_mdy = cal.date_obj.getFullYear() + '' + cal.date_obj.getMonth() + '' + cal.date;highlight = (cal.selected_date == new_mdy) ? true : false;cal = new calendar(cal.id, cal.date_obj, highlight, true);document.getElementById('cal' + cal.id).innerHTML = cal.write();}// Finalize the date stringfunction date_str(time){var month = this.month + 1;if (month < 10)month = '0' + month;var day = (this.date < 10) ? '0' + this.date : this.date;var minutes = (this.minutes < 10) ? '0' + this.minutes : this.minutes;if (format == 'us'){var hours = (this.hours > 12) ? this.hours - 12 : this.hours;var ampm = (this.hours > 11) ? 'PM' : 'AM'}else{var hours = this.hours;var ampm = '';}if (time == 'y'){return this.year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ' ' + ampm;}else{return this.year + '-' + month + '-' + day;}}//--></script><?php$r = ob_get_contents();ob_end_clean();return $r;}function js_calendar_write($field_id, $time = '', $highlight = TRUE){if ($time == '')$time = time();return'<script type="text/javascript">var '.$field_id.' = new calendar("'.$field_id.'", '.$time.', '.(($highlight == TRUE) ? 'true' : 'false').');document.write('.$field_id.'.write());</script>';}/* End of file js_calendar_pi.php *//* Location: ./system/plugins/js_calendar_pi.php */