HomePage :: Categories :: RecentChanges :: RecentlyCommented :: Search:

Source Code for XyzzyB DateDiff

xyzzyb_datediff.php
<?php
/*
Plugin Name: XyzzyB DateDiff
Plugin URI: http://wiki.xyzzyb.com/XyzzyBDateDiff
Description: Displays the difference between the current date and specified dates (either upcoming or previous)
Version: 1.6
Author: Stephen Ball
Author URI: http://blog.xyzzyb.com
*/


/* Changelog 1.5 -> 1.6
   BUGFIX
   + updated database use to comply with Wordpress 2.1

/* Changelog 1.4 -> 1.5
    FEATURES
    + options for text directly after current, upcoming, and past events
        - option to add the text before or after the recurring (year)
            - only displays IF show year for recurring events is selected
    + option to show recurring events (yes, no)
    !+ option for current event list header text
    UI
    + options page design tweak
        - change order of past events option now only displays if event order is set to "Number of Days"
    BUGFIX
    + slashes are now striped from event titles (e.g. Sarah's Birthday would display as Sarah/'s Birthday)
*/


/* Future Features
    + option to interweave the events
*/

   
function xyzzyb_datediff_call_event($today,$upcoming,$past) {
    $current_settings=get_option('xyzzyb_datediff_options');
    $separator=$current_settings['event_separator'];
    $current_event_header=$current_settings['current_event_header'];
    $current_follow=$current_settings['current_event_follow_text'];
    $upcoming_follow=$current_settings['upcoming_event_follow_text'];
    $past_follow=$current_settings['past_event_follow_text'];
    if ($current_settings['event_order_by']) {
        $event_order_by=$current_settings['event_order_by'];
    }
    if ($current_settings['upcoming_event_order']) {
        $upcoming_event_order=$current_settings['upcoming_event_order'];
    }
    if ($current_settings['past_event_order']) {
        $past_event_order=$current_settings['past_event_order'];
    }
    print '<ul class="xyzzyb_datediff_list">' . "\n";
    if (is_array($today)) {
        print '<li><span class="xyzzyb_datediff_current">' . $current_event_header . "\n" . '<ul class="xyzzyb_datediff_today_list">';
        foreach ($today as $event) {
            xyzzyb_datediff_today($event);
        }
        print '</ul></li>';
    }
    print "$separator\n";
    if (is_array($upcoming)) {
        if ($event_order_by == 'diff') {
            if ($upcoming_event_order == 'ASC') {
                asort($upcoming);
            }
            else {
                arsort($upcoming);
            }
        }
        foreach ($upcoming as $event=>$diff) {
            xyzzyb_datediff_event($diff,$event,true);
        }
    }
    print "$separator\n";
    if (is_array($past)) {
        if ($event_order_by == 'diff') {
            if ($past_event_order == 'ASC') {
                asort($past);
            }
            else {
                arsort($past);
            }
        }
        foreach ($past as $event=>$diff) {
            xyzzyb_datediff_event($diff,$event,false);
        }
    }
    print '</ul>';
}

//2007-03-10 : as of wordpress 2.1 $table_* variables are no longer used
function xyzzyb_datediff_display () {
    //global $table_prefix,$wpdb;
    global $wpdb;
    $current_settings=get_option('xyzzyb_datediff_options');
    $current_follow_text=$current_settings['current_event_follow_text'];
    $upcoming_follow_text=$current_settings['upcoming_event_follow_text'];
    $past_follow_text=$current_settings['past_event_follow_text'];
    $text_after_year=$current_settings['text_after_year'];
    $datediff_table = $wpdb->prefix . "xyzzyb_datediff";
    if ($current_settings['event_order_by']) {
        $event_order_by=$current_settings['event_order_by'];
    }
    else {
        $event_order_by='date';
    }
    if ($current_settings['upcoming_event_order']) {
        $event_order=$current_settings['upcoming_event_order'];
    }
    else {
        $upcoming_event_order='ASC';
    }
    $events = $wpdb->get_results("SELECT id,event,date,recurring,DATEDIFF(CURRENT_DATE,date) diff FROM $datediff_table ORDER BY $event_order_by $event_order");
    foreach ($events as $event) {
        if ($event->recurring && $current_settings['display_recurring_events']) {
            $show_year=$current_settings['show_year'];
            $event_month=$wpdb->get_var("SELECT EXTRACT(MONTH FROM date) FROM $datediff_table WHERE id=$event->id");
            $event_day=$wpdb->get_var("SELECT EXTRACT(DAY FROM date) FROM $datediff_table WHERE id=$event->id");
            $current_year=$wpdb->get_var("SELECT EXTRACT(YEAR FROM CURRENT_DATE)");
            $recurring_diff=$wpdb->get_var("SELECT DATEDIFF(CURRENT_DATE,'$current_year-$event_month-$event_day')");
            if (round($current_settings['display_upcoming_events_timeframe'] / 365) < 1) {
                $years_to_advance=1;
            }
            else {
                $years_to_advance=round($current_settings['display_upcoming_events_timeframe'] / 365);
            }
            if (round($current_settings['display_past_events_timeframe'] / 365) < 1) {
                $years_to_goback=1;
            }
            else {
                $years_to_goback=round($current_settings['display_past_events_timeframe'] / 365);
            }
            # if recurring_diff < 0 == upcoming; if recurring_diff > 0 == prior; if == 0 today
            # RECURRING AND CURRENT
            if ($recurring_diff==0 && $current_settings['display_current_events']) {
                $today_events[]=$event->event . $current_follow_text;
                $event_year=$current_year;
                for ($i=0;$i<$years_to_advance;$i++) {
                    $event_year++;
                    $recurring_diff=$wpdb->get_var("SELECT DATEDIFF(CURRENT_DATE,'$event_year-$event_month-$event_day')");
                    if ($recurring_diff<0 && $current_settings['display_upcoming_events'] && abs($recurring_diff)<$current_settings['display_upcoming_events_timeframe']) {
                        if ($show_year) {
                            if ($text_after_year) {
                                $r_event="$event->event" . "($event_year)$upcoming_follow_text";
                            }
                            else {
                                $r_event="$event->event" . "$upcoming_follow_text ($event_year)";
                            }
                        }
                        else {
                            $r_event=$event->event . $upcoming_follow_text;
                        }
                        $upcoming_events[$r_event]=abs($recurring_diff);
                    }
                }
                $event_year=$current_year;
                for ($i=0;$i<$years_to_goback;$i++) {
                    $event_year--;
                    $recurring_diff=$wpdb->get_var("SELECT DATEDIFF(CURRENT_DATE,'$event_year-$event_month-$event_day')");
                    if ($recurring_diff>0 && $current_settings['display_past_events'] && abs($recurring_diff)<$current_settings['display_past_events_timeframe']) {
                        if ($show_year) {
                            if ($text_after_year) {
                                $r_event="$event->event ($event_year)" . "$past_follow_text";
                            }
                            else {
                                $r_event="$event->event" . "$past_follow_text ($event_year)";
                            }
                        }
                        else {
                            $r_event=$event->event . $past_follow_text;
                        }
                        $past_events[$r_event]=abs($recurring_diff);
                    }
                }
            }
            # RECURRING AND UPCOMING
            elseif ($recurring_diff<0) {
                $event_year=$current_year;
                if ($show_year) {
                    if ($text_after_year) {
                        $r_event="$event->event" . "($event_year)$upcoming_follow_text";
                    }
                    else {
                        $r_event="$event->event" . "$upcoming_follow_text ($event_year)";
                    }
                }
                else {
                    $r_event=$event->event . $upcoming_follow_text;
                }
                if ($current_settings['display_upcoming_events'] && abs($recurring_diff)<$current_settings['display_upcoming_events_timeframe']) {
                    $upcoming_events[$r_event]=abs($recurring_diff);
                }
                $event_year=$current_year;
                for ($i=0;$i<$years_to_advance;$i++) {
                    $event_year++;
                    $recurring_diff=$wpdb->get_var("SELECT DATEDIFF(CURRENT_DATE,'$event_year-$event_month-$event_day')");
                    if ($recurring_diff<0 && $current_settings['display_upcoming_events'] && abs($recurring_diff)<$current_settings['display_upcoming_events_timeframe']) {
                        if ($show_year) {
                            if ($text_after_year) {
                                $r_event="$event->event" . "($event_year)$upcoming_follow_text";
                            }
                            else {
                                $r_event="$event->event" . "$upcoming_follow_text ($event_year)";
                            }
                        }
                        else {
                            $r_event=$event->event . $upcoming_follow_text;
                        }
                        $upcoming_events[$r_event]=abs($recurring_diff);
                    }
                }
                $event_year=$current_year;
                for ($i=0;$i<$years_to_goback;$i++) {
                    $event_year--;
                    $recurring_diff=$wpdb->get_var("SELECT DATEDIFF(CURRENT_DATE,'$event_year-$event_month-$event_day')");
                    if ($recurring_diff>0 && $current_settings['display_past_events'] && abs($recurring_diff)<$current_settings['display_past_events_timeframe']) {
                        if ($show_year) {
                            if ($text_after_year) {
                                $r_event="$event->event ($event_year)" . "$past_follow_text";
                            }
                            else {
                                $r_event="$event->event" . "$past_follow_text ($event_year)";
                            }
                        }
                        else {
                            $r_event=$event->event . $past_follow_text;
                        }
                        $past_events[$r_event]=abs($recurring_diff);
                    }
                }
            }
            # RECURRING AND PAST
            elseif ($recurring_diff>0) {
                $event_year=$current_year;
                if ($show_year) {
                    if ($text_after_year) {
                        $r_event="$event->event ($event_year)" . "$past_follow_text";
                    }
                    else {
                        $r_event="$event->event" . "$past_follow_text ($event_year)";
                    }
                }
                else {
                    $r_event=$event->event . $past_follow_text;
                }
                if ($current_settings['display_past_events'] && abs($recurring_diff)<$current_settings['display_past_events_timeframe']) {
                    $past_events[$r_event]=$recurring_diff;
                }
                $event_year=$current_year;
                for ($i=0;$i<$years_to_advance;$i++) {
                    $event_year++;
                    $recurring_diff=$wpdb->get_var("SELECT DATEDIFF(CURRENT_DATE,'$event_year-$event_month-$event_day')");
                    if ($recurring_diff<0 && $current_settings['display_upcoming_events'] && abs($recurring_diff)<$current_settings['display_upcoming_events_timeframe']) {
                        if ($show_year) {
                            if ($text_after_year) {
                                $r_event="$event->event" . "($event_year)$upcoming_follow_text";
                            }
                            else {
                                $r_event="$event->event" . "$upcoming_follow_text ($event_year)";
                            }
                        }
                        else {
                            $r_event=$event->event . $upcoming_follow_text;
                        }
                        $upcoming_events[$r_event]=abs($recurring_diff);
                    }
                }
                $event_year=$current_year;
                for ($i=0;$i<$years_to_goback;$i++) {
                    $event_year--;
                    $recurring_diff=$wpdb->get_var("SELECT DATEDIFF(CURRENT_DATE,'$event_year-$event_month-$event_day')");
                    if ($recurring_diff>0 && $current_settings['display_past_events'] && abs($recurring_diff)<$current_settings['display_past_events_timeframe']) {
                        if ($show_year) {
                            if ($text_after_year) {
                                $r_event="$event->event ($event_year)" . "$past_follow_text";
                            }
                            else {
                                $r_event="$event->event" . "$past_follow_text ($event_year)";
                            }
                        }
                        else {
                            $r_event=$event->event . $past_follow_text;
                        }
                        $past_events[$r_event]=abs($recurring_diff);
                    }
                }
            }
        }
        else {
            if ($event->recurring==false) {
                if ($event->diff==0 && $current_settings['display_current_events'])
                {
                    $event_string="$event->event" . "$current_follow_text";
                    $today_events[]=$event_string;
                }
                elseif ($event->diff<0 && $current_settings['display_upcoming_events'] && abs($event->diff)<$current_settings['display_upcoming_events_timeframe']) {
                    $event_string="$event->event" . "$upcoming_follow_text";
                    $upcoming_events[$event_string]=abs($event->diff);
                }
                elseif ($event->diff>0 && $current_settings['display_past_events'] && abs($event->diff)<$current_settings['display_past_events_timeframe']) { #event is in the past
                    $event_string="$event->event" . "$past_follow_text";
                    $past_events[$event_string]=abs($event->diff);
                }
            }
        }
    }
    xyzzyb_datediff_call_event($today_events,$upcoming_events,$past_events);
}
       
function xyzzyb_datediff_today ($event) {
    $current_settings=get_option('xyzzyb_datediff_options');
    print '<li><span class="xyzzyb_datediff_current_event">' . stripslashes($event) . "</span></span></li>\n";
}

function xyzzyb_datediff_event ($diff,$event,$upcoming) {
    $current_settings=get_option('xyzzyb_datediff_options');
    if ($upcoming) {
        print '<li><span class="xyzzyb_datediff_days_until">' . $diff . '</span> day';
        ($diff==1) ? print '' : print 's';
        print ' until <span class="xyzzyb_datediff_upcoming_event">' . stripslashes($event) . "</span></li>\n";
    }
    else {
        print '<li><span class="xyzzyb_datediff_days_since">' . $diff . '</span> day';
        ($diff==1) ? print '' : print 's';
        print ' since <span class="xyzzyb_datediff_past_event">' . stripslashes($event) . "</span></li>\n";
    }
}

//2007-03-10 : as of wordpress 2.1 $table_* variables are no longer used
function xyzzyb_datediff_install () {
    //following two lines are originals reworked according to function header comment 2007-03-10
    //global $table_prefix, $wpdb;
    //$datediff_table = $table_prefix . "xyzzyb_datediff";
    global $wpdb;
    $datediff_table = $wpdb->prefix . "xyzzyb_datediff";
    if($wpdb->get_var("show tables like '$datediff_table'") != $datediff_table) {
        $sql="CREATE TABLE " . $datediff_table . " (
            id mediumint(9) NOT NULL AUTO_INCREMENT,
            event text NOT NULL,
            date date NOT NULL,
            recurring boolean NOT NULL,
            UNIQUE KEY id (id)
        );"
;
        require_once(ABSPATH . 'wp-admin/upgrade-functions.php');
        dbDelta($sql);
        $first_event = "XyzzyB DateDiff Installation";
        $first_event_date = $wpdb->get_var("SELECT CURRENT_DATE()");
        $first_event_recurring="0";

        $insert="INSERT INTO " . $datediff_table . "(event,date,recurring)
            VALUES ('"
. $first_event . "', '" . $first_event_date . "', '" . $first_event_recurring . "')";
        $results=$wpdb->query( $insert );
    }
    //setup default options
    $datediff_options['display_past_events'] = true;
    $datediff_options['display_past_events_timeframe'] = '14';
    $datediff_options['display_current_events'] = true;
    $datediff_options['display_upcoming_events'] = true;
    $datediff_options['display_upcoming_events_timeframe'] = '14';
    $datediff_options['order_option']='date';
    $datediff_options['event_separator']='';
    $datediff_options['current_event_follow_text']='';
    $datediff_options['upcoming_event_follow_text']='';
    $datediff_options['past_event_follow_text']='';
    $datediff_options['event_order_by']='date';
    $datediff_options['upcoming_event_order']='ASC';
    $datediff_options['past_event_order']='ASC';
    $datediff_options['show_year']=false;
    $datediff_options['text_after_year']=false;
    $datediff_options['display_recurring_events']=true;
    $datediff_options['current_event_header']='Occuring today:';
    update_option('xyzzyb_datediff_options', $datediff_options);
    update_option('shoutbox_fade_from', "666666");
    update_option('shoutbox_fade_to', "FFFFFF");
    update_option('shoutbox_update_seconds', 4000);
}

function xyzzyb_datediff_add_options() {
    if (function_exists('add_options_page')) {
        add_options_page('XyzzyB DateDiff', 'XyzzyB DateDiff', 8, basename(__FILE__), 'xyzzyb_datediff_options_subpanel');
    }
}

//2007-03-10 : as of wordpress 2.1 $table_* variables are no longer used
function xyzzyb_datediff_options_subpanel() {
    //global $table_prefix, $wpdb;
    global $wpdb;
    $current_settings=get_option('xyzzyb_datediff_options');
    $datediff_table = $wpdb->prefix . "xyzzyb_datediff";
    if (isset($_POST['action'])) {
        $newevent = $wpdb->escape($_POST['newevent']);
        $newdate = $wpdb->escape($_POST['newdate']);
        if ($_POST['recurring']=='on') {
            $recurring = $wpdb->escape(1);
        }
        else {
            $recurring = $wpdb->escape(0);
        }
        if (preg_match('/\d{4}\-\d{1,2}\-\d{1,2}/',$newdate)) {
            $wpdb->query("INSERT INTO $datediff_table (event, date, recurring) VALUES ('$newevent', '$newdate', $recurring)");
        }
        elseif ($newdate=='') {
        }
        else {
            print '<div class="error"><strong>The date must be in YYYY-MM-DD format.</div>';
            $error=true;
        }

        if ($_POST['delete']) {
            $events_to_delete=implode(",",$_POST['delete']);
            $delete_query="DELETE FROM " . $datediff_table . " WHERE id IN (" . $events_to_delete . ")";
            $wpdb->query($delete_query);
        }

        if (!$error) {
            xyzzyb_datediff_save_options();
            print '<div class="updated"><p><strong>Dates and options saved.</strong></p></div>';
        }
        xyzzyb_datediff_display_options();
    }
    else {
        xyzzyb_datediff_display_options();
    }
}

//2007-03-10 : as of wordpress 2.1 $table_* variables are no longer used
function xyzzyb_datediff_display_options() {
    //global $table_prefix, $wpdb;
    global $wpdb;
    $current_settings=get_option('xyzzyb_datediff_options');
    $datediff_table = $wpdb->prefix . "xyzzyb_datediff";
    ?>
    <div class=wrap id="xyzzyb_datediff_options">
        <style>
        fieldset.options {
            border: 1px solid #ccc;
            margin-bottom: 2em;
        }
        fieldset.options legend {
            font-family: Georgia,"Times New Roman",Times,serif;
            font-size: 22px;
        }
        fieldset.stored_events {
            border: 1px solid #ccc;
            margin-bottom: 2em;
        }
        fieldset.stored_events legend {
            font-family: Georgia,"Times New Roman",Times,serif;
            font-size: 22px;
        }
        fieldset.new_event {
            border: 1px solid #ccc;
            margin-bottom: 2em;
        }
        fieldset.new_event legend {
            font-family: Georgia,"Times New Roman",Times,serif;
            font-size: 22px;
        }   
        table.stored_events th {
            border-bottom: 2px solid #aaa;
        }
        .option-header {
            text-align: left;
            background: #eee;
        }
        </style>
        <h2>XyzzyB DateDiff Configuration</h2>
        <fieldset class="stored_events">
        <legend>Stored Events</legend>
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']; ?>">
            <table class="stored_events">
            <tr><th>Event</th><th>Date</th><th>Recurring?</th><th>Delete?</th></tr>
            <?php
            $order_option=$current_settings['order_option'];
            $stored_events = $wpdb->get_results("SELECT id,event,date,recurring FROM $datediff_table ORDER BY $order_option");
            foreach ($stored_events as $event) {
                $event_string='<tr><td>' . stripslashes($event->event) . '</td><td>' . $event->date . '</td>';
                if ($event->recurring) {
                    $event_string .= '<td align="center">yes</td>';
                }
                else {
                    $event_string .= '<td align="center">no</td>';
                }
                $event_string.='<td align="center"><input type="checkbox" name="delete[]" value="' . $event->id . '" /></td></tr>';
                print $event_string;
            }
            ?>
            </table>
        </fieldset>
        <fieldset class="new_event">
                <legend>Add New Event</legend>
                <table>
                <tr><td>Event name</td><td><input type="text" name="newevent" id="newevent" /></td>
                <tr><td>Event date (YYYY-MM-DD)</td><td><input type="text" name="newdate" id="newdate" /></td>
                <tr><td>Recurring?</td><td><input type="checkbox" name="recurring" id="recurring" /></td></tr>
                </table>
        </fieldset>
        <fieldset class="options">
            <input type="hidden" name="action" value="save_options" />
            <legend>Options</legend>
            <table>
            <tr><th colspan="2" class="option-header">Event Order</th></tr>
            <tr>
                <td>Order events by:</td>
                <td>Date <input type="radio" name="event_order_by" value="date"
                    <?php if($current_settings['event_order_by']=='date') echo 'checked'; ?> />
                    Event <input type="radio" name="event_order_by" value="event"
                    <?php if($current_settings['event_order_by']=='event') echo 'checked'; ?> />
                    Number of Days <input type="radio" name="event_order_by" value="diff"
                    <?php if ($current_settings['event_order_by']=='diff') echo 'checked'; ?> />
                    </td>
                <td><span style="font-size: large">[</span>Ascending <input type="radio" name="upcoming_event_order" value="ASC"
                <?php if($current_settings['upcoming_event_order']=='ASC') echo 'checked'; ?> />
                Descending <input type="radio" name="upcoming_event_order" value="DESC"
                <?php if($current_settings['upcoming_event_order']=='DESC') echo 'checked'; ?> /><span style="font-size: large;">]</span></td>
            </tr>
            <?php if ($current_settings['event_order_by']=='diff') { ?>
            <tr>
                <td>Past event order (If using "Number of Days"):</td>
                <td>Ascending <input type="radio" name="past_event_order" value="ASC"
                <?php if($current_settings['past_event_order']=='ASC') echo 'checked'; ?> />
                Descending <input type="radio" name="past_event_order" value="DESC"
                <?php if($current_settings['past_event_order']=='DESC') echo 'checked'; ?> />
                </td>
            </tr>
            <?php } ?>
            </table>
            <br />
            <table>
            <tr><th colspan="2" class="option-header">Event Display</th></tr>
            <tr>
                <td>Display events on the day they occur?</td>
                <td><input type="checkbox" name="display_current_events" id="display_current_events"
                <?php if($current_settings['display_current_events'] == true) echo 'checked'; ?> /></td>
            </tr>
            </tr>
            <tr>
                <td>Display past events?</td>
                <td><input type="checkbox" name="display_past_events" id="display_past_events"
                <?php if($current_settings['display_past_events'] == true) echo 'checked'; ?> /></td>
            </tr>
            <tr>
                <td>Display past events for how long?</td>
                <td><input type="text" size="2" name="display_past_events_timeframe" id="display_past_events_timeframe"
                value="<?php print $current_settings['display_past_events_timeframe'] ?>" /></td>
            </tr>
            <tr>
                <td>Display upcoming events?</td>
                <td><input type="checkbox" name="display_upcoming_events" id="display_upcoming_events"
                <?php if($current_settings['display_upcoming_events'] == true) echo 'checked'; ?> /></td>
            </tr>
            <tr>
                <td>Display upcoming events how many days in advance?</td>
                <td><input type="text" size="2" name="display_upcoming_events_timeframe" id="display_upcoming_events_timeframe"
                value="<?php print $current_settings['display_upcoming_events_timeframe'] ?>" /></td>
            </tr>
            <tr>
                <td>Display recurring events?</td>
                <td><input type="checkbox" name="display_recurring_events" id="display_recurring_events"
                <?php if($current_settings['display_recurring_events'] == true) echo 'checked'; ?> /></td>
            </tr>
            <tr>
                <td>Show year after recurring event?</td>
                <td><input type="checkbox" name="show_year" id="show_year"
                <?php if($current_settings['show_year'] == true) echo 'checked'; ?> /></td>
            </tr>
            </table>
            <br />
            <table>
            <tr><th colspan="2" class="option-header">Added Text (all text options can be blank)</th></tr>
            <tr>
                <td>Text to precede current events:</td>
                <td><input type="text" size="14" name="current_event_header" id="current_event_header"
                    value="<?php print $current_settings['current_event_header'] ?>" /></td>
                </td>
            </tr>
            <tr>
                <td>Text to separate event groups:</td>
                <td><input type="text" size="6" name="event_separator" id="event_separator"
                    value="<?php print $current_settings['event_separator'] ?>" /></td>
                </td>
            </tr>
            <tr>
                <td>Text to follow current events:</td>
                <td><input type="text" size="6" name="current_event_follow_text" id="current_event_follow_text"
                    value="<?php print $current_settings['current_event_follow_text'] ?>" /></td>
                </td>
            </tr>
            <tr>
                <td>Text to follow upcoming events:</td>
                <td><input type="text" size="6" name="upcoming_event_follow_text" id="upcoming_event_follow_text"
                    value="<?php print $current_settings['upcoming_event_follow_text'] ?>" /></td>
                </td>
            </tr>
            <tr>
                <td>Text to follow past events:</td>
                <td><input type="text" size="6" name="past_event_follow_text" id="past_event_follow_text"
                    value="<?php print $current_settings['past_event_follow_text'] ?>" /></td>
                </td>
            </tr>
            <?php if ($current_settings['show_year']) {?>
            <tr><td>Insert text after (year) for recurring events?</td>
            <td><input type="checkbox" name="text_after_year" id="text_after_year"
            <?php if($current_settings['text_after_year'] == true) echo 'checked'; ?> /></td>
            </tr>
            <?php } ?>
            </table>
            <hr />
            <table>
            <tr>
                <td>Order <em>Stored Events</em> display in this options page by:</td>
                <td>Date <input type="radio" name="order_option" value="date"
                    <?php if($current_settings['order_option']=='date') echo 'checked'; ?> />
                    Event <input type="radio" name="order_option" value="event"
                    <?php if($current_settings['order_option']=='event') echo 'checked'; ?> /></td>
            </tr>
            </table>
        </fieldset>
            <div class="submit">
            <input type="submit" name="info_update" value="<?php
            _e('Update', 'Localization name')
            ?>"
/></div>
        </form>
    </div>
<?php
}

function xyzzyb_datediff_save_options() {
    if (array_key_exists('display_past_events',$_POST)) {
        $datediff_options['display_past_events'] = true;
    }
    else {
        $datediff_options['display_past_events'] = false;
    }
    $datediff_options['display_past_events_timeframe']=$_POST['display_past_events_timeframe'];
    if (array_key_exists('display_current_events',$_POST)) {
        $datediff_options['display_current_events'] = true;
    }
    else {
        $datediff_options['display_current_events'] = false;
    }
    if (array_key_exists('display_upcoming_events',$_POST)) {
        $datediff_options['display_upcoming_events'] = true;
    }
    else {
        $datediff_options['display_upcoming_events'] = false;
    }
    $datediff_options['display_upcoming_events_timeframe']=$_POST['display_upcoming_events_timeframe'];
    $datediff_options['order_option']=$_POST['order_option'];
    $datediff_options['event_separator']=$_POST['event_separator'];
    $datediff_options['current_event_header']=$_POST['current_event_header'];
    $datediff_options['current_event_follow_text']=$_POST['current_event_follow_text'];
    $datediff_options['upcoming_event_follow_text']=$_POST['upcoming_event_follow_text'];
    $datediff_options['past_event_follow_text']=$_POST['past_event_follow_text'];
    $datediff_options['event_order_by']=$_POST['event_order_by'];
    $datediff_options['upcoming_event_order']=$_POST['upcoming_event_order'];
    $datediff_options['past_event_order']=$_POST['past_event_order'];
    if (array_key_exists('show_year',$_POST)) {
        $datediff_options['show_year']=true;
    }
    else {
        $datediff_options['show_year']=false;
    }
    if (array_key_exists('display_recurring_events',$_POST)) {
        $datediff_options['display_recurring_events']=true;
    }
    else {
        $datediff_options['display_recurring_events']=false;
    }
    if (array_key_exists('text_after_year',$_POST)) {
        $datediff_options['text_after_year']=true;
    }
    else {
        $datediff_options['text_after_year']=false;
    }
    update_option('xyzzyb_datediff_options',$datediff_options);
    update_option('shoutbox_fade_from', "666666");
    update_option('shoutbox_fade_to', "FFFFFF");
    update_option('shoutbox_update_seconds', 4000);
}

if (!get_option('xyzzyb_datediff_options')){
    // create default options
    $datediff_options['display_past_events'] = true;
    $datediff_options['display_past_events_timeframe'] = '14';
    $datediff_options['display_current_events'] = true;
    $datediff_options['display_upcoming_events'] = true;
    $datediff_options['display_upcoming_events_timeframe'] = '14';
    $datediff_options['order_option']='date';
    $datediff_options['event_separator']='';
    $datediff_options['current_event_follow_text']='';
    $datediff_options['upcoming_event_follow_text']='';
    $datediff_options['past_event_follow_text']='';
    $datediff_options['event_order_by']='date';
    $datediff_options['upcoming_event_order']='ASC';
    $datediff_options['past_event_order']='ASC';
    $datediff_options['show_year']=false;
    $datediff_options['text_after_year']=false;
    $datediff_options['display_recurring_events']=true;
    $datediff_options['current_event_header']='Occuring today:';
    update_option('xyzzyb_datediff_options', $datediff_options);
}

if  (function_exists('add_action')) {
    add_action('admin_menu', 'xyzzyb_datediff_add_options');
    add_action('activate_xyzzyb_datediff.php','xyzzyb_datediff_install');
}