using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.ExtendedControls;
using CMS.GlobalHelper;
using CMS.IO;
using CMS.SettingsProvider;
public partial class CMSAdminControls_ModalCalendar_ModalCalendar : CMSCustomCalendarControl
{
protected void Page_Load(object sender, EventArgs e)
{
DateTimePicker datePickerObject = PickerControl as DateTimePicker;
if (datePickerObject == null)
{
return;
}
// Default settings
int numberOfRows = 6;
// Buttons NotAvaible,Done,Now
bool showActionPanel = true;
// Display OK button
bool displayOK = true;
// Text for N/A button
string naText = ResHelper.GetString("general.notavailable");
// Hides if date is selected
bool hideOnDateSelection = false;
// Display seconds
bool displaySeconds = true;
// Add icon - triggers datepicker show
string shownOn = "button";
LoadResources(datePickerObject);
CultureInfo culture = new CultureInfo(datePickerObject.CultureCode, true);
DateTimeFormatInfo info = culture.DateTimeFormat;
// Register default css a js files
ScriptHelper.RegisterJQuery(Page);
ScriptHelper.RegisterScriptFile(Page, "JQuery/jquery-ui-datetimepicker.js");
ScriptHelper.RegisterScriptFile(Page, "Controls/modalCalendar.js");
CSSHelper.RegisterCSSLink(Page, "~/CMSAdminControls/ModalCalendar/Themes/Calendar_core.css");
string datePattern = info.ShortDatePattern.Replace("yyyy", "yy").Replace("'", "");
if (datePickerObject.EditTime)
{
datePattern += " " + (displaySeconds ? info.LongTimePattern : info.ShortTimePattern);
}
bool use24HourMode = !datePattern.Contains("tt");
// Generate 'now' string with full year
string format = info.ShortDatePattern;
if (Regex.Matches(format, "y").Count == 2)
{
format = format.Replace("yy", "yyyy");
}
string now = CMSContext.DateTimeConvert(DateTime.Now, datePickerObject.TimeZone, datePickerObject.CustomTimeZone).ToString(format, culture);
// Localized settings
string todayText = datePickerObject.EditTime ? ResHelper.GetString("calendar.now") : ResHelper.GetString("Calendar.Today");
string localize = String.Format("monthNames:{0},monthNamesShort:{1},dayNames:{2},dayNamesMin:{3},firstDay:{4},", ArrayToString(info.MonthNames), ArrayToString(info.AbbreviatedMonthNames), ArrayToString(info.DayNames), ArrayToString(info.ShortestDayNames), ConvertFirstDayToNumber(info.FirstDayOfWeek));
localize += String.Format("AMDesignator:'{0}',PMDesignator:'{1}',NAText:'{2}',closeText:'{3}',isRTL:{4},prevText:'{5}',nextText:'{6}',defaultDate:'{7}'", info.AMDesignator.Replace("'", "\\'"), info.PMDesignator.Replace("'", "\\'"), naText.Replace("'", "\\'"), ResHelper.GetString("general.ok").Replace("'", "\\'"), culture.TextInfo.IsRightToLeft.ToString().ToLowerCSafe(), ResHelper.GetString("calendar.previous").Replace("'", "\\'"), ResHelper.GetString("calendar.next").Replace("'", "\\'"), now);
string minDate = String.Empty;
string maxDate = String.Empty;
if (datePickerObject.UseCalendarLimit)
{
if (datePickerObject.MinDate != DateTimeHelper.ZERO_TIME)
{
minDate = "minDate: " + (datePickerObject.MinDate.Date - DateTime.Now.Date).Days.ToString() + ",";
}
if (datePickerObject.MaxDate != DateTimeHelper.ZERO_TIME)
{
maxDate = "maxDate: " + (datePickerObject.MaxDate.Date - DateTime.Now.Date).Days.ToString() + ",";
}
}
// Other settings
String buttons = "[" + (displayOK ? "'ok'" : "") + "," + (datePickerObject.AllowEmptyValue ? "'na'" : "") + "," + (datePickerObject.DisplayNow ? "'now'" : "") + "]";
String initParameters = minDate + maxDate + String.Format("numberOfRows:{0},showTimePanel:{1},use24HourMode:{2},showButtonPanel:{3},actionPanelButtons:{4},hideOnDateSelection:{5},displaySeconds:{6},", numberOfRows, datePickerObject.EditTime.ToString().ToLowerCSafe(), use24HourMode.ToString().ToLowerCSafe(), showActionPanel.ToString().ToLowerCSafe(), buttons, hideOnDateSelection.ToString().ToLowerCSafe(), displaySeconds.ToString().ToLowerCSafe());
initParameters += String.Format("IconID:'{0}',showOn:'{1}',dateFormat:'{2}',currentText:'{3}',timeZoneOffset:{4},selectOtherMonths:true,showOtherMonths:true,changeMonth:true,changeYear:true", datePickerObject.CalendarImageClientID, shownOn, datePattern, todayText.Replace("'", "\\'"), datePickerObject.TimeZoneOffset);
// Init calendar
string calendarInit = "$j(function() {$j('#" + datePickerObject.DateTimeTextBox.ClientID + "').cmsdatepicker({" + localize + "," + initParameters + "})});";
ScriptHelper.RegisterClientScriptBlock(Page, GetType(), ClientID + "_RegisterDatePickerFunction", ScriptHelper.GetScript(calendarInit));
ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "DTPickerModalSelectDate" + datePickerObject.DateTimeTextBox.ClientID, ScriptHelper.GetScript(
"function SelectModalDate_" + datePickerObject.DateTimeTextBox.ClientID + "(param, pickerId) { " + Page.ClientScript.GetCallbackEventReference(datePickerObject, "param", "SetDateModal", "pickerId") + " } \n"));
ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "DTPickerModalSetDate", ScriptHelper.GetScript("function SetDateModal(result, context) {$j('#'+context).cmsdatepicker('setDateNoTextBox',result); } \n"));
}
///
/// Converts array to string in special format.
///
/// Input array
private string ArrayToString(IEnumerable arr)
{
StringBuilder ret = new StringBuilder("[");
foreach (string str in arr)
{
ret.Append("'" + str.Replace("'", "\\'") + "',");
}
return ret.ToString().TrimEnd(',') + "]";
}
///
/// Load resources for calendar control.
///
/// Calendar control with settings
private void LoadResources(DateTimePicker datePickerObject)
{
if (Directory.Exists(Server.MapPath(datePickerObject.CustomCalendarSupportFolder)))
{
// Register JS files
string[] files = Directory.GetFiles(Server.MapPath(datePickerObject.CustomCalendarSupportFolder), "*.js");
string path = Server.MapPath("~/");
foreach (string file in files)
{
string relative = "~/" + file.Substring(path.Length).Replace(@"\", "/");
;
ScriptHelper.RegisterScriptFile(Page, relative);
}
// Register CSS files
files = Directory.GetFiles(Server.MapPath(datePickerObject.CustomCalendarSupportFolder), "*.css");
foreach (string file in files)
{
string relative = "~/" + file.Substring(path.Length).Replace(@"\", "/");
;
CSSHelper.RegisterCSSLink(Page, relative);
}
}
}
///
/// Convert starting day of week from enum to number - passed to calendar jquery control.
///
/// Day name
protected int ConvertFirstDayToNumber(DayOfWeek name)
{
switch (name)
{
case DayOfWeek.Monday:
return 1;
case DayOfWeek.Tuesday:
return 2;
case DayOfWeek.Wednesday:
return 3;
case DayOfWeek.Thursday:
return 4;
case DayOfWeek.Friday:
return 5;
case DayOfWeek.Saturday:
return 6;
default:
return 0;
}
}
}