Сохранение данных


Добрый день. Подскажите пожалуйста, на сайте есть несколько форм, которые заполняются пользователями, и в каждой можно прикрепить некоторое количество файлов. Одновременно пользователь может выбрать 4 формы+одна, которая обязательная. Суть в том, что надо сохранять файлы, которые пользователь прикрепляет в формах на сервере. Есть сниппет, который обрабатывает данные из форм и потом вызывает обработчика, который сохраняет данные на сервере в соответствующих папках. Вот код обработчика форм:
global $modx;
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
    return false;
}
else{
    $rso_ids = filter_input(INPUT_POST, 'rso_ids');
    $request_id = filter_input(INPUT_POST, 'request_id');
    $is_draft = filter_input(INPUT_POST, 'is_draft');
    $form = intval(filter_input(INPUT_POST, 'form'));
    $rso_status = intval($is_draft) == 1 ? 1196 : 1197;
    $execution_date = intval($is_draft) == 1 ? 0 : $modx->runSnippet('getExecutionDate',array('days_count' => 3));
    $send_date = time();
    if(stripos($rso_ids, '1112') !== false){
        $fields = array(
            'createdby' => $modx->user->get('id'),
            'template' => 37,
            'parent' => 1156,
            'published' => 1,
            'pagetitle' => 'New Page',
            'alias' => 'new-page',
            'context_key' => 'gas',
            'createdon' => time()
        );
        $tv_fields = array(
            'title' => filter_input(INPUT_POST, 'title'),
            'title_small' => filter_input(INPUT_POST, 'title_small'),
            'form' => $form,
            'inn' => filter_input(INPUT_POST, 'inn'),
            'address' => filter_input(INPUT_POST, 'address'),
            'requisites' => filter_input(INPUT_POST, 'requisites'),
            'email' => filter_input(INPUT_POST, 'email'),
            'phone' => filter_input(INPUT_POST, 'phone'),
            'object_name' => filter_input(INPUT_POST, 'object_name'),
            'object_region' => filter_input(INPUT_POST, 'object_region'),
            'object_address' => filter_input(INPUT_POST, 'object_address'),
            'object_date' => filter_input(INPUT_POST, 'object_date'),
            'object_info' => filter_input(INPUT_POST, 'object_info'),
            'rso_status' => $rso_status,
            'execution_date' => $execution_date,
            'send_date' => $send_date,
            'company_id' => filter_input(INPUT_POST, 'company_id'),
            '10_service_type' => filter_input(INPUT_POST, '10_service_type'),
            '10_technical_specifications' => filter_input(INPUT_POST, '10_technical_specifications'),
            '10_max_rate_all' => filter_input(INPUT_POST, '10_max_rate_all'),
            '10_max_rate_one' => filter_input(INPUT_POST, '10_max_rate_one'),
            '10_info' => filter_input(INPUT_POST, '10_info')
        );
        $tv_file_fields = array(
            'ip_registration' => filter_input(INPUT_POST, 'ip_registration'),
            'ip_taxation' => filter_input(INPUT_POST, 'ip_taxation'),
            'ip_egrip' => filter_input(INPUT_POST, 'ip_egrip'),
            'ip_power' => filter_input(INPUT_POST, 'ip_power'),
            'entity_charter' => filter_input(INPUT_POST, 'entity_charter'),
            'entity_registration' => filter_input(INPUT_POST, 'entity_registration'),
            'entity_egrul' => filter_input(INPUT_POST, 'entity_egrul'),
            'entity_taxation' => filter_input(INPUT_POST, 'entity_taxation'),
            'entity_power' => filter_input(INPUT_POST, 'entity_power'),
            'object_ownership' => filter_input(INPUT_POST, 'object_ownership'),
            'object_map' => filter_input(INPUT_POST, 'object_map'),
            '10_attachment_1' => filter_input(INPUT_POST, '10_attachment_1'),
            '10_attachment_2' => filter_input(INPUT_POST, '10_attachment_2'),
            '10_attachment_3' => filter_input(INPUT_POST, '10_attachment_3'),
            '10_attachment_4' => filter_input(INPUT_POST, '10_attachment_4'),
            '10_attachment_5' => filter_input(INPUT_POST, '10_attachment_5'),
            '10_attachment_6' => filter_input(INPUT_POST, '10_attachment_6'),
            '10_attachment_7' => filter_input(INPUT_POST, '10_attachment_7'),
            '10_attachment_8' => filter_input(INPUT_POST, '10_attachment_8'),
            '10_attachment_9' => filter_input(INPUT_POST, '10_attachment_9')
        );
        if(intval($request_id) == 0){
            $modx->runSnippet('newRSORequest',array('rso_code' => 10, 'is_draft' => $is_draft, 'fields' => $fields, 'tv_fields' => $tv_fields, 'tv_file_fields' => $tv_file_fields));
        }
        else{
            $modx->runSnippet('editRSORequest',array('rso_code' => 10, 'is_draft' => $is_draft, 'id' => intval($request_id), 'tv_fields' => $tv_fields, 'tv_file_fields' => $tv_file_fields));
        }
    }
Для остальных форм код идентичен с небольшими вариациями, поэтому тут написал только для одной формы.
Вот код сниппета, который сохраняет данные на сервере:
<?php
global $modx;
$month = date('m');
$year = date('y');
$user_id = $modx->user->get('id');
$tmp_path = 'users_tmp_files/'.$user_id;
$user_rso_path = 'rso/'.$rso_code.'/'.$user_id;
$rso_admin_path = '';
$res_group = 'Users';
if($rso_code == 10){
    $rso_admin_path = '/gas/';
    $res_group = 'Gas';
}
else if($rso_code == 20){
    $rso_admin_path = '/water/';
    $res_group = 'Water';
}
else if($rso_code == 30){
    $rso_admin_path = '/power/';
    $res_group = 'Power';
}
else if($rso_code == 40){
    $rso_admin_path = '/heat/';
    $res_group = 'Heat';
}
$res = $modx->newObject('modDocument');
foreach ($fields as $field => $val) {
    $res->set($field, $val);
}
$res->save();
$res_id = $res->get('id');
$rso_request_id = $rso_code.$month.$year.$res_id;
if(!is_dir($user_rso_path)){
    mkdir($user_rso_path, 0755);
}
$rso_request_path = $user_rso_path.'/'.$rso_request_id;
if(!is_dir($rso_request_path)){
    mkdir($rso_request_path, 0777);
}
$res = $modx->getObject('modResource', $res_id);
$res->set('pagetitle', $rso_request_id);
$res->set('alias', $rso_request_id);
$res->joinGroup($res_group);
$res->save();
$tv_request_id = $modx->getObject('modTemplateVar',array('name'=> 'request_id'));
$tv_request_id->setValue($res_id, $rso_request_id);
$tv_request_id->save();
foreach ($tv_fields as $tv_field => $val) {
    $tvcid = $modx->getObject('modTemplateVar',array('name'=> $tv_field));
    $tvcid->setValue($res_id, $val);
    $tvcid->save();
}
foreach ($tv_file_fields as $tv_field => $val) {
    if(!empty($val)){
        $tvcid = $modx->getObject('modTemplateVar',array('name'=> $tv_field));
        $tvcid->setValue($res_id, $rso_request_path.'/'.$val);
        $tvcid->save();
        copy($tmp_path.'/'.$val, $rso_request_path.'/'.$val);
        unlink($tmp_path.'/'.$val);
    }
}
$send_date = $modx->runSnippet('getDateFromUnixTime',array('unixtime' => $tv_fields['send_date']));
$execution_date = $tv_fields['execution_date'] ==  0 ? '-' : $modx->runSnippet('getDateFromUnixTime',array('unixtime' => $tv_fields['execution_date']));

$modx->runSnippet('writeToRSOLog', array('file' => $rso_request_path.'/'.'request.log', 'service_type' => $tv_fields[$rso_code.'_service_type'], 'rso_status' => $tv_fields['rso_status'], 'note' => '-', 'send_date' => $send_date, 'execution_date' => $execution_date, 'author' => 'Пользователь'));
Когда форма одна заполняет всё работает замечательно, но когда несколько форм с файлами, то он сохраняет только файлы последней. Никак не могу понять, в чём ошибка. Подскажите пожалуйста.
Артём
15 января 2019, 14:31
modx.pro
553
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0