Your IP : 216.73.216.95


Current Path : /var/test/www/ljmti/wp-content/plugins/goodlayers-lms/framework/
Upload File :
Current File : /var/test/www/ljmti/wp-content/plugins/goodlayers-lms/framework/course-option.php

<?php
	/*
	*	Goodlayers Course Option File
	*/

	// create the course post type
	add_action( 'init', 'gdlr_lms_create_cause' );
	function gdlr_lms_create_cause() {
		register_post_type( 'course',
			array(
				'labels' => array(
					'name'               => __('Course', 'gdlr-lms'),
					'singular_name'      => __('Course', 'gdlr-lms'),
					'add_new'            => __('Add New', 'gdlr-lms'),
					'add_new_item'       => __('Add New Course', 'gdlr-lms'),
					'edit_item'          => __('Edit Course', 'gdlr-lms'),
					'new_item'           => __('New Course', 'gdlr-lms'),
					'all_items'          => __('All Courses', 'gdlr-lms'),
					'view_item'          => __('View Course', 'gdlr-lms'),
					'search_items'       => __('Search Course', 'gdlr-lms'),
					'not_found'          => __('No courses found', 'gdlr-lms'),
					'not_found_in_trash' => __('No courses found in Trash', 'gdlr-lms'),
					'parent_item_colon'  => '',
					'menu_name'          => __('Courses', 'gdlr-lms')
				),
				'public'             => true,
				'publicly_queryable' => true,
				'show_ui'            => true,
				'show_in_menu'       => true,
				'query_var'          => true,
				//'rewrite'            => array( 'slug' => 'course'  ),
				'capability_type'    => array('course', 'courses'),
				'map_meta_cap' 		 => true,
				'has_archive'        => true,
				'hierarchical'       => false,
				'menu_position'      => 5,
				'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'custom-fields', 'revisions', 'comments' )
			)
		);

		// create course categories
		register_taxonomy(
			'course_category', array("course"), array(
				'hierarchical' => true,
				'show_admin_column' => true,
				'label' => __('Course Categories', 'gdlr-lms'),
				'singular_label' => __('Course Category', 'gdlr-lms'),
				'rewrite' => array('slug' => 'course_category'),
				'capabilities' => array('manage_terms'=>'course_taxes', 'edit_terms'=>'course_taxes_edit',
					'delete_terms'=>'course_taxes_edit', 'assign_terms'=>'course_taxes')
				));
		register_taxonomy_for_object_type('course_category', 'course');

		// create course tag
		register_taxonomy(
			'course_tag', array('course'), array(
				'hierarchical' => false,
				'show_admin_column' => true,
				'label' => __('Course Tags', 'gdlr-lms'),
				'singular_label' => __('Course Tag', 'gdlr-lms'),
				'rewrite' => array( 'slug' => 'course_tag' ),
				'capabilities' => array('manage_terms'=>'course_taxes', 'edit_terms'=>'course_taxes',
					'delete_terms'=>'course_taxes', 'assign_terms'=>'course_taxes')
				));
		register_taxonomy_for_object_type('course_tag', 'course');

		add_filter('single_template', 'gdlr_lms_register_course_template');
	}

	// register single course template
	function gdlr_lms_register_course_template($template) {
		global $post, $current_user;

		if( $post->post_type == 'course' ){
			$template = '';
			
			if( isset($_GET['course_type']) ){
				global $wpdb, $gdlr_course_content, $gdlr_course_options, $lms_page, $lms_lecture, $payment_row;
				$authorization = false;
				
				$gdlr_course_options = gdlr_lms_get_course_options($post->ID);
				$gdlr_course_content = gdlr_lms_get_course_content_settings($post->ID);

				$lms_page = (empty($_GET['course_page']))? 1: intval($_GET['course_page']);
				$lms_lecture = (empty($_GET['lecture']))? 1: intval($_GET['lecture']);
				
				// not login && allow non member & online course
				if( !is_user_logged_in() && !empty($gdlr_course_options['allow-non-member']) && $gdlr_course_options['allow-non-member'] == 'enable' &&
					(empty($course_options['online-course']) || $course_options['online-course'] == 'enable') ){
					$authorization = true;

				// login
				}else if( is_user_logged_in() ){

					// is course author
					if( $current_user->ID == $post->post_author ){
						$authorization = true;

					}else{

						// if course is locked
						if( !empty($gdlr_course_options['lock-course-date']) && $gdlr_course_options['lock-course-date'] == 'enable' && 
							(( empty($gdlr_course_options['start-date']) || strtotime(current_time('Y-m-d')) < strtotime($gdlr_course_options['start-date']) ) &&
							 ( empty($gdlr_course_options['end-date']) || strtotime(current_time('Y-m-d')) > strtotime($gdlr_course_options['end-date']) )) ){
							$authorization = false;
						
						}else{
					
							// check if purchase before
							$payment_row = gdlr_lms_get_payment_row($post->ID, $current_user->ID);
							
							if(!empty($payment_row)){

								if( $payment_row->payment_status == 'paid' ){
									$authorization = true;

									// avoid crossing section
									if( $lms_page > $payment_row->attendance_section + 1 ){
										$lms_page = $payment_row->attendance_section + 1;
									}
									
									if( $lms_page > $payment_row->attendance_section ){
										$current_date = strtotime(current_time('mysql'));
										
										if( !empty($gdlr_course_content[$lms_page-2]['wait-time']) && $lms_page > 1 ){
											$available_date = strtotime($payment_row->attendance) + (intval($gdlr_course_content[$lms_page-2]['wait-time']) * 86400);
										}else if( !empty($gdlr_course_content[$lms_page-2]['wait-date']) && $lms_page > 1 ){
											$available_date = strtotime($gdlr_course_content[$lms_page-2]['wait-date']);
										}else{
											$available_date = strtotime($payment_row->attendance);
										}
										
										if( $lms_page > 1 && $current_date <= $available_date ){
											global $gdlr_time_left;
											$gdlr_time_left = $available_date - $current_date;
										}else{
											$wpdb->update( $wpdb->prefix . 'gdlrpayment',
												array('attendance'=>current_time('mysql'), 'attendance_section'=>$lms_page), array('id'=>$payment_row->id),
												array('%s', '%d'), array('%d')
											);
											$payment_row->attendance_section = $payment_row->attendance_section + 1;
										}
									}

									// update the last section
									if( $_GET['course_type'] == 'content' ){
										$wpdb->update( $wpdb->prefix . 'gdlrpayment',
											array('last_section'=>$lms_page . '-' . $lms_lecture), array('id'=>$payment_row->id),
											array('%s'), array('%d')
										);
									}
								}

							// check whether it is free course
							}else{

								if( empty($gdlr_course_options['price-one']) ){
									$authorization = true;

									$gdlr_course_options['booked-seat'] = intval($gdlr_course_options['booked-seat']) + 1;
									update_post_meta($post->ID, 'gdlr-lms-course-settings', json_encode($gdlr_course_options));

									$running_number = intval(get_post_meta($post->ID, 'student-booking-id', true));
									$running_number = empty($running_number)? 1: $running_number + 1;
									update_post_meta($post->ID, 'student-booking-id', $running_number);

									$code  = substr(get_user_meta($current_user->ID, 'first_name',true), 0, 1) . substr(get_user_meta($current_user->ID, 'last_name',true), 0, 1);
									$code .= $running_number . $gdlr_course_options['course-code'] . $post->ID;

									$data = serialize(array(
										'amount' => 1,
										'price' => 0,
										'code' => $code
									));

									$wpdb->insert( $wpdb->prefix . 'gdlrpayment',
										array('course_id'=>$post->ID, 'student_id'=>$current_user->ID, 'author_id'=>$post->post_author,
											'payment_date'=>current_time('mysql'), 'payment_status'=>'paid', 'price'=>'0',
											'payment_info'=>$data, 'attendance'=>current_time('mysql'), 'attendance_section'=>'1'),
										array('%d', '%d', '%d', '%s', '%s', '%s', '%s', '%s', '%s')
									);
									
									$payment_row = gdlr_lms_get_payment_row($post->ID, $current_user->ID);
								}
							}
						}
					}
				}

				if( $authorization ){
					if($_GET['course_type'] == 'content'){
						$template .=  'single-course-content.php';
					}else if($_GET['course_type'] == 'quiz'){
						$template .=  'single-course-quiz.php';
					}else if($_GET['course_type'] == 'section-quiz'){
						$template .=  'single-section-quiz.php';
					}
				}
			}
			$template = empty($template)? 'single-course.php': $template;
			$template = dirname(dirname( __FILE__ )) . '/' . $template;

		}else if( $post->post_type == 'quiz' ){
			if( $current_user->ID == $post->post_author ){
				$template = dirname(dirname( __FILE__ )) . '/single-course-quiz.php';
			}else{
				$template = get_template_directory() . '/404.php';
			}
		}

		return $template;
	}

	// enqueue the necessary admin script
	add_action('admin_enqueue_scripts', 'gdlr_lms_course_script');
	function gdlr_lms_course_script() {
		global $post; if( empty($post) || $post->post_type != 'course' ) return;
		
		gdlr_lms_include_jquery_ui_style();
		wp_enqueue_style('gdlr-lms-meta-box', plugins_url('/stylesheet/meta-box.css', __FILE__));
		
		wp_enqueue_script('jquery-ui-datepicker');
		wp_enqueue_script('jquery-ui-core');
		wp_enqueue_script('jquery-ui-slider');
		wp_enqueue_script('jquery-ui-sortable');
		wp_enqueue_script('gdlr-lms-meta-box', plugins_url('/javascript/meta-box.js', __FILE__));
	}

	// add the course option
	add_action('add_meta_boxes', 'gdlr_lms_add_course_meta_box');
	add_action('pre_post_update', 'gdlr_lms_save_course_meta_box');
	function gdlr_lms_add_course_meta_box(){
		add_meta_box('course-option', __('Course Option', 'gdlr-lms'),
			'gdlr_lms_create_course_meta_box', 'course', 'normal', 'high');
	}
	function gdlr_lms_create_course_meta_box(){
		global $post;

		// Add an nonce field so we can check for it later.
		wp_nonce_field( 'course_meta_box', 'course_meta_box_nonce' );

		////////////////////////////////
		//// course setting section ////
		////////////////////////////////

		$course_settings = array(
			'right-sidebar' => array(
				'title' => __('Right Sidebar (If Any)', 'gdlr-lms'),
				'type' => 'combobox',
				'options' => gdlr_lms_get_sidebar_list()
			),
			'prerequisite-course' => array(
				'title' => __('Prerequisite Course', 'gdlr-lms'),
				'type' => 'combobox',
				'options' => gdlr_lms_get_post_list('course')
			),
			'online-course' => array(
				'title' => __('Online Course', 'gdlr-lms'),
				'type' => 'checkbox',
				'default' => 'enable',
				'description' => __('Course content section will be ignored when this option is disabled.', 'gdlr-lms')
			),
			'allow-non-member' => array(
				'title' => __('Allow non member to read course', 'gdlr-lms'),
				'type' => 'checkbox',
				'default' => 'disable',
				'wrapper-class' => 'online-course-enable',
				'description' => __('The price, quiz, seat and wait time field will be omitted.', 'gdlr-lms')
			),
			'course-code' => array(
				'title' => __('Course Code', 'gdlr-lms'),
				'type' => 'text',
				'description' => __('Use to generate code after submit payment evidence.', 'gdlr-lms')
			),
			'quiz' => array(
				'title' => __('Course Final Quiz', 'gdlr-lms'),
				'type' => 'combobox',
				'options' => gdlr_lms_get_post_list('quiz'),
				'wrapper-class' => 'online-course-enable'
			),
			'location' => array(
				'title' => __('Location', 'gdlr-lms'),
				'type' => 'text',
				'class' => 'long',
				'wrapper-class' => 'online-course-disable'
			),
			'lock-course-date' => array(
				'title' => __('Lock Course On Start / End Date', 'gdlr-lms'),
				'type' => 'checkbox',
				'default' => 'disable',
				'wrapper-class' => 'online-course-enable',
				'description' => __('only allow the course to be accessed on specific date range', 'gdlr-lms')
			),
			'start-date' => array(
				'title' => __('Start Date', 'gdlr-lms'),
				'type' => 'datepicker',
				'custom_field' => 'gdlr_course_start_date'
			),
			'end-date' => array(
				'title' => __('End Date', 'gdlr-lms'),
				'type' => 'datepicker',
			),
			'course-time' => array(
				'title' => __('Course Time', 'gdlr-lms'),
				'type' => 'text',
				'wrapper-class' => 'online-course-disable'
			),
			'expired-date' => array(
				'title' => __('Expired Date', 'gdlr-lms'),
				'type' => 'datepicker',
				'description' => __('This option prevents student from purchasing the course after the selected date', 'gdlr-lms')
			),
			'max-seat' => array(
				'title' => __('Max Seat', 'gdlr-lms'),
				'type' => 'text',
				'wrapper-class' => 'online-course-disable'
			),
			'booked-seat' => array(
				'title' => __('Booked Seat', 'gdlr-lms'),
				'type' => 'text',
				'wrapper-class' => 'online-course-disable'
			),
			'price' => array(
				'title' => __('Price', 'gdlr-lms'),
				'type' => 'text',
				'class' => 'small',
				'description' => __('Leaving this field blankfor free course (Only number is allowed here)', 'gdlr-lms'),
			),
			'discount-price' => array(
				'title' => __('Discount Price', 'gdlr-lms'),
				'type' => 'text',
				'class' => 'small',
				'description' => __('(Only number is allowed here)', 'gdlr-lms')

			),

			// badge and certificate
			'enable-badge' => array(
				'title' => __('Enable Badge', 'gdlr-lms'),
				'type' => 'checkbox',
				'default' => 'disable',
				'wrapper-class' => 'online-course-enable'
			),
			'badge-percent' => array(
				'title' => __('% Of Score To Get Badge', 'gdlr-lms'),
				'type' => 'text',
				'wrapper-class' => 'online-course-enable'
			),
			'badge-title' => array(
				'title' => __('Badge Title', 'gdlr-lms'),
				'type' => 'text',
				'wrapper-class' => 'online-course-enable'
			),
			'badge-file' => array(
				'title' => __('Badge File', 'gdlr-lms'),
				'type' => 'upload',
				'wrapper-class' => 'online-course-enable'
			),
			'enable-certificate' => array(
				'title' => __('Enable Certificate', 'gdlr-lms'),
				'type' => 'checkbox',
				'default' => 'disable'
			),
			'certificate-percent' => array(
				'title' => __('% Of Score To Get Certificate', 'gdlr-lms'),
				'type' => 'text',
				'wrapper-class' => 'enable-certificate-enable'
			),
			'certificate-template' => array(
				'title' => __('Certificate Template', 'gdlr-lms'),
				'type' => 'combobox',
				'options' => gdlr_lms_get_post_list('certificate'),
				'wrapper-class' => 'enable-certificate-enable'
			),
		);
		$course_val = gdlr_lms_decode_preventslashes(get_post_meta($post->ID, 'gdlr-lms-course-settings', true));
		$course_settings_val = empty($course_val)? array(): json_decode($course_val, true);

		echo '<div class="gdlr-lms-meta-wrapper">';
		echo '<h3>' . __('Course Settings', 'gdlr-lms') . '</h3>';
		foreach($course_settings as $slug => $course_setting){
			$course_setting['slug'] = $slug;
			if( !empty($course_setting['custom_field']) ){
				$course_setting['value'] = get_post_meta($post->ID, $course_setting['custom_field'], true);
			}
			if( empty($course_setting['value']) ){
				$course_setting['value'] = empty($course_settings_val[$slug])? '': $course_settings_val[$slug];
			}
			gdlr_lms_print_meta_box($course_setting);
		}
		echo '<textarea name="gdlr-lms-course-settings">' . esc_textarea($course_val) . '</textarea>';
		echo '</div>';

		/////////////////////
		//// tab section ////
		/////////////////////

		$course_content_options = array(
			'section-name' => array(
				'title' => __('Section Name', 'gdlr-lms'),
				'type' => 'text'
			),
			'section-quiz' => array(
				'title' => __('Section Quiz', 'gdlr-lms'),
				'type' => 'combobox',
				'options' => gdlr_lms_get_post_list('quiz')
			),
			'pass-mark' => array(
				'title' => __('Student have to get', 'gdlr-lms'),
				'type' => 'text',
				'class' => 'small',
				'description' => __('% to continue to next section.', 'gdlr-lms')
			),
			'wait-time' => array(
				'title' => __('Student have to wait', 'gdlr-lms'),
				'type' => 'text',
				'class' => 'small',
				'description' => __('days before continuing to next section.', 'gdlr-lms'),
			),
			'wait-date' => array(
				'title' => __('Next section will be available at', 'gdlr-lms'),
				'type' => 'datepicker',
				'description' => __('( Wait time has to be blank for this field to take effects )', 'gdlr-lms'),
			),
			
			'lecture-section' => array(
				'type' => 'lecture',
				'options' => array(
					'lecture-name' => array(
						'title' => __('Lecture Name', 'gdlr-lms'),
						'type' => 'text'
					),
					'icon-class' => array(
						'title' => __('Icon Class', 'gdlr-lms'),
						'type' => 'text'
					),
					'pdf-download-link' => array(
						'title' => __('PDF Download Link', 'gdlr-lms'),
						'type' => 'upload'
					),
					'allow-free-preview' => array(
						'title' => __('Allow Free Preview', 'gdlr-lms'),
						'type' => 'checkbox',
						'default' => 'disable'
					),
					'lecture-content' => array(
						'type' => 'wysiwyg'
					),
					
					// pdf-download-link, course-content
				)
			)

		);
		$course_content_val = gdlr_lms_decode_preventslashes(get_post_meta($post->ID, 'gdlr-lms-content-settings', true));
		$course_content_options_val = empty($course_content_val)? array(): json_decode($course_content_val, true);
		
		$old_data = false;
		foreach($course_content_options_val as $tabs_key => $tabs_value){
			if( empty($tabs_value['lecture-section']) ){
				$course_content_options_val[$tabs_key]['lecture-section'] = array(0=>array());
				if( !empty($tabs_value['pdf-download-link']) ){
					 $course_content_options_val[$tabs_key]['lecture-section'][0]['pdf-download-link'] = $tabs_value['pdf-download-link'];
				}
				if( !empty($tabs_value['course-content']) ){
					$course_content_options_val[$tabs_key]['lecture-section'][0]['lecture-content'] = $tabs_value['course-content'];
				}
				$course_content_options_val[$tabs_key]['lecture-section'] = json_encode($course_content_options_val[$tabs_key]['lecture-section']);
				$old_data = true;
			}
		}
		if( $old_data ){
			$course_content_val = json_encode($course_content_options_val);
		}
		
		echo '<div class="gdlr-lms-meta-wrapper gdlr-tabs">';
		echo '<h3>' . __('Course Content', 'gdlr-lms') . '</h3>';
		echo '<div class="course-tab-add-new">';
		echo '<span class="head">+</span>';
		echo '<span class="tail">' . __('Add Section', 'gdlr-lms') . '</span>';
		echo '</div>'; // course-tab-add-new
		echo '<div class="course-tab-title">';
		echo '<span class="active">1</span>';
		for( $i = 2; $i <= sizeof($course_content_options_val); $i++ ){
			echo '<span>' . $i . '</span>';
		}
		echo '</div>'; // course-tab-title
		echo '<div class="course-tab-content">';
		echo '<div class="course-tab-remove">Delete</div>';
		foreach($course_content_options as $slug => $course_content_option){
			if( $course_content_option['type'] == 'lecture' ){
				$lectures = empty($course_content_options_val[0][$slug])? array(): json_decode($course_content_options_val[0][$slug], true);
				
				echo '<div class="gdlr-lecture-wrapper">';
				echo '<div class="lecture-tab-add-new">';
				echo '<span class="head">+</span>';
				echo '<span class="tail">' . __('Add Lecture', 'gdlr-lms') . '</span>';
				echo '</div>'; // lecture-tab-add-new
				echo '<div class="lecture-tab-title">';
				echo '<span class="active">1</span>';
				for( $i = 2; $i <= sizeof($lectures); $i++ ){
					echo '<span>' . $i . '</span>';
				}
				echo '</div>'; // lecture-tab-title
				
				echo '<div class="lecture-tab-content">';
				echo '<div class="lecture-tab-remove">Delete</div>';
				foreach($course_content_option['options'] as $l_slug => $lecture_content_option){
					$lecture_content_option['slug'] = $l_slug;
					$lecture_content_option['value'] = empty($lectures[0][$l_slug])? '': $lectures[0][$l_slug];
					gdlr_lms_print_meta_box($lecture_content_option);
				}
				echo '</div>'; // lecture-tab-content
				echo '<textarea type="text" class="gdlr-lms-lecture-content" data-slug="' . $slug . '" >';
				echo empty($course_content_options_val[0][$slug])? '': esc_textarea($course_content_options_val[0][$slug]);
				echo '</textarea>';
				echo '</div>'; // gdlr-lecture-wrapper
			}else{
				$course_content_option['slug'] = $slug;
				$course_content_option['value'] = empty($course_content_options_val[0][$slug])? '': $course_content_options_val[0][$slug];
				gdlr_lms_print_meta_box($course_content_option);
			}
		}
		echo '</div>'; // course-tab-content
		echo '<textarea name="gdlr-lms-content-settings">' . esc_textarea($course_content_val) . '</textarea>';
		echo '</div>';
	}
	function gdlr_lms_save_course_meta_box($post_id){

		// verify nonce & user's permission
		if(!isset($_POST['course_meta_box_nonce'])){ return; }
		if(!wp_verify_nonce($_POST['course_meta_box_nonce'], 'course_meta_box')){ return; }
		if(!current_user_can('edit_post', $post_id)){ return; }

		// save value
		if( isset($_POST['gdlr-lms-course-settings']) ){
			$post_option = gdlr_lms_preventslashes(gdlr_stripslashes($_POST['gdlr-lms-course-settings']));
			$post_option = json_decode(gdlr_lms_decode_preventslashes($post_option), true);
			
			if( !empty($post_option) ){
				update_post_meta($post_id, 'gdlr-lms-course-settings', gdlr_lms_preventslashes($_POST['gdlr-lms-course-settings']));
			}
			if( !empty($post_option['start-date']) ){
				update_post_meta($post_id, 'gdlr_course_start_date', $post_option['start-date']);
			}
		}
		
		if( isset($_POST['gdlr-lms-content-settings']) ){
			update_post_meta($post_id, 'gdlr-lms-content-settings', gdlr_lms_preventslashes($_POST['gdlr-lms-content-settings']));
		}

	}

?>