Joywork/api/v2/app/src/controllers/FieldsController.php
2026-05-22 21:21:54 +03:00

155 lines
4.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\v2\Controller;
class FieldsController extends ApiController
{
public function getFields($app, $get = null, $post = null, $need_return = false) {
$error = false;
$errors = [];
$section = null;
if (isset($get['section']))
$section = $get['section'];
$filtrable = false;
if (isset($get['filtrable']))
$filtrable = boolval($get['filtrable']);
$source_id = (isset($get['source_id'])) ? (int)$get['source_id'] : null;
if (($user_id = $_SESSION['id']) && $section) {
// Открываем соединение с БД
$mdb = $app->container->get('mysql');
$pdo = $app->container->get('mypdo');
$list = [];
$results = [];
$user = new \User();
$user->get($user_id);
if ($agency_id = $user->getUserAgencyID()) {
$fields = new \Fields($pdo);
if ($section == "clients") {
$results = $fields->get_client_fields($agency_id, $source_id, $user_id);
} else if ($section == "requisitions") {
$results = $fields->get_req_fields($agency_id, $source_id, $user_id);
} else {
$error = true;
}
} else {
$error = true;
}
if (!$error) {
foreach ($results['fields'] as $field) {
$field_id = (int)$field['id'];
$values = null;
if ((bool)$field['is_podgroup'])
$values = (isset($results['values']['modelp_'.$field_id])) ? $results['values']['modelp_'.$field_id] : null;
else
$values = (isset($results['values']['model_'.$field_id])) ? $results['values']['model_'.$field_id] : null;
$value = json_decode($values, true);
$sub_groups = [];
if (!empty($field['podgroups'])) {
foreach ($field['podgroups'] as $key => $group) {
$sub_group['id'] = $group['id'];
$sub_group['name'] = ($group['title']) ? trim($group['title']) : null;
$sub_group['value'] = ($group['id']) ? (int)$group['id'] : null;
$sub_group['type'] = ($group['type']) ? (int)$group['type'] : 0;
if (!empty($field['podgroups_select'])) {
foreach ($field['podgroups_select'] as $select) {
if ($group['id'] == $select['id']) {
$sub_group['is_active'] = true;
} else {
$sub_group['is_active'] = false;
}
}
} else {
$sub_group['is_active'] = false;
}
if (isset($group['params'])) {
if (is_array($group['params']['items'])) {
$sub_group['params']['items'] = [];
foreach ($group['params']['items'] as $option) {
$sub_group['options'][] = [
'name' => ($option['name']) ? trim($option['name']) : null,
'value' => ($option['value']) ? (int)$option['value'] : null,
'mode' => ($option['mode']) ? (int)$option['mode'] : null,
];
}
}
}
$sub_group['is_required'] = boolval($group['is_required']);
$sub_group['created_by'] = ($group['created_by']) ? (int)$group['created_by'] : null;
$sub_group['updated_by'] = ($group['updated_by']) ? (int)$group['updated_by'] : null;
$sub_groups['modelp_' . $group['id']] = $sub_group;
}
}
if (!$filtrable || ($filtrable === true && (bool)$field['is_filtrable'])) {
$list['model_' . $field_id] = [
'id' => (int)$field_id,
'label' => $field['title'],
'type' => (int)$field['type'],
'is_for_clients' => (bool)$field['is_client'],
'is_for_requisitions' => (bool)$field['is_req'],
'is_sub_group' => (bool)$field['is_podgroup'],
'is_required' => (bool)$field['is_required'],
'is_filtrable' => (bool)$field['is_filtrable'],
'requisition_type' => ((bool)$field['is_req'] && isset($field['req_type'])) ? json_decode($field['req_type']) : null,
'value' => $value,
'params' => (!empty((bool)$field['is_podgroup'])) ? ['items' => $sub_groups] : $field['params'],
'created_at' => $field['created_at'],
'created_by' => ($field['created_by']) ? $field['created_by'] : null,
'updated_at' => $field['updated_at'],
'updated_by' => ($field['updated_by']) ? $field['updated_by'] : null,
'_raw' => $field,
];
}
}
if ($need_return) {
return $list;
} else {
$app->response->header('Content-Type', 'application/json');
$app->response->setStatus(200);
$app->response->setBody(json_encode([
'success' => true,
'user_id' => $_SESSION['id'],
'list' => $list,
], JSON_UNESCAPED_UNICODE));
$app->stop();
}
}
}
if ($need_return) {
return false;
} else {
$app->response->header('Content-Type', 'application/json');
$app->response->setStatus(200);
$app->response->setBody(json_encode([
'success' => false,
'user_id' => $_SESSION['id'],
'errors' => $errors,
], JSON_UNESCAPED_UNICODE));
$app->stop();
}
}
}