Changes
Specific Folder FTP Upload / ftp-deploy (push) Successful in 28s Details

This commit is contained in:
Ravi Gulhane 2026-10-28 16:09:06 +05:30
parent c9efdeaaf0
commit b15ddc9710
2 changed files with 172 additions and 85 deletions

View File

@ -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.

View File

@ -64,6 +64,15 @@
<thead>
<tr>
<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">Submitted By</th>
<th data-priority="1">Employee Code</th>
@ -107,6 +116,7 @@
@if($showGeneratedImage)
<th data-priority="1">Generated Image</th>
@endif
@endif
</tr>
</thead>
<tbody>
@ -240,6 +250,14 @@
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": "name" },
{ "data": "employee_code" },
@ -310,6 +328,7 @@
}
},
@endif
@endif
],
"initComplete": function(settings, json) {
var textBox = $('.dataTables_filter label input');