HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
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">&times;</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">&times;</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">&times;</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));

		}
	}
}
?>