diff --git a/app/Http/Controllers/FormController.php b/app/Http/Controllers/FormController.php
index af18b6bf..4537551d 100644
--- a/app/Http/Controllers/FormController.php
+++ b/app/Http/Controllers/FormController.php
@@ -258,10 +258,11 @@ class FormController extends Controller
return $this->deliverform($formdata, $finfo->data->questions);
} elseif ($formdata->link_type == 'list') {
$form = $finfo->data->form ?? $formdata;
- $showPositions = $form->show_positions ?? $form->show_position ?? 'no';
- $positionColumns = $this->getAvailablePositionColumns($finfo->data->submissions ?? [], $showPositions);
- $userAttrs = $this->userAttributeCodes($form);
- $userAttrLabels = $this->resolveUserAttributeLabels($userAttrs);
+ $dataDesignerView = $this->hasDataDesignerView($form);
+ $showPositions = $dataDesignerView ? 'no' : ($form->show_positions ?? $form->show_position ?? 'no');
+ $positionColumns = $dataDesignerView ? [] : $this->getAvailablePositionColumns($finfo->data->submissions ?? [], $showPositions);
+ $userAttrs = $dataDesignerView ? [] : $this->userAttributeCodes($form);
+ $userAttrLabels = $dataDesignerView ? [] : $this->resolveUserAttributeLabels($userAttrs);
$listViewData = [
'questions' => $finfo->data->questions,
'submissions' => $finfo->data->submissions,
@@ -273,6 +274,7 @@ class FormController extends Controller
'positionColumns' => $positionColumns,
'userAttrs' => $userAttrs,
'userAttrLabels' => $userAttrLabels,
+ 'dataDesignerView' => $dataDesignerView,
];
if (\View::exists('form.'.$formdata->partition.'.list-'.$formdata->form_id)) {
return view('form.'.$formdata->partition.'.list-'.$formdata->form_id)->with($listViewData);
@@ -401,83 +403,106 @@ class FormController extends Controller
$sessionForm = $request->session()->get('formdata');
$canDeleteByPermission = $request->input('delete_submission') == 1
|| $this->sessionFlag($sessionForm, 'delete_submission');
- $userAttrs = $this->userAttributeCodes($formdata);
+ $dataDesignerView = $this->hasDataDesignerView($formdata);
+ $userAttrs = $dataDesignerView ? [] : $this->userAttributeCodes($formdata);
foreach($submissions as $submission) {
if (!isset($submission->user_info->name)) continue;
$row = [
- "date" => date("d M Y", strtotime($submission->updatedAt)),
- "name" => $submission->user_info->name,
- "designation" => $submission->user_info->designation ?? "",
- "employee_code" => $submission->user_info->employee_code ?? "",
"submission_id" => $submission->id,
"actions" => []
];
- foreach ($userAttrs as $attr) {
- $row[$attr] = $this->userAttributeValue($submission->user_info ?? null, $attr);
- }
- // workflow status
- if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
- $row["workflow_status"] = ucfirst($submission->workflow_status ?? "");
- $row["workflow_next_approver"] = $submission->workflow_next_approver ?? "";
- }
+ if ($dataDesignerView) {
+ foreach ($questions as $code => $question) {
+ if (isset($question->type) && $question->type == 'hidden') {
+ continue;
+ }
+ $value = null;
+ if (isset($submission->formdata) && is_object($submission->formdata) && property_exists($submission->formdata, $code)) {
+ $value = $submission->formdata->{$code};
+ } elseif (isset($submission->{$code})) {
+ $value = $submission->{$code};
+ }
+ if (is_array($value)) {
+ $value = implode(', ', $value);
+ }
+ $row[$code] = $value ?? '';
+ }
+ if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
+ $row['workflow_next_approver'] = $submission->workflow_next_approver ?? '';
+ }
+ } else {
+ $row['date'] = date("d M Y", strtotime($submission->updatedAt));
+ $row['name'] = $submission->user_info->name;
+ $row['designation'] = $submission->user_info->designation ?? "";
+ $row['employee_code'] = $submission->user_info->employee_code ?? "";
+ foreach ($userAttrs as $attr) {
+ $row[$attr] = $this->userAttributeValue($submission->user_info ?? null, $attr);
+ }
- // answers for all questions (put on top level!)
- foreach($questions as $code => $question) {
- if ($question->type == 'hidden') continue;
- if ($question->type == 'multitextbox') {
- foreach ($question->options as $k => $v) {
- $row[$k] = isset($submission->formdata->{$k})
- ? (is_array($submission->formdata->{$k})
- ? implode(', ', $submission->formdata->{$k})
- : $submission->formdata->{$k})
+ // workflow status
+ if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
+ $row["workflow_status"] = ucfirst($submission->workflow_status ?? "");
+ $row["workflow_next_approver"] = $submission->workflow_next_approver ?? "";
+ }
+
+ // answers for all questions (put on top level!)
+ foreach($questions as $code => $question) {
+ if ($question->type == 'hidden') continue;
+ if ($question->type == 'multitextbox') {
+ foreach ($question->options as $k => $v) {
+ $row[$k] = isset($submission->formdata->{$k})
+ ? (is_array($submission->formdata->{$k})
+ ? implode(', ', $submission->formdata->{$k})
+ : $submission->formdata->{$k})
+ : '';
+ }
+ } else if ($question->type == 'file') {
+ $row[$code . '_file'] = isset($submission->formdata->{$code})
+ ? (is_array($submission->formdata->{$code})
+ ? implode(', ', $submission->formdata->{$code})
+ : $submission->formdata->{$code})
+ : '';
+ } else {
+ $row[$code] = isset($submission->formdata->{$code})
+ ? (is_array($submission->formdata->{$code})
+ ? implode(', ', $submission->formdata->{$code})
+ : $submission->formdata->{$code})
: '';
}
- } else if ($question->type == 'file') {
- $row[$code . '_file'] = isset($submission->formdata->{$code})
- ? (is_array($submission->formdata->{$code})
- ? implode(', ', $submission->formdata->{$code})
- : $submission->formdata->{$code})
- : '';
- } else {
- $row[$code] = isset($submission->formdata->{$code})
- ? (is_array($submission->formdata->{$code})
- ? implode(', ', $submission->formdata->{$code})
- : $submission->formdata->{$code})
- : '';
}
- }
- $generatedFiles = $submission->formdata->genareted_image ?? null;
- if (is_object($generatedFiles)) {
- $generatedFiles = array_values((array) $generatedFiles);
- }
- if (is_array($generatedFiles) && count($generatedFiles)) {
- $imageFormId = $submission->formdata->form_id ?? $form_id;
- $row['generated_image_url'] = collect($generatedFiles)->filter()->map(function ($file) use ($imageFormId) {
- return asset('storage/personalized/'.$imageFormId.'/'.$file);
- })->implode(', ');
- }
-
- if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
- $row['workflow_action_date'] = $this->formatWorkflowActionDate($submission);
- $row['approval_history'] = $this->formatApprovalHistory($submission);
- }
-
- // show positions (legacy: show_position) — null-safe; blades only render available columns
- $showPositions = $formdata->show_positions ?? $formdata->show_position ?? 'no';
- if ($showPositions == 'yes') {
- foreach (['territory', 'area', 'region', 'zone'] as $positionField) {
- $row[$positionField] = $submission->{$positionField} ?? '';
+ $generatedFiles = $submission->formdata->genareted_image ?? null;
+ if (is_object($generatedFiles)) {
+ $generatedFiles = array_values((array) $generatedFiles);
+ }
+ if (is_array($generatedFiles) && count($generatedFiles)) {
+ $imageFormId = $submission->formdata->form_id ?? $form_id;
+ $row['generated_image_url'] = collect($generatedFiles)->filter()->map(function ($file) use ($imageFormId) {
+ return asset('storage/personalized/'.$imageFormId.'/'.$file);
+ })->implode(', ');
}
- }
- // show L1/L2 manager details
- if (isset($formdata->show_manager_details) && $formdata->show_manager_details == 'yes') {
- $row['manager1_name'] = $submission->manager1_name ?? '';
- $row['manager1_code'] = $submission->manager1_code ?? '';
- $row['manager2_name'] = $submission->manager2_name ?? '';
- $row['manager2_code'] = $submission->manager2_code ?? '';
+ if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
+ $row['workflow_action_date'] = $this->formatWorkflowActionDate($submission);
+ $row['approval_history'] = $this->formatApprovalHistory($submission);
+ }
+
+ // show positions (legacy: show_position) — null-safe; blades only render available columns
+ $showPositions = $formdata->show_positions ?? $formdata->show_position ?? 'no';
+ if ($showPositions == 'yes') {
+ foreach (['territory', 'area', 'region', 'zone'] as $positionField) {
+ $row[$positionField] = $submission->{$positionField} ?? '';
+ }
+ }
+
+ // show L1/L2 manager details
+ if (isset($formdata->show_manager_details) && $formdata->show_manager_details == 'yes') {
+ $row['manager1_name'] = $submission->manager1_name ?? '';
+ $row['manager1_code'] = $submission->manager1_code ?? '';
+ $row['manager2_name'] = $submission->manager2_name ?? '';
+ $row['manager2_code'] = $submission->manager2_code ?? '';
+ }
}
// actions
@@ -490,8 +515,8 @@ class FormController extends Controller
}
if (isset($submission->actions) && in_array('edit', $submission->actions)) $row['actions'][] = 'edit';
if (
- isset($formdata->workflow) &&
- $formdata->workflow == 'yes' &&
+ isset($formdata->workflow) &&
+ $formdata->workflow == 'yes' &&
$submission->workflow_status == 'unapproved'
) {
$row['actions'][] = 'approve';
@@ -508,23 +533,25 @@ class FormController extends Controller
}
// Target forms: always expose approval status for list UI (downloadpersonalization list)
- $targetFormIds = [
- '1781004538-88671587-3b81-403b-af63-fdbfae8a965e', // rapport-team2
- '1782118020-9c6160bf-f07c-465e-9ea1-e8ff0c0b89dd', // rapport-titans
- ];
- $resolvedFormIds = array_filter([
- (string) $form_id,
- (string) ($originalFormId ?? ''),
- (string) (is_object($formdata) ? ($formdata->id ?? '') : ''),
- (string) (is_object($formdata) ? ($formdata->form_id ?? '') : ''),
- ]);
- $isTargetForm = count(array_intersect($targetFormIds, $resolvedFormIds)) > 0;
+ if (!$dataDesignerView) {
+ $targetFormIds = [
+ '1781004538-88671587-3b81-403b-af63-fdbfae8a965e', // rapport-team2
+ '1782118020-9c6160bf-f07c-465e-9ea1-e8ff0c0b89dd', // rapport-titans
+ ];
+ $resolvedFormIds = array_filter([
+ (string) $form_id,
+ (string) ($originalFormId ?? ''),
+ (string) (is_object($formdata) ? ($formdata->id ?? '') : ''),
+ (string) (is_object($formdata) ? ($formdata->form_id ?? '') : ''),
+ ]);
+ $isTargetForm = count(array_intersect($targetFormIds, $resolvedFormIds)) > 0;
- if ($isTargetForm) {
- $workflowStatus = $submission->workflow_status
- ?? (is_object($submission->formdata) ? ($submission->formdata->workflow_status ?? '') : '');
- $row['workflow_status'] = ucfirst(trim((string) $workflowStatus));
- $row['workflow_next_approver'] = $submission->workflow_next_approver ?? ($row['workflow_next_approver'] ?? '');
+ if ($isTargetForm) {
+ $workflowStatus = $submission->workflow_status
+ ?? (is_object($submission->formdata) ? ($submission->formdata->workflow_status ?? '') : '');
+ $row['workflow_status'] = ucfirst(trim((string) $workflowStatus));
+ $row['workflow_next_approver'] = $submission->workflow_next_approver ?? ($row['workflow_next_approver'] ?? '');
+ }
}
$jsonRows[] = $row;
}
@@ -13337,6 +13364,47 @@ class FormController extends Controller
Log::debug($cmd);
}
+ /**
+ * True when the form Data Designer has at least one show_in_view field.
+ * Opt-in only: empty designer or export-only fields keep the legacy list.
+ */
+ protected function hasDataDesignerView($form): bool
+ {
+ if (!$form) {
+ return false;
+ }
+ $designer = $form->data_designer ?? null;
+ if (is_string($designer) && trim($designer) !== '') {
+ $decoded = json_decode($designer, true);
+ $designer = is_array($decoded) ? $decoded : null;
+ } elseif (is_object($designer)) {
+ $designer = (array) $designer;
+ }
+ if (!is_array($designer)) {
+ return false;
+ }
+ $fields = $designer['fields'] ?? [];
+ if (is_object($fields)) {
+ $fields = (array) $fields;
+ }
+ if (!is_array($fields)) {
+ return false;
+ }
+ foreach ($fields as $field) {
+ if (is_object($field)) {
+ $show = $field->show_in_view ?? false;
+ } elseif (is_array($field)) {
+ $show = $field['show_in_view'] ?? false;
+ } else {
+ continue;
+ }
+ if ($show === true || $show === 1 || $show === '1' || $show === 'true') {
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* Selected user attribute codes when Show User Attributes is Yes.
* A saved attribute list is ignored while that setting is No.
diff --git a/resources/views/form/list.blade.php b/resources/views/form/list.blade.php
index 3c4ad69d..be9d0a52 100644
--- a/resources/views/form/list.blade.php
+++ b/resources/views/form/list.blade.php
@@ -64,6 +64,15 @@
Action
+ @if(!empty($dataDesignerView))
+ @foreach($questions as $code => $question)
+ @if(isset($question->type) && $question->type == 'hidden')
+ @continue
+ @endif
+ {{ $question->label }}
+ @endforeach
+ @php $showGeneratedImage = false; @endphp
+ @else
Submission Date
Submitted By
Employee Code
@@ -107,6 +116,7 @@
@if($showGeneratedImage)
Generated Image
@endif
+ @endif