Skip to main content

Black Friday 2025! Only until December 1st: coupon FRIDAY25 for 40% off Yearly/Lifetime membership!

Read more here

academico-sis/academico

338 stars
4 code files
View academico-sis/academico on GitHub

app/Events/CourseUpdated.php

Open in GitHub
use App\Models\Course;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
 
class CourseUpdated
{
use Dispatchable;
use InteractsWithSockets;
use SerializesModels;
 
public function __construct(public Course $course)
{
}
}

app/Listeners/UpdateCourseEvents.php

Open in GitHub
use App\Events\CourseUpdated;
use App\Models\Event;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
 
class UpdateCourseEvents
{
public function handle(CourseUpdated $event)
{
$course = $event->course;
 
if (($course->events->count() > 0) && ($course->isDirty('start_date') || $course->isDirty('end_date'))) {
Log::info('cleaning the events after course date change');
 
$firstEvent = $course->events()->reorder('start')->first();
$firstEventDate = Carbon::parse($firstEvent->start)->startOfDay();
$lastEvent = $course->events()->reorder('start', 'desc')->first();
$lastEventDate = Carbon::parse($lastEvent->start)->endOfDay();
 
$courseStartDate = Carbon::parse($course->start_date)->startOfDay();
$courseEndDate = Carbon::parse($course->end_date)->startOfDay();
 
Event::where('course_id', $course->id)->where('start', '<', $courseStartDate->startOfDay())->delete();
Event::where('course_id', $course->id)->where('end', '>', $courseEndDate->endOfDay())->delete();
 
while ($courseStartDate < $courseEndDate) {
if (($firstEventDate <= $courseStartDate) && ($courseStartDate <= $lastEventDate)) {
$courseStartDate->addDay();
continue;
}
 
if ($course->times->contains('day', $courseStartDate->format('w'))) {
Event::create([
'course_id' => $course->id,
'teacher_id' => $course->teacher_id,
'room_id' => $course->room_id,
'start' => $courseStartDate->setTimeFromTimeString($course->times->where('day', $courseStartDate->format('w'))->first()->start)->toDateTimeString(),
'end' => $courseStartDate->setTimeFromTimeString($course->times->where('day', $courseStartDate->format('w'))->first()->end)->toDateTimeString(),
'name' => $course->name,
'course_time_id' => $course->times->where('day', $courseStartDate->format('w'))->first()->id,
'exempt_attendance' => $course->exempt_attendance,
]);
}
$courseStartDate->addDay();
}
}
 
Event::where('course_id', $course->id)->update(['room_id' => $course->room_id]);
Event::where('course_id', $course->id)->update(['teacher_id' => $course->teacher_id]);
Event::where('course_id', $course->id)->update(['name' => $course->name]);
}
}

app/Providers/EventServiceProvider.php

Open in GitHub
use App\Events\CourseUpdated;
use App\Listeners\UpdateCourseEvents;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
 
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
//
CourseUpdated::class => [
UpdateCourseEvents::class,
],
//
];
//
}

app/Models/ExternalCourse.php

Open in GitHub
use App\Events\CourseUpdated;
 
class ExternalCourse extends Course
{
//
protected $dispatchesEvents = [
'updated' => CourseUpdated::class,
];
//
}

We'd Love Your Feedback

Tell us what you like or what we can improve

Feel free to share anything you like or dislike about this page or the platform in general.