Your IP : 216.73.217.143


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-reporting.php

<?php
/**
 * LearnDash ProPanel Reporting
 *
 * @package LearnDash_ProPanel_Reporting
 * @since 2.0
 */

if ( !class_exists( 'LearnDash_ProPanel_Reporting' ) ) {
	class LearnDash_ProPanel_Reporting extends LearnDash_ProPanel_Widget {

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

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

		//protected $registered_filters = array();

		//protected $filter_key;
		protected $filter_search_placeholder;
		protected $filter_headers = array();

		protected $filter_template_table;
		protected $filter_template_row;
		
		private $mail_error;
		private $is_debug;
		private $debug_message = '';
		
		/**
		 * LearnDash_ProPanel_Reporting constructor.
		 */
		public function __construct() {
			$this->name = 'reporting';
			$this->label = esc_html__( 'ProPanel Reporting', 'ld_propanel' );

			parent::__construct();
									
			add_filter( 'learndash_propanel_template_ajax', array( $this, 'reporting_template' ), 10, 2 );
			add_action( 'wp_ajax_learndash_propanel_reporting_get_result_rows', array( $this, 'get_result_rows' ) );
		}

		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
		}		

		/**
		 *
		 */
		function reporting_template( $output, $template ) {
			
			switch( $template ) {
				case 'reporting':
					ob_start();
					//include ld_propanel_get_template( 'ld-propanel-reporting.php' );
					include ld_propanel_get_template( 'ld-propanel-reporting-choose-filter.php' );
					$output = ob_get_clean();
					break;

				case 'course-reporting':
				case 'user-reporting':
				case 'group-reporting':
				
					$registered_filters = LearnDash_ProPanel::get_instance()->filtering_widget->get_filters();
				
					$this->post_data = ld_propanel_load_post_data();
					
					$this->activity_query_args = ld_propanel_load_activity_query_args( array(), $this->post_data );

					if ( 'course-reporting' == $this->post_data['template'] ) {
						if ( array_key_exists( 'courses', $registered_filters ) ) {
							$registered_filters['courses']['instance']->post_data = $this->post_data;
							$registered_filters['courses']['instance']->activity_query_args = $this->activity_query_args;

							$output = $registered_filters['courses']['instance']->filter_build_table();
						}
				
					} else if ( 'user-reporting' == $this->post_data['template'] ) {
						if ( array_key_exists( 'users', $registered_filters ) ) {
							$registered_filters['users']['instance']->post_data = $this->post_data;
							$registered_filters['users']['instance']->activity_query_args = $this->activity_query_args;

							$output = $registered_filters['users']['instance']->filter_build_table();
						}

					} else if ( 'group-reporting' == $this->post_data['template'] ) {
						if ( array_key_exists( 'groups', $registered_filters ) ) {
							$registered_filters['groups']['instance']->post_data = $this->post_data;
							$registered_filters['groups']['instance']->activity_query_args = $this->activity_query_args;

							$output = $registered_filters['groups']['instance']->filter_build_table();
						}
					}
					break;
			}

			return $output;
		}
		
		/**
		 *
		 */
//		function full_reporting_page_output() {
//			ob_start();
//			$container_type = 'full';
//			include ld_propanel_get_template( 'ld-propanel-full-reporting.php' );
//			echo ob_get_clean();
//		}

		
		public function filter_activity_args( $activity_args = array(), $post_data = array() ) {
			return $activity_args;
		}
		

		/**
		 *
		 */
		function get_result_rows() {
			check_ajax_referer( 'ld-propanel', 'nonce' );

			$registered_filters = LearnDash_ProPanel::get_instance()->filtering_widget->get_filters();
			
			$this->post_data = ld_propanel_load_post_data();
			if ( isset( $this->post_data['filters']['time_start'] ) ) {
				unset( $this->post_data['filters']['time_start'] );
			}

			if ( isset( $this->post_data['filters']['time_end'] ) ) {
				unset( $this->post_data['filters']['time_end'] );
			}

			$this->activity_query_args = ld_propanel_load_activity_query_args( array(), $this->post_data );
						
			if ( 'course' == $this->post_data['filters']['type'] ) {
				if ( array_key_exists( 'courses', $registered_filters ) ) {
					$registered_filters['courses']['instance']->post_data = $this->post_data;
					$registered_filters['courses']['instance']->activity_query_args = $this->activity_query_args;

					$response = $registered_filters['courses']['instance']->filter_result_rows( $this->post_data['filters']['id'] );
				}
				
			} else if ( 'user' == $this->post_data['filters']['type'] ) {
				if ( array_key_exists( 'users', $registered_filters ) ) {
					$registered_filters['users']['instance']->post_data = $this->post_data;
					$registered_filters['users']['instance']->activity_query_args = $this->activity_query_args;

					$response = $registered_filters['users']['instance']->filter_result_rows( $this->post_data['filters']['id'] );
				}
				
			} else if ( 'group' == $this->post_data['filters']['type'] ) {
				if ( array_key_exists( 'groups', $registered_filters ) ) {
					$registered_filters['groups']['instance']->post_data = $this->post_data;
					$registered_filters['groups']['instance']->activity_query_args = $this->activity_query_args;

    				$response = $registered_filters['groups']['instance']->filter_result_rows( $this->post_data['filters']['id'] );
				}
			}

			wp_send_json( $response );
			die();
		}
		
		/**
		 * @param array $user_ids
		 * @param $subject
		 * @param $message
		 *
		 * @return bool
		 */
		function email_users( $user_ids = array(), $subject = '', $message = '' ) {
			global $wpdb;

			if ( !empty( $user_ids ) ) { 

				$offset = 0;
				$email_users_batch_size = apply_filters('ld_propanel_email_users_batch_size', 100 );
				while( true ) {
					$user_ids_part = array_slice( $user_ids, $offset, $email_users_batch_size );
					if ( empty( $user_ids_part ) ) break;
					else {
						$mail_args = array(
							'to' 			=> 	wp_get_current_user()->user_email,
							'subject'		=>	$subject,
							'message'		=>	wpautop( $message ),
							'attachments'	=>	'',
							'headers' 		=> 	array(
								'content-type: text/html',
								'From: '. wp_get_current_user()->user_email,
								'Reply-to: '. wp_get_current_user()->user_email
							)
						);

						$mail_ret = false;
						
						$email_sql_str = "SELECT user_email from ". $wpdb->users ." WHERE ID IN (". implode( ',', $user_ids_part ) .")";
						$email_addresses = $wpdb->get_col( $email_sql_str );

						if ( $email_addresses ) {
							$mail_args['headers'][] = 'Bcc: '. implode( ',', $email_addresses );
				
							$mail_args = apply_filters( 'ld_propanel_email_users_args', $mail_args );
							if ( !empty( $mail_args ) ) {
								do_action( 'ld_propanel_email_users_before', $mail_args );

								add_action('wp_mail_failed', array( $this, 'ajax_mail_failed' ) );
								$mail_ret = wp_mail( $mail_args['to'], $mail_args['subject'], $mail_args['message'], $mail_args['headers'], $mail_args['attachments'] );

								if ( !empty( $this->is_debug ) ) {
									$this->debug_message .= "mail_ret: ". $mail_ret ."\r\n";
									$this->debug_message .= "mail_args<pre>". print_r($mail_args, true) ."</pre>\r\n";
								}
								
								remove_action('wp_mail_failed', array( $this, 'ajax_mail_failed' ) );

								do_action( 'ld_propanel_email_users_after', $mail_args, $mail_ret );
								
								if ( !$mail_ret )
									break;
							} else {
								break;
							}
						} else {
							break;
						}
						
						$offset += $email_users_batch_size;
					}
				}
			}
			
			return $mail_ret;
		}

		/**
		 *
		 */
		function ajax_email_users() {
			check_ajax_referer( 'ld-propanel', 'nonce' );
			
			$user_ids 		= 	isset( $_POST['user_ids'] ) ? $_POST['user_ids'] : null;
			$filter 		= 	isset( $_POST['filter'] ) ? $_POST['filter'] : null;
			$subject 		= 	isset( $_POST['subject'] ) ? sanitize_text_field( stripslashes( $_POST['subject'] ) ) : '';
			$message 		= 	isset( $_POST['message'] ) ? wp_kses_post( stripslashes( $_POST['message'] ) ) : '';
			$this->is_debug = 	isset( $_POST['is_debug'] ) ? wp_kses_post( stripslashes( $_POST['is_debug'] ) ) : '';
			
			$response = array(
				
			);
			
			if ( !empty( $user_ids ) ) {
				$user_ids = array_map( 'intval', explode( ',', $user_ids ) );
			} else {
				$this->post_data = ld_propanel_load_post_data( array(), $_POST );
				$this->activity_query_args = ld_propanel_load_activity_query_args( array(), $this->post_data );
			
				$this->activity_query_args = ld_propanel_adjust_admin_users( $this->activity_query_args );
				//$this->activity_query_args = ld_propanel_convert_fewer_users( $this->activity_query_args );
			
				//if ( ( isset( $this->activity_query_args['user_ids'] ) ) && ( !empty( $this->activity_query_args['user_ids'] ) ) ) {
				//	$user_ids = $this->activity_query_args['user_ids'];
				//}
				
				$this->activity_query_args['per_page'] = 100;
				$this->activity_query_args['paged'] = 1;
				$user_ids = array();
				
				while( true ) {
					$activities = learndash_reports_get_activity( $this->activity_query_args );
					if ( ( isset( $activities['results'] ) ) && ( !empty( $activities['results'] ) ) ) {
						$user_ids = array_merge( $user_ids, wp_list_pluck( $activities['results'], 'user_id' ) );
						$this->activity_query_args['paged'] += 1;
					} else {
						break;
					}
				}
			}

			if ( ( ! empty( $user_ids ) ) && ( !empty( $subject ) ) && ( !empty( $message ) ) ) {
				$user_ids = array_unique( $user_ids );
				$result = $this->email_users( $user_ids, $subject, $message, $filter );
				if ( $result ) {
					wp_send_json_success( 
						array(
							'message' => sprintf(
								// translators: placeholder: count users.
								esc_html_x('Email sent to %d destinations', 'placeholder: count users.', 'ld_propanel' ),
								count( $user_ids )
							),
							'debug' => $this->debug_message
						)
					);
				} else {
					$error_string = '';
					if ( is_wp_error( $this->mail_error ) ) {
						$error_string = $this->mail_error->get_error_message();
					}
					wp_send_json_error( 
						array( 
							'message' => sprintf(
								// translators: placeholder: error message
								esc_html_x( "We could not send the email successfully. Please try again or check with your hosting provider.
Error: %s", 'placeholder: error message', 'ld_propanel' ),
								$error_string
							)
						) 
					);
				}
			} else {
				wp_send_json_error( array( 'message' => esc_html__( 'We do not have any email addresses to send your message to.', 'ld_propanel' ) ) );
			}

			die();
		}

		// Capture the wp_mail() failure. Will then be appended to the json message sent back to the browser. 
		function ajax_mail_failed( $mail_error ) {
			$this->mail_error = $mail_error;
		}
	}
}