@extends('layouts.demo10.base')
@php
$projectStatus = strtolower($currentProject->status ?? 'active');
$projectDescription = filled($currentProject->description) ? $currentProject->description : 'N/A';
$createdDate = optional($currentProject->created_at)->format('F, d, Y') ?? 'N/A';
$updatedDate = optional($currentProject->updated_at)->format('F, d, Y') ?? 'N/A';
$schemaDesignUrl = route('tenants.projects.schema_design', ['projectName' => $currentProject->slug]) . '?tenant_id=' . $currentProject->id;
$projectImportUrl = route('tenants.projects.import', ['projectName' => $currentProject->slug]);
$dataSourceType = strtolower($dataSourceConnection->source_type ?? 'odk');
$dataSourceUpdatedDate = optional($dataSourceConnection?->updated_at)->format('F, d, Y') ?? 'N/A';
$dataSourceStatus = strtolower($dataSourceConnection->status ?? 'inactive');
$dataSourceUsesToken = (bool) data_get($dataSourceConnection?->settings, 'use_auth_token', false);
$dataSourceColspan = $dataSourceType === 'csv' ? 6 : 7;
$groupedPiiAttributes = collect($attributes ?? [])->groupBy('table');
$dataSourceConfig = [
'id' => $dataSourceConnection?->id,
'type' => $dataSourceType,
'base_url' => $dataSourceConnection?->base_url,
'project_id' => $dataSourceConnection?->project_id,
'form_id' => $dataSourceConnection?->form_id,
'username' => $dataSourceConnection?->username,
'file_name' => $dataSourceConnection?->file_name,
'file_path' => $dataSourceConnection?->file_path,
'use_auth_token' => $dataSourceUsesToken,
];
$adminFormTabs = [
[
'key' => 'progress',
'label' => 'Progress',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'progress']),
],
[
'key' => 'component1',
'label' => 'Component 1',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'component1']),
],
[
'key' => 'component2',
'label' => 'Component 2',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'component2']),
],
[
'key' => 'component3',
'label' => 'Component 3',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'component3']),
],
[
'key' => 'component4',
'label' => 'Component 4',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'component4']),
],
[
'key' => 'baseline',
'label' => 'Baseline',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'baseline']),
],
[
'key' => 'import',
'label' => 'Import',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'import']),
],
[
'key' => 'group',
'label' => 'Group',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'group']),
],
[
'key' => 'user',
'label' => 'User',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'user']),
],
[
'key' => 'alert',
'label' => 'Alert',
'route' => route('tenants.projects.admin_forms', ['projectName' => $currentProject->slug, 'tab' => 'alert']),
],
];
$activeTab = $activeTab ?? 'general';
$adminFormValidTabs = ['beneficiaries', 'financial', 'import', 'threshold', 'group', 'user', 'alert', 'alert_engine'];
$adminFormDefaultTab = 'import';
$querySettingsTab = request('tab', 'general');
$queryAdminTab = request('adminTab');
$settingsTabKeys = [
'general',
'data-source',
'schema-design',
'tenant-domain',
'tenant-themes',
'Themes-configuration',
'import',
'cron-scheduler',
'pii-management',
'view-data',
'theme',
'admin-forms',
];
$settingsActiveTab = in_array($querySettingsTab, $settingsTabKeys, true) ? $querySettingsTab : 'general';
$adminFormActiveTab = $adminFormDefaultTab;
if ($queryAdminTab && in_array($queryAdminTab, $adminFormValidTabs, true)) {
$settingsActiveTab = 'admin-forms';
$adminFormActiveTab = $queryAdminTab;
} elseif (!in_array($querySettingsTab, $settingsTabKeys, true) && in_array($querySettingsTab, $adminFormValidTabs, true)) {
$settingsActiveTab = 'admin-forms';
$adminFormActiveTab = $querySettingsTab;
} elseif (in_array($activeTab, $adminFormValidTabs, true)) {
$adminFormActiveTab = $activeTab;
}
@endphp
@section('content')
Projects Settings
Project/{{ $currentProject->name }}/Settings
{{--
--}}
{{--
Back
@can('edit.projects')
Save Changes
@else
Save Changes
@endcan
--}}
@can('view.general')General @endcan
@can('view.data_source')Data Source @endcan
@can('view.schema_design')Schema Design @endcan
Tenant Domain
@can('view.tenant_themes')Tenant Themes @endcan
@can('view.themes-configuration')Themes Configuration @endcan
@can('view.import')Import @endcan
@can('view.cron_scheduler')Cron Scheduler @endcan
@can('view.pii_management')PII Management @endcan
@can('view.datasets')View Data @endcan
Theme
Admin Forms
{{-- Header --}}
Project information
{{-- Hidden old structure data for existing JS --}}
{{ $currentProject->name }}
{{ $projectDescription }}
{{ $projectStatus }}
{{ $updatedDate }}
{{-- Body --}}
{{-- Footer --}}
Discard
@can('edit.general')
Save changes
@else
@endcan
@can('delete.general')
@endcan
{{-- Header --}}
ODK Connection Information
{{-- Body --}}
{{-- Server URL --}}
Server URL
{{-- Project ID + Form ID --}}
{{-- Auth + Status --}}
Auth Type
Basic
Token
Status
status ?? '') == 'active' ? 'selected' : '' }}>
Active
status ?? '') == 'inactive' ? 'selected' : '' }}>
Inactive
status ?? '') == 'configured' ? 'selected' : '' }}>
Configured
status ?? '') == 'connected' ? 'selected' : '' }}>
Connected
{{-- Last Updated --}}
Last Updated
{{-- Footer --}}
@php
$latestSchema = $schemaHistories->first();
$schemaFileName = $latestSchema && $latestSchema->schema_file
? basename($latestSchema->schema_file)
: '';
$generatedBy = $latestSchema && $latestSchema->user
? $latestSchema->user->name
: 'Super Admin';
$generatedAt = $latestSchema && $latestSchema->created_at
? $latestSchema->created_at->format('F d, Y')
: '';
@endphp
Schema design information
@php
$domainsData = $tenantDomains->map(function ($td) {
return [
'id' => $td->id,
'domain' => $td->domain,
'domain_type' => $td->domain_type,
'domain_scheme' => $td->domain_scheme,
'project' => $td->project?->name,
'theme_id' => $td->theme_id,
'theme_name' => $td->theme?->name,
'verification_mode' => $td->verification_mode,
'expected_cname_target' => $td->expected_cname_target,
'expected_ip_address' => $td->expected_ip_address,
'expected_targets' => $td->verification_targets ?: array_values(array_filter([
$td->expected_cname_target,
$td->expected_ip_address,
])),
'notes' => $td->notes,
'is_primary' => (bool) $td->is_primary,
'status' => $td->status,
'verified_at' => $td->verified_at?->format('M d, Y'),
'created_by' => $td->createdBy?->name,
];
})->values();
$domainThemeOptions = collect($themes ?? [])->map(fn($theme) => [
'id' => $theme->id,
'name' => $theme->name,
])->values();
$defaultDomainTargets = array_values(array_unique(array_filter((array) config('tenant_domains.default_expected_targets', []))));
$defaultDomainTargetsText = implode(', ', $defaultDomainTargets);
$defaultDomainScheme = config('tenant_domains.default_scheme', 'https');
$defaultActiveThemeId = $currentThemeSetting?->theme_id;
$primaryTarget = $defaultDomainTargets[0] ?? parse_url(config('app.url'), PHP_URL_HOST) ?? '127.0.0.1';
$primaryTargetType = filter_var($primaryTarget, FILTER_VALIDATE_IP) ? 'A' : 'CNAME';
@endphp
This project allows only one domain. Use "Manage Domain" to update existing settings.
@csrf
{{ $defaultDomainTargetsText ?? '' }}
Set as primary domain
This will become the main access point for this tenant.
Connect your domain
DNS Configuration
Pending propagation
Target
app.yourplatform.com
DNS changes can take up to 24–48 hours to propagate globally.
Delete Domain
Are you sure you want to remove
?
Cancel
Delete
Add Base Theme
Select how the application interface should appear to
you.
{{-- Default Theme 1 --}}
Default Theme
Clean and minimal
Active Theme →
{{-- Default Theme 2 --}}
Default Theme
Clean and minimal
Active Theme →
{{-- Government Progress Theme --}}
Government Progress
Theme
Formal and professional
Activated
{{-- Branding Assets --}}
Branding Assets
Select how the application interface
should appear to you.
{{-- Color Theme --}}
Color Theme
Choose colors for your tenant workspace.
{{-- Typography & Layout --}}
Typography & Layout
Choose typography for your tenant
workspace.
Font Family
Inter (Recommended)
Roboto
Poppins
Nunito
Open Sans
Navigation
Inter (Recommended)
Sidebar
Top Bar
APP Title
{{-- Additional Settings --}}
Validate status
Passed
Failed
Import status
{{ ucfirst(strtolower($importHistories->first()?->status ?? 'Success')) }}
Success
Failed
Pending
Imported by
JD
{{ $importHistories->first()?->user?->name ?? 'Jane Doe (Lead Admin)' }}
Connected & sync active
All services are operational and sync endpoints are reachable.
â—Ź Syncing irrigation_form_v2...
320 / 500 records
ESTIMATED TIME: 1M 24S
65% complete
All forms
Last 24h
All statuses
SYNC ID
FORM NAME
ADDED
UPDATED
TIME
DURATION
#1234
a1_irrigation_2025100411
644
8
14:22:10
1h 24m
#1233
survey_results_field_4
1,024
42
09:15:45
2h 10m
#1232
inventory_check_v1.0
89
3
Yesterday
12m
{{-- Header --}}
{{-- Body --}}
@can('view.pii_management')
{{-- Role --}}
Role
Select Role
@foreach($roles as $role)
{{ $role->name }}
@endforeach
{{-- Dataset Attributes --}}
Dataset attributes
{{-- Dummy Users Card --}}
{{-- Existing Dynamic Data --}}
@if($groupedPiiAttributes->isNotEmpty())
@foreach($groupedPiiAttributes as $tableName => $tableAttributes)
@php $tableSlug = \Illuminate\Support\Str::slug($tableName); @endphp
@endforeach
@endif
@else
You do not have permission to view PII Management.
@endcan
{{-- Footer --}}
@can('edit.pii_management')
@endcan
Schedule name
Frequency
Weekly
Daily
Monthly
Scheduled tasks will run automatically according to the specified frequency.
Ensure your server URL is reachable from our network.
@can('delete.view_data')
Delete Submission
@endcan
@can('edit.view_data')
Send For Approval
@endcan
{{-- Header --}}
Select Tenant Theme
Choose a visual identity that best represents your organization’s workflow and reporting
style.
{{-- Default Theme --}}
Default Theme
A clean and minimal aesthetic designed for
high-focus task management.
Activated
{{-- Government Theme --}}
Government Progress Theme
Formal and professional layout optimized for
compliance and official reporting.
Active Theme
{{-- Info Box --}}
Theme changes will be applied globally for all users in your tenant. Review the
preview in the branding dashboard before finalizing significant stylistic shifts.
{{-- Footer --}}
@can('edit.projects')
@csrf
Add Projects
Project Name*
Project Description (optional)
Date Format*
Select
date_format ?? '') === 'd/m/Y' ? 'selected' : '' }}>DD/MM/YYYY
date_format ?? '') === 'm/d/Y' ? 'selected' : '' }}>MM/DD/YYYY
date_format ?? '') === 'Y-m-d' ? 'selected' : '' }}>YYYY-MM-DD
Status
Active
Inactive
Cancel
Update
@csrf
Data Source*
ODK Connection
API Server
CSV File
CSV Data Source
Projects/{{ $currentProject->name }}/Data Source/CSV Connection
Upload CSV File
Drag and Drop The file here, or click to browse
Save
@can('create.cron_scheduler')
@csrf
ODK Connection
Select Connection
@foreach($cronConnections as $connection)
{{ $connection->form_id }} -
{{ $connection->base_url }}
@endforeach
Frequency
Select Frequency
Daily
Weekly
Monthly
Custom
Day of Week
Select Day
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Cancel
Create
@endcan
@can('edit.cron_scheduler')
@csrf
ODK
Connection
Select Connection
@foreach($cronConnections as $connection)
{{ $connection->form_id }} -
{{ $connection->base_url }}
@endforeach
Frequency
Select Frequency
Daily
Weekly
Monthly
Custom
Day of Week
Select Day
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Cancel
Update
@endcan
@canany(['run.cron_scheduler', 'process.import'])
Running Import
Please wait, we are importing data from ODK Central.
@endcanany
@endcan
Are You Sure To Send This For Approval?
This action cannot be undone.
No
Yes
Are You Sure To Delete This Submission?
This action cannot be undone.
No
Yes
@endsection
@section('scripts')
@vite('resources/js/pages/project-settings.js')
@vite('resources/js/ImportDataset/view-dataset.js')
@endsection