Skip to content

Commit

Permalink
Add sorting for lessons that don't belong to a module
Browse files Browse the repository at this point in the history
  • Loading branch information
gikaragia committed Oct 30, 2019
1 parent 3768545 commit 170a580
Showing 1 changed file with 49 additions and 9 deletions.
58 changes: 49 additions & 9 deletions includes/class-scd-ext-drip-email.php
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ private function get_ordered_courses_and_lessons( $lessons ) {

if ( ! empty( $course_module_order ) ) {

$ordered_lesson_data = $this->order_lessons_by_module( $lesson_data_items, $course_module_order );
$ordered_lesson_data = $this->order_lessons_by_module( $lesson_data_items, $course_module_order, $course_id );

} else {
// Secondly check if there is lesson order defined.
Expand Down Expand Up @@ -468,9 +468,10 @@ public function order_course_lesson_items( $lessons, $course_order ) {
*
* @param array $lessons The unsorted lessons of a course.
* @param array $module_order The ordered modules.
* @param int $course_id The course id.
* @return array The sorted array of lessons.
*/
private function order_lessons_by_module( array $lessons, array $module_order ) {
private function order_lessons_by_module( array $lessons, array $module_order, $course_id ) {
$ordered_lessons = array();

foreach ( $module_order as $module ) {
Expand All @@ -496,18 +497,57 @@ private function order_lessons_by_module( array $lessons, array $module_order )
),
);

$lesson_ids = get_posts( $args );
$ordered_lesson_ids = get_posts( $args );

foreach ( $lesson_ids as $lesson_id ) {
if ( array_key_exists( $lesson_id, $lessons ) ) {
$ordered_lessons[ $lesson_id ] = $lessons[ $lesson_id ];
}
foreach ( $ordered_lesson_ids as $lesson_id ) {
$ordered_lessons[ $lesson_id ] = $lessons[ $lesson_id ];
}
}

// Lessons not belonging to a module will not be returned by the previous query and are appended to the end.
// Lessons not belonging to a module should be ordered by _order_$course_id meta.
if ( count( $ordered_lessons ) !== count( $lessons ) ) {
$ordered_lessons = $ordered_lessons + array_diff_key( $lessons, $ordered_lessons );
$unordered_lessons = array_diff_key( $lessons, $ordered_lessons );
$ordered_lessons = $ordered_lessons + $this->order_lessons_by_course( $unordered_lessons, $course_id );
}

return $ordered_lessons;
}

/**
* Helper method to order lessons by the _order_$course_id meta.
*
* @since 2.0.1
*
* @param array $unordered_lessons The unsorted lessons of a course.
* @param int $course_id The course id.
* @return array The sorted array of lessons.
*/
private function order_lessons_by_course( array $unordered_lessons, $course_id ) {

if ( count( $unordered_lessons ) < 2 ) {
return $unordered_lessons;
}

$args = array(
'post__in' => array_keys( $unordered_lessons ),
'post_type' => 'lesson',
'posts_per_page' => - 1,
'post_status' => array( 'publish', 'draft', 'future', 'private' ),
'meta_key' => '_order_' . $course_id, // WPCS: slow query ok.
'orderby' => 'meta_value_num date',
'order' => 'ASC',
'fields' => 'ids',
);

$ordered_lesson_ids = get_posts( $args );

foreach ( $ordered_lesson_ids as $lesson_id ) {
$ordered_lessons[ $lesson_id ] = $unordered_lessons[ $lesson_id ];
}

// Append the lessons that don't have the _order_$course_id meta in the end.
if ( count( $unordered_lessons ) !== count( $ordered_lessons ) ) {
$ordered_lessons = $ordered_lessons + array_diff_key( $unordered_lessons, $ordered_lessons );
}

return $ordered_lessons;
Expand Down

0 comments on commit 170a580

Please sign in to comment.