@@ -231,36 +231,53 @@ function get_logical_date_groups( $dates, $short = false, $event = null, $show_d
231231 $ show_days = true ;
232232 }
233233
234- $ n_dates = get_range_from_days ( $ dates , $ short , $ event , $ show_days );
234+ $ n_dates = edu_get_date_range ( $ dates , $ short , $ event , $ show_days );
235235
236236 return join ( '<span class="edu-dateSeparator"></span> ' , $ n_dates );
237237}
238238
239- // Copied from http://codereview.stackexchange.com/a/83095/27610
240- function get_range_from_days ( $ days , $ short , $ event , $ show_days ) {
239+ function edu_get_date_range ( $ days , $ short , $ event , $ show_days ) {
241240 usort ( $ days , "DateComparer " );
242- $ start_date = $ days [0 ];
243- $ finish_date = $ days [ count ( $ days ) - 1 ];
244- $ result = array ();
245- // walk through the dates, breaking at gaps
246- foreach ( $ days as $ key => $ date ) {
247- if ( ( $ key > 0 ) && ( strtotime ( $ date ['StartDate ' ] ) - strtotime ( $ days [ $ key - 1 ]['StartDate ' ] ) > 99999 ) ) {
248- $ result [] = get_start_end_display_date ( $ start_date , $ days [ $ key - 1 ], $ short , $ event , $ show_days );
249- $ start_date = $ date ;
241+
242+ if ( 1 === count ( $ days ) ) {
243+ return array ( get_start_end_display_date ( $ days [0 ], $ days [0 ], $ short , $ event , $ show_days ) );
244+ }
245+
246+ $ added_dates = array ();
247+
248+ $ total_days = count ( $ days );
249+
250+ for ( $ x = 0 ; $ x < $ total_days ; $ x ++ ) {
251+ $ day = $ days [ $ x ];
252+
253+ $ added_dates [ date ( 'H:i ' , strtotime ( $ day ['StartDate ' ] ) ) . '- ' . date ( 'H:i ' , strtotime ( $ day ['EndDate ' ] ) ) ][] = $ day ;
254+ }
255+
256+ $ ordered_dategroups = array ();
257+
258+ foreach ( $ added_dates as $ time => $ _days ) {
259+ $ start_date = $ _days [0 ];
260+ $ finish_date = $ _days [ count ( $ _days ) - 1 ];
261+ foreach ( $ _days as $ key => $ date ) {
262+ if ( $ key > 0 && ( strtotime ( $ date ['StartDate ' ] ) - strtotime ( $ _days [ $ key - 1 ]['StartDate ' ] ) > 99999 ) ) {
263+ $ ordered_dategroups [ $ start_date ['StartDate ' ] ] = get_start_end_display_date ( $ start_date , $ _days [ $ key - 1 ], $ short , $ event , $ show_days );
264+ $ start_date = $ date ;
265+ }
250266 }
267+ $ ordered_dategroups [ $ start_date ['StartDate ' ] ] = get_start_end_display_date ( $ start_date , $ finish_date , $ short , $ event , $ show_days );
251268 }
252- // force the end
253- $ result [] = get_start_end_display_date ( $ start_date , $ finish_date , $ short , $ event , $ show_days );
254269
255- if ( count ( $ result ) > 3 ) {
270+ ksort ( $ ordered_dategroups );
271+
272+ if ( count ( $ ordered_dategroups ) > 3 ) {
256273 $ n_res = array ();
257274 $ ret =
258275 '<span class="edu-manyDays" title=" ' . esc_attr__ ( 'Show schedule ' , 'eduadmin-booking ' ) . '" onclick="edu_openDatePopup(this);"> ' .
259276 /* translators: 1: Number of days 2: Date range */
260277 wp_kses_post ( sprintf ( __ ( '%1$d days between %2$s ' , 'eduadmin-booking ' ), count ( $ days ), get_start_end_display_date ( $ days [0 ], end ( $ days ), $ short , $ show_days ) ) ) .
261278 '</span><div class="edu-DayPopup">
262279<b> ' . esc_html__ ( 'Schedule ' , 'eduadmin-booking ' ) . '</b><br />
263- ' . join ( "<br /> \n" , $ result ) . '
280+ ' . join ( "<br /> \n" , $ ordered_dategroups ) . '
264281<br />
265282<a href="javascript://" onclick="edu_closeDatePopup(event, this);"> ' . esc_html__ ( 'Close ' , 'eduadmin-booking ' ) . '</a>
266283</div> ' ;
@@ -270,7 +287,7 @@ function get_range_from_days( $days, $short, $event, $show_days ) {
270287 return $ n_res ;
271288 }
272289
273- return $ result ;
290+ return $ ordered_dategroups ;
274291}
275292
276293function get_start_end_display_date ( $ start_date , $ end_date , $ short = false , $ event , $ show_days = false ) {
0 commit comments