File: /var/www/html/shootinschool/wp-content/plugins/shootin-school-plugin/list_grade.php
<?php
if (!class_exists('WP_List_Table')) {
require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
}
global $postNumber;
$postNumber = 1;
function render_siab_grades(){
class Grade_List_Table extends WP_List_Table
{
/**
* Prepare the items for the table to process
*
* @return Void
*/
private $row_number = 1;
public function prepare_items()
{
$columns = $this->get_columns();
$hidden = $this->get_hidden_columns();
$sortable = $this->get_sortable_columns();
$data = $this->table_data();
usort($data, array(&$this, 'sort_data'));
$perPage = 10;
$currentPage = $this->get_pagenum();
$totalItems = count($data);
$this->set_pagination_args(array(
'total_items' => $totalItems,
'per_page' => $perPage
));
$data = array_slice($data, (($currentPage - 1) * $perPage), $perPage);
$this->_column_headers = array($columns, $hidden, $sortable);
$this->items = $data;
}
/**
* Override the parent columns method. Defines the columns to use in your listing table
*
* @return Array
*/
public function get_columns()
{
$columns = array(
'id' => 'Sl No',
'lower_grade' => 'Grade',
// 'user_registered' => 'Registration Date',
'actions' => 'Actions',
);
return $columns;
}
/**
* Define which columns are hidden
*
* @return Array
*/
public function get_hidden_columns()
{
return array();
}
/**
* Define the sortable columns
*
* @return Array
*/
public function get_sortable_columns()
{
return array('display_name' => array('display_name', false));
}
/**
* Get the table data
*
* @return Array
*/
private function table_data()
{
global $wpdb;
$data = $wpdb->get_results("SELECT * FROM " . DB_GRADE_SESSIONS, ARRAY_A);
return $data;
}
/**
* Define what data to show on each column of the table
*
* @param Array $item Data
* @param String $column_name - Current column name
*
* @return Mixed
*/
public function column_default($item, $column_name)
{
$ordinal_map = [];
for ($i = 1; $i <= 50; $i++) {
if ($i % 10 === 1 && $i !== 11) {
$ordinal = $i . 'st';
} elseif ($i % 10 === 2 && $i !== 12) {
$ordinal = $i . 'nd';
} elseif ($i % 10 === 3 && $i !== 13) {
$ordinal = $i . 'rd';
} else {
$ordinal = $i . 'th';
}
$ordinal_map[$i] = $ordinal;
}
switch ($column_name) {
case 'id':
return $this->row_number++;
case 'lower_grade':
if($item['upper_grade']=='' || $item['upper_grade']==null)
return $item['lower_grade'];
else{
$lower_grade = isset($ordinal_map[$item['lower_grade']]) ? $ordinal_map[$item['lower_grade']] : 'Unknown';
$upper_grade = isset($ordinal_map[$item['upper_grade']]) ? $ordinal_map[$item['upper_grade']] : 'Unknown';
}
return $lower_grade . ' - ' . $upper_grade;
default:
return print_r($item, true);
}
}
function column_actions($item)
{
if($item["status"]==1){
$actions = array(
//'view history' => sprintf('<a href="?page=instructor_history&id=' . $item['ID'] . '">View Appointments</a>'),
'active' => sprintf('<button style="color:#ffffff;width:61px;background:green;border:0px;" onclick="openStatusChange(' . $item['id'] . ');">Active </button>'),
'edit' => sprintf('<button style="color:#ffffff;width:61px;background:#d98c00;border:0px;" onclick="openeditGradeModal(' . $item['id'] . ');" style="padding-left:5px;">Edit</button>'),
'delete' => sprintf('<button style="color:#ffffff;width:61px;background:#d9534f;border:0px;" class="delete-button" onclick="openDeletegradeWarning(' . $item['id'] . ');">Delete</a>', $_REQUEST['page'], 'delete', $item['id']),
);
}
else
{
$actions = array(
//'view history' => sprintf('<a href="?page=instructor_history&id=' . $item['ID'] . '">View Appointments</a>'),
'inactive' => sprintf('<button style="color:#ffffff;background:red;border:0px;width:61px;" onclick="openStatusChange(' . $item['id'] . ');">Inactive</button>'),
'edit' => sprintf('<button style="color:#ffffff;width:61px;background:#d98c00;border:0px;" onclick="openeditGradeModal(' . $item['id'] . ');" style="padding-left:5px;">Edit</button>'),
'delete' => sprintf('<button style="color:#ffffff;width:61px;background:#d9534f;border:0px;" class="delete-button" onclick="openDeletegradeWarning(' . $item['id'] . ');" >Delete</button>', $_REQUEST['page'], 'delete', $item['id']),
);
}
return sprintf(
// '%1$s <span style="color:silver">(Edit:%2$s)</span>%3$s',
/*$1%s*/
// $item['title'],
/*$2%s*/
// $item['id'],
/*$3%s*/
$this->row_actions($actions)
);
}
/**
* Allows you to sort the data by the variables set in the $_GET
*
* @return Mixed
*/
private function sort_data($a, $b)
{
// Set defaults
$orderby = 'directorName';
$order = 'asc';
// If orderby is set, use this as the sort column
if (!empty($_GET['orderby'])) {
$orderby = $_GET['orderby'];
}
// If order is set use this as the order
if (!empty($_GET['order'])) {
$order = $_GET['order'];
}
$result = strcmp($a[$orderby], $b[$orderby]);
if ($order === 'asc') {
return $result;
}
return -$result;
}
}
function delete_grade() {
global $wpdb;
if (isset($_GET['id']) && !empty($_GET['id']) && ($_GET['action'] == 'delete')) {
$val = $_GET['id'];
$delete=$wpdb->query("DELETE FROM " . DB_GRADE_SESSIONS . " WHERE id=".$val);
if($delete){
echo '<div class="updated"><p><strong>Grade has been deleted Successfully.</strong></p></div>';
echo '<script>window.location.href = "?page=siab-grades";</script>';
}
}
}
function change_status() {
global $wpdb;
if (isset($_GET['id']) && !empty($_GET['id']) && ($_GET['action'] == 'status')) {
$val = $_GET['id'];
$data = $wpdb->get_row("select * from " . DB_GRADE_SESSIONS . " where ID ='$val'");
if($data->status==1){
$args = array(
"status" =>0,
);
}
else{
$args = array(
"status" =>1,
);
}
$where=array("id" => $_GET['id']);
$sql = $wpdb->update(DB_GRADE_SESSIONS, $args, $where);
echo '<div class="updated"><p><strong>Grade status changed Successfully.</strong></p></div>';
echo '<script>window.location.href = "?page=siab-grades";</script>';
}
}
/**
* Display the list table page
*
* @return Void
*/
$importedListTable = new Grade_List_Table();
$importedListTable->prepare_items();
?>
<div class="modal fade" id="WarningModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Delete Grade</h4>
</div>
<div class="modal-body">
<p>Are you sure want to delete the grade ?</p>
</div>
<div class="modal-footer">
<button type="button" id="ConfirmBtn" class="btn btn-primary">Yes</button>
<button type="button" class="btn btn-default" data-dismiss="modal">No</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="statusModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Activate/Deactivate Grade</h4>
</div>
<div class="modal-body">
<p>Are you sure want to change the status ?</p>
</div>
<div class="modal-footer">
<button type="button" id="ConfirmstatusBtn" class="btn btn-primary">Yes</button>
<button type="button" class="btn btn-default" data-dismiss="modal">No</button>
</div>
</div>
</div>
</div>
<div class="wrap">
<div class="alert alert-info" role="alert">
<h3> Grade Management </h3>
<a class="add-new-h2" onclick="openGradeModal(<?php echo $item['id']; ?>)">Add New</a>
</div>
</div>
<div class="wrap">
<!-- Edit Modal start-->
<div id="editCapacityModal" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Add/Edit Group <?php echo $_POST['id']; ?></h4>
</div>
<div id="Saveress" class="Saveress below-h2" tabindex="-1"></div>
<form id="creategrade" >
<input type="hidden" name="action" value="save_grade">
<input type="hidden" name="id" value="<?php echo $data->id; ?>">
<div class="modal-body" id="appendCapacityDiv">
<!-- Append Here -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-info" data-dismiss="modal" style="padding: 4px;">Close</button>
<input type="button" name="submitm" value="Save Changes " id="" onclick="SaveGrade()" class="button button-primary"/>
</div>
</form>
</div>
</div>
</div>
<!-- Edit Modal End-->
<div id="icon-users" class="icon32"></div>
<h2>Grade Listing</h2>
<?php
delete_grade();
change_status();
?>
<?php $importedListTable->display(); ?>
</div>
<?php
}
add_action( 'wp_ajax_nopriv_render_grade_modal', 'render_grade_modal' );
add_action( 'wp_ajax_render_grade_modal', 'render_grade_modal' );
function render_grade_modal(){
global $wpdb;
$id = '';
$data = '';
if(isset($_POST['id'])){
$id = $_POST['id'];
$data = $wpdb->get_row("select * from " . DB_GRADE_SESSIONS . " where ID ='$id'");
$upper_grade=$data->upper_grade;
if($upper_grade!='' || $upper_grade!=null)
$statusArr = array("status" => TRUE,"type" =>1 ,"data"=>$upper_grade);
else
$statusArr = array("status" => TRUE,"type" =>2 ,"data"=>$upper_grade);
set_scheduled_values('','second');
}
?>
<input type="hidden" name="grade_id" id="grade_id" value="<?php echo $_POST['id']; ?>">
<div class="row " style="margin-left: 100px;">
<div class="col-md-12" id="grade_level">
<div class="form-group">
<label for="">Choose Level</label>
<select id="level" name="level" class="form-control loc_sel" onchange="get_grade()" required style="max-width: 32rem;">
<option value=""> -- Choose Level -- </option>
<option value="lower"> School Level</option>
<option value="higher"> Higher Level</option>
</select>
</div>
</div>
<div class="row lower" id="lower" style="display:none;">
<div class="col-md-12">
<div class="form-group">
<label for="">Lower Grade</label>
<input type="number" name="lower_grade" min="0" id="lower_grade" autocomplete="off" placeholder="Lower Grade" value="<?php echo $data->lower_grade; ?>" onchange="appendValue()" class="biodata form-control common2" style="width: 319px;" />
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label for="">Upper Grade</label>
<input type="number" name="upper_grade" min="0" id="upper_grade" autocomplete="off" placeholder="Upper Grade" value="<?php echo $data->upper_grade; ?>" class="biodata form-control common2" style="width: 319px;" />
</div>
</div>
</div>
<div class="row higher" id="higher" style="display:none;">
<div class="col-md-12">
<div class="form-group">
<label for="">Grade</label>
<input type="text" name="lower_grade" id="higher_grade" autocomplete="off" placeholder="Grade" value="<?php echo $data->lower_grade; ?>" class="biodata form-control common2" style="width: 319px;" />
</div>
</div>
</div>
<?php $renderedHtml = ob_get_clean();
if($upper_grade!='' || $upper_grade!=null)
echo json_encode(['status' => TRUE,"type"=>1, 'renderedHtml' => $renderedHtml]);
else
echo json_encode(['status' => TRUE,"type"=>2, 'renderedHtml' => $renderedHtml]);
die();
}
add_action( 'wp_ajax_nopriv_save_grade', 'save_grade' );
add_action( 'wp_ajax_save_grade', 'save_grade' );
function save_grade() {
global $wpdb;
if(isset($_POST['grade_id']) && $_POST['grade_id']!=''){
$lower=$_POST['lower_grade'];
$upper=$_POST['upper_grade'];
$query = "SELECT * FROM " . DB_GRADE_SESSIONS . " WHERE id='" . $_POST['grade_id'] . "'";
$data = $wpdb->get_row($query, ARRAY_A);
$lowerdata=$data['lower_grade'];
$upperdata=$data['upper_grade'];
if($_POST['upper_grade']!=''){
if($_POST['lower_grade']==$_POST['upper_grade'])
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: Both values in the grade range are the same.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
else if($_POST['upper_grade'] < $_POST['lower_grade'])
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: The upper grade is less than the lower grade in the grade range");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
if($lower==$lowerdata && $upper==$upperdata)
{
$statusArr = array("status" => TRUE,"type" =>1 ,"message" => "New Grade has been updated successfully.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
else if($lower==$lowerdata && $upper!=$upperdata)
{
$query = $wpdb->prepare("SELECT * FROM ". DB_GRADE_SESSIONS." WHERE (%d BETWEEN lower_grade AND upper_grade or %d BETWEEN lower_grade AND upper_grade) AND id != %d",$_POST['lower_grade'],$_POST['upper_grade'],$_POST['grade_id']);
$results = $wpdb->get_results($query);
// echo $wpdb->last_query;die();
if($results)
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: This grade range is already in the list.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
else
{
$args = array(
"lower_grade" =>$_POST['lower_grade'],
"upper_grade" =>$_POST['upper_grade'],
);
$where=array("id" => $_POST['grade_id']);
$sql = $wpdb->update(DB_GRADE_SESSIONS, $args, $where);
$statusArr = array("status" => TRUE,"type" => 0, "message" => "Grade has been updated successfully.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
}
else if($lower!=$lowerdata && $upper==$upperdata)
{
$query = $wpdb->prepare("SELECT * FROM ". DB_GRADE_SESSIONS." WHERE %d BETWEEN lower_grade AND upper_grade AND id != %d",$_POST['lower_grade'],$_POST['grade_id']);
$results = $wpdb->get_results($query);
if($results)
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: This grade range is already in the list.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
else
{
$args = array(
"lower_grade" =>$_POST['lower_grade'],
"upper_grade" =>$_POST['upper_grade'],
);
$where=array("id" => $_POST['grade_id']);
$sql = $wpdb->update(DB_GRADE_SESSIONS, $args, $where);
$statusArr = array("status" => TRUE,"type" => 0, "message" => "Grade has been updated successfully.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
}
else if($lower!=$lowerdata && $upper!=$upperdata)
{
$query = $wpdb->prepare("SELECT * FROM ". DB_GRADE_SESSIONS." WHERE (%d BETWEEN lower_grade AND upper_grade or %d BETWEEN lower_grade AND upper_grade) AND id != %d",$_POST['lower_grade'],$_POST['upper_grade'],$_POST['grade_id']);
$results = $wpdb->get_results($query);
//echo $wpdb->last_query;
if($results)
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: This grade range is already in the list.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
else
{
$args = array(
"lower_grade" =>$_POST['lower_grade'],
"upper_grade" =>$_POST['upper_grade'],
);
$where=array("id" => $_POST['grade_id']);
$sql = $wpdb->update(DB_GRADE_SESSIONS, $args, $where);
$statusArr = array("status" => TRUE,"type" => 0, "message" => "Grade has been updated successfully.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
}
else
{
$query = $wpdb->prepare("SELECT * FROM ". DB_GRADE_SESSIONS." WHERE (%d BETWEEN lower_grade AND upper_grade OR %d BETWEEN lower_grade AND upper_grade)", $_POST['lower_grade'], $_POST['upper_grade']);
$results = $wpdb->get_results($query);
if($results)
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: This grade range is already in the list.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
}
}
else
{
if($lower==$lowerdata)
{
$statusArr = array("status" => TRUE,"type" =>1 ,"message" => "New Grade has been updated successfully.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
else
{
$lower_grade = $wpdb->_real_escape($_POST['lower_grade']); // Assuming _real_escape method is available for escaping
$grade_id = intval($_POST['grade_id']);
if (is_numeric($lower_grade))
{
$query = "SELECT * FROM " . DB_GRADE_SESSIONS . " WHERE ($lower_grade BETWEEN lower_grade AND upper_grade or lower_grade=$lower_grade or upper_grade=$lower_grade) AND id != $grade_id";
}
else
{
$query = "SELECT * FROM " . DB_GRADE_SESSIONS . " WHERE ('$lower_grade' BETWEEN lower_grade AND upper_grade or lower_grade='$lower_grade' or upper_grade='$lower_grade') AND id != $grade_id";
}
//$query = $wpdb->prepare("SELECT * FROM ". DB_GRADE_SESSIONS." WHERE "'.$_POST['lower_grade'].'" BETWEEN lower_grade AND upper_grade AND id != ".$_POST['grade_id']."");
$results = $wpdb->get_results($query);
//echo $wpdb->last_query;die();
if($results)
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: This grade range is already in the list.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
else
{
$args = array(
"lower_grade" =>$_POST['lower_grade'],
);
$where=array("id" => $_POST['grade_id']);
$sql = $wpdb->update(DB_GRADE_SESSIONS, $args, $where);
$statusArr = array("status" => TRUE,"type" => 0, "message" => "Grade has been updated successfully.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
}
}
}
else {
if($_POST['level']==='lower')
{
if($_POST['lower_grade']==$_POST['upper_grade'])
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: Both values in the grade range are the same.");
//set_scheduled_values('','second');
die( json_encode($statusArr));
}else if($_POST['upper_grade'] < $_POST['lower_grade'])
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: The upper value is less than the lower value in the grade range");
//set_scheduled_values('','second');
die( json_encode($statusArr));
}
}
else
{
}
if($_POST['upper_grade']!='')
{
$query = $wpdb->prepare("SELECT * FROM ". DB_GRADE_SESSIONS." WHERE (%d BETWEEN lower_grade AND upper_grade OR %d BETWEEN lower_grade AND upper_grade)", $_POST['lower_grade'], $_POST['upper_grade']);
}
else
{
$lower_grade = $wpdb->_real_escape($_POST['lower_grade']);
if (ctype_digit($lower_grade) || preg_match('/\d/', $lower_grade))
{
$query = $wpdb->prepare("SELECT * FROM ". DB_GRADE_SESSIONS." WHERE (lower_grade=%d or upper_grade=%d or %d BETWEEN lower_grade AND upper_grade)",$lower_grade,$lower_grade,$lower_grade);
}
else
{
$query = $wpdb->prepare("SELECT * FROM ". DB_GRADE_SESSIONS." WHERE (lower_grade='%s' or upper_grade='%s' or '%s' BETWEEN lower_grade AND upper_grade)",$_POST['lower_grade'],$_POST['lower_grade'],$_POST['lower_grade']);
}
}
$results = $wpdb->get_results($query);
//echo $wpdb->last_query;
if($results)
{
$statusArr = array("status" => FALSE,"type" =>0 ,"message" => "Warning: This grade range is already in the list.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
else
{
$grade_ranges = array();
$args = array(
"lower_grade" =>$_POST['lower_grade'],
"upper_grade" =>$_POST['upper_grade'],
"status" =>1
);
$sql = $wpdb->insert(DB_GRADE_SESSIONS, $args);
$lastid = $wpdb->insert_id;
$statusArr = array("status" => TRUE,"type" => 0, "message" => "New Grade has been created successfully.");
set_scheduled_values('','second');
die( json_encode($statusArr));
}
}
}
?>