Your IP : 216.73.216.122


Current Path : /home/ereika83/www/wp-content/plugins/learndash-propanel/includes/
Upload File :
Current File : /home/ereika83/www/wp-content/plugins/learndash-propanel/includes/class-ld-propanel-activity.php

<?php
/**
 * LearnDash ProPanel Activity
 *
 * @package LearnDash_ProPanel_Activity
 * @since 2.0
 */
if ( !class_exists( 'LearnDash_ProPanel_Activity' ) ) {
	class LearnDash_ProPanel_Activity extends LearnDash_ProPanel_Widget {

		/**
		 * @var string
		 */
		protected $name;
	
		/**
		 * @var string
		 */
		protected $label;

		/**
		 * LearnDash_ProPanel_Activity constructor.
		 */
		public function __construct() {
			$this->name = 'activity';
			$this->label = esc_html__( 'ProPanel Activity', 'ld_propanel' );

			parent::__construct();
			add_filter( 'learndash_propanel_template_ajax', array( $this, 'activity_template' ), 10, 2 );
			add_filter( 'learndash_propanel_template_ajax', array( $this, 'activity_template_rows' ), 10, 2 );

			add_filter( 'learndash_data_reports_headers', array( $this, 'learndash_data_reports_headers' ), 10, 2 );
		}

		function initial_template() {
			?>
			<div class="ld-propanel-widget ld-propanel-widget-<?php echo $this->name ?> <?php echo ld_propanel_get_widget_screen_type_class( $this->name ); ?>" data-ld-widget-type="<?php echo $this->name ?>"></div>
			<?php
		}

		/**
		 * Initial Activity Template
		 *
		 * @param $output
		 * @param $template
		 *
		 * @return string
		 */
		public function activity_template( $output, $template ) {
			if ( 'activity' == $template ) {

				ob_start();
				include ld_propanel_get_template( 'ld-propanel-reporting-choose-filter.php' );
				$output = ob_get_clean();
				
			} else if (( 'activity-courses' == $template ) || ( 'activity-quizzes' == $template )) {

				// To handle the Activy Courses and Quizzes report output we hook into the LearnDash core reporting function. 
				// It does all the heave processing for us. 
				$reply_data = array( 'status' => false);
				if ( isset( $_GET['args'] ) )
					$post_data = $_GET['args'];
				else
					$post_data = array();
				
				$report_post_args = array();
				if ( isset( $_GET['args'] ) )
					$report_post_args = array_merge( $report_post_args, $_GET['args'] );
				
				if ( ( isset( $report_post_args['init'] ) ) && ( $report_post_args['init'] == '1' ) ) {

					$_GET['filters'] = $_GET['args']['filters'];
					$post_data = ld_propanel_load_post_data( $post_data );

					if ( !empty( $post_data['filters']['courseStatus'] ) ) {
						$report_post_args['filters']['activity_status'] = $post_data['filters']['courseStatus'];
					} else {
						$report_post_args['filters']['activity_status'] = array( 'NOT_STARTED', 'IN_PROGRESS', 'COMPLETED' );
					} 
					$activity_query_args = array();
					$activity_query_args = ld_propanel_load_activity_query_args( $activity_query_args, $post_data );

					if ( !empty( $activity_query_args ) ) {

						if ( ( !isset( $report_post_args['filters']['users_ids'] ) ) && ( isset( $activity_query_args['user_ids'] ) ) ) {
							$report_post_args['filters']['users_ids'] = $activity_query_args['user_ids'];
							//unset( $report_post_args['filters']['user_ids'] );
						} else {
							$report_post_args['filters']['users_ids'] = learndash_get_report_user_ids();
						}
						
						if ( !empty( $report_post_args['filters']['users_ids'] ) ) {
							$exclude_admin_users = ld_propanel_exclude_admin_users();
							if ( $exclude_admin_users ) {
								$admin_user_ids = ld_propanel_get_admin_user_ids();
								if ( !empty( $admin_user_ids ) ) {
									$report_post_args['filters']['users_ids'] = array_diff( $report_post_args['filters']['users_ids'], $admin_user_ids );
								}
							}
						}

						if ( ( isset( $post_data['filters']['time_start'] ) ) && ( !empty( $post_data['filters']['time_start'] ) ) ) {
							$report_post_args['filters']['time_start'] = esc_attr( $post_data['filters']['time_start'] );
						}

						if ( ( isset( $post_data['filters']['time_end'] ) ) && ( !empty( $post_data['filters']['time_end'] ) ) ) {
							$report_post_args['filters']['time_end'] = esc_attr( $post_data['filters']['time_end'] );
						}


						/*
						if ( ( !isset( $report_post_args['filters']['posts_ids'] ) ) && ( isset( $activity_query_args['post_ids'] ) ) ) {
							$report_post_args['filters']['posts_ids'] = $activity_query_args['post_ids'];
							foreach( $report_post_args['filters']['posts_ids'] as $course_id ) {
								$course_post_status = get_post_status( $course_id );
								if ( $course_post_status == 'publish' ) {
									if ( 'activity-courses' == $template ) {
										$report_post_types = array( 'sfwd-courses', 'sfwd-lessons', 'sfwd-topic' );
									} else if ( 'activity-quizzes' == $template ) {
										$report_post_types = array( 'sfwd-quiz' );
									}
									$course_post_ids = ld_propanel_get_course_post_items( $course_id, $report_post_types );
									if ( !empty( $course_post_ids ) ) {
										$report_post_args['filters']['posts_ids'] = array_merge( $report_post_args['filters']['posts_ids'], $course_post_ids );
										$report_post_args['filters']['posts_ids'] = array_unique( $report_post_args['filters']['posts_ids'] );
									}
								}
							}
						}
						*/
						
						if ( ( !isset( $report_post_args['filters']['posts_ids'] ) ) && ( isset( $activity_query_args['post_ids'] ) ) ) {
							$_process_legacy = true;
							
							// If the admin has performed the needed upgrade on the courses and quizzes...
							if ( version_compare( LEARNDASH_VERSION, '2.4.9.9') >= 0 ) {
								if ( class_exists( 'Learndash_Admin_Data_Upgrades' ) ) {
									$ld_data_upgrade = Learndash_Admin_Data_Upgrades::get_instance();
									if ( ( $ld_data_upgrade ) && ( is_a( $ld_data_upgrade, 'Learndash_Admin_Data_Upgrades' ) ) ) {
										$data_settings_courses = $ld_data_upgrade->get_data_settings('user-meta-courses');
										$data_settings_quizzes = $ld_data_upgrade->get_data_settings('user-meta-quizzes');
									
										if ( ( isset( $data_settings_courses['version'] ) ) && ( version_compare( $data_settings_courses['version'], '2.5', '>=') ) && ( isset( $data_settings_quizzes['version'] ) ) && ( version_compare( $data_settings_quizzes['version'], '2.5', '>=') ) ) {
											// we can simple query by course_id since that column will be filled in now. 
											$report_post_args['filters']['course_ids'] = $activity_query_args['post_ids'];
											$_process_legacy = false;
										}
									}
								}
							} 
							
							// But if we still need to support legacy we can still do that below. 
							if ( $_process_legacy === true ) {
								$report_post_args['filters']['posts_ids'] = $activity_query_args['post_ids'];
								foreach( $report_post_args['filters']['posts_ids'] as $course_id ) {
									$course_post_status = get_post_status( $course_id );
									if ( $course_post_status == 'publish' ) {
										if ( 'activity-courses' == $template ) {
											$report_post_types = array( 'sfwd-courses', 'sfwd-lessons', 'sfwd-topic' );
										} else if ( 'activity-quizzes' == $template ) {
											$report_post_types = array( 'sfwd-quiz' );
										}
										$course_post_ids = ld_propanel_get_course_post_items( $course_id, $report_post_types );
										if ( !empty( $course_post_ids ) ) {
											$report_post_args['filters']['posts_ids'] = array_merge( $report_post_args['filters']['posts_ids'], $course_post_ids );
											$report_post_args['filters']['posts_ids'] = array_unique( $report_post_args['filters']['posts_ids'] );
										}
									}
								}
							}
						}
					}
				}

				if ( class_exists( 'Learndash_Admin_Settings_Data_Reports' ) ) {
					$ld_admin_settings_data_reports = new Learndash_Admin_Settings_Data_Reports;
					$reply_data['data'] = $ld_admin_settings_data_reports->do_data_reports( $report_post_args, $reply_data );
					unset( $reply_data['data']['filters'] );
					
					$output = $reply_data;
				}
			}

			return $output;
		}
		
		
		/**
		 * Override the LearnDash core reporting column headers. 
		 *
		 * @param $data_headers array of headers. See notes below for exact structure
		 * @param $data_slug stirng for the type of report 'user-courses' or 'user-quizzes'
		 *
		 * @return $data_headers array 
		 *
		 * The follow is an example of the data structure used for the headers. Note this is NOT
		 * a simple key/value array. 
		 * $data_headers['user_id']  = 	array( 
		 *										'label'		=>	'user_id',
		 *										'default'	=>	'',
		 *										'display'	=>	array( $this, 'report_header_user_id' )
		 *									);
		 *
		 * 'label' This is used in place of the array item key for the column header value.
		 * 'default' This is the default value of the field
		 * 'display' This should be a callback function to handle the value determination
		*/
		function learndash_data_reports_headers( $data_headers, $data_slug ) {
			
			if ( $data_slug == 'user-courses' ) {
				if ( !isset( $data_headers['course_started_on'] ) ) {
					$data_headers['course_started_on'] = array(
						'label'		=>	'course_started_on',
						'default'	=>	'',
						'display'	=>	array( $this, 'learndash_courses_report_display_column' )
					);
				}

				/*
				if ( !isset( $data_headers['course_updated_on'] ) ) {
					$data_headers['course_updated_on'] = array(
						'label'		=>	'course_updated_on',
						'default'	=>	'',
						'display'	=>	array( $this, 'learndash_courses_report_display_column' )
					);
				}
				*/
				
				if ( !isset( $data_headers['course_total_time_on'] ) ) {
					$data_headers['course_total_time_on'] = array(
						'label'		=>	__( 'course_total_time_on', 'ld_propanel' ),
						'default'	=>	'',
						'display'	=>	array( $this, 'learndash_courses_report_display_column' )
					);
				}

				if ( !isset( $data_headers['course_last_step_id'] ) ) {
					$data_headers['course_last_step_id'] = array(
						'label'		=>	__( 'course_last_step_id', 'ld_propanel' ),
						'default'	=>	'',
						'display'	=>	array( $this, 'learndash_courses_report_display_column' )
					);
				}

				if ( !isset( $data_headers['course_last_step_type'] ) ) {
					$data_headers['course_last_step_type'] = array(
						'label'		=>	__( 'course_last_step_type', 'ld_propanel' ),
						'default'	=>	'',
						'display'	=>	array( $this, 'learndash_courses_report_display_column' )
					);
				}

				if ( !isset( $data_headers['course_last_step_title'] ) ) {
					$data_headers['course_last_step_title'] = array(
						'label'		=>	__( 'course_last_step_title', 'ld_propanel' ),
						'default'	=>	'',
						'display'	=>	array( $this, 'learndash_courses_report_display_column' )
					);
				}

				if ( !isset( $data_headers['last_login_date'] ) ) {
					$data_headers['last_login_date'] = array(
						'label'		=>	__( 'last_login_date', 'ld_propanel' ),
						'default'	=>	'',
						'display'	=>	array( $this, 'learndash_courses_report_display_column' )
					);
				}
			} else if ( $data_slug == 'user-quizzes' ) {

			}

			return $data_headers;
		}
		
		function learndash_courses_report_display_column( $header_output, $header_key, $activity, $report_user ) {
			$data_slug = 'user-courses';
			include ld_propanel_get_template( 'ld-propanel-reporting-columns.php' );
			return $header_output;
		}
		
		
		/**
		 * Build Activity Rows
		 *
		 * @param $output
		 * @param $template
		 *
		 * @return string
		 */
		public function activity_template_rows( $output, $template ) {
			if (( 'activity_rows' == $template ) || ( 'activity' == $template )) {
				$output = '';

				//if ( ld_propanel_count_post_type( 'sfwd-courses' ) ) {
				if ( ld_propanel_get_users_count() ) {

					if ( isset( $_GET['args']['per_page'] ) ) {
						$per_page = abs( intval( $_GET['args']['per_page'] ) );
					} else {
						$per_page_array = ld_propanel_get_pager_values();
						if ( empty( $per_page_array ) ) {
							$per_page_array = array(5);
						}
						
						$per_page = $per_page_array[0];
					}
					

					/**
					 * Build $activity_query_args from info passed as AJAX
					 */
					$activity_query_args = array(
						'per_page' 			=> 	$per_page,
						//'activity_status' 	=> 	array( 'NOT_STARTED', 'IN_PROGRESS', 'COMPLETED' ), // We are only showing completed items for now
						'activity_types'	=>	array('course', 'quiz', 'lesson', 'topic'),	
						'post_types'		=>	array('sfwd-courses', 'sfwd-quiz', 'sfwd-lessons', 'sfwd-topic'),
						'post_status'		=>	'publish',
						'orderby_order'		=>	'ld_user_activity.activity_updated DESC',
						'date_format' 		=> 	'Y-m-d H:i:s',
						'time_start'        =>  '', 
						'time_end'			=>	'',
						'export_buttons'	=>	true, //$_GET['filters']['export_buttons'],
						'nav_top'			=>	true, //$_GET['filters']['nav_top'],
						//'nav_bottom'		=>	true, //$_GET['filters']['nav_bottom'],
					);
				
					foreach( $activity_query_args as $key => $val ) {
						if ( isset( $_GET['filters'][$key] ) ) {
							$activity_query_args[$key] = stripslashes_deep( $_GET['filters'][$key] );
						}
					}

					if ( ( isset( $_GET['container_type'] ) ) && ( $_GET['container_type'] == 'shortcode' ) ) {
						if ( ( !isset( $_GET['filters']['export_buttons'] ) ) || ( $_GET['filters']['export_buttons'] !== '1' ) && ( $_GET['filters']['export_buttons'] !== 'true' ) )
							unset( $activity_query_args['export_buttons'] );
						if ( ( !isset( $_GET['filters']['nav_top'] ) ) || ( $_GET['filters']['nav_top'] !== '1' ) && ( $_GET['filters']['nav_top'] !== 'true' ) )
							unset( $activity_query_args['nav_top'] );
					}

					$activity_query_args = shortcode_atts( $activity_query_args, $_GET['filters'] );

					$post_data = ld_propanel_load_post_data();
				
					$activity_query_args = ld_propanel_load_activity_query_args( $activity_query_args, $post_data );

					if ( !empty( $activity_query_args ) ) {

						$activity_query_args = ld_propanel_adjust_admin_users( $activity_query_args );
				
						//$response['total_users'] = count( $this->activity_query_args['user_ids'] );
				
						$activity_query_args = ld_propanel_convert_fewer_users( $activity_query_args );

						// If apecific post_ids are provided we want to inlcude in all the lessons, topics, quizzes for display
						if ( ( isset( $activity_query_args['post_ids'] ) ) && ( !empty( $activity_query_args['post_ids'] ) ) ) {
							if ( version_compare( LEARNDASH_VERSION, '2.4.9.9') >= 0 ) {
								$activity_query_args['course_ids'] = $activity_query_args['post_ids'];
								$activity_query_args['post_ids'] = '';
								
							} else {
								$post_ids = $activity_query_args['post_ids'];
								foreach( $post_ids as $course_id ) {
									$course_post_status = get_post_status( $course_id );
									if ( $course_post_status == 'publish' ) {
										//$course_post_ids = learndash_get_course_steps( $course_id, $activity_query_args['post_types'] );
										$course_post_ids = ld_propanel_get_course_post_items( $course_id, $activity_query_args['post_types'] );
										if ( !empty( $course_post_ids ) ) {
											$activity_query_args['post_ids'] = array_merge( $activity_query_args['post_ids'], $course_post_ids );
											$activity_query_args['post_ids'] = array_unique( $activity_query_args['post_ids'] );
										}
									}
								}
							}
						}
						
						//if ( empty( $post_data['filters']['courseStatus'] ) ) {
						//	$post_data['filters']['courseStatus'] = array( 'IN_PROGRESS', 'COMPLETED' );
						//} else {
						//	foreach( $post_data['filters']['courseStatus'] as $idx => $status ) {
						//		if ( $status == 'NOT_STARTED' ) {
						//			unset( $post_data['filters']['courseStatus'][$idx] );
						//		}
						//	}
						//}
						$activity_query_args['activity_status'] = array( 'IN_PROGRESS', 'COMPLETED' );

						$paged = 1;

						if ( isset( $_GET['args']['paged'] ) && ! empty( $_GET['args']['paged'] ) ) {
							$activity_query_args['paged'] = abs( intval( $_GET['args']['paged'] ) );
							$paged = intval( $_GET['args']['paged'] );
						}
			
						$activity_query_args = apply_filters( 'ld_propanel_activity_widget_query_args', $activity_query_args, $template );
						if ( learndash_is_admin_user( get_current_user_id() ) ) {
							// Admin will see all groups.

						} else if ( learndash_is_group_leader_user( ) ) {
							if ( ( !isset( $activity_query_args['user_ids'] ) ) || ( empty( $activity_query_args['user_ids'] ) ) ) {
								$activity_query_args = array();
							} 
							
							if ( version_compare( LEARNDASH_VERSION, '2.4.9.9') >= 0 ) {
								if ( ( !isset( $activity_query_args['course_ids'] ) ) || ( empty( $activity_query_args['course_ids'] ) ) ) {
									$activity_query_args = array();
								}
							} else {
								if ( ( !isset( $activity_query_args['post_ids'] ) ) || ( empty( $activity_query_args['post_ids'] ) ) ) {
									$activity_query_args = array();
								}	
							}
						} else {	// Regular student user
							if ( ( !isset( $activity_query_args['user_ids'] ) ) || ( empty( $activity_query_args['user_ids'] ) ) ) {
								$activity_query_args = array();
							} else {
								if ( version_compare( LEARNDASH_VERSION, '2.4.9.9') >= 0 ) {
									if ( ( !isset( $activity_query_args['course_ids'] ) ) || ( empty( $activity_query_args['course_ids'] ) ) ) {
										$activity_query_args = array();
									}
								} else {
									if ( ( !isset( $activity_query_args['post_ids'] ) ) || ( empty( $activity_query_args['post_ids'] ) ) ) {
										$activity_query_args = array();
									}	
								}
							}
						}

						if ( !empty( $activity_query_args ) ) {
							$activities = learndash_reports_get_activity( $activity_query_args );
					
							ob_start();
							if ( empty( $activities['results'] ) ) {
								include ld_propanel_get_template( 'ld-propanel-no-results.php' );
							} else {
								?><div class="report-header"><?php
						
									?><div class="report-pagination"><?php
									if ( isset( $activities['pager'] ) ) {
										$activities['pager']['current_page'] = $activity_query_args['paged'];
										if ( $activity_query_args['nav_top'] == true ) {
											include ld_propanel_get_template( 'ld-propanel-activity-pagination.php' );
										}
									}
									?></div><?php
						
									?><div class="report-exports"><?php
									if ( $activity_query_args['export_buttons'] == true )
										include ld_propanel_get_template( 'ld-propanel-activity-report-header.php' );
									?></div><?php
									?><div class="clearfix"></div><?php
							
								?></div><?php

								$activity_row_date_time_format = apply_filters('ld_propanel_activity_row_date_time_format', get_option('date_format') .' '. get_option('time_format'));

								foreach ( $activities['results'] as $activity ) {
									$activity->activity_started_formatted = get_date_from_gmt( date( 'Y-m-d H:i:s', $activity->activity_started ), 'Y-m-d H:i:s' ); 
									$activity->activity_started_formatted = date_i18n( $activity_row_date_time_format, strtotime( $activity->activity_started_formatted ), false);

									$activity->activity_completed_formatted = get_date_from_gmt( date( 'Y-m-d H:i:s', $activity->activity_completed ), 'Y-m-d H:i:s' ); 
									$activity->activity_completed_formatted = date_i18n( $activity_row_date_time_format, strtotime( $activity->activity_completed_formatted ), false);

									$activity->activity_updated_formatted = get_date_from_gmt( date( 'Y-m-d H:i:s', $activity->activity_updated ), 'Y-m-d H:i:s' ); 
									$activity->activity_updated_formatted = date_i18n( $activity_row_date_time_format, strtotime( $activity->activity_updated_formatted ), false);
							
									include ld_propanel_get_template( 'ld-propanel-activity-rows.php' );
								}

								//if ( $activity_query_args['nav_bottom'] == true )
								//	include ld_propanel_get_template( 'ld-propanel-activity-pagination.php' );
							}
							$output = ob_get_clean();
							
						} else {
							ob_start();
							include ld_propanel_get_template( 'ld-propanel-no-results.php' );
							$output = ob_get_clean();
						}
					} else {
						ob_start();
						include ld_propanel_get_template( 'ld-propanel-no-results.php' );
						$output = ob_get_clean();
					}
				} else {
					ob_start();
					include ld_propanel_get_template( 'ld-propanel-no-results.php' );
					$output = ob_get_clean();
				}
			}

			return array( 'rows_html' => $output );
		}

		/**
		 * @param $activity
		 *
		 * @return mixed
		 */
		public static function get_activity_steps_completed( $activity ) {
			$user_course_meta = get_user_meta( absint( $activity->user_id ), '_sfwd-course_progress', true );
			$course_id = absint( $activity->activity_course_id );
			if ( isset( $user_course_meta[ $course_id ] ) ) {
				if ( isset( $user_course_meta[ $course_id ]['completed'] ) ) {
					return absint( $user_course_meta[ $course_id ]['completed'] );
				}
			}

			return 0;
		}

		/**
		 * @param $activity
		 *
		 * @return mixed
		 */
		public static function get_activity_steps_total( $activity ) {
			$user_course_meta = get_user_meta( absint( $activity->user_id ), '_sfwd-course_progress', true );
			$course_id = absint( $activity->activity_course_id );
			if ( isset( $user_course_meta[ $course_id ] ) ) {
				if ( isset( $user_course_meta[ $course_id ]['total'] ) ) {
					return absint( $user_course_meta[ $course_id ]['total'] );
				}
			}

			return 0;
		}

		/**
		 * @param $activity
		 *
		 * @return array|null|WP_Post
		 */
		function get_activity_course( $activity ) {
			if ( ( isset( $activity->activity_course_id ) ) && ( !empty( $activity->activity_course_id ) ) ) {
				$course_id = intval( $activity->activity_course_id );
			} else {
				$course_id = learndash_get_course_id( $activity->post_id );
			}
			
			if ( !empty( $course_id ) ) {
				$course = get_post( $course_id );
				if ( ( $course ) && ( $course instanceof WP_Post ) ) {
					return $course;
				}
			}
		}

		/**
		 * @param $activity
		 *
		 * @return bool
		 */
		function quiz_activity_is_pending( $activity ) {
			if ( ( !empty( $activity ) ) && ( property_exists( $activity, 'activity_meta' ) ) ) {

				if ( ( isset( $activity->activity_meta['has_graded'] ) ) 
				  && ( true === $activity->activity_meta['has_graded'] ) 
				  && ( true === LD_QuizPro::quiz_attempt_has_ungraded_question( $activity->activity_meta ) ) ) {
					return true;
				}
			}

			return false;
		}

		/**
		 * @param $activity
		 *
		 * @return bool
		 */
		function quiz_activity_is_passing( $activity ) {
			if ( ( !empty( $activity ) ) && ( property_exists( $activity, 'activity_meta' ) ) ) {

				if ( isset( $activity->activity_meta['pass'] ) ) {
					return (bool) $activity->activity_meta['pass'];
				}
			}

			return false;
		}

		/**
		 * @param $activity
		 *
		 * @return mixed
		 */
		function quiz_activity_score( $activity ) {
			if ( ( !empty( $activity ) ) && ( property_exists( $activity, 'activity_meta' ) ) ) {
				if ( isset( $activity->activity_meta['score'] ) ) {
					return $activity->activity_meta['score'];
				}
			}
		}

		/**
		 * @param $activity
		 *
		 * @return mixed
		 */
		function quiz_activity_total_points( $activity ) {
			if ( ( !empty( $activity ) ) && ( property_exists( $activity, 'activity_meta' ) ) ) {
				if ( isset( $activity->activity_meta['total_points'] ) ) {
					return intval($activity->activity_meta['total_points']);
				}
			}
		}

		/**
		 * @param $activity
		 *
		 * @return mixed
		 */
		function quiz_activity_awarded_points( $activity ) {
			if ( ( !empty( $activity ) ) && ( property_exists( $activity, 'activity_meta' ) ) ) {
				if ( isset( $activity->activity_meta['points'] ) ) {
					return intval($activity->activity_meta['points']);
				}
			}
		}

		/**
		 * @param $activity
		 *
		 * @return int
		 */
		function quiz_activity_points_percentage( $activity ) {
			$awarded_points = intval( $this->quiz_activity_awarded_points( $activity ) );
			$total_points = intval( $this->quiz_activity_total_points( $activity ) );
			if ( ( !empty( $awarded_points ) ) && ( !empty( $total_points ) ) ) {
				return round( 100 * ( intval( $awarded_points ) / intval( $total_points ) ) );
			}
		}




		/**
		 * @param $activity
		 *
		 * @return mixed
		 */
		function quiz_activity_total_score( $activity ) {
			if ( ( !empty( $activity ) ) && ( property_exists( $activity, 'activity_meta' ) ) ) {
				if ( isset( $activity->activity_meta['count'] ) ) {
					return intval($activity->activity_meta['count']);
				}
			}
		}

		/**
		 * @param $activity
		 *
		 * @return mixed
		 */
		function quiz_activity_awarded_score( $activity ) {
			if ( ( !empty( $activity ) ) && ( property_exists( $activity, 'activity_meta' ) ) ) {
				if ( isset( $activity->activity_meta['score'] ) ) {
					return intval($activity->activity_meta['score']);
				}
			}
		}

		/**
		 * @param $activity
		 *
		 * @return int
		 */
		function quiz_activity_score_percentage( $activity ) {
			$awarded_score = intval( $this->quiz_activity_awarded_score( $activity ) );
			$total_score = intval( $this->quiz_activity_total_score( $activity ) );
			if ( ( !empty( $awarded_score ) ) && ( !empty( $total_score ) ) ) {
				return round( 100 * ( intval( $awarded_score ) / intval( $total_score ) ) );
			}
		}


		function get_quiz_scoring( $activity ) {
			return null;
		}


		function get_quiz_statistics_link( $activity ) {
			$stats_url = '';
			
			if ( ( $activity->user_id == get_current_user_id() ) || ( learndash_is_admin_user() ) || ( learndash_is_group_leader_user() ) ) {				
				if ( ( isset( $activity->activity_meta['statistic_ref_id'] ) ) && ( !empty( $activity->activity_meta['statistic_ref_id'] ) ) ) {
					if ( ! isset( $activity->activity_meta['quiz'] ) ) {
						if ( isset( $activity->post_id ) ) {
							$activity->activity_meta['quiz'] = absint( $activity->post_id );
						} else {
							$activity->activity_meta['quiz'] = 0;
						}
					}
					if ( ! isset( $activity->activity_meta['pro_quizid'] ) ) {
						if ( isset( $activity->activity_meta['quiz'] ) ) {
							$activity->activity_meta['pro_quizid'] = get_post_meta( $activity->activity_meta['quiz'], 'quiz_pro_id', true );
						} else {
							$activity->activity_meta['pro_quizid'] = 0;
						}
					}
					/**
					 *	 @since 2.3
					 * See snippet on use of this filter https://bitbucket.org/snippets/learndash/5o78q
					 */
					if ( apply_filters( 
						'show_user_profile_quiz_statistics', 
							get_post_meta( $activity->activity_meta['quiz'], '_viewProfileStatistics', true ), $activity->user_id, $activity->activity_meta, 'learndash-propanel-activity' ) ) {
							$stats_url = '<a class="user_statistic" data-statistic_nonce="'. wp_create_nonce( 'statistic_nonce_'. $activity->activity_meta['statistic_ref_id'] .'_'. get_current_user_id() . '_'. $activity->user_id ) .'" data-user_id="'. $activity->user_id .'" data-quiz_id="'. $activity->activity_meta['pro_quizid'] .'" data-ref_id="'. intval( $activity->activity_meta['statistic_ref_id'] ) .'" href="#" title="'. sprintf(
								// translators: placeholder: Quiz.
								esc_html_x('View %s Statistics', 'placeholder: Quiz', 'ld_propanel'),
								LearnDash_Custom_Label::get_label( 'quiz' )
							) .'">'. __('Statistics', 'ld_propanel') .'</a>';
					}
				}
			}
			
			return $stats_url;
		}
	}
}