A Laravel 12 application for managing academic software requests, licences, and sign-off processes across course offerings and academic sessions. Built with Livewire & Flux for a reactive UI, integrated with LDAP for authentication, and supporting bulk import/export via Excel.
- Features
- Requirements
- Git Clone
- Installation & Setup
- Running the App
- Running Tests
- Environment Variables
- Architecture & Code Organization
- Key Components
- Deployment
- Contributing
- License
- LDAP-backed authentication (via
ohffs/simple-laravel-ldap) - Role-based access: staff vs. admin
- Per-course software catalogue with licences, versions, config, notes
- Bulk import of software requests from
.xlsxfiles (ImportController→ImportDatajob) - Export full dataset to Excel (
ExportAllData) - Course sign-off workflow with email notifications (
User::getSignoffLink&signed-offroute) - Multi-session support: copy data forward to new academic sessions (
CopyForwardjob &AcademicSession::copyForwardTo) - Admin settings: manage sessions & schools (Livewire
Settingscomponent) - Reactive UI with Livewire + Flux (
app/Livewire/*.php) - Queue processing via Horizon
- Error tracking with Sentry
- PHP 8.2+
- Composer
- Node.js & npm
- MySQL (or configured
DB_CONNECTION) - Redis (for cache, sessions, queues)
- Lando (development)
git clone [email protected]:UoGSoE/lab-software.git
cd lab-software- Copy environment file
cp .env.example .env
- Start Lando & services
lando start lando composer install npm install
- Generate database tables & test data
lando artisan mfs
- (Optional) Publish assets & run Vite
lando artisan vendor:publish --tag=laravel-assets --force npm run dev
After lando start, your local URL will be displayed (e.g. https://lab-software.lndo.site). Use that to:
- Log in via
/login(LDAP credentials) - View home dashboard (
HomePageLivewire component) - Import software requests at
/importexport - Browse users at
/users - Admin settings at
/settings
lando testTests are written with Pest (pestphp/pest-plugin-laravel, Livewire & Faker plugins).
Key entries in .env:
- APP_URL, APP_KEY, APP_DEBUG
- DB_, REDIS_, QUEUE_CONNECTION=redis
- LDAP_SERVER, LDAP_OU, LDAP_AUTHENTICATION
- MAIL_HOST & port for email (default: MailHog)
See .env.example for full list.
- app/Http/Controllers
ImportController.php– handles upload & dispatch ofImportDatajob
- app/Jobs
ImportData.php– validates rows, creates Courses, Software, Users & emails resultsCopyForward.php– enqueuesAcademicSession::copyForwardTo
- app/Livewire
HomePage.php,CollegeWide.php,ImportExport.php,UserList.php,Settings.php,Help.php- Each maps to a Blade view under
resources/views/livewire
- app/Models
AcademicSession,Course,Software,User(all scoped by session)- Domain logic: session copying, sign-off, scoped queries
- app/Exporters
ExportAllData.php– generates.xlsxvia OpenSpout
- resources/views
- Livewire templates & components
- Email views under
views/emails
- routes/web.php
- Public login/logout & signed-off link
- Authenticated routes under
SetAcademicSessionMiddleware
- LDAP Login
App\Livewire\Auth\LdapLogin- Middleware:
guest→auth
- Bulk Import
- Form on
/importexport→ POST toImportController@store - Job
ImportDatareads viaOhffs\SimpleSpout\ExcelSheet
- Form on
- Course Catalogue
Course&Softwaremodels, relationcourse->software- Home filters: name, school prefix, course code (Livewire filtering)
- Sign-Off Workflow
User::getSignoffLink()generates signed route →/signed-off/{user}signed-offroute callsUser::signOffLastYearsSoftware()
- Session Management
- Admin creates new session in
Settings→ enqueuesCopyForward→ duplicates data
- Admin creates new session in
- Export
ExportAllData::export()streams all courses & software to Excel
- Adjust
.envfor production (database, queue driver, Sentry DSN, mail) - Configure queue workers & Horizon
- Build assets via
npm run build - Set web‐server root to
public/ - Run migrations & seeders
- Fork & branch
- Follow PSR-12 & Laravel conventions
- Write tests (Pest) for new features
- Submit PR against
developbranch
MIT © University of Glasgow School of Engineering