Пример #1
0
        /// <summary>
        /// Populates the quick answer box with the next start or end or term
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            this.quickAnswer.Visible = false;
            if (TermDatesDataProvider == null)
            {
                TermDatesDataProvider = new LocalXmlFileProvider();
            }

            var termDatesXml = TermDatesDataProvider.GetXPathData();
            var schoolYears  = termDatesXml.CreateNavigator().Select("/TermDates/SchoolYear");

            while (schoolYears.MoveNext())
            {
                // Ignore any school year once we're into the following August or beyond. This means the XML file can retain the old data.
                if (IsPastSchoolYear(schoolYears.Current))
                {
                    continue;
                }

                var terms = schoolYears.Current.SelectChildren("Term", String.Empty);
                while (terms.MoveNext())
                {
                    var startDate = DateTime.Parse(terms.Current.GetAttribute("startDate", String.Empty));
                    var endDate   = DateTime.Parse(terms.Current.GetAttribute("endDate", String.Empty));

                    if (!quickAnswer.Visible)
                    {
                        if (DateTime.Now.Date >= startDate && DateTime.Now.Date <= endDate)
                        {
                            quickAnswerText.Text       = "School term ends on ";
                            quickAnswerDatum.InnerText = endDate.ToString("dddd d MMMM");
                            quickAnswer.Visible        = true;
                        }
                        else if (DateTime.Now.Date < startDate)
                        {
                            quickAnswerText.Text       = "School term starts on ";
                            quickAnswerDatum.InnerText = startDate.ToString("dddd d MMMM");
                            quickAnswer.Visible        = true;
                        }
                    }
                }
            }
        }
        private void DisplayTable()
        {
            if (TermDatesDataProvider == null)
            {
                TermDatesDataProvider = new LocalXmlFileProvider();
            }

            var termDatesXml  = TermDatesDataProvider.GetXPathData();
            var termDatesHtml = new StringBuilder();
            var schoolYears   = termDatesXml.CreateNavigator().Select("/TermDates/SchoolYear");

            while (schoolYears.MoveNext())
            {
                var startYear = Int32.Parse(schoolYears.Current.GetAttribute("startYear", String.Empty), CultureInfo.CurrentCulture);

                // Ignore any school year once we're into the following August or beyond. This means the XML file can retain the old data.
                if (IsPastSchoolYear(schoolYears.Current))
                {
                    continue;
                }

                termDatesHtml.Append("<table>");
                termDatesHtml.Append("<caption>")
                .Append(String.Format(CultureInfo.CurrentCulture, "September {0} to August {1}", startYear.ToString(CultureInfo.CurrentCulture), (startYear + 1).ToString(CultureInfo.CurrentCulture)))
                .Append("</caption>").Append(Environment.NewLine);
                termDatesHtml.Append("<thead><tr><th scope=\"col\">Term</th><th scope=\"col\">Start date</th><th scope=\"col\">End date</th></tr></thead><tbody>").Append(Environment.NewLine);

                var terms = schoolYears.Current.SelectChildren(XPathNodeType.Element);
                while (terms.MoveNext())
                {
                    var name      = terms.Current.GetAttribute("name", String.Empty);
                    var startDate = DateTime.Parse(terms.Current.GetAttribute("startDate", String.Empty));
                    var endDate   = DateTime.Parse(terms.Current.GetAttribute("endDate", String.Empty));

                    switch (terms.Current.LocalName)
                    {
                    case "Term":

                        // Add hidden text to name so that it makes sense out of context, in iCalendar format
                        name = "<span class=\"aural\">School </span>" + Server.HtmlEncode(name);

                        break;

                    case "Holiday":

                        // Add hidden text to name so that it makes sense out of context, in iCalendar format
                        name = Server.HtmlEncode(name).Replace(" holiday", " <span class=\"aural\">school</span> holiday")
                               .Replace(" break", " <span class=\"aural\">school</span> break");

                        break;

                    case "InsetDay":

                        // Add hidden text to name so that it makes sense out of context, in iCalendar format
                        name = "<span class=\"aural\">School </span>" + Server.HtmlEncode(name);

                        break;
                    }

                    // Add hidden text to name so that it makes sense out of context, in iCalendar format
                    name += " <span class=\"aural\"> (East Sussex)</span>";

                    // Build up a unique id, which must be included for the calendar to work in Outlook 2003, and must be unique.
                    // Use a format compatible with linked data, so hopefully we can support that somewhen.
                    var uid = new StringBuilder("http://www.eastsussex.gov.uk/id/");
                    switch (terms.Current.LocalName)
                    {
                    case "Term":
                        uid.Append("schoolterm/");
                        break;

                    case "Holiday":
                        uid.Append("schoolholiday/");
                        break;

                    case "InsetDay":
                        uid.Append("schoolinsetday/");
                        break;
                    }
                    uid.Append(startYear.ToString(CultureInfo.CurrentCulture)).Append("-").Append((startYear + 1).ToString(CultureInfo.CurrentCulture)).Append("/");

                    switch (terms.Current.LocalName)
                    {
                    case "Term":
                    case "Holiday":
                        uid.Append(terms.Current.GetAttribute("name", String.Empty)
                                   .ToLower(CultureInfo.CurrentCulture)
                                   .Replace("term ", String.Empty)
                                   .Replace(" holiday", String.Empty)
                                   .Replace(" break", String.Empty));
                        break;

                    case "InsetDay":
                        uid.Append(startDate.ToIso8601Date());
                        break;
                    }
                    var singleDay = (startDate == endDate);

                    // Display row as hCalendar vevent, to be parsed into iCalendar download
                    termDatesHtml.Append("<tr class=\"vevent\"><td class=\"summary\">")
                    .Append(name)
                    .Append("</td><td");
                    if (singleDay)
                    {
                        termDatesHtml.Append(" colspan=\"2\"");
                    }
                    termDatesHtml.Append("><time class=\"dtstart\" datetime=\"").Append(startDate.ToIso8601Date()).Append("\">")
                    .Append(HttpUtility.HtmlEncode(startDate.ToBritishDateWithDay()))
                    .Append("</time>");
                    if (!singleDay)
                    {
                        termDatesHtml.Append("</td><td>");
                    }
                    termDatesHtml.Append("<time class=\"dtend\" datetime=\"").Append(endDate.AddDays(1).ToIso8601Date()).Append("\">");
                    if (!singleDay)
                    {
                        termDatesHtml.Append(HttpUtility.HtmlEncode(endDate.ToBritishDateWithDay()));
                    }
                    termDatesHtml.Append("</time> <span class=\"uid\">" + uid + "</span></td></tr>")
                    .Append(Environment.NewLine);
                }

                termDatesHtml.Append("</tbody></table>").Append(Environment.NewLine).Append(Environment.NewLine);
            }
            this.html.Text = termDatesHtml.ToString();
        }