<?php
 include('plc/includes/connection.php');

?>
<html>
 <head>


    <link rel="stylesheet" type="text/css" href="assets/css/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="assets/css/select2.min.css">
    <link rel="stylesheet" type="text/css" href="assets/css/dataTables.bootstrap4.min.css">
    <link rel="stylesheet" type="text/css" href="assets/css/bootstrap-datetimepicker.min.css">
    <link rel="stylesheet" type="text/css" href="assets/css/style1.css">
	
     <!-- Custom CSS -->
    <link href="css/sb-admin-2.css" rel="stylesheet">
    <link href="css/custom.css" rel="stylesheet">
    <link href="js/plugins/fullcalender/fullcalendar.css" rel="stylesheet">

     <!-- Datepicker CSS -->
     <link href="css/datepicker.css" rel="stylesheet">
	 

<style>
.card-title {
    color: red;
    font-size: 25px;
    margin-bottom: 20px;
}
.card-box {
    background-color: #fff;
    border-radius: 4px;
    margin-bottom: 30px;
    padding: 0px;
    position: relative;
    box-shadow: 0 1px 2px 0 rgb(0 0 0 / 10%);
}

#myTable tr:nth-child(even) td{
  background-color: #f2f2f2;
}
.doc-prof{
	background-color: green;
}
.nav-item{
	background-color: #07f5aa;
	 border-radius: 10px;
	
}
.show_amt{
	text-align: center;
	}
.page-header{

	text-align: center;
	background-color: #2780e3;
	width: 100%;
	margin-left: 0%;
	}
  .page-title {
    color: #f7f6f5;
    font-size: 50px;
    font-weight: normal;
    margin-bottom: 10px;
}
	.page {
    color: #2780e3;
    font-size: 50px;
    font-weight: normal;
    margin-bottom: 10px;
}



/*
@media screen and (min-device-width: 600px) {
  td.hhh, th.hhh {display:none; }
  
  
  }
  	.page-header{

	text-align: center;
	background-color: green;
	width: 100%;
	margin-left: 0%;
	}
  

	

  
    @media screen and (max-width: 600px) {
 tbody.ggg, thead.ggg {
    font-size:2.5vw;
  }
}

@media screen and (max-width: 500px) {
  td.kkk, th.kkk {display:none; }
  tbody.ggg, thead.ggg {
    font-size:2.5vw;
  }
	}
	Max width before this PARTICULAR table gets nasty. This query will take effect for any screen smaller than 760px and also iPads specifically.
	*/
	

	
	@media
	  only screen 
    and (max-width: 400px), (min-device-width: 600px) 
    and (max-device-width: 500px)  {

		/* Force table to not be like tables anymore */
		table, thead, tbody, th, td, tr {
			display: block;
		}

		/* Hide table headers (but not display: none;, for accessibility) */
		thead tr {
			position: absolute;
			top: -9999px;
			left: -9999px;
		}
.content {
    padding: 0 5px;
}
    tr {
      margin: 0 0 1rem 0;
	  
    }
      
    tr:nth-child(odd) {
      background: #ccc;
    }
    
		td {
			/* Behave  like a "row" */
			border: none;
			border-bottom: 1px solid #eee;
			position: relative;
			padding-left: 50%;
			font-size:2.7vw;
			
		}

		td:before {
			/* Now like a table header */
			position: relative;
			/* Top/left values mimic padding */
			top: 0;
			left: 6px;
			width: 45%;
			padding-right: 20px;
			white-space: nowrap;
			font-size:3vw;
			
		}


		/*
		Label the data
    You could also use a data-* attribute and content for this. That way "bloats" the HTML, this way means you need to keep HTML and CSS in sync. Lea Verou has a clever way to handle with text-shadow.
		*/
		td:nth-of-type(1):before { content: "PaymentDate : ";}
		td:nth-of-type(2):before { content: "ProjectName :"; }
		td:nth-of-type(3):before { content: "Amount :"; }
		
		td:nth-of-type(5):before { content: "Remarks :"; }
		td:nth-of-type(6):before { content: "Tran_Id :"; }
		td:nth-of-type(7):before { content: "Operation :"; }
	}

</style>

</head>
<body>


<div id="content">
<div class="table-responsive-md">
<div  id="mob" style="margin-top: 40px">
    

Isp SMS Service

<?php 
$json_smsdata = [];

// প্রথমে আপনার সুবিধে মত করে loop এ ডেটাবেজ হতে ডেটা নিন অথবা অ্যাপ্লিকেশনের ইনপুট থেকে ডেটা নিন । ডেটাটি এরপর loop ব্যবহার করে ফরম্যাট করুন: এখানে while loop দেখানো হয়েছে আপনারা foreach loop ব্যবহার করতে পারেন । 

$dblink = mysqli_connect("localhost", "powerlin_demo", "kaisar@91#", "powerlin_demo");
/* If connection fails throw an error */
if (mysqli_connect_errno()) {
    echo "Could  not connect to database: Error: ".mysqli_connect_error();
    exit();
}

//চাইলে LIMIT দিয়ে  ৫০০ এসএমএস একসাথে ডেটাবেজ থেকে যাবে এমন লিমিট করে নিতে পারেন ।
$sqlquery = "SELECT * FROM `ispcustomer` WHERE PaymentDate= DATE_ADD(CURRENT_DATE(), INTERVAL 5 DAY) AND Status = 1 ";
if ($result = mysqli_query($dblink, $sqlquery)) {
    /* fetch associative array */
    while ($row = mysqli_fetch_assoc($result)) {
       $IspId = $row["IspId"];
	   $Name = $row["Name"];
       $PhoneNo = $row["PhoneNo"];
       $Amount = $row["Amount"];
    $PaymentDate = $row["PaymentDate"];
// আমরা উপরে loop করে ডেটাবেজ থেকে name এবং number কলামের ডেটা নিলাম, এখন dynamic ম্যাসেজ লিখুন rawurlencode() funtion must use করতে হবে
$message = rawurlencode("Dear Customer,$Name,
Please pay your internet bill by $PaymentDate
Payment Bkash Number
01670400466 ,
Ref Id $IspId ,
Regards
City Net

");

$json_smsdata[]= ['to'=>$PhoneNo,'message'=>$message];
	  }
	  
}

$smsdata = json_encode($json_smsdata);

// $smsdata হলো আমাদের কাংখিত format করা ডেটা যা এখন সেন্ড করা হবে । 

			
			//এবার এসএমএস প্রেরন করুন নিচে শুধু টোকেন বদল করবেন
$token = "1058216093817064365784336ec60012657a64f8f2085e1433556";
$smsdata = $smsdata;

$url = "https://api.greenweb.com.bd/api.php";


$data= array(
'smsdata'=>"$smsdata",
'token'=>"$token"
); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$smsresult = curl_exec($ch);

//Result
echo $smsresult;

//Error Display
echo curl_error($ch);
$sqlquery = "UPDATE ispcustomer SET PaymentDate = DATE_ADD(PaymentDate, INTERVAL 1 month ) WHERE PaymentDate= DATE_ADD(CURRENT_DATE(), INTERVAL 5 DAY) AND Status = 1 ";
$qurey_run = mysqli_query($dblink, $sqlquery);
?>

</div></div></div>
</body>
</html>


