Files
php_assessment_1/calendar.php
T

271 lines
10 KiB
PHP
Raw Normal View History

2025-02-04 23:06:08 +01:00
<!-- <div id='calendar'></div>
<div id="timeSlots">
<h3>Available Time Slots</h3>
<ul></ul>
</div> -->
<!-- <div id='calendar-container'> -->
<div id='calendar'></div>
<!-- </div> -->
<!-- <script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var timeSlotsList = document.querySelector('#timeSlots ul');
var calendar = new FullCalendar.Calendar(calendarEl, {
// plugins: ['dayGrid'],
slotMinTime: '08:00',
slotMaxTime: '20:00',
initialView: 'dayGridMonth',
header: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,dayGridWeek,dayGridDay'
},
// events: [
// // Your events data will go here
// ],
dateClick: function(info) {
var selectedDate = info.dateStr;
// Generate time slots for the selected date
var timeSlots = generateTimeSlots(selectedDate);
// Display time slots
displayTimeSlots(timeSlots);
}
});
calendar.render();
function generateTimeSlots(date) {
// Replace this with your logic to determine available time slots based on the date
var availableTimeSlots = ['10:00 AM', '11:00 AM', '2:00 PM', '4:00 PM'];
return availableTimeSlots;
}
function displayTimeSlots(timeSlots) {
// Clear existing time slots
timeSlotsList.innerHTML = '';
// Display time slots in the list
timeSlots.forEach(function(timeSlot) {
var listItem = document.createElement('li');
listItem.textContent = timeSlot;
timeSlotsList.appendChild(listItem);
});
}
});
</script> -->
<!-- <script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'dayGridMonth'
});
calendar.render();
});
</script> -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var slots = <?php echo json_encode($data['calendar']); ?>;
console.log(slots)
var calendar = new FullCalendar.Calendar(calendarEl, {
// height: '100%',
// expandRows: true,
// slotMinTime: '08:00',
// slotMaxTime: '20:00',
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
},
initialView: 'dayGridMonth',
// initialDate: '2023-01-12',
navLinks: true, // can click day/week names to navigate views
editable: true,
selectable: true,
nowIndicator: true,
dayMaxEvents: true, // allow "more" link when too many events
events: []
});
function addEvents(startDateString, selectedDays, numberOfDays, response) {
console.log('startDateString:' + startDateString)
var startDate = moment(startDateString, 'YYYY-MM-DD');
console.log('startDate:' + startDate)
var currentDay = startDate.clone();
console.log('currentDay:' + currentDay)
var addedEvents = 0;
console.log('addedEvents:' + addedEvents)
console.log('numberOfDays:' + numberOfDays)
while (addedEvents < numberOfDays) {
console.log('addedEvents:' + addedEvents)
// if (currentDay.isAfter(startDate, 'day')) {
var dayOfWeek = currentDay.format('dddd');
// var test = currentDay.isAfter(startDate, 'day');
// Check if the current day is in the selectedDays array
if (selectedDays.includes(dayOfWeek)) {
console.log('dayOfWeek:' + dayOfWeek)
console.log('isAfter:' + currentDay.isAfter(startDate, 'day'))
// console.log(startDate)
// console.log(currentDay)
// console.log(test)
// console.log("yes")
// calendar.addEvent({
// title: 'Event Title',
// start: currentDay.format('YYYY-MM-DD'),
// allDay: true,
// // You can add more properties to the event as needed
// });
var week_day = dayOfWeek.charAt(0).toLowerCase() + dayOfWeek.slice(1);
var events = response[week_day];
console.log(events)
// var targetDay = moment().day(dayOfWeek);
// console.log(targetDay)
events.forEach(function(event) {
// var startDateTime = moment(`${dayOfWeek} ${event.from}`, 'dddd HH:mm');
// var endDateTime = moment(`${dayOfWeek} ${event.to}`, 'dddd HH:mm');
// Adjust startDateTime calculation
// If the target day is today or in the past, get the next occurrence
// console.log(targetDay)
// if (targetDay.isBefore(currentDay, 'day')) {
// targetDay.add(1, 'week');
// // var newTarget = targetDay.clone().add(1, 'week');
// console.log(targetDay)
// // console.log(newTarget)
// }
// var daysToAdd = targetDay.diff(currentDay, 'days');
// console.log(daysToAdd)
// var startDateTime = currentDay.clone().add(daysToAdd, 'days');
var startDateTime = currentDay.clone();
// Use the event time as usual
startDateTime.set({
hour: event.from.split(':')[0],
minute: event.from.split(':')[1]
});
var endDateTime = moment(startDateTime).set({
hour: event.to.split(':')[0],
minute: event.to.split(':')[1]
});
calendar.addEvent({
title: event.point + "points",
start: startDateTime.format(),
end: endDateTime.format(),
// You can add more properties to the event as needed
});
// if (targetDay.isAfter(currentDay, 'day')) {
// console.log('yes')
// targetDay.add(1, 'week');
// }
// targetDay = newTarget
// targetDay.add(1, 'week');
// var newTarget = targetDay.clone().add(1, 'week');
// daysToAdd = newTarget.diff(currentDay, 'days');
// console.log(daysToAdd)
// console.log(newTarget)
});
addedEvents++;
}
// }
currentDay.add(1, 'days'); // Move to the next day
}
}
// function addEvents(response) {
// for (var dayOfWeek in response) {
// if (response.hasOwnProperty(dayOfWeek)) {
// var events = response[dayOfWeek];
// events.forEach(function(event) {
// var startDateTime = moment(`${dayOfWeek} ${event.from}`, 'dddd HH:mm');
// var endDateTime = moment(`${dayOfWeek} ${event.to}`, 'dddd HH:mm');
// calendar.addEvent({
// title: 'Event Title',
// start: startDateTime.format(),
// end: endDateTime.format(),
// // You can add more properties to the event as needed
// });
// });
// }
// }
// }
$.ajax({
url: '/admin/calendar',
method: 'POST',
data: {
calendar: slots
},
success: function(response) {
// console.log(response.slots_available);
response = JSON.parse(response)
console.log(response);
var slot = JSON.parse(response.slot)
var days = parseInt(JSON.parse(response.days))
var keysArray = Object.keys(slot);
console.log(keysArray);
var currentDate = new Date();
// Extract year, month, and day
var year = currentDate.getFullYear();
var month = (currentDate.getMonth() + 1).toString().padStart(2, '0'); // Months are zero-based
var day = currentDate.getDate().toString().padStart(2, '0');
// Form the desired date string
var formattedDate = `${year}-${month}-${day}`;
console.log(keysArray.length)
var capitalizedArray = keysArray.map(function(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
});
console.log(formattedDate + "ajax")
addEvents(formattedDate, capitalizedArray, days, slot);
// alert(JSON.stringify(response));
},
error: function(xhr, status, error) {
console.log(error)
// console.log("error oooo")
}
});
// Example: Start date is '2023-12-12', selected days are ['Monday', 'Thursday'], and number of days is 2
calendar.render();
});
</script>