web/wp-content/plugins/event-calendar/date.php
branchwordpress
changeset 109 03b0d1493584
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/event-calendar/date.php	Wed Dec 23 17:55:33 2009 +0000
@@ -0,0 +1,248 @@
+<?php
+/*
+Copyright (c) 2005, Alex Tingle.  $Revision: 287 $
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+/** Calendar class. Encapsulates all functionality concerning the calendar - 
+ *  how many days in each month, leap years, days of the week, locale
+ *  names etc. */
+class ec3_Date
+{
+  var $year_num =0;
+  var $month_num=0;
+  var $day_num  =1;
+  var $_unixdate      =0;
+  var $_days_in_month =0;
+
+  function ec3_Date($year_num=0,$month_num=0,$day_num=0)
+  {
+    global $ec3;
+    if($year_num>0)
+    {
+      $this->year_num =$year_num;
+      $this->month_num=$month_num;
+      $this->day_num  =$day_num;
+    }
+    if(0==$this->year_num && is_single())
+        $this->from_single();
+    if(0==$this->year_num && $ec3->is_date_range)
+        $this->from_date_range();
+    if(0==$this->year_num)
+        $this->from_date(); // Falls back to today.
+  }
+
+  function from_single()
+  {
+    global $wp_query;
+    if($wp_query->posts && $wp_query->posts[0]->ec3_schedule)
+    {
+      $this->year_num=
+        intval(mysql2date('Y',$wp_query->posts[0]->ec3_schedule[0]->start));
+      $this->month_num=
+        intval(mysql2date('m',$wp_query->posts[0]->ec3_schedule[0]->start));
+    }
+  }
+
+  function from_date_range()
+  {
+    global $wp_query;
+    if('' != $wp_query->query_vars['ec3_from'])
+    {
+      $c=explode('_',$wp_query->query_vars['ec3_from']);
+      $this->year_num=intval($c[0]);
+      $this->month_num=intval($c[1]);
+    }
+  }
+
+  /** Utility function. Calculates the value of month/year for the current
+   *  page. Code block from wp-includes/template-functions-general.php
+   *  (get_calendar function). */
+  function from_date()
+  {
+    global
+      $m,
+      $monthnum,
+      $wpdb,
+      $year;
+
+    if (isset($_GET['w'])) {
+        $w = ''.intval($_GET['w']);
+    }
+
+    // Let's figure out when we are
+    if (!empty($monthnum) && !empty($year)) {
+        $thismonth = ''.zeroise(intval($monthnum), 2);
+        $thisyear = ''.intval($year);
+    } elseif (!empty($w)) {
+        // We need to get the month from MySQL
+        $thisyear = ''.intval(substr($m, 0, 4));
+        $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's
+        $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('${thisyear}0101', INTERVAL $d DAY) ), '%m')");
+    } elseif (!empty($m)) {
+//        $calendar = substr($m, 0, 6);
+        $thisyear = ''.intval(substr($m, 0, 4));
+        if (strlen($m) < 6) {
+            $thismonth = '01';
+        } else {
+            $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2);
+        }
+    } else {
+        $thisyear=ec3_strftime("%Y");
+        $thismonth=ec3_strftime("%m");
+    }
+    
+    $this->year_num =intval($thisyear);
+    $this->month_num=intval($thismonth);
+    $this->day_num  =1;
+  }
+  
+  /** Month arithmetic. Returns a new date object. */
+  function plus_months($month_count)
+  {
+    $result=new ec3_Date($this->year_num,$this->month_num,$this->day_num);
+    $result->month_num += $month_count;
+    if($month_count>0)
+    {
+      while($result->month_num>12)
+      {
+        $result->month_num -= 12;
+        $result->year_num++;
+      }
+    }
+    else
+    {
+      while($result->month_num<1)
+      {
+        $result->month_num += 12;
+        $result->year_num--;
+      }
+    }
+    return $result;
+  }
+  /** Convenience function for accessing plus_months(). */
+  function prev_month() { return $this->plus_months(-1); }
+  function next_month() { return $this->plus_months( 1); }
+  
+  /** Modifies the current object to be one day in the future. */
+  function increment_day()
+  {
+    $this->day_num++;
+    if($this->day_num > $this->days_in_month())
+    {
+      $this->day_num=1;
+      $this->month_num++;
+      if($this->month_num>12)
+      {
+        $this->month_num=1;
+        $this->year_num++;
+      }
+      $this->_days_in_month=0;
+    }
+    $this->_unixdate=0;
+  }
+  
+  function month_id() // e.g. ec3_2005_06
+  {
+    return 'ec3_' . $this->year_num . '_' . $this->month_num;
+  }
+  function day_id()  // e.g. ec3_2005_06_25
+  {
+    $result='ec3_'.$this->year_num.'_'.$this->month_num.'_'.$this->day_num;
+    global $ec3_today_id;
+    if($result==$ec3_today_id)
+      return 'today';
+    else
+      return $result;
+  }
+  function day_link()
+  {
+    global $ec3;
+    if($ec3->show_only_events)
+    {
+      return get_option('home') . '/?m='
+       . $this->year_num
+       . zeroise($this->month_num, 2)
+       . zeroise($this->day_num, 2)
+       . "&amp;cat=" . $ec3->event_category;
+    }
+    else
+      return get_day_link($this->year_num,$this->month_num,$this->day_num);
+  }
+  function month_name() // e.g. June
+  {
+    global $month;
+    return $month[zeroise($this->month_num,2)];
+  }
+  function month_abbrev() // e.g. Jun
+  {
+    global $month_abbrev;
+    return $month_abbrev[ $this->month_name() ];
+  }
+  function month_link()
+  {
+    global $ec3;
+    if($ec3->show_only_events)
+    {
+      return get_option('home') . '/?m='
+       . $this->year_num
+       . zeroise($this->month_num, 2)
+       . "&amp;cat=" . $ec3->event_category;
+    }
+    else
+      return get_month_link($this->year_num,$this->month_num);
+  }
+  function days_in_month()
+  {
+    if(0==$this->_days_in_month)
+      $this->_days_in_month=intval(date('t', $this->to_unixdate()));
+    return $this->_days_in_month;
+  }
+  function week_day()
+  {
+    return intval(date('w', $this->to_unixdate()));
+  }
+  function to_unixdate()
+  {
+    if(0==intval($this->_unixdate))
+    {
+      $this->_unixdate =
+        mktime(0,0,0, $this->month_num,$this->day_num,$this->year_num);
+    }
+    return $this->_unixdate;
+  }
+} // end class ec3_Date
+
+
+/** Converts a MySQL date object into an EC3 date object. */
+function ec3_mysql2date(&$mysqldate)
+{
+  $as_str=mysql2date('Y,n,j',$mysqldate);
+  $as_arr=explode(',',$as_str);
+  return new ec3_Date($as_arr[0],$as_arr[1],$as_arr[2]);
+}
+
+/** Converts a day or month Id to a PHP date. */
+function ec3_dayid2php(&$id)
+{
+  $parts=explode('_',$id);
+  $year =intval($parts[1]);
+  $month=intval($parts[2]);
+  $day  =(count($parts)>=4? intval($parts[3]): 1);
+  return mktime( 0,0,0, $month,$day,$year);
+}
+
+?>