Exemplo n.º 1
0
function mc_increment_event($id, $post = array(), $test = false)
{
    global $wpdb;
    $event = mc_get_event_core($id);
    $data = array();
    if (empty($post)) {
        $orig_begin = $event->event_begin . ' ' . $event->event_time;
        $orig_end = $event->event_end . ' ' . $event->event_endtime;
    } else {
        $orig_begin = @$post['event_begin'] . ' ' . @$post['event_time'];
        $orig_end = @$post['event_end'] . ' ' . @$post['event_endtime'];
    }
    $group_id = $event->event_group_id;
    $format = array('%d', '%s', '%s', '%d');
    $recurs = str_split($event->event_recur, 1);
    $recur = $recurs[0];
    $every = isset($recurs[1]) ? $recurs[1] : 1;
    if ($recur != "S") {
        // if this event had a rep of 0, translate that.
        $event_repetition = $event->event_repeats != 0 ? $event->event_repeats : _mc_increment_values($recur);
        $numforward = (int) $event_repetition;
        if ($recur != 'S') {
            switch ($recur) {
                case "D":
                case "E":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, $i * $every, 0, 0);
                        $end = my_calendar_add_date($orig_end, $i * $every, 0, 0);
                        if ($recur == 'E' && (date('w', $begin) != 0 && date('w', $begin) != 6) || $recur == 'D') {
                            $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                            if ($test == 'test' && $i > 0) {
                                return $data;
                            }
                            if (!$test) {
                                $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
                            }
                        } else {
                            $numforward++;
                        }
                    }
                    break;
                case "W":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, $i * 7 * $every, 0, 0);
                        $end = my_calendar_add_date($orig_end, $i * 7 * $every, 0, 0);
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                    }
                    break;
                case "B":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, $i * 14, 0, 0);
                        $end = my_calendar_add_date($orig_end, $i * 14, 0, 0);
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                    }
                    break;
                case "M":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, 0, $i * $every, 0);
                        $end = my_calendar_add_date($orig_end, 0, $i * $every, 0);
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                    }
                    break;
                case "U":
                    //important to keep track of which date variables are strings and which are timestamps
                    $week_of_event = week_of_month(date('d', strtotime($event->event_begin)));
                    $newbegin = my_calendar_add_date($orig_begin, 28, 0, 0);
                    $newend = my_calendar_add_date($orig_end, 28, 0, 0);
                    $fifth_week = $event->event_fifth_week;
                    $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', strtotime($orig_begin)), 'occur_end' => date('Y-m-d  H:i:s', strtotime($orig_end)), 'occur_group_id' => $group_id);
                    if ($test == 'test') {
                        return $data;
                    }
                    if (!$test) {
                        $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
                    }
                    $numforward = $numforward - 1;
                    for ($i = 0; $i <= $numforward; $i++) {
                        $next_week_diff = date('m', $newbegin) == date('m', my_calendar_add_date(date('Y-m-d', $newbegin), 7, 0, 0)) ? false : true;
                        $move_event = $fifth_week == 1 && $week_of_event == week_of_month(date('d', $newbegin)) + 1 && $next_week_diff == true ? true : false;
                        if ($week_of_event == week_of_month(date('d', $newbegin)) || $move_event == true) {
                            // continue;
                        } else {
                            $newbegin = my_calendar_add_date(date('Y-m-d  H:i:s', $newbegin), 7, 0, 0);
                            $newend = my_calendar_add_date(date('Y-m-d  H:i:s', $newend), 7, 0, 0);
                            $move_event = $fifth_week == 1 && $week_of_event == week_of_month(date('d', $newbegin)) + 1 ? true : false;
                            if ($week_of_event == week_of_month(date('d', $newbegin)) || $move_event == true) {
                                // continue;
                            } else {
                                $newbegin = my_calendar_add_date(date('Y-m-d  H:i:s', $newbegin), 14, 0, 0);
                                $newend = my_calendar_add_date(date('Y-m-d  H:i:s', $newend), 14, 0, 0);
                            }
                        }
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $newbegin), 'occur_end' => date('Y-m-d  H:i:s', $newend), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                        $newbegin = my_calendar_add_date(date('Y-m-d  H:i:s', $newbegin), 28, 0, 0);
                        $newend = my_calendar_add_date(date('Y-m-d  H:i:s', $newend), 28, 0, 0);
                    }
                    break;
                case "Y":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, 0, 0, $i * $every);
                        $end = my_calendar_add_date($orig_end, 0, 0, $i * $every);
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                    }
                    break;
            }
        }
    } else {
        $begin = strtotime($orig_begin);
        $end = strtotime($orig_end);
        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d H:i:s', $begin), 'occur_end' => date('Y-m-d H:i:s', $end), 'occur_group_id' => $group_id);
        // Logic shift -- should not have any need to verify occurrences.
        //$occurs = $wpdb->get_results("SELECT * FROM ".my_calendar_event_table()." WHERE occur_event_id = $id ORDER BY occur_begin DESC");
        if (!$test) {
            $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
        }
    }
    return $data;
}
function mc_event_date_span($group_id, $event_span, $dates = array())
{
    global $wpdb;
    $mcdb = $wpdb;
    // cache as transient to save db queries.
    if (get_transient('mc_event_date_span_' . $group_id . '_' . $event_span)) {
        return get_transient('mc_event_date_span_' . $group_id . '_' . $event_span);
    }
    if (get_option('mc_remote') == 'true' && function_exists('mc_remote_db')) {
        $mcdb = mc_remote_db();
    }
    $group_id = (int) $group_id;
    if ($group_id == 0 && $event_span != 1) {
        return $dates;
    } else {
        $sql = "SELECT occur_begin, occur_end FROM " . my_calendar_event_table() . " WHERE occur_group_id = {$group_id} ORDER BY occur_begin ASC";
        $dates = $mcdb->get_results($sql);
        set_transient('mc_event_date_span_' . $group_id . '_' . $event_span, $dates, HOUR_IN_SECONDS);
        return $dates;
    }
}
function mc_migrate_db()
{
    global $wpdb;
    // this function migrates the DB from version 1.10.x to version 2.0.
    $tables = $wpdb->get_results("show tables;");
    foreach ($tables as $table) {
        foreach ($table as $value) {
            if ($value == my_calendar_event_table()) {
                $count = $wpdb->get_var('SELECT count(1) from ' . my_calendar_event_table());
                $count2 = $wpdb->get_var('SELECT count(1) from ' . my_calendar_table());
                if ($count2 > 0 && $count > 0) {
                    return;
                }
                if ($count2 == 0 && $count == 0) {
                    return;
                    // no events, migration unnecessary
                }
                break 2;
            }
        }
    }
    // 2) create new occurrences database, if necessary
    //dbDelta($initial_occur_db);
    // 3) migrate events
    $sql = "SELECT event_id, event_begin, event_time, event_end, event_endtime FROM " . my_calendar_table();
    $events = $wpdb->get_results($sql);
    foreach ($events as $event) {
        // assign endtimes to all events
        if ($event->event_endtime == '00:00:00' && $event->event_time != '00:00:00') {
            $event->event_endtime = date('H:i:s', strtotime("{$event->event_time} +1 hour"));
            mc_flag_event($event->event_id, $event->event_endtime);
        }
        $dates = array('event_begin' => $event->event_begin, 'event_end' => $event->event_end, 'event_time' => $event->event_time, 'event_endtime' => $event->event_endtime);
        mc_increment_event($event->event_id, $dates);
    }
}
function mc_related_events($id, $return = false)
{
    global $wpdb;
    $id = (int) $id;
    if ($id === 0 && $return === false) {
        echo "<li>" . __('No related events', 'my-calendar') . "</li>";
        return;
    }
    if ($id === 0 && $return) {
        return array();
    }
    $output = '';
    $sql = "SELECT * FROM " . my_calendar_event_table() . " WHERE occur_group_id={$id}";
    $results = $wpdb->get_results($sql);
    if ($return) {
        return $results;
    }
    if (is_array($results) && !empty($results)) {
        foreach ($results as $result) {
            $event = $result->occur_event_id;
            $current = "<a href='" . admin_url('admin.php?page=my-calendar') . "&amp;mode=edit&amp;event_id={$event}'>";
            $end = "</a>";
            $begin = date_i18n(get_option('mc_date_format'), strtotime($result->occur_begin)) . ', ' . date(get_option('mc_time_format'), strtotime($result->occur_begin));
            $output .= "<li>{$current}{$begin}{$end}</li>";
        }
    } else {
        $output = "<li>" . __('No related events', 'my-calendar') . "</li>";
    }
    echo $output;
}
function mc_instance_list($id, $occur = false, $template = '<h3>{title}</h3>{description}', $list = '<li>{date}, {time}</li>', $before = "<ul>", $after = "</ul>", $instance = false)
{
    global $wpdb;
    $id = (int) $id;
    $output = '';
    if ($instance == true) {
        $sql = "SELECT * FROM " . my_calendar_event_table() . " WHERE occur_id={$id}";
    } else {
        $sql = "SELECT * FROM " . my_calendar_event_table() . " WHERE occur_event_id={$id}";
    }
    $results = $wpdb->get_results($sql);
    if (is_array($results) && is_admin()) {
        foreach ($results as $result) {
            $begin = "<span id='occur_date_{$result->occur_id}'>" . date_i18n(get_option('mc_date_format'), strtotime($result->occur_begin)) . ', ' . date(get_option('mc_time_format'), strtotime($result->occur_begin)) . "</span>";
            if ($result->occur_id == $occur) {
                $form_control = '';
                $edit = "<em>" . __('Editing Now', 'my-calendar') . "</em>";
            } else {
                $form_control = "{$begin}: <button class='delete_occurrence' type='button' data-value='{$result->occur_id}' aria-describedby='occur_date_{$result->occur_id}' />" . __('Delete', 'my-calendar') . "</button> ";
                $edit = "<a href='" . admin_url('admin.php?page=my-calendar') . "&amp;mode=edit&amp;event_id={$id}&amp;date={$result->occur_id}' aria-describedby='occur_date_{$result->occur_id}'>" . __('Edit', 'my-calendar') . "</a>";
            }
            $output .= "<li>{$form_control}{$edit}</li>";
        }
    } else {
        $details = '';
        foreach ($results as $result) {
            $event_id = $result->occur_id;
            $event = mc_get_event($event_id);
            $array = mc_create_tags($event);
            if (in_array($template, array('details', 'grid', 'list', 'mini')) || mc_key_exists($template)) {
                if (get_option('mc_use_' . $template . '_template') == 1) {
                    $template = mc_get_template($template);
                } else {
                    if (mc_key_exists($template)) {
                        $template = mc_get_custom_template($template);
                    } else {
                        $details = my_calendar_draw_event($event, $type = "single", $event->event_begin, $event->event_time, '');
                    }
                }
            }
            $item = $list != '' ? jd_draw_template($array, $list) : '';
            if ($details == '') {
                $details = $template != '' ? jd_draw_template($array, $template) : '';
            }
            $output .= $item;
            if ($list == '') {
                break;
            }
        }
        $output = $details . $before . $output . $after;
    }
    return get_option('mc_process_shortcodes') == 'true' ? do_shortcode($output) : $output;
}
Exemplo n.º 6
0
function mc_increment_event($id, $post = array(), $test = false)
{
    global $wpdb;
    $event = mc_get_event_core($id);
    $data = array();
    if (empty($post)) {
        $orig_begin = $event->event_begin . ' ' . $event->event_time;
        $orig_end = $event->event_end . ' ' . $event->event_endtime;
    } else {
        $orig_begin = @$post['event_begin'] . ' ' . @$post['event_time'];
        $orig_end = @$post['event_end'] . ' ' . @$post['event_endtime'];
    }
    $group_id = $event->event_group_id;
    $format = array('%d', '%s', '%s', '%d');
    $recurs = str_split($event->event_recur, 1);
    $recur = $recurs[0];
    $every = isset($recurs[1]) ? $recurs[1] : 1;
    if ($recur != "S") {
        // if this event had a rep of 0, translate that.
        $event_repetition = $event->event_repeats != 0 ? $event->event_repeats : _mc_increment_values($recur);
        $numforward = (int) $event_repetition;
        if ($recur != 'S') {
            switch ($recur) {
                case "D":
                case "E":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, $i * $every, 0, 0);
                        $end = my_calendar_add_date($orig_end, $i * $every, 0, 0);
                        if ($recur == 'E' && (date('w', $begin) != 0 && date('w', $begin) != 6) || $recur == 'D') {
                            $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                            if ($test == 'test' && $i > 0) {
                                return $data;
                            }
                            if (!$test) {
                                $wpdb->insert(my_calendar_event_table(), $data, $format);
                            }
                        } else {
                            $numforward++;
                        }
                    }
                    break;
                case "W":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, $i * 7 * $every, 0, 0);
                        $end = my_calendar_add_date($orig_end, $i * 7 * $every, 0, 0);
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $sql = $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                    }
                    break;
                case "B":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, $i * 14, 0, 0);
                        $end = my_calendar_add_date($orig_end, $i * 14, 0, 0);
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                    }
                    break;
                case "M":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, 0, $i * $every, 0);
                        $end = my_calendar_add_date($orig_end, 0, $i * $every, 0);
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                    }
                    break;
                case "U":
                    //important to keep track of which date variables are strings and which are timestamps
                    // This pattern handles monthly events by day.
                    //if ( $every != 1 ) {
                    // return an error?
                    // handle patterns that are something *other* than every month
                    /*
                        Idea: use mod to identify which months need to be checked. Check which date in each month. 
                    */
                    //} else {
                    $week_of_event = week_of_month(date('d', strtotime($event->event_begin)));
                    $newbegin = my_calendar_add_date($orig_begin, 28, 0, 0);
                    $newend = my_calendar_add_date($orig_end, 28, 0, 0);
                    $fifth_week = $event->event_fifth_week;
                    $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', strtotime($orig_begin)), 'occur_end' => date('Y-m-d  H:i:s', strtotime($orig_end)), 'occur_group_id' => $group_id);
                    /*
                    if ( $test == 'test' && $i > 0 ) {
                    	return $data;
                    }
                    */
                    if (!$test) {
                        $wpdb->insert(my_calendar_event_table(), $data, $format);
                    }
                    $numforward = $numforward - 1;
                    for ($i = 0; $i <= $numforward; $i++) {
                        $next_week_diff = date('m', $newbegin) == date('m', my_calendar_add_date(date('Y-m-d', $newbegin), 7, 0, 0)) ? false : true;
                        $move_event = $fifth_week == 1 && $week_of_event == week_of_month(date('d', $newbegin)) + 1 && $next_week_diff == true ? true : false;
                        if ($week_of_event == week_of_month(date('d', $newbegin)) || $move_event == true) {
                            // continue;
                        } else {
                            $newbegin = my_calendar_add_date(date('Y-m-d  H:i:s', $newbegin), 7, 0, 0);
                            $newend = my_calendar_add_date(date('Y-m-d  H:i:s', $newend), 7, 0, 0);
                            $move_event = $fifth_week == 1 && $week_of_event == week_of_month(date('d', $newbegin)) + 1 ? true : false;
                            if ($week_of_event == week_of_month(date('d', $newbegin)) || $move_event == true) {
                                // continue;
                            } else {
                                $newbegin = my_calendar_add_date(date('Y-m-d  H:i:s', $newbegin), 14, 0, 0);
                                $newend = my_calendar_add_date(date('Y-m-d  H:i:s', $newend), 14, 0, 0);
                            }
                        }
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $newbegin), 'occur_end' => date('Y-m-d  H:i:s', $newend), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                        $newbegin = my_calendar_add_date(date('Y-m-d  H:i:s', $newbegin), 28, 0, 0);
                        $newend = my_calendar_add_date(date('Y-m-d  H:i:s', $newend), 28, 0, 0);
                        //}
                    }
                    break;
                case "Y":
                    for ($i = 0; $i <= $numforward; $i++) {
                        $begin = my_calendar_add_date($orig_begin, 0, 0, $i * $every);
                        $end = my_calendar_add_date($orig_end, 0, 0, $i * $every);
                        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d  H:i:s', $begin), 'occur_end' => date('Y-m-d  H:i:s', $end), 'occur_group_id' => $group_id);
                        if ($test == 'test' && $i > 0) {
                            return $data;
                        }
                        if (!$test) {
                            $wpdb->insert(my_calendar_event_table(), $data, $format);
                        }
                    }
                    break;
            }
        }
    } else {
        $begin = strtotime($orig_begin);
        $end = strtotime($orig_end);
        $data = array('occur_event_id' => $id, 'occur_begin' => date('Y-m-d H:i:s', $begin), 'occur_end' => date('Y-m-d H:i:s', $end), 'occur_group_id' => $group_id);
        if (!$test) {
            $wpdb->insert(my_calendar_event_table(), $data, $format);
        }
    }
    return $data;
}
function mc_get_search_results($search)
{
    global $wpdb;
    $mcdb = $wpdb;
    $event_array = array();
    if (get_option('mc_remote') == 'true' && function_exists('mc_remote_db')) {
        $mcdb = mc_remote_db();
    }
    $before = apply_filters('mc_past_search_results', 0);
    $after = apply_filters('mc_future_search_results', 15);
    // return only future events, nearest 10
    if (is_array($search)) {
        // if from & to are set, we need to use an alternate search query
        $from = $search['from'];
        $to = $search['to'];
        $category = isset($search['category']) ? $search['category'] : null;
        $ltype = isset($search['ltype']) ? $search['ltype'] : null;
        $lvalue = isset($search['lvalue']) ? $search['lvalue'] : null;
        $author = isset($search['author']) ? $search['author'] : null;
        $host = isset($search['host']) ? $search['host'] : null;
        $search = isset($search['search']) ? $search['search'] : '';
        $event_array = my_calendar_events($from, $to, $category, $ltype, $lvalue, 'search', $author, $host, $search);
    } else {
        $date = date('Y', current_time('timestamp')) . '-' . date('m', current_time('timestamp')) . '-' . date('d', current_time('timestamp'));
        // if a value is non-zero, I'll grab a handful of extra events so I can throw out holidays and others like that.
        if ($before > 0) {
            $before = $before + 5;
            $events1 = $mcdb->get_results("SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end \r\n\t\t\tFROM " . my_calendar_event_table() . " \r\n\t\t\tJOIN " . my_calendar_table() . " \r\n\t\t\tON (event_id=occur_event_id) \r\n\t\t\tJOIN " . my_calendar_categories_table() . " \r\n\t\t\tON (event_category=category_id) WHERE event_approved = 1 {$search} AND event_flagged <> 1 \r\n\t\t\tAND DATE(occur_begin) < '{$date}' ORDER BY occur_begin DESC LIMIT 0,{$before}");
        } else {
            $events1 = array();
        }
        $events3 = $mcdb->get_results("SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end \r\n\t\tFROM " . my_calendar_event_table() . " \r\n\t\tJOIN " . my_calendar_table() . " \r\n\t\tON (event_id=occur_event_id) \r\n\t\tJOIN " . my_calendar_categories_table() . " \r\n\t\tON (event_category=category_id) WHERE event_approved = 1 {$search} AND event_flagged <> 1 \r\n\t\tAND DATE(occur_begin) = '{$date}'");
        if ($after > 0) {
            $after = $after + 5;
            $events2 = $mcdb->get_results("SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end \r\n\t\t\tFROM " . my_calendar_event_table() . " \r\n\t\t\tJOIN " . my_calendar_table() . " \r\n\t\t\tON (event_id=occur_event_id) \r\n\t\t\tJOIN " . my_calendar_categories_table() . " \r\n\t\t\tON (event_category=category_id) WHERE event_approved = 1 {$search} AND event_flagged <> 1 \r\n\t\t\tAND DATE(occur_begin) > '{$date}' ORDER BY occur_begin ASC LIMIT 0,{$after}");
        } else {
            $events2 = array();
        }
        $arr_events = array();
        if (!empty($events1) || !empty($events2) || !empty($events3)) {
            $arr_events = array_merge($events1, $events3, $events2);
        }
        if (!get_option('mc_skip_holidays_category') || get_option('mc_skip_holidays_category') == '') {
            $holidays = array();
        } else {
            $holidays = mc_get_all_holidays($before, $after, 'yes');
            $holiday_array = mc_set_date_array($holidays);
        }
        if (is_array($arr_events) && !empty($arr_events)) {
            $no_events = false;
            $event_array = mc_set_date_array($arr_events);
            if (is_array($holidays) && count($holidays) > 0) {
                $event_array = mc_holiday_limit($event_array, $holiday_array);
                // if there are holidays, rejigger.
            }
        }
    }
    return $event_array;
}
function my_calendar_grab_events($from, $to, $category = null, $ltype = '', $lvalue = '', $source = 'calendar', $author = null, $host = null, $holidays = null, $search = '', $site = false)
{
    global $wpdb;
    $mcdb = $wpdb;
    if (get_option('mc_remote') == 'true' && function_exists('mc_remote_db')) {
        $mcdb = mc_remote_db();
    }
    if ($holidays === null) {
        if (isset($_GET['mcat'])) {
            $ccategory = $_GET['mcat'];
        } else {
            $ccategory = $category;
        }
    } else {
        $ccategory = $category;
    }
    if (isset($_GET['ltype'])) {
        $cltype = $_GET['ltype'];
    } else {
        $cltype = $ltype;
    }
    if (isset($_GET['loc'])) {
        $clvalue = $_GET['loc'];
    } else {
        $clvalue = $lvalue;
    }
    if (isset($_GET['mc_auth'])) {
        $clauth = $_GET['mc_auth'];
    } else {
        $clauth = $author;
    }
    if (isset($_GET['mc_host'])) {
        $clhost = $_GET['mc_host'];
    } else {
        $clhost = $host;
    }
    if ($ccategory == '') {
        $ccategory = 'all';
    }
    if ($clvalue == '') {
        $clvalue = 'all';
    }
    if ($cltype == '') {
        $cltype = 'all';
    }
    if ($clvalue == 'all') {
        $cltype = 'all';
    }
    if ($clauth == '') {
        $clauth = 'all';
    }
    if ($clhost == '') {
        $clhost = 'all';
    }
    if (!mc_checkdate($from) || !mc_checkdate($to)) {
        return array();
    }
    // not valid dates
    $caching = apply_filters('mc_caching_enabled', false, $ccategory, $ltype, $lvalue, $author, $host);
    $hash = md5($from . $to . $ccategory . $cltype . $clvalue . $clauth . $clhost);
    if ($source != 'upcoming') {
        // no caching on upcoming events by days widgets or lists
        if ($caching) {
            $output = mc_check_cache($ccategory, $cltype, $clvalue, $clauth, $clhost, $hash);
            if ($output && $output != 'empty') {
                return $output;
            }
            if ($output == 'empty') {
                return array();
            }
        }
    }
    $select_category = $ccategory != 'all' ? mc_select_category($ccategory) : '';
    $select_author = $clauth != 'all' ? mc_select_author($clauth) : '';
    $select_host = $clhost != 'all' ? mc_select_host($clhost) : '';
    $select_location = mc_limit_string('grab', $cltype, $clvalue);
    if ($caching && $source != 'upcoming') {
        $select_category = '';
        $select_location = '';
        $select_author = '';
        $select_host = '';
    }
    // if caching, then need all categories/locations in cache. UNLESS this is an upcoming events list
    $arr_events = array();
    $limit_string = "event_flagged <> 1 AND event_approved = 1";
    $search = mc_prepare_search_query($search);
    $event_query = "SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end\r\n\t\t\t\t\tFROM " . my_calendar_event_table($site) . " \r\n\t\t\t\t\tJOIN " . my_calendar_table($site) . "\r\n\t\t\t\t\tON (event_id=occur_event_id) \t\t\t\t\t\r\n\t\t\t\t\tJOIN " . my_calendar_categories_table($site) . " \r\n\t\t\t\t\tON (event_category=category_id) \r\n\t\t\t\t\tWHERE {$select_category} {$select_location} {$select_author} {$select_host} {$limit_string} {$search} \r\n\t\t\t\t\tAND ( DATE(occur_begin) BETWEEN '{$from} 00:00:00' AND '{$to} 23:59:59' \r\n\t\t\t\t\t\tOR DATE(occur_end) BETWEEN '{$from} 00:00:00' AND '{$to} 23:59:59' \r\n\t\t\t\t\t\tOR ( DATE('{$from}') BETWEEN DATE(occur_begin) AND DATE(occur_end) ) \r\n\t\t\t\t\t\tOR ( DATE('{$to}') BETWEEN DATE(occur_begin) AND DATE(occur_end) ) ) \r\n\t\t\t\t\tORDER BY " . apply_filters('mc_primary_sort', 'occur_begin') . ", " . apply_filters('mc_secondary_sort', 'event_title ASC');
    $events = $mcdb->get_results($event_query);
    if (!empty($events)) {
        foreach (array_keys($events) as $key) {
            $event =& $events[$key];
            $event->site_id = $site;
            $arr_events[] = $event;
        }
    }
    if ($source != 'upcoming' && $caching) {
        $new_cache = mc_create_cache($arr_events, $hash, $category, $ltype, $lvalue, $author, $host);
        if ($new_cache) {
            $output = mc_check_cache($ccategory, $cltype, $clvalue, $clauth, $clhost, $hash);
            return $output;
        } else {
            // need to clean cache if the cache is maxed.
            return mc_clean_cache($arr_events, $ccategory, $cltype, $clvalue, $clauth, $clhost);
        }
    } else {
        return $arr_events;
    }
}
function mc_instance_list($id, $occur = false, $template = '<h3>{title}</h3>{description}', $list = '<li>{date}, {time}</li>', $before = "<ul>", $after = "</ul>")
{
    global $wpdb;
    $id = (int) $id;
    $output = '';
    $sql = "SELECT * FROM " . my_calendar_event_table() . " WHERE occur_event_id={$id}";
    $results = $wpdb->get_results($sql);
    if (is_array($results) && is_admin()) {
        foreach ($results as $result) {
            if ($result->occur_id == $occur) {
                $form_control = '';
                $current = "<em>" . __('Editing: ', 'my-calendar') . "</em>";
                $end = '';
            } else {
                $form_control = "<input type='checkbox' name='delete_occurrences[]' id='delete_{$result->occur_id}' value='{$result->occur_id}' aria-labelledby='occur_label occur_date' /> <label id='occur_label' for='delete_{$result->occur_id}'>Delete</label> ";
                $current = "<a href='" . admin_url('admin.php?page=my-calendar') . "&amp;mode=edit&amp;event_id={$id}&amp;date={$result->occur_id}'>";
                $end = "</a>";
            }
            $begin = "<span id='occur_date'>" . date_i18n(get_option('mc_date_format'), strtotime($result->occur_begin)) . ', ' . date(get_option('mc_time_format'), strtotime($result->occur_begin)) . "</span>";
            $output .= "<li>{$form_control}{$current}{$begin}{$end}</li>";
        }
    } else {
        $details = '';
        foreach ($results as $result) {
            $event_id = $result->occur_id;
            $event = mc_get_event($event_id);
            $array = mc_create_tags($event);
            if (in_array($template, array('details', 'grid', 'list', 'mini'))) {
                if (get_option('mc_use_' . $template . '_template') == 1) {
                    $template = mc_get_template($template);
                } else {
                    $template = false;
                    $details = my_calendar_draw_event($event, $type = "single", $event->event_begin, $event->event_time, '');
                }
            }
            $item = $list != '' ? jd_draw_template($array, $list) : '';
            if ($details == '') {
                $details = $template != '' ? jd_draw_template($array, $template) : '';
            }
            $output .= $item;
        }
        $output = $details . $before . $output . $after;
    }
    return $output;
}