/** * Set line and bar dataset * * @param Collection $data * @param String $title * @param Integer $i */ public function setLineBarDataSet($data, $title, $i = 0) { // Copy the Carbon instance of start_date $iterate_date = $this->start_date->copy(); $color = new Color(config('chartjs.colors.' . $i)); $collection = collect(); // Set dates with leads while ($iterate_date <= $this->end_date) { $count = isset($data[$iterate_date->toDateString()]) ? $data[$iterate_date->toDateString()] : 0; $collection->push($count); $iterate_date->addDay(); } $this->dataset = collect(['label' => $title, 'data' => $collection, 'fillColor' => '#' . $color->getHex(), 'strokeColor' => '#' . $color->getHex(), 'pointColor' => '#' . $color->getHex(), 'pointHighlightStroke' => '#' . $color->getHex()]); }
/** * Make a calendar list of events. * * Outputs a list of events according to events for the specified range. * * @since 3.0.0 * @access private * * @param int $timestamp * @param int $id * * @return string */ private function draw_list($timestamp, $id = 0) { $calendar = $this->calendar; if (empty($calendar)) { $calendar = $this->calendar = simcal_get_calendar(intval($id)); if (!$calendar instanceof Default_Calendar) { return ''; } } date_default_timezone_set($calendar->timezone); $now = $calendar->now; $current_events = $this->get_events($timestamp); $day_format = explode(' ', $calendar->date_format); ob_start(); // Draw the events. $block_tag = $calendar->compact_list && !empty($current_events) ? 'div' : 'dl'; $data_heading = ''; $heading = $this->get_heading(); foreach ($heading as $k => $v) { $data_heading .= ' data-heading-' . $k . '="' . $v . '"'; } echo '<' . $block_tag . ' class="simcal-events-list-container"' . ' data-prev="' . $this->prev . '"' . ' data-next="' . $this->next . '"' . $data_heading . '>'; if (!empty($current_events) && is_array($current_events)) { foreach ($current_events as $ymd => $events) { $day_ts = Carbon::createFromFormat('Ymd', $ymd, $calendar->timezone)->getTimestamp(); if (!$calendar->compact_list) { $date = new Carbon('now', $calendar->timezone); $date->setLocale(substr(get_locale(), 0, 2)); $date->setTimestamp($day_ts); if ($date->isToday()) { $the_color = new Color($calendar->today_color); } else { $the_color = new Color($calendar->days_events_color); } $bg_color = '#' . $the_color->getHex(); $color = $the_color->isDark() ? '#ffffff' : '#000000'; $border_style = ' style="border-bottom: 1px solid ' . $bg_color . ';" '; $bg_style = ' style="background-color: ' . $bg_color . '; color: ' . $color . ';"'; echo "\t" . '<dt class="simcal-day-label"' . $border_style . '>'; echo '<span' . $bg_style . '>'; foreach ($day_format as $format) { echo $format ? '<span class="simcal-date-format" data-date-format="' . $format . '">' . date_i18n($format, $day_ts) . '</span> ' : ' '; } echo '</span>'; echo '</dt>' . "\n"; } $list_events = '<ul class="simcal-events">' . "\n"; $calendar_classes = array(); $day_classes = 'simcal-weekday-' . date('w', $day_ts); // Is this the present, the past or the future, Doc? if ($timestamp <= $now && $timestamp >= $now) { $day_classes .= ' simcal-today simcal-present simcal-day'; } elseif ($timestamp < $now) { $day_classes .= ' simcal-past simcal-day'; } elseif ($this->end > $now) { $day_classes .= ' simcal-future simcal-day'; } $count = 0; foreach ($events as $day_events) { foreach ($day_events as $event) { if ($event instanceof Event) { $event_classes = $event_visibility = ''; $calendar_class = 'simcal-events-calendar-' . strval($event->calendar); $calendar_classes[] = $calendar_class; $recurring = $event->recurrence ? 'simcal-event-recurring ' : ''; $has_location = $event->venue ? 'simcal-event-has-location ' : ''; $event_classes .= 'simcal-event ' . $recurring . $has_location . $calendar_class; // Toggle some events visibility if more than optional limit. if ($calendar->events_limit > -1 && $count >= $calendar->events_limit) { $event_classes .= ' simcal-event-toggled'; $event_visibility = ' style="display: none"'; } $event_color = ''; $bullet = ''; $event_color = $event->get_color(); if (!empty($event_color)) { $side = is_rtl() ? 'right' : 'left'; $event_color = ' style="border-' . $side . ': 4px solid ' . $event_color . '; padding-' . $side . ': 8px;"'; } $list_events .= "\t" . '<li class="' . $event_classes . '"' . $event_visibility . $event_color . ' itemprop="event" itemscope itemtype="http://schema.org/Event">' . "\n"; $list_events .= "\t\t" . '<div class="simcal-event-details">' . $calendar->get_event_html($event) . '</div>' . "\n"; $list_events .= "\t" . '</li>' . "\n"; $count++; // Event falls within today. if ($this->end <= $now && $this->start >= $now) { $day_classes .= ' simcal-today-has-events'; } $day_classes .= ' simcal-day-has-events simcal-day-has-' . strval($count) . '-events'; if ($calendar_classes) { $day_classes .= ' ' . trim(implode(' ', array_unique($calendar_classes))); } } } } $list_events .= '</ul>' . "\n"; // If events visibility is limited, print the button toggle. if ($calendar->events_limit > -1 && $count > $calendar->events_limit) { $list_events .= '<button class="simcal-events-toggle"><i class="simcal-icon-down simcal-icon-animate"></i></button>'; } // Print final list of events for the current day. $tag = $calendar->compact_list ? 'div' : 'dd'; echo '<' . $tag . ' class="' . $day_classes . '" data-events-count="' . strval($count) . '">' . "\n"; echo "\t" . $list_events . "\n"; echo '</' . $tag . '>' . "\n"; } } else { echo "\t" . '<p>'; $message = get_post_meta($calendar->id, '_no_events_message', true); if ('events' == $calendar->group_type) { echo !empty($message) ? $message : __('Nothing to show.', 'google-calendar-events'); } else { if (!empty($message)) { echo $message; } else { $from = Carbon::createFromTimestamp($this->start, $calendar->timezone)->getTimestamp(); $to = Carbon::createFromTimestamp($this->end, $calendar->timezone)->getTimestamp(); echo apply_filters('simcal_no_events_message', sprintf(__('Nothing from %1$s to %2$s.', 'google-calendar-events'), date_i18n($calendar->date_format, $from), date_i18n($calendar->date_format, $to)), $calendar->id, $from, $to); } } echo "\t" . '</p>' . "\n"; } echo '</' . $block_tag . '>'; date_default_timezone_set($calendar->site_timezone); return ob_get_clean(); }
/** * Make a calendar grid. * * Outputs an html calendar according to month and year passed in arguments. * Loosely inspired by: http://davidwalsh.name/php-calendar * Adjusted by timezone and with an arbitrary week start day. * * @since 3.0.0 * @access private * * @param int $month The month to print (two digits). * @param int $year The corresponding year (four digits). * @param int $id The calendar id. * * @return string */ private function draw_month($month, $year, $id = 0) { $calendar = $this->calendar; if (empty($calendar)) { $calendar = simcal_get_calendar(intval($id)); if (!$calendar) { return ''; } } date_default_timezone_set($calendar->timezone); $events = $calendar->events; // Variables to cycle days in current month and find today in calendar. $now = $calendar->now; $current = Carbon::create($year, $month, 1, 0, 0, 59, $calendar->timezone); $current_min = $current->getTimestamp(); $current_max = $current->endOfDay()->getTimestamp(); // Calendar grid variables. $week_starts = $calendar->week_starts; $week_of_year = $current->weekOfYear; // Relative count of the week number of the year. $month_starts = $current->dayOfWeek; // Day upon which the month starts. $days_in_month = $current->daysInMonth; // Number of days in the given month. // Set current month events timestamp boundaries. $this->start = $current_min; $this->end = $current->endOfMonth()->timestamp; // Get daily events for this month. if ($events && is_array($events)) { // Filter events within the boundaries previously set above. $timestamps = array_keys($events); $lower_bound = array_filter($timestamps, array($this, 'filter_events_before')); $higher_bound = array_filter($lower_bound, array($this, 'filter_events_after')); $filtered = array_intersect_key($events, array_combine($higher_bound, $higher_bound)); // Put resulting events in an associative array, with day of the month as key for easy retrieval in calendar days loop. $day_events = array(); foreach ($filtered as $timestamp => $events_in_day) { foreach ($events_in_day as $event) { if ($event instanceof Event) { $day = intval(Carbon::createFromTimestamp($timestamp, $event->timezone)->endOfDay()->day); $day_events[$day][] = $event; } } } ksort($day_events, SORT_NUMERIC); } ob_start(); echo '<tbody class="simcal-month simcal-month-' . $month . '">' . "\n"; echo "\t" . '<tr class="simcal-week simcal-week-' . $week_of_year . '">'; $days_in_row = 0; // Week may start on an arbitrary day (sun, 0 - sat, 6). $week_day = $week_starts; // This fixes a possible bug when a month starts by Sunday (0). if (0 !== $week_starts) { $b = $month_starts === 0 ? 7 : $month_starts; } else { $b = $month_starts; } // Void days in first week. for ($a = $week_starts; $a < $b; $a++) { $last_void_day_class = $a === $b - 1 ? 'simcal-day-void-last' : ''; echo '<td class="simcal-day simcal-day-void ' . $last_void_day_class . '"></td>' . "\n"; // Reset day of the week count (sun, 0 - sat, 6). if ($week_day === 6) { $week_day = -1; } $week_day++; $days_in_row++; } // Actual days of the month. for ($day = 1; $day <= $days_in_month; $day++) { $count = 0; $calendar_classes = array(); $day_classes = 'simcal-day-' . $day . ' simcal-weekday-' . $week_day; $border_style = $bg_color = $color = ''; // Is this the present, the past or the future, Doc? if ($current_min <= $now && $current_max >= $now) { $day_classes .= ' simcal-today simcal-present simcal-day'; $the_color = new Color($calendar->today_color); $bg_color = '#' . $the_color->getHex(); $color = $the_color->isDark() ? '#ffffff' : '#000000'; $border_style = ' style="border: 1px solid ' . $bg_color . ';"'; } elseif ($current_max < $now) { $day_classes .= ' simcal-past simcal-day'; } elseif ($current_min > $now) { $day_classes .= ' simcal-future simcal-day'; } // Print events for the current day in loop, if found any. if (isset($day_events[$day])) { $list_events = '<ul class="simcal-events">'; foreach ($day_events[$day] as $event) { $event_classes = $event_visibility = ''; if ($event instanceof Event) { // Store the calendar id where the event belongs (useful in grouped calendar feeds) $calendar_class = 'simcal-events-calendar-' . strval($event->calendar); $calendar_classes[] = $calendar_class; $recurring = $event->recurrence ? 'simcal-event-recurring ' : ''; $has_location = $event->venue ? 'simcal-event-has-location ' : ''; $event_classes .= 'simcal-event ' . $recurring . $has_location . $calendar_class . ' simcal-tooltip'; // Toggle some events visibility if more than optional limit. if ($calendar->events_limit > -1 && $count >= $calendar->events_limit) { $event_classes .= ' simcal-event-toggled'; $event_visibility = ' style="display: none"'; } // Event title in list. $title = !empty($event->title) ? trim($event->title) : __('Event', 'google-calendar-events'); if ($calendar->trim_titles >= 1) { $title = strlen($title) > $calendar->trim_titles ? substr($title, 0, $calendar->trim_titles) . '…' : $title; } // Event color. $bullet = ''; $event_color = $event->get_color(); if (!empty($event_color)) { $bullet = '<span style="color: ' . $event_color . ';">■</span> '; } // Event contents. $list_events .= "\t" . '<li class="' . $event_classes . '"' . $event_visibility . ' itemprop="event" itemscope itemtype="http://schema.org/Event">' . "\n"; $list_events .= "\t\t" . '<span class="simcal-event-title">' . $bullet . $title . '</span>' . "\n"; $list_events .= "\t\t" . '<div class="simcal-event-details simcal-tooltip-content" style="display: none;">' . $calendar->get_event_html($event) . '</div>' . "\n"; $list_events .= "\t" . '</li>' . "\n"; $count++; } } if ($current_min <= $now && $current_max >= $now) { $day_classes .= ' simcal-today-has-events'; } $day_classes .= ' simcal-day-has-events simcal-day-has-' . strval($count) . '-events'; if ($calendar_classes) { $day_classes .= ' ' . trim(implode(' ', array_unique($calendar_classes))); } $list_events .= '</ul>' . "\n"; // Optional button to toggle hidden events in list. if ($calendar->events_limit > -1 && $count > $calendar->events_limit) { $list_events .= '<button class="simcal-events-toggle"><i class="simcal-icon-down simcal-icon-animate"></i></button>'; } } else { // Empty cell for day with no events. $list_events = '<span class="simcal-no-events"></span>'; } // The actual days with numbers and events in each row cell. echo '<td class="' . $day_classes . '" data-events-count="' . strval($count) . '">' . "\n"; if ($color) { $day_style = ' style="background-color: ' . $bg_color . '; color: ' . $color . '"'; } elseif ($count > 0) { $the_color = new Color($calendar->days_events_color); $color = !$color ? $the_color->isDark() ? '#ffffff' : '#000000' : $color; $bg_color = !$bg_color ? '#' . $the_color->getHex() : $bg_color; $day_style = ' style="background-color: ' . $bg_color . '; color: ' . $color . '"'; } else { $day_style = ''; } echo "\t" . '<div' . $border_style . '>' . "\n"; echo "\t\t" . '<span class="simcal-day-label simcal-day-number"' . $day_style . '>' . $day . '</span>' . "\n"; echo "\t\t" . $list_events . "\n"; echo "\t\t"; echo '<span class="simcal-events-dots" style="display: none;">'; // Event bullets for calendar mobile mode. for ($i = 0; $i < $count; $i++) { echo '<b> • </b>'; } echo '</span>' . "\n"; echo "\t" . '</div>' . "\n"; echo '</td>' . "\n"; // Reset day of the week count (sun, 0 - sat, 6). if ($week_day === 6) { $week_day = -1; } $week_day++; // Reset count of days for this row (0-6). if ($days_in_row === 6) { // Close the week row. echo '</tr>'; // Open a new week row. if ($day < $days_in_month) { echo '<tr class="simcal-week simcal-week-' . $week_of_year++ . '">' . "\n"; } $days_in_row = -1; } $days_in_row++; $current_min = Carbon::createFromTimestamp($current_min, $calendar->timezone)->addDay()->getTimestamp(); $current_max = Carbon::createFromTimestamp($current_max, $calendar->timezone)->addDay()->getTimestamp(); } // Void days at the end of the month. $remainder_days = 6 - $days_in_row; for ($i = 0; $i <= $remainder_days; $i++) { $last_void_day_class = $i == $remainder_days ? 'simcal-day-void-last' : ''; echo '<td class="simcal-day simcal-day-void ' . $last_void_day_class . '"></td>' . "\n"; $week_day++; } echo "\t" . '</tr>' . "\n"; echo '</tbody>' . "\n"; date_default_timezone_set($calendar->site_timezone); return ob_get_clean(); }
echo $myBlue->getHex(); ?> </div> <div class="block testDiv plain">Plain #<?php echo $myBlue->getHex(); ?> </div> <div class="clear"></div> <div class="block testDiv2">phpColor Gradient #<?php echo $myBlack->getHex(); ?> </div> <div class="block testDiv2 plain">Plain #<?php echo $myBlack->getHex(); ?> </div> <div class="clear"></div> <div class="block testDiv3">phpColor Gradient #<?php echo $myPurple->getHex(); ?> </div> <div class="block testDiv3 plain">Plain #<?php echo $myPurple->getHex(); ?> </div> <div class="clear"></div> <div class="block wide-block testDiv4">phpColor Gradient with vintage browsers support #<?php echo $myVintage->getHex(); ?> </div>
/** * Make a calendar list of events. * * Outputs a list of events according to events for the specified range. * * @since 3.0.0 * @access private * * @param int $timestamp * @param int $id * * @return string */ private function draw_list($timestamp, $id = 0) { $calendar = $this->calendar; if (empty($calendar)) { $calendar = $this->calendar = simcal_get_calendar(intval($id)); if (!$calendar instanceof Default_Calendar) { return ''; } } $now = $calendar->now; $current_events = $this->get_events($timestamp); $format = $calendar->date_format; ob_start(); // Draw the events. $block_tag = $calendar->compact_list && !empty($current_events) ? 'div' : 'dl'; $data_heading = ''; $heading = $this->get_heading(); foreach ($heading as $k => $v) { $data_heading .= ' data-heading-' . $k . '="' . $v . '"'; } echo '<' . $block_tag . ' class="simcal-events-list-container"' . ' data-prev="' . $this->prev . '"' . ' data-next="' . $this->next . '"' . $data_heading . '>'; if (!empty($current_events) && is_array($current_events)) { $last_event = null; foreach ($current_events as $ymd => $events) { // This is where we can find out if an event is a multi-day event and if it needs to be shown. // Since this is for list view we are showing the event on the day viewed if it is part of that day even when // expand multi-day events are turned off. $first_event = $events[0][0]; if (isset($first_event->multiple_days) && $first_event->multiple_days > 0) { if ('current_day_only' == get_post_meta($calendar->id, '_default_calendar_expand_multi_day_events', true)) { $year = substr($ymd, 0, 4); $month = substr($ymd, 4, 2); $day = substr($ymd, 6, 2); $temp_date = Carbon::createFromDate($year, $month, $day); if (!($temp_date < Carbon::now()->endOfDay())) { // Break here only if event already shown once. if ($last_event == $first_event) { continue; } else { // Save event as "last" for next time through, then break. $last_event = $first_event; } } } } // Add offset offset for list view day headings. $day_date = Carbon::createFromFormat('Ymd', $ymd, $calendar->timezone); $day_date_offset = clone $day_date; $day_date_offset->addSeconds($day_date->offset); $day_date_ts_offset = $day_date_offset->timestamp; if (!$calendar->compact_list) { if ($day_date_offset->isToday()) { $the_color = new Color($calendar->today_color); } else { $the_color = new Color($calendar->days_events_color); } $bg_color = '#' . $the_color->getHex(); $color = $the_color->isDark() ? '#ffffff' : '#000000'; $border_style = ' style="border-bottom: 1px solid ' . $bg_color . ';" '; $bg_style = ' style="background-color: ' . $bg_color . '; color: ' . $color . ';"'; echo "\t" . '<dt class="simcal-day-label"' . $border_style . '>'; echo '<span' . $bg_style . '>'; echo $format ? '<span class="simcal-date-format" data-date-format="' . $format . '">' . date_i18n($format, $day_date_ts_offset, strtotime($day_date_offset->toDateTimeString())) . '</span> ' : ' '; echo '</span>'; echo '</dt>' . "\n"; } $list_events = '<ul class="simcal-events">' . "\n"; $calendar_classes = array(); // Add day of week number to CSS class. $day_classes = 'simcal-weekday-' . date('w', $day_date_ts_offset); // Is this the present, the past or the future, Doc? if ($timestamp <= $now && $timestamp >= $now) { $day_classes .= ' simcal-today simcal-present simcal-day'; } elseif ($timestamp < $now) { $day_classes .= ' simcal-past simcal-day'; } elseif ($this->end > $now) { $day_classes .= ' simcal-future simcal-day'; } $count = 0; foreach ($events as $day_events) { foreach ($day_events as $event) { if ($event instanceof Event) { $event_classes = $event_visibility = ''; $calendar_class = 'simcal-events-calendar-' . strval($event->calendar); $calendar_classes[] = $calendar_class; $recurring = $event->recurrence ? 'simcal-event-recurring ' : ''; $has_location = $event->venue ? 'simcal-event-has-location ' : ''; $event_classes .= 'simcal-event ' . $recurring . $has_location . $calendar_class; // Toggle some events visibility if more than optional limit. if ($calendar->events_limit > -1 && $count >= $calendar->events_limit) { $event_classes .= ' simcal-event-toggled'; $event_visibility = ' style="display: none"'; } $event_color = $event->get_color(); if (!empty($event_color)) { $side = is_rtl() ? 'right' : 'left'; $event_color = ' style="border-' . $side . ': 4px solid ' . $event_color . '; padding-' . $side . ': 8px;"'; } $list_events .= "\t" . '<li class="' . $event_classes . '"' . $event_visibility . $event_color . ' itemscope itemtype="http://schema.org/Event" data-start="' . esc_attr($event->start) . '">' . "\n"; $list_events .= "\t\t" . '<div class="simcal-event-details">' . $calendar->get_event_html($event) . '</div>' . "\n"; $list_events .= "\t" . '</li>' . "\n"; $count++; // Event falls within today. if ($this->end <= $now && $this->start >= $now) { $day_classes .= ' simcal-today-has-events'; } $day_classes .= ' simcal-day-has-events simcal-day-has-' . strval($count) . '-events'; if ($calendar_classes) { $day_classes .= ' ' . trim(implode(' ', array_unique($calendar_classes))); } } } } $list_events .= '</ul>' . "\n"; // If events visibility is limited, print the button toggle. if ($calendar->events_limit > -1 && $count > $calendar->events_limit) { $list_events .= '<button class="simcal-events-toggle"><i class="simcal-icon-down simcal-icon-animate"></i></button>'; } // Print final list of events for the current day. $tag = $calendar->compact_list ? 'div' : 'dd'; echo '<' . $tag . ' class="' . $day_classes . '" data-events-count="' . strval($count) . '">' . "\n"; echo "\t" . $list_events . "\n"; echo '</' . $tag . '>' . "\n"; } } else { echo "\t" . '<p>'; $message = get_post_meta($calendar->id, '_no_events_message', true); if ('events' == $calendar->group_type) { echo !empty($message) ? $message : __('There are no upcoming events.', 'google-calendar-events'); } else { if (!empty($message)) { echo $message; } else { $from = Carbon::createFromTimestamp($this->start, $calendar->timezone)->getTimestamp(); $to = Carbon::createFromTimestamp($this->end, $calendar->timezone)->getTimestamp(); echo apply_filters('simcal_no_events_message', sprintf(__('Nothing from %1$s to %2$s.', 'google-calendar-events'), date_i18n($calendar->date_format, $from), date_i18n($calendar->date_format, $to)), $calendar->id, $from, $to); } } echo "\t" . '</p>' . "\n"; } echo '</' . $block_tag . '>'; return ob_get_clean(); }