FullCalendar (display appointments, saved from erp)

Costas

Administrator
Staff member
reference
http://fullcalendar.io/

Is a jQuery plugin that provides a full-sized, drag & drop event calendar like the one below. It uses AJAX to fetch events on-the-fly and is easily configured to use your own feed format. It is visually customizable with a rich API.

copy
  • fullcalendar.min.css
  • fullcalendar.print.css
  • moment.min.js
  • jquery.min.js
  • fullcalendar.min.js

JavaScript:
//main.php
<?php
session_start();

require_once ('config.php');
$users_rows=null;

if(!isset($_SESSION["u"])){
	header("Location: login.php");
	exit ;
}
else
if($_SESSION['level'] != -89){

	$db       = connect();
	$users_rows = getSet($db, "SELECT * FROM users order by user_level_id", null);
	
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<link href='fullcalendar.min.css' rel='stylesheet' />
<link href='fullcalendar.print.css' rel='stylesheet' media='print' />
<script src='lib/moment.min.js']</script>
<script src='lib/jquery.min.js']</script>
<script src='fullcalendar.min.js']</script>
<script>

	$(document).ready(function() {
	
	///////////////////////////////////////////////////////////// FILL users
	var jArray_users =   <?php echo json_encode($users_rows); ?>;

	var combo_users_rows = "<option value='0']</option>";
	for (var i = 0; i < jArray_users.length; i++)
	{
		combo_users_rows += "<option value='" + jArray_users[i]["user_id"] + "']" + jArray_users[i]["fullname"] + "</option>";
	}

	$("[name=user_id]").html(combo_users_rows);
	$("[name=user_id]").change(); //select row 0 - no conflict on POST validation @ PHP
	///////////////////////////////////////////////////////////// FILL users

//when combo change
		$('#user_id').change(function () {
			//http://stackoverflow.com/a/10229981
            var selectedSite = $(this).val();
            var events = {
				url: 'x.php',
				data: {
					user_id: $('#user_id').val()
				},
				error: function() {
					alert("error");
				}
            }
            $('#calendar').fullCalendar('removeEventSource', events);
            $('#calendar').fullCalendar('addEventSource', events);
            
		});

//instantiate calendar
		$('#calendar').fullCalendar({
			header: {
				left: 'prev,next today',
				center: 'title',
				right: 'month,agendaWeek,agendaDay'
			},
			defaultDate: '2015-01-01',
			editable: false,
			eventLimit: true, // allow "more" link when too many events
			events: {
				url: 'x.php',
				data: {
					user_id: $_SESSION['id']
				},
				error: function() {
					alert("error");
				}
			},
			loading: function(bool) {
				$('#loading').toggle(bool);
			},
		    eventClick: function(calEvent, jsEvent, view) {
				console.log(calEvent.id);
		      //  $(this).css('border-color', 'red');
		    }
		});
		
	});

</script>
<style>

	body {
		margin: 0;
		padding: 0;
		font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
		font-size: 14px;
	}



	#loading {
		display: none;
		position: absolute;
		top: 10px;
		right: 10px;
	}

	#calendar {
		max-width: 900px;
		margin: 40px auto;
		padding: 0 10px;
	}

</style>
</head>
<body>

	<div id='loading']loading...</div>

	<select id="user_id" name="user_id"></select>

	<div id='calendar']</div>

</body>
</html>




//x.php
JavaScript:
//x.php
<?php

require_once ('config.php');

$db = connect();

//create an array
$record = array();

//query for records
$rows = getSet($db,"select client_appointment_id as id,client_name as title,client_appointment_datetime as start from client_appointments 
left join clients on clients.client_id = client_appointments.client_appointment_client_id 
where client_appointment_owner_id=".$_GET["user_id"]." and client_appointment_datetime between '".$_GET["start"]."' and '".$_GET["end"]."'", null);

//for each record
foreach($rows as $row) {
	$datetime = new DateTime($row['start']);

	//convert mysql datetime to ISO8601 format FullCalendar compatible
	$record[] = array("id" => $row['id'],"title" => $row['title'],"start" => $datetime->format(DateTime::ISO8601));
	//add it to array
}

echo json_encode($record);
?>

PHP produces something like (response to line main.html 51+75) :
snap391.png





colorize the bars, when return json contains 'color' on each event
snap394.png


use qtip by FullCalendar http://stackoverflow.com/a/21342695

mouseevents http://stackoverflow.com/a/12466543



//read result
JavaScript:
	events: {
		url: 'x.php',
		data: {
			user_id: <?=$_SESSION['id']?>
		},
		success :  function(e) {
			console.log(e); //returned json
		},
		error: function() {
			alert("error");
		}
	},



Change the cursor pointer when mouseover
http://stackoverflow.com/a/25154123

JavaScript:
.fc-content {
    cursor: pointer;
}
 
Top