Files
roi-theme/wp-content/plugins/wp-marketing-automations-pro/includes/class-bwfan-learndash-common.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

307 lines
8.5 KiB
PHP
Executable File

<?php
class BWFAN_Learndash_Common {
public static function init() {
add_filter( 'bwfan_select2_ajax_callable', array( __CLASS__, 'get_callable_object' ), 1, 2 );
add_action( 'admin_enqueue_scripts', array( __CLASS__, 'admin_enqueue_assets' ), 99 );
add_action( 'wp_ajax_bwfan_get_learndash_quiz', array( __CLASS__, 'bwfan_get_learndash_quiz' ) );
}
public static function admin_enqueue_assets() {
if ( ! isset( $_GET['page'] ) || 'autonami' !== $_GET['page'] ) {
return;
}
/** Prevent LearnDash styles to interfere with Autonami Styles */
wp_dequeue_style( 'learndash-admin-settings-page' );
}
public static function get_callable_object( $is_empty, $data ) {
if ( 'sfwd-courses' === $data['type'] ) {
return [ __CLASS__, 'get_learndash_courses' ];
}
if ( 'sfwd-quizzes' === $data['type'] ) {
return [ __CLASS__, 'get_learndash_quizzes' ];
}
return $is_empty;
}
/**
* Get quizzes by searched term
*
* @param $searched_term
*/
public static function get_learndash_quizzes( $searched_term = '', $limit = 10 ) {
$query_params = array(
'post_type' => learndash_get_post_type_slug( 'quiz' ),
'posts_per_page' => $limit,
'post_status' => 'publish'
);
if ( '' !== $searched_term ) {
$query_params['s'] = $searched_term;
}
$query = new WP_Query( $query_params );
$results = array();
if ( $query->found_posts > 0 ) {
foreach ( $query->posts as $post ) {
$results[] = array(
'id' => $post->ID,
'text' => $post->post_title,
);
}
}
return array( 'results' => $results );
}
/**
* Get WpProQuiz_Model_Quiz models
*
* @return WpProQuiz_Model_Quiz[]
*/
public static function get_learndash_quizzes_models() {
$quiz_mapper = new WpProQuiz_Model_QuizMapper();
/** @var WpProQuiz_Model_Quiz[] $quizzes */
$quizzes = $quiz_mapper->fetchAll();
foreach ( $quizzes as $key => $quiz ) {
if ( empty( $quiz->getPostId() ) ) {
unset( $quizzes[ $key ] );
}
}
return $quizzes;
}
public static function get_learndash_courses( $searched_term = '', $limit = 10 ) {
$courses = array();
$results = array();
$query_params = array(
'post_type' => 'sfwd-courses',
'posts_per_page' => $limit,
'post_status' => 'publish',
);
if ( '' !== $searched_term ) {
$query_params['s'] = $searched_term;
}
$query = new WP_Query( $query_params );
if ( $query->found_posts > 0 ) {
foreach ( $query->posts as $post ) {
$results[] = array(
'id' => $post->ID,
'text' => $post->post_title,
);
}
}
$courses['results'] = $results;
return $courses;
}
/**
* Get LearnDash User's Group's Leaders
*
* @param int $user_id
*
* @return array|null
*/
public static function get_group_leaders_by_user_id( $user_id ) {
global $wpdb;
$query = $wpdb->prepare( "SELECT DISTINCT(user_id) FROM {$wpdb->usermeta} WHERE `meta_key` LIKE '%learndash_group_leaders_%' AND meta_value IN (SELECT meta_value as 'group' FROM {$wpdb->usermeta} WHERE `meta_key` LIKE '%learndash_group_users_%' AND user_id = %d)", $user_id );
return $wpdb->get_results( $query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
/**
* Get LearnDash Group's Leaders by Group ID
*
* @param $group_ids
*
* @return array|object|stdClass[]|null
*/
public static function get_group_leaders_by_group_id( $group_ids ) {
global $wpdb;
$meta_value = " AND meta_value = %d";
if ( is_array( $group_ids ) ) {
$string_placeholder = array_fill( 0, count( $group_ids ), '%d' );
$placeholder = implode( ', ', $string_placeholder );
$meta_value = " AND meta_value IN ($placeholder)";
}
$query = "SELECT DISTINCT(user_id) FROM {$wpdb->usermeta} WHERE `meta_key` LIKE '%learndash_group_leaders_%' {$meta_value}";
$query = $wpdb->prepare( $query, $group_ids );
return $wpdb->get_results( $query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
/**
* Get LearnDash User's Groups
*
* @param int $user_id
*
* @return array|null
*/
public static function get_groups_by_user_id( $user_id ) {
global $wpdb;
$query = $wpdb->prepare( "SELECT meta_value as 'group' FROM {$wpdb->usermeta} WHERE `meta_key` LIKE '%learndash_group_users_%' AND user_id = %d", $user_id );
return $wpdb->get_results( $query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
public static function get_user_quiz_attempts( $user_id ) {
return get_user_meta( $user_id, '_sfwd-quizzes', true );
}
/**
* Get LearnDash questions by quiz ID
*
* @param int $quiz_id
*
* @return array
*/
public static function get_learndash_quiz_questions( $quiz_id = 0 ) {
if ( empty( $quiz_id ) ) {
return array();
}
$questions = learndash_get_quiz_questions( absint( $quiz_id ) );
$questions = array_keys( $questions );
$questions_array = array();
foreach ( $questions as $key ) {
$questions_array[ $key ] = get_the_title( $key );
}
return $questions_array;
}
public static function get_learndash_quiz_questions_models( $quiz_id = 0 ) {
if ( empty( $quiz_id ) ) {
return array();
}
$question_mapper = new WpProQuiz_Model_QuestionMapper();
return $question_mapper->fetchAll( $quiz_id );
}
/**
* Get Answers from Quiz Results data (LearnDash)
*
* @param $results
* @param WpProQuiz_Model_Question[] $question_models
*
* @return array
*/
public static function get_learndash_quiz_answers_from_result_data( $results, $question_models ) {
$questions_and_answers = array();
foreach ( $results as $key => $result ) {
$questions_and_answers[ $key ] = $result['e']['r'];
}
// Map the question IDs into post IDs
foreach ( $question_models as $model ) {
foreach ( $questions_and_answers as $key => $result ) {
if ( $key === $model->getId() ) {
// Convert multiple choice from true / false into the selected option
if ( is_array( $result ) ) {
foreach ( $result as $n => $multiple_choice_answer ) {
if ( true === $multiple_choice_answer ) {
$answers = $model->getAnswerData();
foreach ( $answers as $x => $answer ) {
if ( $x === $n ) {
$result = $answer->getAnswer();
break 2;
}
}
}
}
}
$answers[ $model->getId() ] = $result;
}
}
}
return $questions_and_answers;
}
public function bwfan_get_learndash_quiz() {
BWFAN_PRO_Common::nocache_headers();
$finalarr = [];
$query = new WP_Query( array(
'post_type' => learndash_get_post_type_slug( 'quiz' ),
'posts_per_page' => - 1,
'post_status' => 'publish'
) );
if ( $query->found_posts > 0 ) {
foreach ( $query->posts as $post ) {
$finalarr[] = array(
'key' => $post->ID,
'value' => $post->post_title,
);
}
}
wp_send_json( array(
'results' => $finalarr
) );
exit;
}
/**
* fetching last user activity id by activity type
*
* @param $user_id
* @param $activity_type
*
* @return string|null
*/
public static function get_last_user_activity_by_type( $user_id, $activity_type ) {
global $wpdb;
$activity_date_col = 'access' === $activity_type ? 'activity_started' : 'activity_completed';
$sql = "SELECT `post_id`
FROM `{$wpdb->prefix}learndash_user_activity`
WHERE `activity_type`= %s
AND $activity_date_col IS NOT NULL
AND `user_id`=%d
ORDER BY $activity_date_col DESC LIMIT 1";
return $wpdb->get_var( $wpdb->prepare( $sql, $activity_type, $user_id ) ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
/**
* @param $course_id
*
* @return array|int|string|null
*/
public static function get_course_access_lists( $course_id ) {
$course_access_list_setting = learndash_get_setting( $course_id, 'course_access_list' );
$course_access_list_setting = learndash_convert_course_access_list( $course_access_list_setting, true );
$course_access_list_post_meta = get_post_meta( $course_id, 'course_access_list', true );
$course_access_list_post_meta = learndash_convert_course_access_list( $course_access_list_post_meta, true );
$course_access_list_user_meta = learndash_get_course_users_access_from_meta( $course_id );
$course_access_list_user_meta = learndash_convert_course_access_list( $course_access_list_user_meta, true );
$course_access_list = array_merge( $course_access_list_setting, $course_access_list_post_meta, $course_access_list_user_meta );
return array_unique( $course_access_list );
}
}