prefix . ACADEMY_PLUGIN_SLUG . '_quizpress_quiz_links'; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->delete( $table, array( 'course_id' => (int) $course_id ), array( '%d' ) ); foreach ( self::extract_quizpress_topics( $curriculum ) as $topic ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->insert( $table, array( 'quiz_id' => (int) $topic['id'], 'course_id' => (int) $course_id, 'topic_id' => (int) $topic['id'], ), array( '%d', '%d', '%d' ) ); } } /** * Walks both top-level and nested (sub-curriculum) topics for anything of * type quizpress_quiz. * * @param mixed $curriculum */ private static function extract_quizpress_topics( $curriculum ) { $found = array(); if ( ! is_array( $curriculum ) ) { return $found; } foreach ( $curriculum as $group ) { if ( empty( $group['topics'] ) || ! is_array( $group['topics'] ) ) { continue; } foreach ( $group['topics'] as $topic ) { if ( isset( $topic['type'], $topic['id'] ) && 'quizpress_quiz' === $topic['type'] ) { $found[] = $topic; } if ( ! empty( $topic['topics'] ) && is_array( $topic['topics'] ) ) { foreach ( $topic['topics'] as $child_topic ) { if ( isset( $child_topic['type'], $child_topic['id'] ) && 'quizpress_quiz' === $child_topic['type'] ) { $found[] = $child_topic; } } } } } return $found; } }