PluginProbe
Tutor LMS – eLearning and online course solution / 1.0.7
Tutor LMS – eLearning and online course solution v1.0.7
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 All 191 releases
tutor / classes / Instructors_List.php

Instructors_List.php in Tutor LMS – eLearning and online course solution 1.0.7, at classes/Instructors_List.php

178 lines 5.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace TUTOR;
3
4 if ( ! defined( 'ABSPATH' ) )
5 exit;
6
7 if (! class_exists('Tutor_List_Table')){
8 include_once tutor()->path.'classes/Tutor_List_Table.php';
9 }
10
11 class Instructors_List extends \Tutor_List_Table {
12 function __construct(){
13 global $status, $page;
14
15 //Set parent defaults
16 parent::__construct( array(
17 'singular' => 'instructor', //singular name of the listed records
18 'plural' => 'instructors', //plural name of the listed records
19 'ajax' => false //does this table support ajax?
20 ) );
21 }
22
23 function column_default($item, $column_name){
24 switch($column_name){
25 case 'user_email':
26 case 'display_name':
27 return $item->$column_name;
28 default:
29 return print_r($item,true); //Show the whole array for troubleshooting purposes
30 }
31 }
32
33 function column_total_course($item){
34 global $wpdb;
35 $course_post_type = tutor()->course_post_type;
36
37 $total_course = (int) $wpdb->get_var("select count(ID) from {$wpdb->posts} WHERE post_author={$item->ID} AND post_type='{$course_post_type}' ");
38
39 echo $total_course;
40 }
41
42 /**
43 * @param $item
44 *
45 * Completed Course by User
46 */
47 function column_status($item){
48 $status = tutor_utils()->instructor_status($item->ID, false);
49 $status_name = tutor_utils()->instructor_status($item->ID);
50 echo "<span class='tutor-status-context tutor-status-{$status}-context'>{$status_name}</span>";
51 }
52
53 function column_display_name($item){
54 //Build row actions
55 $actions = array(
56 //'edit' => sprintf('<a href="?page=%s&action=%s&instructor=%s">Edit</a>',$_REQUEST['page'],'edit',$item->ID),
57 //'delete' => sprintf('<a href="?page=%s&action=%s&instructor=%s">Delete</a>',$_REQUEST['page'],'delete',$item->ID),
58 );
59
60 $status = tutor_utils()->instructor_status($item->ID, false);
61
62 switch ($status){
63 case 'pending':
64 $actions['approved'] = sprintf('<a href="?page=%s&action=%s&instructor=%s">Approve</a>',$_REQUEST['page'],'approve',$item->ID);
65 break;
66 case 'approved':
67 $actions['blocked'] = sprintf('<a href="?page=%s&action=%s&instructor=%s">Block</a>',$_REQUEST['page'],'blocked',$item->ID);
68 break;
69 case 'blocked':
70 $actions['approved'] = sprintf('<a href="?page=%s&action=%s&instructor=%s">Un Block</a>',$_REQUEST['page'],'approve',$item->ID);
71 break;
72 }
73 //Return the title contents
74 return sprintf('%1$s <span style="color:silver">(id:%2$s)</span>%3$s',
75 $item->display_name,
76 $item->ID,
77 $this->row_actions($actions)
78 );
79 }
80
81 function column_cb($item){
82 return sprintf(
83 '<input type="checkbox" name="%1$s[]" value="%2$s" />',
84 /*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label ("instructor")
85 /*$2%s*/ $item->ID //The value of the checkbox should be the record's id
86 );
87 }
88
89 function get_columns(){
90 $columns = array(
91 'cb' => '<input type="checkbox" />', //Render a checkbox instead of text
92 'display_name' => __('Name', 'tutor'),
93 'user_email' => __('E-Mail', 'tutor'),
94 'total_course' => __('Total Course', 'tutor'),
95 'status' => __('Status', 'tutor'),
96 );
97 return $columns;
98 }
99
100 function get_sortable_columns() {
101 $sortable_columns = array(
102 //'display_name' => array('title',false), //true means it's already sorted
103 );
104 return $sortable_columns;
105 }
106
107 function get_bulk_actions() {
108 $actions = array(
109 //'delete' => 'Delete'
110 );
111 return $actions;
112 }
113
114 function process_bulk_action() {
115 if( 'approve' === $this->current_action() ) {
116 $instructor_id = (int) sanitize_text_field($_GET['instructor']);
117
118 do_action('tutor_before_approved_instructor', $instructor_id);
119
120 update_user_meta($instructor_id, '_tutor_instructor_status', 'approved');
121 update_user_meta($instructor_id, '_tutor_instructor_approved', time());
122
123 $instructor = new \WP_User($instructor_id);
124 $instructor->add_role(tutor()->instructor_role);
125
126 //TODO: send E-Mail to this user about instructor approval, should via hook
127 do_action('tutor_after_approved_instructor', $instructor_id);
128
129 wp_redirect(wp_get_referer());
130 }
131
132 if( 'blocked' === $this->current_action() ) {
133 $instructor_id = (int) sanitize_text_field($_GET['instructor']);
134
135 do_action('tutor_before_blocked_instructor', $instructor_id);
136 update_user_meta($instructor_id, '_tutor_instructor_status', 'blocked');
137
138 $instructor = new \WP_User($instructor_id);
139 $instructor->remove_role(tutor()->instructor_role);
140 do_action('tutor_after_blocked_instructor', $instructor_id);
141
142 //TODO: send E-Mail to this user about instructor blocked, should via hook
143 wp_redirect(wp_get_referer());
144 }
145
146 //Detect when a bulk action is being triggered...
147 if( 'delete'===$this->current_action() ) {
148 wp_die('Items deleted (or they would be if we had items to delete)!');
149 }
150 }
151
152 function prepare_items() {
153 $per_page = 20;
154
155 $search_term = '';
156 if (isset($_REQUEST['s'])){
157 $search_term = sanitize_text_field($_REQUEST['s']);
158 }
159
160 $columns = $this->get_columns();
161 $hidden = array();
162 $sortable = $this->get_sortable_columns();
163
164 $this->_column_headers = array($columns, $hidden, $sortable);
165 $this->process_bulk_action();
166
167 $current_page = $this->get_pagenum();
168
169 $total_items = tutor_utils()->get_total_instructors($search_term);
170 $this->items = tutor_utils()->get_instructors(($current_page-1)*$per_page, $per_page, $search_term);
171
172 $this->set_pagination_args( array(
173 'total_items' => $total_items,
174 'per_page' => $per_page,
175 'total_pages' => ceil($total_items/$per_page)
176 ) );
177 }
178 }