public static function repeats($meta, $from, $to, $start, $end, $id, $name, $elements) { $settings = unserialize(get_option("chronosly-settings")); if (isset($meta["ev-repeat"][0]) and $meta["ev-repeat"][0] != "" and isset($meta["ev-repeat-every"][0]) and $meta["ev-repeat-every"][0] > 0) { $start_min = strtotime($from); //start building array $end_top = strtotime($to); //limit of repeats per year if (isset($meta["ev-repeat-option"][0]) and $meta["ev-repeat-option"][0] == "until" and isset($meta["ev-until"][0]) and strtotime($meta["ev-until"][0]) < $end_top) { $end_top = strtotime($meta["ev-until"][0]); } if ($start_min > $end_top) { return $elements; } //el ev until elimina los eventos que no llega ni al inicio $count = -1; //for count repetitions if (isset($meta["ev-repeat-option"][0]) and $meta["ev-repeat-option"][0] == "count" and isset($meta["ev-end_count"][0]) and $meta["ev-end_count"][0] > 0) { $count = $meta["ev-end_count"][0]; } $distance = $meta["ev-repeat-every"][0]; //distance between repeats $event_days = $end - $start; // event days duration switch ($meta["ev-repeat"][0]) { case "day": $start = $end; while ($start < $end_top and $count) { //mientras no estemos en el tope superior $start += $distance * 60 * 60 * 24; //añadimos la distancia de dias $end = $start + $event_days; //recalculamos el final --$count; if ($start >= $start_min and $start <= $end_top) { $pos = Post_Type_Chronosly::get_event_position($name, $meta, $id, $start); if (Post_Type_Chronosly::filter($id)) { $elements[$pos] = array("id" => $id, "start" => $start, "end" => $end); } } $start = $end; //restamos un dia porque si no el ultimo dia no se cuenta al salir del bucle } break; case "week": $start = $end; while ($start < $end_top and $count) { //mientras no estemos en el tope superior $start += $distance * 7 * 60 * 60 * 24 - $event_days; //añadimos la distancia de semanas, restando los dias que dura el evento...si el evento dura mas de una semana es un total absurdo usarlo $end = $start + $event_days; //recalculamos el final --$count; if ($start >= $start_min and $start <= $end_top) { $pos = Post_Type_Chronosly::get_event_position($name, $meta, $id, $start); if (Post_Type_Chronosly::filter($id)) { $elements[$pos] = array("id" => $id, "start" => $start, "end" => $end); } } $start = $end; //restamos un dia porque si no el ultimo dia no se cuenta al salir del bucle } break; case "month": $start = $end; while ($start < $end_top and $count) { //mientras no estemos en el tope superior $start = strtotime("+{$distance} month", $start) - $event_days; //añadimos la distancia de semanas, restando los dias que dura el evento...si el evento dura mas de una semana es un total absurdo usarlo $end = $start + $event_days; //recalculamos el final --$count; //echo date('Y-m-d',$start)." ".date('Y-m-d',$end)."<br/>"; if ($start >= $start_min and $start <= $end_top) { $pos = Post_Type_Chronosly::get_event_position($name, $meta, $id, $start); if (Post_Type_Chronosly::filter($id)) { $elements[$pos] = array("id" => $id, "start" => $start, "end" => $end); } } $start = $end; //restamos un dia porque si no el ultimo dia no se cuenta al salir del bucle } break; case "year": $start = $end; while ($start < $end_top and $count) { //mientras no estemos en el tope superior $start = strtotime("+{$distance} year", $start) - $event_days; //añadimos la distancia de semanas, restando los dias que dura el evento...si el evento dura mas de una semana es un total absurdo usarlo $end = $start + $event_days; //recalculamos el final --$count; if ($start >= $start_min and $start <= $end_top) { $pos = Post_Type_Chronosly::get_event_position($name, $meta, $id, $start); if (Post_Type_Chronosly::filter($id)) { $elements[$pos] = array("id" => $id, "start" => $start, "end" => $end); } } $start = $end; //restamos un dia porque si no el ultimo dia no se cuenta al salir del bucle } break; } } return $elements; }
public static function get_array_days_by_repeated($year, $month, $week, $query, $elements) { $settings = unserialize(get_option("chronosly-settings")); if (!$month and !$week) { while ($query->have_posts()) { $query->the_post(); if (is_array($elements["ids"]) and in_array(get_the_ID(), $elements["ids"])) { continue; } //if the day is already done. $meta = get_post_meta(get_the_ID()); if (isset($meta["ev-from"][0])) { //Miramos cuando empieza y acaba y generamos sus repeticiones para ver si hay que mostrarlo $start = strtotime($meta["ev-from"][0]); $end = strtotime($meta["ev-to"][0]); if ($settings["chronosly_week_start"] == 1) { //$start -= (60*60*24); //$end -= (60*60*24); } //do repeats if (Post_Type_Chronosly::filter(get_the_ID())) { $elements = Post_Type_Chronosly_Calendar::repeats($meta, $year, $month, $week, $start, $end, get_the_ID(), $elements, 1); } } } } else { if ($week) { while ($query->have_posts()) { $query->the_post(); if (is_array($elements["ids"]) and in_array(get_the_ID(), $elements["ids"])) { continue; } //if the day is already done. $meta = get_post_meta(get_the_ID()); if (isset($meta["ev-from"][0])) { $start = strtotime($meta["ev-from"][0]); $end = strtotime($meta["ev-to"][0]); if ($settings["chronosly_week_start"] == 1) { // $start -= (60*60*24); // $end -= (60*60*24); } //do repeats if (Post_Type_Chronosly::filter(get_the_ID())) { $elements = Post_Type_Chronosly_Calendar::repeats($meta, $year, $month, $week, $start, $end, get_the_ID(), $elements, 1); } } } } else { if ($month) { while ($query->have_posts()) { $query->the_post(); if (is_array($elements["ids"]) and in_array(get_the_ID(), $elements["ids"])) { continue; } //if the day is already done. $meta = get_post_meta(get_the_ID()); if (isset($meta["ev-from"][0])) { $start = strtotime($meta["ev-from"][0]); $end = strtotime($meta["ev-to"][0]); if ($settings["chronosly_week_start"] == 1) { //$start -= (60*60*24); //$end -= (60*60*24); } if (Post_Type_Chronosly::filter(get_the_ID())) { $elements = Post_Type_Chronosly_Calendar::repeats($meta, $year, $month, $week, $start, $end, get_the_ID(), $elements, 1); } } } } } } return $elements; }