Compare commits

..

2 Commits

Author SHA1 Message Date
Ravi Gulhane b15ddc9710 Changes
Specific Folder FTP Upload / ftp-deploy (push) Successful in 28s Details
2026-10-28 16:09:06 +05:30
Ravi Gulhane c9efdeaaf0 Changes 2026-10-28 14:44:56 +05:30
3 changed files with 2133 additions and 85 deletions

View File

@ -258,10 +258,11 @@ class FormController extends Controller
return $this->deliverform($formdata, $finfo->data->questions); return $this->deliverform($formdata, $finfo->data->questions);
} elseif ($formdata->link_type == 'list') { } elseif ($formdata->link_type == 'list') {
$form = $finfo->data->form ?? $formdata; $form = $finfo->data->form ?? $formdata;
$showPositions = $form->show_positions ?? $form->show_position ?? 'no'; $dataDesignerView = $this->hasDataDesignerView($form);
$positionColumns = $this->getAvailablePositionColumns($finfo->data->submissions ?? [], $showPositions); $showPositions = $dataDesignerView ? 'no' : ($form->show_positions ?? $form->show_position ?? 'no');
$userAttrs = $this->userAttributeCodes($form); $positionColumns = $dataDesignerView ? [] : $this->getAvailablePositionColumns($finfo->data->submissions ?? [], $showPositions);
$userAttrLabels = $this->resolveUserAttributeLabels($userAttrs); $userAttrs = $dataDesignerView ? [] : $this->userAttributeCodes($form);
$userAttrLabels = $dataDesignerView ? [] : $this->resolveUserAttributeLabels($userAttrs);
$listViewData = [ $listViewData = [
'questions' => $finfo->data->questions, 'questions' => $finfo->data->questions,
'submissions' => $finfo->data->submissions, 'submissions' => $finfo->data->submissions,
@ -273,6 +274,7 @@ class FormController extends Controller
'positionColumns' => $positionColumns, 'positionColumns' => $positionColumns,
'userAttrs' => $userAttrs, 'userAttrs' => $userAttrs,
'userAttrLabels' => $userAttrLabels, 'userAttrLabels' => $userAttrLabels,
'dataDesignerView' => $dataDesignerView,
]; ];
if (\View::exists('form.'.$formdata->partition.'.list-'.$formdata->form_id)) { if (\View::exists('form.'.$formdata->partition.'.list-'.$formdata->form_id)) {
return view('form.'.$formdata->partition.'.list-'.$formdata->form_id)->with($listViewData); return view('form.'.$formdata->partition.'.list-'.$formdata->form_id)->with($listViewData);
@ -401,83 +403,106 @@ class FormController extends Controller
$sessionForm = $request->session()->get('formdata'); $sessionForm = $request->session()->get('formdata');
$canDeleteByPermission = $request->input('delete_submission') == 1 $canDeleteByPermission = $request->input('delete_submission') == 1
|| $this->sessionFlag($sessionForm, 'delete_submission'); || $this->sessionFlag($sessionForm, 'delete_submission');
$userAttrs = $this->userAttributeCodes($formdata); $dataDesignerView = $this->hasDataDesignerView($formdata);
$userAttrs = $dataDesignerView ? [] : $this->userAttributeCodes($formdata);
foreach($submissions as $submission) { foreach($submissions as $submission) {
if (!isset($submission->user_info->name)) continue; if (!isset($submission->user_info->name)) continue;
$row = [ $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, "submission_id" => $submission->id,
"actions" => [] "actions" => []
]; ];
foreach ($userAttrs as $attr) {
$row[$attr] = $this->userAttributeValue($submission->user_info ?? null, $attr);
}
// workflow status if ($dataDesignerView) {
if (isset($formdata->workflow) && $formdata->workflow == 'yes') { foreach ($questions as $code => $question) {
$row["workflow_status"] = ucfirst($submission->workflow_status ?? ""); if (isset($question->type) && $question->type == 'hidden') {
$row["workflow_next_approver"] = $submission->workflow_next_approver ?? ""; 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!) // workflow status
foreach($questions as $code => $question) { if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
if ($question->type == 'hidden') continue; $row["workflow_status"] = ucfirst($submission->workflow_status ?? "");
if ($question->type == 'multitextbox') { $row["workflow_next_approver"] = $submission->workflow_next_approver ?? "";
foreach ($question->options as $k => $v) { }
$row[$k] = isset($submission->formdata->{$k})
? (is_array($submission->formdata->{$k}) // answers for all questions (put on top level!)
? implode(', ', $submission->formdata->{$k}) foreach($questions as $code => $question) {
: $submission->formdata->{$k}) 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; $generatedFiles = $submission->formdata->genareted_image ?? null;
if (is_object($generatedFiles)) { if (is_object($generatedFiles)) {
$generatedFiles = array_values((array) $generatedFiles); $generatedFiles = array_values((array) $generatedFiles);
} }
if (is_array($generatedFiles) && count($generatedFiles)) { if (is_array($generatedFiles) && count($generatedFiles)) {
$imageFormId = $submission->formdata->form_id ?? $form_id; $imageFormId = $submission->formdata->form_id ?? $form_id;
$row['generated_image_url'] = collect($generatedFiles)->filter()->map(function ($file) use ($imageFormId) { $row['generated_image_url'] = collect($generatedFiles)->filter()->map(function ($file) use ($imageFormId) {
return asset('storage/personalized/'.$imageFormId.'/'.$file); return asset('storage/personalized/'.$imageFormId.'/'.$file);
})->implode(', '); })->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} ?? '';
} }
}
// show L1/L2 manager details if (isset($formdata->workflow) && $formdata->workflow == 'yes') {
if (isset($formdata->show_manager_details) && $formdata->show_manager_details == 'yes') { $row['workflow_action_date'] = $this->formatWorkflowActionDate($submission);
$row['manager1_name'] = $submission->manager1_name ?? ''; $row['approval_history'] = $this->formatApprovalHistory($submission);
$row['manager1_code'] = $submission->manager1_code ?? ''; }
$row['manager2_name'] = $submission->manager2_name ?? '';
$row['manager2_code'] = $submission->manager2_code ?? ''; // 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 // actions
@ -490,8 +515,8 @@ class FormController extends Controller
} }
if (isset($submission->actions) && in_array('edit', $submission->actions)) $row['actions'][] = 'edit'; if (isset($submission->actions) && in_array('edit', $submission->actions)) $row['actions'][] = 'edit';
if ( if (
isset($formdata->workflow) && isset($formdata->workflow) &&
$formdata->workflow == 'yes' && $formdata->workflow == 'yes' &&
$submission->workflow_status == 'unapproved' $submission->workflow_status == 'unapproved'
) { ) {
$row['actions'][] = 'approve'; $row['actions'][] = 'approve';
@ -508,23 +533,25 @@ class FormController extends Controller
} }
// Target forms: always expose approval status for list UI (downloadpersonalization list) // Target forms: always expose approval status for list UI (downloadpersonalization list)
$targetFormIds = [ if (!$dataDesignerView) {
'1781004538-88671587-3b81-403b-af63-fdbfae8a965e', // rapport-team2 $targetFormIds = [
'1782118020-9c6160bf-f07c-465e-9ea1-e8ff0c0b89dd', // rapport-titans '1781004538-88671587-3b81-403b-af63-fdbfae8a965e', // rapport-team2
]; '1782118020-9c6160bf-f07c-465e-9ea1-e8ff0c0b89dd', // rapport-titans
$resolvedFormIds = array_filter([ ];
(string) $form_id, $resolvedFormIds = array_filter([
(string) ($originalFormId ?? ''), (string) $form_id,
(string) (is_object($formdata) ? ($formdata->id ?? '') : ''), (string) ($originalFormId ?? ''),
(string) (is_object($formdata) ? ($formdata->form_id ?? '') : ''), (string) (is_object($formdata) ? ($formdata->id ?? '') : ''),
]); (string) (is_object($formdata) ? ($formdata->form_id ?? '') : ''),
$isTargetForm = count(array_intersect($targetFormIds, $resolvedFormIds)) > 0; ]);
$isTargetForm = count(array_intersect($targetFormIds, $resolvedFormIds)) > 0;
if ($isTargetForm) { if ($isTargetForm) {
$workflowStatus = $submission->workflow_status $workflowStatus = $submission->workflow_status
?? (is_object($submission->formdata) ? ($submission->formdata->workflow_status ?? '') : ''); ?? (is_object($submission->formdata) ? ($submission->formdata->workflow_status ?? '') : '');
$row['workflow_status'] = ucfirst(trim((string) $workflowStatus)); $row['workflow_status'] = ucfirst(trim((string) $workflowStatus));
$row['workflow_next_approver'] = $submission->workflow_next_approver ?? ($row['workflow_next_approver'] ?? ''); $row['workflow_next_approver'] = $submission->workflow_next_approver ?? ($row['workflow_next_approver'] ?? '');
}
} }
$jsonRows[] = $row; $jsonRows[] = $row;
} }
@ -13337,6 +13364,47 @@ class FormController extends Controller
Log::debug($cmd); 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. * Selected user attribute codes when Show User Attributes is Yes.
* A saved attribute list is ignored while that setting is No. * A saved attribute list is ignored while that setting is No.

File diff suppressed because it is too large Load Diff

View File

@ -64,6 +64,15 @@
<thead> <thead>
<tr> <tr>
<th data-priority="1">Action</th> <th data-priority="1">Action</th>
@if(!empty($dataDesignerView))
@foreach($questions as $code => $question)
@if(isset($question->type) && $question->type == 'hidden')
@continue
@endif
<th data-priority="1">{{ $question->label }}</th>
@endforeach
@php $showGeneratedImage = false; @endphp
@else
<th data-priority="1">Submission Date</th> <th data-priority="1">Submission Date</th>
<th data-priority="1">Submitted By</th> <th data-priority="1">Submitted By</th>
<th data-priority="1">Employee Code</th> <th data-priority="1">Employee Code</th>
@ -107,6 +116,7 @@
@if($showGeneratedImage) @if($showGeneratedImage)
<th data-priority="1">Generated Image</th> <th data-priority="1">Generated Image</th>
@endif @endif
@endif
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -240,6 +250,14 @@
return buttons; return buttons;
} }
}, },
@if(!empty($dataDesignerView))
@foreach($questions as $code => $question)
@if(isset($question->type) && $question->type == 'hidden')
@continue
@endif
{ "data": "{{$code}}", "defaultContent": "" },
@endforeach
@else
{ "data": "date" }, { "data": "date" },
{ "data": "name" }, { "data": "name" },
{ "data": "employee_code" }, { "data": "employee_code" },
@ -310,6 +328,7 @@
} }
}, },
@endif @endif
@endif
], ],
"initComplete": function(settings, json) { "initComplete": function(settings, json) {
var textBox = $('.dataTables_filter label input'); var textBox = $('.dataTables_filter label input');