/** Patient Blood Pressure Tracker **/
add_shortcode( 'bp-tracker', 'bp_tracker' );
function bp_tracker( $atts ) {
ob_start();
$custompatient = '';
if( false !== get_query_var( 'custompatient', false ) ){
$custompatient = get_query_var( 'custompatient' );
}
if($custompatient!=''){
global $wpdb;
$post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type='patients'", $custompatient ));
} ?>
<div class="bp-tracker-form">
<?php echo do_shortcode('[gravityforms id="2" field_values="patient_id='.$post_id.'" ajax="false"]'); ?>
</div>
<?php
$args = array(
'p' => $post_id, // ID of a page, post, or custom type
'post_type' => 'patients'
);
$query = new WP_Query($args);
if ( $query->have_posts() ) { ?>
<?php while ( $query->have_posts() ) : $query->the_post(); global $post; ?>
<?php if( have_rows('bp_ratings') ):
$count = 1;
//this is for the graph
$dateGraph = array();
$bpGraphHigh = array();
$bpGraphLow = array();
$counttotal = count(get_field('bp_ratings'));
?>
<div class="patient-bp-tracker">
<table>
<tr><th>Date</th><th>Time</th><th>Blood Pressure</th><th>Delete Data</th></tr>
<?php while( have_rows('bp_ratings') ): the_row();
// vars
$date = get_sub_field('date');
array_push($dateGraph,$date);
$time = get_sub_field('time');
$blood_pressure = get_sub_field('blood_pressure');
$blood_pressure_with_unit = $blood_pressure.' mmHg';
$blood_pressure_high_low = preg_split("/\//", $blood_pressure);
array_push($bpGraphHigh,$blood_pressure_high_low[0]);
array_push($bpGraphLow,$blood_pressure_high_low[1]);
$date_now = date("Y-m-d");
$date2 = $date;
//if($date_now>$date2){
$values_pressure[] = array(
'date' => date("Y,m,d", strtotime($date. ' - 1 month')),
'high' => $blood_pressure_high_low[0],
'low' => $blood_pressure_high_low[1],
);
//echo $count.'-'. date("Y,m,d", strtotime($date. ' - 1 month')).'<br>';
//}
?>
<tr><td><?php echo $date; ?></td><td><?php echo $time; ?></td><td><?php echo $blood_pressure_with_unit; ?></td><td><a class="delete" href="<?php echo admin_url('admin-ajax.php'); ?>?action=delete_data&row=<?php echo $count; ?>&patient_id=<?php echo $post_id; ?>">Delete</a></td></tr>
<?php $count++; endwhile; ?>
</table>
</div>
<div id="update-nav">
<div id="range-selector">
<input type="button" id="1m" class="period ui-button" value="1m" />
<input type="button" id="3m" class="period ui-button" value="3m"/>
<input type="button" id="6m" class="period ui-button" value="6m"/>
<input type="button" id="1y" class="period ui-button" value="1y"/>
<input type="button" id="all" class="period ui-button" value="All"/>
</div>
</div>
<br/>
<div id="chartContainer" style="height: 400px; width: 100%;"></div>
<!--Chart JS-->
<div class="box_msg">
<span>Systolic</span> <span>Diastolic</span>
</div>
<!--Chart JS-->
<?php endif; ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<script>
var dps = [];
var chart = new CanvasJS.Chart("chartContainer",
{
animationEnabled: true,
legend:{
cursor: "pointer",
fontSize: 16,
itemclick: toggleDataSeries
},
toolTip:{
shared: true
},
data: [
{
name: "Diastolic",
type: "spline",
showInLegend: true,
dataPoints: [
<?php
foreach ($values_pressure as $value_pressure) {?>
{ x: new Date(<?php echo $value_pressure['date'];?>), y: <?php echo $value_pressure['low'];?> },
<?php } ?>
],
},{
name: "Systolic",
type: "spline",
showInLegend: true,
dataPoints: [
<?php
foreach ($values_pressure as $value_pressure) {?>
{ x: new Date(<?php echo $value_pressure['date'];?>), y: <?php echo $value_pressure['high'];?> },
<?php } ?>
]
},
]
});
chart.render();
var axisXMin = chart.axisX[0].get("minimum");
var axisXMax = chart.axisX[0].get("maximum");
function randomData(startX, numberOfY){
var xValue, yValue = 0;
for (var i = 0; i < 400; i += 1) {
xValue = new Date(startX.getTime() + (i 24 60 60 1000));
yValue += (Math.random() * 10 - 5) << 0;
dps.push({
x: xValue,
y: yValue
});
}
return dps;
}
function toggleDataSeries(e){
if (typeof(e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
e.dataSeries.visible = false;
}
else{
e.dataSeries.visible = true;
}
chart.render();
}
jQuery( function($) {
$("#fromDate").val(CanvasJS.formatDate(axisXMin, "DD MMM YYYY"));
$("#toDate").val(CanvasJS.formatDate(axisXMax, "DD MMM YYYY"));
$("#fromDate").datepicker({dateFormat: "d M yy"});
$("#toDate").datepicker({dateFormat: "d M yy"});
});
jQuery("#date-selector").change( function($) {
var minValue = $( "#fromDate" ).val();
var maxValue = $ ( "#toDate" ).val();
if(new Date(minValue).getTime() < new Date(maxValue).getTime()){
chart.axisX[0].set("minimum", new Date(minValue));
chart.axisX[0].set("maximum", new Date(maxValue));
}
});
jQuery(".period").click( function() {
var period = this.id;
var minValue;
minValue = new Date(axisXMax);
switch(period){
case "1m":
minValue.setMonth(minValue.getMonth() - 1);
break;
case "3m":
minValue.setMonth(minValue.getMonth() - 3);
break;
case "6m":
minValue.setMonth(minValue.getMonth() - 6);
break;
case "1y":
minValue.setYear(minValue.getFullYear() - 1);
break;
default:
minValue = axisXMin;
}
chart.axisX[0].set("minimum", new Date(minValue));
chart.axisX[0].set("maximum", new Date(axisXMax));
});
</script>
<script>
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [<?php echo '"'.implode('","', $dateGraph).'"' ?>],
datasets: [{
label: 'High',
data: [<?php echo '"'.implode('","', $bpGraphHigh).'"' ?>], // Specify the data values array
fill: false,
borderColor: '#EF333E', // Add custom color border (Line)
backgroundColor: '#EF333E', // Add custom color background (Points and Fill)
borderWidth: 5 // Specify bar border width
},
{
label: 'Low',
data: [<?php echo '"'.implode('","', $bpGraphLow).'"' ?>], // Specify the data values array
fill: false,
borderColor: '#2196f3', // Add custom color border (Line)
backgroundColor: '#2196f3', // Add custom color background (Points and Fill)
borderWidth: 5 // Specify bar border width
}]
},
options: {
spanGaps: true,
responsive: true, // Instruct chart js to respond nicely.
maintainAspectRatio: true, // Add to prevent default behaviour of full-width/height
plugins: {
legend: {
position: 'bottom',
align: 'start'
}
},
scales: {
x: {
max: <?php if($counttotal>=29){?> 29 <?php }else{ echo $counttotal;}?>
}
}
}
});
</script>
<style>
.patient-bp-graph {
margin-top: 60px;
}
</style>
<?php $pbp = ob_get_clean();
return $pbp;
}
}
Jagdish Sarma Asked question September 17, 2021