diff -r 000000000000 -r 03b0d1493584 web/wp-content/plugins/calendar/calendar.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/wp-content/plugins/calendar/calendar.php Wed Dec 23 17:55:33 2009 +0000 @@ -0,0 +1,2712 @@ +get_results("UPDATE ".WP_CALENDAR_TABLE." SET event_author=".$wpdb->get_var("SELECT MIN(ID) FROM ".$wpdb->prefix."users",0,0)." WHERE event_author=".$id); +} + +// Function to add the calendar style into the header +function calendar_wp_head() +{ + global $wpdb; + + // If the calendar isn't installed or upgraded this won't work + check_calendar(); + + $styles = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='calendar_style'"); + if (!empty($styles)) + { + foreach ($styles as $style) + { + echo ' +'; + } + } +} + +// Function to deal with adding the calendar menus +function calendar_menu() +{ + global $wpdb; + + // We make use of the Calendar tables so we must have installed Calendar + check_calendar(); + + // Set admin as the only one who can use Calendar for security + $allowed_group = 'manage_options'; + + // Use the database to *potentially* override the above if allowed + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='can_manage_events'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + $allowed_group = $config->config_value; + } + } + + // Add the admin panel pages for Calendar. Use permissions pulled from above + if (function_exists('add_menu_page')) + { + add_menu_page(__('Calendar','calendar'), __('Calendar','calendar'), $allowed_group, 'calendar', 'edit_calendar'); + } + if (function_exists('add_submenu_page')) + { + add_submenu_page('calendar', __('Manage Calendar','calendar'), __('Manage Calendar','calendar'), $allowed_group, 'calendar', 'edit_calendar'); + add_action( "admin_head", 'calendar_add_javascript' ); + // Note only admin can change calendar options + add_submenu_page('calendar', __('Manage Categories','calendar'), __('Manage Categories','calendar'), 'manage_options', 'calendar-categories', 'manage_categories'); + add_submenu_page('calendar', __('Calendar Config','calendar'), __('Calendar Options','calendar'), 'manage_options', 'calendar-config', 'edit_calendar_config'); + } +} + +// Function to add the javascript to the admin header +function calendar_add_javascript() +{ + echo ' + +'; +} + +// Function to deal with loading the calendar into pages +function calendar_insert($content) +{ + if (preg_match('{CALENDAR}',$content)) + { + $cal_output = calendar(); + $content = str_replace('{CALENDAR}',$cal_output,$content); + } + return $content; +} + +// Function to check what version of Calendar is installed and install if needed +function check_calendar() +{ + // Checks to make sure Calendar is installed, if not it adds the default + // database tables and populates them with test data. If it is, then the + // version is checked through various means and if it is not up to date + // then it is upgraded. + + // Lets see if this is first run and create us a table if it is! + global $wpdb, $initial_style; + + // All this style info will go into the database on a new install + // This looks nice in the Kubrick theme + $initial_style = " .calnk a:hover { + background-position:0 0; + text-decoration:none; + color:#000000; + border-bottom:1px dotted #000000; + } + .calnk a:visited { + text-decoration:none; + color:#000000; + border-bottom:1px dotted #000000; + } + .calnk a { + text-decoration:none; + color:#000000; + border-bottom:1px dotted #000000; + } + .calnk a span { + display:none; + } + .calnk a:hover span { + color:#333333; + background:#F6F79B; + display:block; + position:absolute; + margin-top:1px; + padding:5px; + width:150px; + z-index:100; + } + .calendar-table { + border:none; + width:100%; + } + .calendar-heading { + height:25px; + text-align:center; + border:1px solid #D6DED5; + background-color:#E4EBE3; + } + .calendar-next { + width:25%; + text-align:center; + } + .calendar-prev { + width:25%; + text-align:center; + } + .calendar-month { + width:50%; + text-align:center; + font-weight:bold; + } + .normal-day-heading { + text-align:center; + width:25px; + height:25px; + font-size:0.8em; + border:1px solid #DFE6DE; + background-color:#EBF2EA; + } + .weekend-heading { + text-align:center; + width:25px; + height:25px; + font-size:0.8em; + border:1px solid #DFE6DE; + background-color:#EBF2EA; + color:#FF0000; + } + .day-with-date { + vertical-align:text-top; + text-align:left; + width:60px; + height:60px; + border:1px solid #DFE6DE; + } + .no-events { + + } + .day-without-date { + width:60px; + height:60px; + border:1px solid #E9F0E8; + } + span.weekend { + color:#FF0000; + } + .current-day { + vertical-align:text-top; + text-align:left; + width:60px; + height:60px; + border:1px solid #BFBFBF; + background-color:#E4EBE3; + } + span.event { + font-size:0.75em; + } + .kjo-link { + font-size:0.75em; + text-align:center; + } + .event-title { + text-align:center; + font-weight:bold; + font-size:1.2em; + } + .event-title-break { + width:96%; + margin-left:2%; + margin-right:2%; + margin-top:5px; + margin-bottom:5px; + text-align:center; + height:1px; + background-color:#000000; + } + .event-content-break { + width:96%; + margin-left:2%; + margin-right:2%; + margin-top:5px; + margin-bottom:5px; + text-align:center; + height:1px; + background-color:#000000; + } + .calendar-date-switcher { + height:25px; + text-align:center; + border:1px solid #D6DED5; + background-color:#E4EBE3; + } + .calendar-date-switcher form { + margin:0; + padding:0; + } + .calendar-date-switcher input { + border:1px #D6DED5 solid; + } + .calendar-date-switcher select { + border:1px #D6DED5 solid; + } + .cat-key { + width:100%; + margin-top:10px; + padding:5px; + border:1px solid #D6DED5; + }"; + + + // Assume this is not a new install until we prove otherwise + $new_install = false; + $vone_point_one_upgrade = false; + $vone_point_two_beta_upgrade = false; + + $wp_calendar_exists = false; + $wp_calendar_config_exists = false; + $wp_calendar_config_version_number_exists = false; + + // Determine the calendar version + $tables = $wpdb->get_results("show tables;"); + foreach ( $tables as $table ) + { + foreach ( $table as $value ) + { + if ( $value == WP_CALENDAR_TABLE ) + { + $wp_calendar_exists = true; + } + if ( $value == WP_CALENDAR_CONFIG_TABLE ) + { + $wp_calendar_config_exists = true; + + // We now try and find the calendar version number + // This will be a lot easier than finding other stuff + // in the future. + $version_number = $wpdb->get_var("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='calendar_version'"); + if ($version_number == "1.2") + { + $wp_calendar_config_version_number_exists = true; + } + } + } + } + + if ($wp_calendar_exists == false && $wp_calendar_config_exists == false) + { + $new_install = true; + } + else if ($wp_calendar_exists == true && $wp_calendar_config_exists == false) + { + $vone_point_one_upgrade = true; + } + else if ($wp_calendar_exists == true && $wp_calendar_config_exists == true && $wp_calendar_config_version_number_exists == false) + { + $vone_point_two_beta_upgrade = true; + } + + // Now we've determined what the current install is or isn't + // we perform operations according to the findings + if ( $new_install == true ) + { + $sql = "CREATE TABLE " . WP_CALENDAR_TABLE . " ( + event_id INT(11) NOT NULL AUTO_INCREMENT , + event_begin DATE NOT NULL , + event_end DATE NOT NULL , + event_title VARCHAR(30) NOT NULL , + event_desc TEXT NOT NULL , + event_time TIME , + event_recur CHAR(1) , + event_repeats INT(3) , + event_author BIGINT(20) UNSIGNED, + PRIMARY KEY (event_id) + )"; + $wpdb->get_results($sql); + $sql = "CREATE TABLE " . WP_CALENDAR_CONFIG_TABLE . " ( + config_item VARCHAR(30) NOT NULL , + config_value TEXT NOT NULL , + PRIMARY KEY (config_item) + )"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='can_manage_events', config_value='edit_posts'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='calendar_style', config_value='".$initial_style."'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_author', config_value='false'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_jump', config_value='false'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_todays', config_value='true'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_upcoming', config_value='true'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_upcoming_days', config_value=7"; + $wpdb->get_results($sql); + + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='calendar_version', config_value='1.2'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='enable_categories', config_value='false'"; + $wpdb->get_results($sql); + $sql = "ALTER TABLE ".WP_CALENDAR_TABLE." ADD COLUMN event_category BIGINT(20) UNSIGNED"; + $wpdb->get_results($sql); + $sql = "UPDATE " . WP_CALENDAR_TABLE . " SET event_category=1"; + $wpdb->get_results($sql); + $sql = "ALTER TABLE ".WP_CALENDAR_TABLE." ADD COLUMN event_link TEXT"; + $wpdb->get_results($sql); + $sql = "UPDATE " . WP_CALENDAR_TABLE . " SET event_link=''"; + $wpdb->get_results($sql); + $sql = "CREATE TABLE " . WP_CALENDAR_CATEGORIES_TABLE . " ( + category_id INT(11) NOT NULL AUTO_INCREMENT, + category_name VARCHAR(30) NOT NULL , + category_colour VARCHAR(30) NOT NULL , + PRIMARY KEY (category_id) + )"; + $wpdb->get_results($sql); + $sql = "INSERT INTO " . WP_CALENDAR_CATEGORIES_TABLE . " SET category_id=1, category_name='General', category_colour='#F6F79B'"; + $wpdb->get_results($sql); + } + else if ($vone_point_one_upgrade == true) + { + $sql = "ALTER TABLE ".WP_CALENDAR_TABLE." ADD COLUMN event_author BIGINT(20) UNSIGNED"; + $wpdb->get_results($sql); + $sql = "UPDATE ".WP_CALENDAR_TABLE." SET event_author=".$wpdb->get_var("SELECT MIN(ID) FROM ".$wpdb->prefix."users",0,0); + $wpdb->get_results($sql); + $sql = "ALTER TABLE ".WP_CALENDAR_TABLE." MODIFY event_desc TEXT NOT NULL"; + $wpdb->get_results($sql); + $sql = "CREATE TABLE " . WP_CALENDAR_CONFIG_TABLE . " ( + config_item VARCHAR(30) NOT NULL , + config_value TEXT NOT NULL , + PRIMARY KEY (config_item) + )"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='can_manage_events', config_value='edit_posts'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='calendar_style', config_value='".$initial_style."'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_author', config_value='false'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_jump', config_value='false'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_todays', config_value='true'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_upcoming', config_value='true'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='display_upcoming_days', config_value=7"; + $wpdb->get_results($sql); + + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='calendar_version', config_value='1.2'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='enable_categories', config_value='false'"; + $wpdb->get_results($sql); + $sql = "ALTER TABLE ".WP_CALENDAR_TABLE." ADD COLUMN event_category BIGINT(20) UNSIGNED"; + $wpdb->get_results($sql); + $sql = "UPDATE " . WP_CALENDAR_TABLE . " SET event_category=1"; + $wpdb->get_results($sql); + $sql = "ALTER TABLE ".WP_CALENDAR_TABLE." ADD COLUMN event_link TEXT"; + $wpdb->get_results($sql); + $sql = "UPDATE " . WP_CALENDAR_TABLE . " SET event_link=''"; + $wpdb->get_results($sql); + $sql = "CREATE TABLE " . WP_CALENDAR_CATEGORIES_TABLE . " ( + category_id INT(11) NOT NULL AUTO_INCREMENT, + category_name VARCHAR(30) NOT NULL , + category_colour VARCHAR(30) NOT NULL , + PRIMARY KEY (category_id) + )"; + $wpdb->get_results($sql); + $sql = "INSERT INTO " . WP_CALENDAR_CATEGORIES_TABLE . " SET category_id=1, category_name='General', category_colour='#F6F79B'"; + $wpdb->get_results($sql); + } + else if ($vone_point_two_beta_upgrade == true) + { + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='calendar_version', config_value='1.2'"; + $wpdb->get_results($sql); + $sql = "INSERT INTO ".WP_CALENDAR_CONFIG_TABLE." SET config_item='enable_categories', config_value='false'"; + $wpdb->get_results($sql); + $sql = "ALTER TABLE ".WP_CALENDAR_TABLE." ADD COLUMN event_category BIGINT(20) UNSIGNED"; + $wpdb->get_results($sql); + $sql = "UPDATE " . WP_CALENDAR_TABLE . " SET event_category=1"; + $wpdb->get_results($sql); + $sql = "ALTER TABLE ".WP_CALENDAR_TABLE." ADD COLUMN event_link TEXT"; + $wpdb->get_results($sql); + $sql = "UPDATE " . WP_CALENDAR_TABLE . " SET event_link=''"; + $wpdb->get_results($sql); + $sql = "CREATE TABLE " . WP_CALENDAR_CATEGORIES_TABLE . " ( + category_id INT(11) NOT NULL AUTO_INCREMENT, + category_name VARCHAR(30) NOT NULL , + category_colour VARCHAR(30) NOT NULL , + PRIMARY KEY (category_id) + )"; + $wpdb->get_results($sql); + $sql = "INSERT INTO " . WP_CALENDAR_CATEGORIES_TABLE . " SET category_id=1, category_name='General', category_colour='#F6F79B'"; + $wpdb->get_results($sql); + $sql = "UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value='".$initial_style."' WHERE config_item='calendar_style'"; + $wpdb->get_results($sql); + } +} + +// Used on the manage events admin page to display a list of events +function wp_events_display_list() +{ + global $wpdb; + + $events = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " ORDER BY event_begin DESC"); + + if ( !empty($events) ) + { + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + event_category; + $this_cat = $wpdb->get_row($sql); + ?> + + + + + + +
event_id; ?>event_title; ?>event_desc; ?>event_begin; ?>event_end; ?> + event_recur == 'S') { echo __('Never','calendar'); } + else if ($event->event_recur == 'W') { echo __('Weekly','calendar'); } + else if ($event->event_recur == 'M') { echo __('Monthly','calendar'); } + else if ($event->event_recur == 'Y') { echo __('Yearly','calendar'); } + ?> + + event_recur == 'S') { echo __('N/A','calendar'); } + else if ($event->event_repeats == 0) { echo __('Forever','calendar'); } + else if ($event->event_repeats > 0) { echo $event->event_repeats.' '.__('Times','calendar'); } + ?> + event_author); echo $e->display_name; ?>category_name; ?>
+ +

+

".__('Bad Monkey! No banana!','calendar')."

"; + return; + } + else + { + $data = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " WHERE event_id='" . mysql_escape_string($event_id) . "' LIMIT 1"); + if ( empty($data) ) + { + echo "

".__("An event with that ID couldn't be found",'calendar')."

"; + return; + } + $data = $data[0]; + } + // Recover users entries if they exist; in other words if editing an event went wrong + if (!empty($users_entries)) + { + $data = $users_entries; + } + } + // Deal with possibility that form was submitted but not saved due to error - recover user's entries here + else + { + $data = $users_entries; + } + + ?> + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ " /> +
+ " /> +
event_time))); + } + } + else + { + echo date("H:i"); + } + ?>" /> +
event_repeats != NULL) + { + $repeats = $data->event_repeats; + } + else + { + $repeats = 0; + } + + if ($data->event_recur == "S") + { + $selected_s = 'selected="selected"'; + } + else if ($data->event_recur == "W") + { + $selected_w = 'selected="selected"'; + } + else if ($data->event_recur == "M") + { + $selected_m = 'selected="selected"'; + } + else if ($data->event_recur == "Y") + { + $selected_y = 'selected="selected"'; + } + ?> + + +
+ +
+
+
 
+
+ +
+ + + += strtotime($begin)) + { + $start_date_ok = 1; + $end_date_ok = 1; + } + else + { + ?> +

:

+ +

:

+ +

:

+ +

:

+ +

:

+ +

:

+ = 0) && ($recur == 'W' || $recur == 'M' || $recur == 'Y'))) + { + $recurring_ok = 1; + } + else + { + ?> +

:

+ ID.", event_category=".mysql_escape_string($category).", event_link='".mysql_escape_string($linky)."'"; + + $wpdb->get_results($sql); + + $sql = "SELECT event_id FROM " . WP_CALENDAR_TABLE . " WHERE event_title='" . mysql_escape_string($title) . "'" + . " AND event_desc='" . mysql_escape_string($desc) . "' AND event_begin='" . mysql_escape_string($begin) . "' AND event_end='" . mysql_escape_string($end) . "' AND event_recur='" . mysql_escape_string($recur) . "' AND event_repeats='" . mysql_escape_string($repeats) . "' LIMIT 1"; + $result = $wpdb->get_results($sql); + + if ( empty($result) || empty($result[0]->event_id) ) + { + ?> +

:

+ +

+ event_title = $title; + $users_entries->event_desc = $desc; + $users_entries->event_begin = $begin; + $users_entries->event_end = $end; + $users_entries->event_time = $time; + $users_entries->event_recur = $recur; + $users_entries->event_repeats = $repeats; + $users_entries->event_category = $category; + $users_entries->event_link = $linky; + } +} +// Permit saving of events that have been edited +elseif ( $action == 'edit_save' ) +{ + $title = !empty($_REQUEST['event_title']) ? $_REQUEST['event_title'] : ''; + $desc = !empty($_REQUEST['event_desc']) ? $_REQUEST['event_desc'] : ''; + $begin = !empty($_REQUEST['event_begin']) ? $_REQUEST['event_begin'] : ''; + $end = !empty($_REQUEST['event_end']) ? $_REQUEST['event_end'] : ''; + $time = !empty($_REQUEST['event_time']) ? $_REQUEST['event_time'] : ''; + $recur = !empty($_REQUEST['event_recur']) ? $_REQUEST['event_recur'] : ''; + $repeats = !empty($_REQUEST['event_repeats']) ? $_REQUEST['event_repeats'] : ''; + $category = !empty($_REQUEST['event_category']) ? $_REQUEST['event_category'] : ''; + $linky = !empty($_REQUEST['event_link']) ? $_REQUEST['event_link'] : ''; + + // Deal with the fools who have left magic quotes turned on + if ( ini_get('magic_quotes_gpc') ) + { + $title = stripslashes($title); + $desc = stripslashes($desc); + $begin = stripslashes($begin); + $end = stripslashes($end); + $time = stripslashes($time); + $recur = stripslashes($recur); + $repeats = stripslashes($repeats); + $category = stripslashes($category); + $linky = stripslashes($linky); + } + + if ( empty($event_id) ) + { + ?> +

:

+ = strtotime($begin)) + { + $start_date_ok = 1; + $end_date_ok = 1; + } + else + { + ?> +

:

+ +

:

+ +

:

+ +

:

+ +

:

+ +

:

+ = 0) && ($recur == 'W' || $recur == 'M' || $recur == 'Y'))) + { + $recurring_ok = 1; + } + else + { + ?> +

:

+ ID . ", event_category=".mysql_escape_string($category).", event_link='".mysql_escape_string($linky)."' WHERE event_id='" . mysql_escape_string($event_id) . "'"; + + $wpdb->get_results($sql); + + $sql = "SELECT event_id FROM " . WP_CALENDAR_TABLE . " WHERE event_title='" . mysql_escape_string($title) . "'" + . " AND event_desc='" . mysql_escape_string($desc) . "' AND event_begin='" . mysql_escape_string($begin) . "' AND event_end='" . mysql_escape_string($end) . "' AND event_recur='" . mysql_escape_string($recur) . "' AND event_repeats='" . mysql_escape_string($repeats) . "' LIMIT 1"; + $result = $wpdb->get_results($sql); + + if ( empty($result) || empty($result[0]->event_id) ) + { + ?> +

:

+ +

+ event_title = $title; + $users_entries->event_desc = $desc; + $users_entries->event_begin = $begin; + $users_entries->event_end = $end; + $users_entries->event_time = $time; + $users_entries->event_recur = $recur; + $users_entries->event_repeats = $repeats; + $users_entries->event_category = $category; + $users_entries->event_link = $linky; + $error_with_saving = 1; + } + } +} +// Deal with deleting an event from the database +elseif ( $action == 'delete' ) +{ + if ( empty($event_id) ) + { + ?> +

:

+ get_results($sql); + + $sql = "SELECT event_id FROM " . WP_CALENDAR_TABLE . " WHERE event_id='" . mysql_escape_string($event_id) . "'"; + $result = $wpdb->get_results($sql); + + if ( empty($result) || empty($result[0]->event_id) ) + { + ?> +

+ +

:

+ + +
+ +

+

".__("You must provide an event id in order to edit it",'calendar')."

"; + } + else + { + wp_events_edit_form('edit_save', $event_id); + } + } + else + { + ?> +

+ + +

+ + + +get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$new_perms."' WHERE config_item='can_manage_events'"); + $wpdb->get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$calendar_style."' WHERE config_item='calendar_style'"); + $wpdb->get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$disp_author."' WHERE config_item='display_author'"); + $wpdb->get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$disp_jump."' WHERE config_item='display_jump'"); + $wpdb->get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$disp_todays."' WHERE config_item='display_todays'"); + $wpdb->get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$disp_upcoming."' WHERE config_item='display_upcoming'"); + $wpdb->get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$display_upcoming_days."' WHERE config_item='display_upcoming_days'"); + $wpdb->get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$enable_categories."' WHERE config_item='enable_categories'"); + + // Check to see if we are replacing the original style + if (mysql_escape_string($_POST['reset_styles']) == 'on') + { + $wpdb->get_results("UPDATE " . WP_CALENDAR_CONFIG_TABLE . " SET config_value = '".$initial_style."' WHERE config_item='calendar_style'"); + } + + echo "

".__('Settings saved','calendar').".

"; + } + + // Pull the values out of the database that we need for the form + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='can_manage_events'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + $allowed_group = $config->config_value; + } + } + + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='calendar_style'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + $calendar_style = $config->config_value; + } + } + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='display_author'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + if ($config->config_value == 'true') + { + $yes_disp_author = 'selected="selected"'; + } + else + { + $no_disp_author = 'selected="selected"'; + } + } + } + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='display_jump'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + if ($config->config_value == 'true') + { + $yes_disp_jump = 'selected="selected"'; + } + else + { + $no_disp_jump = 'selected="selected"'; + } + } + } + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='display_todays'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + if ($config->config_value == 'true') + { + $yes_disp_todays = 'selected="selected"'; + } + else + { + $no_disp_todays = 'selected="selected"'; + } + } + } + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='display_upcoming'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + if ($config->config_value == 'true') + { + $yes_disp_upcoming = 'selected="selected"'; + } + else + { + $no_disp_upcoming = 'selected="selected"'; + } + } + } + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='display_upcoming_days'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + $upcoming_days = $config->config_value; + } + } + $configs = $wpdb->get_results("SELECT config_value FROM " . WP_CALENDAR_CONFIG_TABLE . " WHERE config_item='enable_categories'"); + if (!empty($configs)) + { + foreach ($configs as $config) + { + if ($config->config_value == 'true') + { + $yes_enable_categories = 'selected="selected"'; + } + else + { + $no_enable_categories = 'selected="selected"'; + } + } + } + if ($allowed_group == 'read') { $subscriber_selected='selected="selected"';} + else if ($allowed_group == 'edit_posts') { $contributor_selected='selected="selected"';} + else if ($allowed_group == 'publish_posts') { $author_selected='selected="selected"';} + else if ($allowed_group == 'moderate_comments') { $editor_selected='selected="selected"';} + else if ($allowed_group == 'manage_options') { $admin_selected='selected="selected"';} + + // Now we render the form + ?> + + +
+

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ +
+

+
+
+
 
+
+ +
+
+ + +get_results($sql); + echo "

".__('Category added successfully','calendar')."

"; + } + else if (isset($_GET['mode']) && isset($_GET['category_id']) && $_GET['mode'] == 'delete') + { + $sql = "DELETE FROM " . WP_CALENDAR_CATEGORIES_TABLE . " WHERE category_id=".mysql_escape_string($_GET['category_id']); + $wpdb->get_results($sql); + $sql = "UPDATE " . WP_CALENDAR_TABLE . " SET event_category=1 WHERE event_category=".mysql_escape_string($_GET['category_id']); + $wpdb->get_results($sql); + echo "

".__('Category deleted successfully','calendar')."

"; + } + else if (isset($_GET['mode']) && isset($_GET['category_id']) && $_GET['mode'] == 'edit' && !isset($_POST['mode'])) + { + $sql = "SELECT * FROM " . WP_CALENDAR_CATEGORIES_TABLE . " WHERE category_id=".mysql_escape_string($_GET['category_id']); + $cur_cat = $wpdb->get_row($sql); + ?> +
+

+
+ + +
+
+ + + + + + + + + +
:
:
+
+
 
+
+ +
+
+ get_results($sql); + echo "

".__('Category edited successfully','calendar')."

"; + } + + if ($_GET['mode'] != 'edit' || $_POST['mode'] == 'edit') + { +?> + +
+

+
+ + +
+
+ + + + + + + + + +
:
:
+
+
 
+
+ +
+

+get_results("SELECT * FROM " . WP_CALENDAR_CATEGORIES_TABLE . " ORDER BY category_id ASC"); + + if ( !empty($categories) ) + { + ?> + + + + + + + + + + + + + + + + + category_id == 1) + { + echo ''; + } + else + { + ?> + + + + +
category_id; ?>category_name; ?> '.__('N/A','calendar').'
+ '.__('There are no categories in the database - something has gone wrong!','calendar').'

'; + } + +?> +
+ +'jan','feb','mar','apr','may','jun','jul','aug','sept','oct','nov','dec'); + $next_year = $cur_year + 1; + + if ($cur_month == 12) + { + return ''.__('Next','calendar').' »'; + } + else + { + $next_month = $cur_month + 1; + $month = $mod_rewrite_months[$next_month]; + return ''.__('Next','calendar').' »'; + } +} + +// Configure the "Previous" link in the calendar +function prev_link($cur_year,$cur_month) +{ + $mod_rewrite_months = array(1=>'jan','feb','mar','apr','may','jun','jul','aug','sept','oct','nov','dec'); + $last_year = $cur_year - 1; + + if ($cur_month == 1) + { + return '« '.__('Prev','calendar').''; + } + else + { + $next_month = $cur_month - 1; + $month = $mod_rewrite_months[$next_month]; + return '« '.__('Prev','calendar').''; + } +} + +// Print upcoming events +function upcoming_events() +{ + global $wpdb; + + // This function cannot be called unless calendar is up to date + check_calendar(); + + // Find out if we should be displaying upcoming events + $display = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_upcoming'",0,0); + + if ($display == 'true') + { + // Get number of days we should go into the future + $future_days = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_upcoming_days'",0,0); + $day_count = 1; + + while ($day_count < $future_days+1) + { + list($y,$m,$d) = split("-",date("Y-m-d",mktime($day_count*24,0,0,date("m"),date("d"),date("Y")))); + $events = grab_events($y,$m,$d); + usort($events, "time_cmp"); + if (count($events) != 0) { + $output .= '
  • '.date(get_option('date_format'),mktime($day_count*24,0,0,date("m"),date("d"),date("Y"))).'
  • '; + } + $day_count = $day_count+1; + } + + if ($output != '') + { + $visual = '
  • '.__('Upcoming Events','calendar').'

  • '; + return $visual; + } + } +} + +// Print todays events +function todays_events() +{ + global $wpdb; + + // This function cannot be called unless calendar is up to date + check_calendar(); + + // Find out if we should be displaying todays events + $display = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_todays'",0,0); + + if ($display == 'true') + { + $output = '
  • '.__('Today\'s Events','calendar').'

  • '; + if (count($events) != 0) + { + return $output; + } + } +} + +// Function to compare time in event objects +function time_cmp($a, $b) +{ + if ($a->event_time == $b->event_time) { + return 0; + } + return ($a->event_time < $b->event_time) ? -1 : 1; +} + +// Used to draw multiple events +function draw_events($events) +{ + // We need to sort arrays of objects by time + usort($events, "time_cmp"); + + // Now process the events + foreach($events as $event) + { + $output .= draw_event($event); + } + return $output; +} + +// Widget todays events +function todays_events_widget() { + global $wpdb; + + // This function cannot be called unless calendar is up to date + check_calendar(); + + // Find out if we should be displaying todays events + $display = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_todays'",0,0); + + if ($display == 'true') + { + $output = ''; + if (count($events) != 0) + { + return $output; + } + } +} + +// Widget upcoming events +function upcoming_events_widget() { + global $wpdb; + + // This function cannot be called unless calendar is up to date + check_calendar(); + + // Find out if we should be displaying upcoming events + $display = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_upcoming'",0,0); + + if ($display == 'true') + { + // Get number of days we should go into the future + $future_days = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_upcoming_days'",0,0); + $day_count = 1; + + while ($day_count < $future_days+1) + { + list($y,$m,$d) = split("-",date("Y-m-d",mktime($day_count*24,0,0,date("m"),date("d"),date("Y")))); + $events = grab_events($y,$m,$d); + usort($events, "time_cmp"); + if (count($events) != 0) { + $output .= '
  • '.date(get_option('date_format'),mktime($day_count*24,0,0,date("m"),date("d"),date("Y"))).'
  • '; + } + $day_count = $day_count+1; + } + + if ($output != '') + { + $visual = ''; + return $visual; + } + } +} + +// The widget to show todays events in the sidebar +function widget_init_calendar_today() { + // Check for required functions + if (!function_exists('register_sidebar_widget')) + return; + + function widget_calendar_today($args) { + extract($args); + $the_title = get_option('calendar_today_widget_title'); + $widget_title = empty($the_title) ? __('Today\'s Events','calendar') : $the_title; + $the_events = todays_events_widget(); + if ($the_events != '') { + echo $before_widget; + echo $before_title . $widget_title . $after_title; + echo $the_events; + echo $after_widget; + } + } + + function widget_calendar_today_control() { + $widget_title = get_option('calendar_today_widget_title'); + if (isset($_POST['calendar_today_widget_title'])) { + update_option('calendar_today_widget_title',strip_tags($_POST['calendar_today_widget_title'])); + } + ?> +

    + +

    + +

    + +

    + get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_author'",0,0); + $show_cat = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='enable_categories'",0,0); + + if ($show_cat == 'true') + { + $sql = "SELECT * FROM " . WP_CALENDAR_CATEGORIES_TABLE . " WHERE category_id=".$event->event_category; + $cat_details = $wpdb->get_row($sql); + $style = "background-color:".$cat_details->category_colour.";"; + } + + $header_details .= '
    '.$event->event_title.'
    '; + if ($event->event_time != "00:00:00") + { + $header_details .= ''.__('Time','calendar').': ' . date(get_option('time_format'), strtotime($event->event_time)) . '
    '; + } + if ($display_author == 'true') + { + $e = get_userdata($event->event_author); + $header_details .= ''.__('Posted by', 'calendar').': '.$e->display_name.'
    '; + } + if ($display_author == 'true' || $event->event_time != "00:00:00") + { + $header_details .= '
    '; + } + if ($event->event_link != '') { $linky = $event->event_link; } + else { $linky = '#'; } + + $details = '
    +* ' . $event->event_title . '' . $header_details . '' . $event->event_desc . ''; + + return $details; +} + +// Draw an event but customise the HTML for use in the widget +function draw_widget_event($event) +{ + global $wpdb; + + // Calendar must be updated to run this function + check_calendar(); + + // Before we do anything we want to know if we + // should display the author and/or show categories. + // We check for this later + $display_author = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_author'",0,0); + $show_cat = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='enable_categories'",0,0); + + if ($show_cat == 'true') + { + $sql = "SELECT * FROM " . WP_CALENDAR_CATEGORIES_TABLE . " WHERE category_id=".$event->event_category; + $cat_details = $wpdb->get_row($sql); + $style = "background-color:".$cat_details->category_colour.";"; + } + + $header_details .= '
    '.$event->event_title.'
    '; + if ($event->event_time != "00:00:00") + { + $header_details .= ''.__('Time','calendar').': ' . date(get_option('time_format'), strtotime($event->event_time)) . '
    '; + } + if ($display_author == 'true') + { + $e = get_userdata($event->event_author); + $header_details .= ''.__('Posted by','calendar').': '.$e->display_name.'
    '; + } + if ($display_author == 'true' || $event->event_time != "00:00:00") + { + $header_details .= '
    '; + } + if ($event->event_link != '') { $linky = $event->event_link; } + else { $linky = '#'; } + + $details = '' . $event->event_title . '' . $header_details . '' . $event->event_desc . ''; + + return $details; +} + +// Grab all events for the requested date from calendar +function grab_events($y,$m,$d) +{ + global $wpdb; + + $arr_events = array(); + + // Get the date format right + $date = $y . '-' . $m . '-' . $d; + + // Firstly we check for conventional events. These will form the first instance of a recurring event + // or the only instance of a one-off event + $events = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " WHERE event_begin <= '$date' AND event_end >= '$date' AND event_recur = 'S' ORDER BY event_id"); + if (!empty($events)) + { + foreach($events as $event) + { + array_push($arr_events, $event); + } + } + + // Even if there were results for that query, we may still have events recurring + // from the past on this day. We now methodically check the for these events + + /* + The yearly code - easy because the day and month will be the same, so we return all yearly + events that match the date part. Out of these we show those with a repeat of 0, and fast-foward + a number of years for those with a value more than 0. Those that land in the future are displayed. + */ + + + // Deal with forever recurring year events + $events = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " WHERE event_recur = 'Y' AND EXTRACT(YEAR FROM '$date') >= EXTRACT(YEAR FROM event_begin) AND event_repeats = 0 ORDER BY event_id"); + + if (!empty($events)) + { + foreach($events as $event) + { + // This is going to get complex so lets setup what we would place in for + // an event so we can drop it in with ease + + // Technically we don't care about the years, but we need to find out if the + // event spans the turn of a year so we can deal with it appropriately. + $year_begin = date('Y',strtotime($event->event_begin)); + $year_end = date('Y',strtotime($event->event_end)); + + if ($year_begin == $year_end) + { + if (date('m-d',strtotime($event->event_begin)) <= date('m-d',strtotime($date)) && + date('m-d',strtotime($event->event_end)) >= date('m-d',strtotime($date))) + { + array_push($arr_events, $event); + } + } + else if ($year_begin < $year_end) + { + if (date('m-d',strtotime($event->event_begin)) <= date('m-d',strtotime($date)) || + date('m-d',strtotime($event->event_end)) >= date('m-d',strtotime($date))) + { + array_push($arr_events, $event); + } + } + } + } + + // Now the ones that happen a finite number of times + $events = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " WHERE event_recur = 'Y' AND EXTRACT(YEAR FROM '$date') >= EXTRACT(YEAR FROM event_begin) AND event_repeats != 0 AND (EXTRACT(YEAR FROM '$date')-EXTRACT(YEAR FROM event_begin)) <= event_repeats ORDER BY event_id"); + if (!empty($events)) + { + foreach($events as $event) + { + // This is going to get complex so lets setup what we would place in for + // an event so we can drop it in with ease + + // Technically we don't care about the years, but we need to find out if the + // event spans the turn of a year so we can deal with it appropriately. + $year_begin = date('Y',strtotime($event->event_begin)); + $year_end = date('Y',strtotime($event->event_end)); + + if ($year_begin == $year_end) + { + if (date('m-d',strtotime($event->event_begin)) <= date('m-d',strtotime($date)) && + date('m-d',strtotime($event->event_end)) >= date('m-d',strtotime($date))) + { + array_push($arr_events, $event); + } + } + else if ($year_begin < $year_end) + { + if (date('m-d',strtotime($event->event_begin)) <= date('m-d',strtotime($date)) || + date('m-d',strtotime($event->event_end)) >= date('m-d',strtotime($date))) + { + array_push($arr_events, $event); + } + } + } + } + + /* + The monthly code - just as easy because as long as the day of the month is correct, then we + show the event + */ + + // The monthly events that never stop recurring + $events = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " WHERE event_recur = 'M' AND EXTRACT(YEAR FROM '$date') >= EXTRACT(YEAR FROM event_begin) AND event_repeats = 0 ORDER BY event_id"); + if (!empty($events)) + { + foreach($events as $event) + { + // This is going to get complex so lets setup what we would place in for + // an event so we can drop it in with ease + + // Technically we don't care about the years or months, but we need to find out if the + // event spans the turn of a year or month so we can deal with it appropriately. + $month_begin = date('m',strtotime($event->event_begin)); + $month_end = date('m',strtotime($event->event_end)); + + if ($month_begin == $month_end) + { + if (date('d',strtotime($event->event_begin)) <= date('d',strtotime($date)) && + date('d',strtotime($event->event_end)) >= date('d',strtotime($date))) + { + array_push($arr_events, $event); + } + } + else if ($month_begin < $month_end) + { + if ( ($event->event_begin <= date('Y-m-d',strtotime($date))) && (date('d',strtotime($event->event_begin)) <= date('d',strtotime($date)) || + date('d',strtotime($event->event_end)) >= date('d',strtotime($date))) ) + { + array_push($arr_events, $event); + } + } + } + } + + + // Now the ones that happen a finite number of times + $events = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " WHERE event_recur = 'M' AND EXTRACT(YEAR FROM '$date') >= EXTRACT(YEAR FROM event_begin) AND event_repeats != 0 AND (PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM '$date'),EXTRACT(YEAR_MONTH FROM event_begin))) <= event_repeats ORDER BY event_id"); + if (!empty($events)) + { + foreach($events as $event) + { + // This is going to get complex so lets setup what we would place in for + // an event so we can drop it in with ease + + // Technically we don't care about the years or months, but we need to find out if the + // event spans the turn of a year or month so we can deal with it appropriately. + $month_begin = date('m',strtotime($event->event_begin)); + $month_end = date('m',strtotime($event->event_end)); + + if ($month_begin == $month_end) + { + if (date('d',strtotime($event->event_begin)) <= date('d',strtotime($date)) && + date('d',strtotime($event->event_end)) >= date('d',strtotime($date))) + { + array_push($arr_events, $event); + } + } + else if ($month_begin < $month_end) + { + if ( ($event->event_begin <= date('Y-m-d',strtotime($date))) && (date('d',strtotime($event->event_begin)) <= date('d',strtotime($date)) || + date('d',strtotime($event->event_end)) >= date('d',strtotime($date))) ) + { + array_push($arr_events, $event); + } + } + } + } + + + /* + Weekly - well isn't this fun! We need to scan all weekly events, find what day they fell on + and see if that matches the current day. If it does, we check to see if the repeats are 0. + If they are, display the event, if not, we fast forward from the original day in week blocks + until the number is exhausted. If the date we arrive at is in the future, display the event. + */ + + // The weekly events that never stop recurring + $events = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " WHERE event_recur = 'W' AND '$date' >= event_begin AND event_repeats = 0 ORDER BY event_id"); + if (!empty($events)) + { + foreach($events as $event) + { + // This is going to get complex so lets setup what we would place in for + // an event so we can drop it in with ease + + // Now we are going to check to see what day the original event + // fell on and see if the current date is both after it and on + // the correct day. If it is, display the event! + $day_start_event = date('D',strtotime($event->event_begin)); + $day_end_event = date('D',strtotime($event->event_end)); + $current_day = date('D',strtotime($date)); + + $plan = array(); + $plan['Mon'] = 1; + $plan['Tue'] = 2; + $plan['Wed'] = 3; + $plan['Thu'] = 4; + $plan['Fri'] = 5; + $plan['Sat'] = 6; + $plan['Sun'] = 7; + + if ($plan[$day_start_event] > $plan[$day_end_event]) + { + if (($plan[$day_start_event] <= $plan[$current_day]) || ($plan[$current_day] <= $plan[$day_end_event])) + { + array_push($arr_events, $event); + } + } + else if (($plan[$day_start_event] < $plan[$day_end_event]) || ($plan[$day_start_event]== $plan[$day_end_event])) + { + if (($plan[$day_start_event] <= $plan[$current_day]) && ($plan[$current_day] <= $plan[$day_end_event])) + { + array_push($arr_events, $event); + } + } + + } + } + + // The weekly events that have a limit on how many times they occur + $events = $wpdb->get_results("SELECT * FROM " . WP_CALENDAR_TABLE . " WHERE event_recur = 'W' AND '$date' >= event_begin AND event_repeats != 0 AND (event_repeats*7) >= (TO_DAYS('$date') - TO_DAYS(event_end)) ORDER BY event_id"); + if (!empty($events)) + { + foreach($events as $event) + { + // This is going to get complex so lets setup what we would place in for + // an event so we can drop it in with ease + + // Now we are going to check to see what day the original event + // fell on and see if the current date is both after it and on + // the correct day. If it is, display the event! + $day_start_event = date('D',strtotime($event->event_begin)); + $day_end_event = date('D',strtotime($event->event_end)); + $current_day = date('D',strtotime($date)); + + $plan = array(); + $plan['Mon'] = 1; + $plan['Tue'] = 2; + $plan['Wed'] = 3; + $plan['Thu'] = 4; + $plan['Fri'] = 5; + $plan['Sat'] = 6; + $plan['Sun'] = 7; + + if ($plan[$day_start_event] > $plan[$day_end_event]) + { + if (($plan[$day_start_event] <= $plan[$current_day]) || ($plan[$current_day] <= $plan[$day_end_event])) + { + array_push($arr_events, $event); + } + } + else if (($plan[$day_start_event] < $plan[$day_end_event]) || ($plan[$day_start_event]== $plan[$day_end_event])) + { + if (($plan[$day_start_event] <= $plan[$current_day]) && ($plan[$current_day] <= $plan[$day_end_event])) + { + array_push($arr_events, $event); + } + } + + } + } + + return $arr_events; +} + + +// Actually do the printing of the calendar +// Compared to searching for and displaying events +// this bit is really rather easy! +function calendar() +{ + global $wpdb; + + // First things first, make sure calendar is up to date + check_calendar(); + + // Deal with the week not starting on a monday + if (get_option('start_of_week') == 0) + { + $name_days = array(1=>__('Sunday','calendar'),__('Monday','calendar'),__('Tuesday','calendar'),__('Wednesday','calendar'),__('Thursday','calendar'),__('Friday','calendar'),__('Saturday','calendar')); + } + // Choose Monday if anything other than Sunday is set + else + { + $name_days = array(1=>__('Monday','calendar'),__('Tuesday','calendar'),__('Wednesday','calendar'),__('Thursday','calendar'),__('Friday','calendar'),__('Saturday','calendar'),__('Sunday','calendar')); + } + + // Carry on with the script + $name_months = array(1=>__('January','calendar'),__('February','calendar'),__('March','calendar'),__('April','calendar'),__('May','calendar'),__('June','calendar'),__('July','calendar'),__('August','calendar'),__('September','calendar'),__('October','calendar'),__('November','calendar'),__('December','calendar')); + + // If we don't pass arguments we want a calendar that is relevant to today + if (empty($_GET['month']) || empty($_GET['yr'])) + { + $c_year = date("Y"); + $c_month = date("m"); + $c_day = date("d"); + } + + // Years get funny if we exceed 3000, so we use this check + if ($_GET['yr'] <= 3000 && $_GET['yr'] >= 0) + { + // This is just plain nasty and all because of permalinks + // which are no longer used, this will be cleaned up soon + if ($_GET['month'] == 'jan' || $_GET['month'] == 'feb' || $_GET['month'] == 'mar' || $_GET['month'] == 'apr' || $_GET['month'] == 'may' || $_GET['month'] == 'jun' || $_GET['month'] == 'jul' || $_GET['month'] == 'aug' || $_GET['month'] == 'sept' || $_GET['month'] == 'oct' || $_GET['month'] == 'nov' || $_GET['month'] == 'dec') + { + + // Again nasty code to map permalinks into something + // databases can understand. This will be cleaned up + $c_year = mysql_escape_string($_GET['yr']); + if ($_GET['month'] == 'jan') { $t_month = 1; } + else if ($_GET['month'] == 'feb') { $t_month = 2; } + else if ($_GET['month'] == 'mar') { $t_month = 3; } + else if ($_GET['month'] == 'apr') { $t_month = 4; } + else if ($_GET['month'] == 'may') { $t_month = 5; } + else if ($_GET['month'] == 'jun') { $t_month = 6; } + else if ($_GET['month'] == 'jul') { $t_month = 7; } + else if ($_GET['month'] == 'aug') { $t_month = 8; } + else if ($_GET['month'] == 'sept') { $t_month = 9; } + else if ($_GET['month'] == 'oct') { $t_month = 10; } + else if ($_GET['month'] == 'nov') { $t_month = 11; } + else if ($_GET['month'] == 'dec') { $t_month = 12; } + $c_month = $t_month; + $c_day = date("d"); + } + // No valid month causes the calendar to default to today + else + { + $c_year = date("Y"); + $c_month = date("m"); + $c_day = date("d"); + } + } + // No valid year causes the calendar to default to today + else + { + $c_year = date("Y"); + $c_month = date("m"); + $c_day = date("d"); + } + + // Fix the days of the week if week start is not on a monday + if (get_option('start_of_week') == 0) + { + $first_weekday = date("w",mktime(0,0,0,$c_month,1,$c_year)); + $first_weekday = ($first_weekday==0?1:$first_weekday+1); + } + // Otherwise assume the week starts on a Monday. Anything other + // than Sunday or Monday is just plain odd + else + { + $first_weekday = date("w",mktime(0,0,0,$c_month,1,$c_year)); + $first_weekday = ($first_weekday==0?7:$first_weekday); + } + + $days_in_month = date("t", mktime (0,0,0,$c_month,1,$c_year)); + + // Start the table and add the header and naviagtion + $calendar_body .= ' + +'; + + // We want to know if we should display the date switcher + $date_switcher = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='display_jump'",0,0); + + if ($date_switcher == 'true') + { + $calendar_body .= ' + + +'; + } + + // The header of the calendar table and the links. Note calls to link functions + $calendar_body .= ' + + +'; + + // Print the headings of the days of the week + $calendar_body .= ' +'; + for ($i=1; $i<=7; $i++) + { + // Colours need to be different if the starting day of the week is different + if (get_option('start_of_week') == 0) + { + $calendar_body .= ' +'; + } + else + { + $calendar_body .= ' +'; + } + } + $calendar_body .= ' +'; + + for ($i=1; $i<=$days_in_month;) + { + $calendar_body .= ' +'; + for ($ii=1; $ii<=7; $ii++) + { + if ($ii==$first_weekday && $i==1) + { + $go = TRUE; + } + elseif ($i > $days_in_month ) + { + $go = FALSE; + } + + if ($go) + { + // Colours again, this time for the day numbers + if (get_option('start_of_week') == 0) + { + // This bit of code is for styles believe it or not. + $grabbed_events = grab_events($c_year,$c_month,$i); + $no_events_class = ''; + if (!count($grabbed_events)) + { + $no_events_class = ' no-events'; + } + $calendar_body .= ' +'; + } + else + { + $grabbed_events = grab_events($c_year,$c_month,$i); + $no_events_class = ''; + if (!count($grabbed_events)) + { + $no_events_class = ' no-events'; + } + $calendar_body .= ' +'; + } + } + else + { + $calendar_body .= ' +'; + } + } + $calendar_body .= ' +'; + } + $show_cat = $wpdb->get_var("SELECT config_value FROM ".WP_CALENDAR_CONFIG_TABLE." WHERE config_item='enable_categories'",0,0); + + if ($show_cat == 'true') + { + $sql = "SELECT * FROM " . WP_CALENDAR_CATEGORIES_TABLE . " ORDER BY category_name ASC"; + $cat_details = $wpdb->get_results($sql); + $calendar_body .= ' +'; + } + $calendar_body .= '
    +
    +'; + $qsa = array(); + parse_str($_SERVER['QUERY_STRING'],$qsa); + foreach ($qsa as $name => $argument) + { + if ($name != 'month' && $name != 'yr') + { + $calendar_body .= ' +'; + } + } + function month_comparison($month) + { + $current_month = strtolower(date("M", time())); + if (isset($_GET['yr']) && isset($_GET['month'])) + { + if ($month == $_GET['month']) + { + return ' selected="selected"'; + } + } + elseif ($month == $current_month) + { + return ' selected="selected"'; + } + } + // We build the months in the switcher + $calendar_body .= ' + '.__('Month','calendar').': + '.__('Year','calendar').': + +
    +
    + + + + + + +
    ' . prev_link($c_year,$c_month) . ''.$name_months[(int)$c_month].' '.$c_year.'' . next_link($c_year,$c_month) . '
    +
    '.$name_days[$i].''.$name_days[$i].'
    1?'':'class="weekend"').'>'.$i++.'' . draw_events($grabbed_events) . ''.$i++.'' . draw_events($grabbed_events) . ' 
    + + +'; + foreach($cat_details as $cat_detail) + { + $calendar_body .= ''; + } + $calendar_body .= '
    '.__('Category Key','calendar').'
    '.$cat_detail->category_name.'
    +
    +'; + + // A little link to yours truely. See the README if you wish to remove this + $calendar_body .= ' +'; + + // Phew! After that bit of string building, spit it all out. + // The actual printing is done by the calling function. + return $calendar_body; +} + +?>