Data and Screen Reference
A compact reference of screens, data records, routes, and supporting files found in the module package.
Screens and Views
Controllers
Applicants_api- index, viewJob_interviewsJob_offersJob_portal- index, list_data, quick_view, view, list_random_data, companies, company, modal_form, saved, saved_jobs_data, saved_jobs_summary, upload_file, validate_file, check_application_email, submit_job_application, report_job_modal_formJob_positionsRecruitmentRecruitments_api- index, view, applicants
View files
- job_positions/index.php
- job_positions/modal_form.php
- recruitment/applicant_header.php
- recruitment/applicant_view.php
- recruitment/categories.php
- recruitment/comment_row.php
- recruitment/edit_comment_modal_form.php
- recruitment/entries.php
- recruitment/file_view.php
- recruitment/hire_modal_form.php
- recruitment/index.php
- recruitment/interviews/interviews_panel.php
- recruitment/interviews/modal_form.php
- recruitment/job_portal/applicant_tips.php
- recruitment/job_portal/companies.php
- recruitment/job_portal/company.php
- recruitment/job_portal/index.php
- recruitment/job_portal/modal_form.php
- recruitment/job_portal/offer.php
- recruitment/job_portal/quick_view.php
- recruitment/job_portal/report_company_modal.php
- recruitment/job_portal/report_job_modal.php
- recruitment/job_portal/saved.php
- recruitment/job_portal/sidebar/companies.php
- recruitment/job_portal/sidebar/saved_jobs.php
- recruitment/job_portal/sidebar/saved_jobs_module.php
- recruitment/job_portal/view.php
- recruitment/kanban.php
- recruitment/kanban_view.php
- recruitment/modal_form.php
- recruitment/modal_form_application_status.php
- recruitment/modal_form_assign_label.php
- recruitment/modal_form_category.php
- recruitment/modal_form_remarks.php
- recruitment/offers/modal_form.php
- recruitment/offers/offers_panel.php
- recruitment/view.php
New Screens (v1.4.0)
SEO & Google for Jobs editor
Opened from the row menu on Job Postings, or directly at hrs/recruitment/seo/{id}. Requires the recruitment_seo permission (admins always have access). Edit the search title and meta description, social share overrides, and advanced settings; review the Google for Jobs eligibility score (90+ Good, 70+ Needs review, below Poor) with its issue checklist, live previews of the search result, share card, and Google for Jobs card, and a read-only panel of the posting facts the markup is built from.
Posting Analytics
Opened from the row menu on Job Postings, or directly at hrs/recruitment/posting_analytics/{id}. Requires the recruitment_analytics permission. Shows KPI tiles, 7/30/90-day presets, the daily Views & Applications trend chart, the Views to Hired funnel, views by source, devices, top referrer sites, fill progress, and all-time counters.
New Job Postings columns
- Views - the posting's all-time view count; the tooltip shows the unique-visitor count.
- SEO - the color-coded Google for Jobs eligibility score; click it to open the SEO editor.
Data Records
Models
- Application_consents_model.php
- Job_applications_model.php
- Job_comments_model.php
- Job_interviews_model.php
- Job_offers_model.php
- Job_positions_model.php
- Recruitment_banner_model.php
- Recruitment_categories_model.php
- Recruitment_model.php
- Recruitment_statuses_model.php
Database tables
- job_hiring
- job_applications
- job_hiring_categories
- recruitment_status
- recruitment_banner
- job_comments
- job_offers
- application_consents
- job_interviews
- job_positions
New Data (v1.4.0)
New tables
job_posting_meta- the per-posting SEO record (search, social, and advanced settings plus the eligibility score).job_analytics_events- the raw view and apply event log; entries are automatically deleted after the retention window.job_analytics_daily- anonymous daily totals per traffic source that power the analytics charts.job_indexing_queue- queued search-engine pings awaiting dispatch, with automatic retries.
New job_hiring columns
- Google-for-Jobs fields:
employment_type,work_arrangement,location_city,location_region,location_country,date_posted,valid_through,salary_currency,salary_unit,direct_apply - Lifecycle stamps:
closed_at,close_reason,auto_close,delisted_at - Analytics counters:
view_count,unique_view_count,apply_start_count,last_viewed_at
Routes and Entry Points
| Route | Target |
|---|---|
hrs/recruitment | recruitment/index |
hrs/recruitment/(.+) | recruitment/$1 |
hrs/job_positions | job_positions/index |
hrs/job_positions/(.+) | job_positions/$1 |
job-portal | job_portal/index |
job-portal/(:any) | job_portal/$1 |
job-portal/(:any)/(:any) | job_portal/$1/$2 |
New Public Endpoints
| Endpoint | Purpose |
|---|---|
/job-portal/sitemap.xml | Live jobs sitemap listing every open, indexable posting across all tenant companies; registered in the main sitemap and robots.txt. |
/job-portal/og-image/{uuid}/{version} | Stable share-image URL for a posting's banner, so social previews keep working when files live on cloud (S3) storage. |
Closed or expired postings stay reachable for people holding the link but answer HTTP 410 with an "applications closed" notice, so search engines drop the page; reopening the posting restores it.
Supporting Files
Migrations
- 20260704173138_add_position_and_salary_band_to_job_hiring.php
- 20260704173529_create_job_offers_table.php
- 20260704183704_create_application_consents_table.php
- 20260704183705_create_job_interviews_table.php
Seeders
- RecruitmentOpenJobsSeeder.php
Tests
- RecruitmentTest.php
- JobSeoAnalyticsTest.php
Helpers
- recruitment_helper.php
Libraries
No module libraries were found.
API configs
- api_routes.php
- api_scope.php
Scheduled Jobs
| Job | Schedule | Purpose |
|---|---|---|
recruitment_retention_purge | Daily at 03:00 | Existing job - removes applicant data that has passed the retention window. |
recruitment_aggregate_job_analytics | Hourly at :20 | New in v1.4.0 - rolls raw view and apply events into the daily totals behind the analytics charts. |
recruitment_expire_job_postings | Daily at 01:15 | New in v1.4.0 - closes open postings whose application deadline has passed (reason "expired"); individual postings can opt out of auto-close. |
recruitment_dispatch_job_indexing | Every 15 minutes | New in v1.4.0 - sends queued search-engine pings (IndexNow and the Google Indexing API) with automatic retries. |
All four jobs run per tenant and skip cleanly until php erpat migrate:modules has been run.
Activity Log Events
| Event | Recorded when |
|---|---|
publish:job_hiring | A job posting is published to the public job portal. |
close:job_hiring | A job posting is closed by a user. |
auto_expire:job_hiring | The nightly sweep closes a posting whose application deadline has passed. |
update:job_seo | A posting's SEO & Google for Jobs settings are saved. |