289 lines
8.3 KiB
PHP
289 lines
8.3 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
class MessageChatForm extends WebAppRaiserForm
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
public function __construct($form_id)
|
|||
|
|
{
|
|||
|
|
parent::__construct($form_id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function form()
|
|||
|
|
{
|
|||
|
|
$form = parent::form();
|
|||
|
|
|
|||
|
|
$header = '<div style="border-bottom: 2px solid rgb(67, 160, 71); margin-bottom: 1.5em;"><h3>%s</h3></div>';
|
|||
|
|
$label = function($data) {
|
|||
|
|
return array('#text' => $data, '#class' => ['label'], '#style' => ['float:none;']);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
$form['form_attributes']['enctype'] = 'multipart/form-data';
|
|||
|
|
$form['form_attributes']['js'][] = 'engine/classes/WebAppRaiser/forms/MessageChatForm.js';
|
|||
|
|
|
|||
|
|
$form['order_id'] = array(
|
|||
|
|
'inputs' => array(
|
|||
|
|
'#type'=> 'hidden',
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
$form['object_id'] = array(
|
|||
|
|
'inputs' => array(
|
|||
|
|
'#type'=> 'hidden',
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$form['markup_start'] = array(
|
|||
|
|
'#markup' => '<div class="row">',
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$form['userName'] = array(
|
|||
|
|
'#prefix' => '<div class="col col-12 col-md-12">'.sprintf($header, 'Сообщение'),
|
|||
|
|
'label'=> $label('ФИО отправителя'),
|
|||
|
|
'inputs' => array(
|
|||
|
|
'#type'=> 'text',
|
|||
|
|
'#required'=> false,
|
|||
|
|
'#inputs_style' => 'float:none; width:90%',
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$form['comment'] = array(
|
|||
|
|
'label'=> $label('Комментарий'),
|
|||
|
|
'inputs' => array(
|
|||
|
|
'#type'=> 'textarea',
|
|||
|
|
'#required'=> true,
|
|||
|
|
'#rows' => 8,
|
|||
|
|
'#inputs_style' => 'float:none; width:90%',
|
|||
|
|
),
|
|||
|
|
'#suffix' => '</div>',
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
$form['category'] = array(
|
|||
|
|
'#prefix' => '<div class="col-12 col-md-6">'.sprintf($header, 'Файлы').'<p>Вы можете прикрепить файлы к сообщению.</p>',
|
|||
|
|
'label'=> $label('Категория'),
|
|||
|
|
'inputs' => array(
|
|||
|
|
'#type'=> 'select',
|
|||
|
|
'#options' => array(
|
|||
|
|
'Правоустанавливающие документы' => 'Правоустанавливающие документы',
|
|||
|
|
'Разворот паспорта' => 'Разворот паспорта',
|
|||
|
|
'Техническая документация' => 'Техническая документация',
|
|||
|
|
),
|
|||
|
|
//'#required'=> true,
|
|||
|
|
'#inputs_style' => 'float:none; width:90%',
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
$categories = WebAppRaiserDocs::getCategories();
|
|||
|
|
$form['category']['inputs']['#options'] = array_merge(
|
|||
|
|
$form['category']['inputs']['#options'],
|
|||
|
|
$categories,
|
|||
|
|
['Другое' => 'Другое']
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$form['other_category'] = array(
|
|||
|
|
'inputs' => array(
|
|||
|
|
'#type' => 'text',
|
|||
|
|
'#attributes' => array(
|
|||
|
|
'placeholder' => 'Категория',
|
|||
|
|
),
|
|||
|
|
'#inputs_style' => 'float:none; width:90%',
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$form['files'] = array(
|
|||
|
|
'label'=> $label('Файлы'),
|
|||
|
|
'inputs' => array(
|
|||
|
|
'#type'=> 'file',
|
|||
|
|
//'#required'=> true,
|
|||
|
|
'#multiple' => true,
|
|||
|
|
'#attributes' => array(
|
|||
|
|
'accept' => '.jpg, .jpeg, .png, .pdf',
|
|||
|
|
),
|
|||
|
|
'#inputs_style' => 'float:none; width:90%',
|
|||
|
|
),
|
|||
|
|
'description' => 'Можно выбрать несколько файлов',
|
|||
|
|
'#suffix' => '<div id="files-info" style="padding: 6px 12px;"></div>
|
|||
|
|
<style>
|
|||
|
|
a.remove-file {
|
|||
|
|
color: red;
|
|||
|
|
text-decoration: none;
|
|||
|
|
border: 0px solid;
|
|||
|
|
padding: 1px 5px;
|
|||
|
|
font-size: 1.3em;
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
</div>',
|
|||
|
|
);
|
|||
|
|
// */
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
$form['markup_end'] = array(
|
|||
|
|
'#markup' => '</div>',
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$form['submit'] = array(
|
|||
|
|
'inputs' => array(
|
|||
|
|
'#type'=> 'submit',
|
|||
|
|
'#value'=> 'Сохранить',
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
return $form;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function validate()
|
|||
|
|
{
|
|||
|
|
$status = parent::validate();
|
|||
|
|
return $status;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function submit($status, &$page, WebAppRaiserAPI $WebAppRaiserAPI)
|
|||
|
|
{
|
|||
|
|
parent::submit($status, $page, $WebAppRaiserAPI);
|
|||
|
|
|
|||
|
|
$page['status'] = $status['code'];
|
|||
|
|
$page['msg'] = array_merge($page['msg'], $status['message']);
|
|||
|
|
|
|||
|
|
if($status['code'] == 'success'){
|
|||
|
|
$files_dir = WebAppRaiserDocs::filesDir();
|
|||
|
|
$filepath = $status['post']['object_id'].'/'.$status['post']['order_id'].'/';
|
|||
|
|
if(!is_dir($files_dir.$filepath)){
|
|||
|
|
mkdir($files_dir.$filepath, 0755, true);
|
|||
|
|
}
|
|||
|
|
$files_for_api = array();
|
|||
|
|
//$files_for_db = array();
|
|||
|
|
$flag_files_ok = true;
|
|||
|
|
if(!empty($_FILES['files'])) {
|
|||
|
|
foreach($_FILES['files']['error'] as $key => $value){
|
|||
|
|
if($value != UPLOAD_ERR_OK) {
|
|||
|
|
$flag_files_ok = false;
|
|||
|
|
$page['status'] = 'error';
|
|||
|
|
$page['msg'][] = WebAppRaiserDocs::errorCodes()[$value].': '.$_FILES['files']['name'][$key];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if($flag_files_ok){
|
|||
|
|
// сохраняем файлы в папку
|
|||
|
|
$agency = User::getUserAgencyID();
|
|||
|
|
$category = ($status['post']['category']=='Другое')?$status['post']['other_category']:$status['post']['category'];
|
|||
|
|
|
|||
|
|
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){
|
|||
|
|
$fname_submit = $_FILES['files']['name'][$key];
|
|||
|
|
$fname = $this->checkFileName($fname_submit, $files_dir.$filepath);
|
|||
|
|
if(move_uploaded_file($tmp_name, $files_dir.$filepath.$fname)){
|
|||
|
|
$data = file_get_contents($files_dir.$filepath.$fname);
|
|||
|
|
$files_for_api[] = array(
|
|||
|
|
'name' => $fname,
|
|||
|
|
'data' => base64_encode($data),
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
/*$files_for_db[] = array(
|
|||
|
|
'fid' => 0,
|
|||
|
|
'order_id' => $status['post']['order_id'],
|
|||
|
|
'object_id' => $status['post']['object_id'],
|
|||
|
|
'file_path' => $filepath,
|
|||
|
|
'file_name' => $fname,
|
|||
|
|
'category' => $category,
|
|||
|
|
'manager' => $WebAppRaiserAPI->get('war_username'),
|
|||
|
|
'owner' => $WebAppRaiserAPI->get('war_user_id'),
|
|||
|
|
'agency' => $agency,
|
|||
|
|
); // */
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
$flag_files_ok = false;
|
|||
|
|
$page['status'] = 'error';
|
|||
|
|
$page['msg'][] = 'Не удалось сохранить файл в папку назначения: '.$files_dir.$filepath.$fname;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Отправляем файлы по API
|
|||
|
|
$fields_api = array(
|
|||
|
|
'userName' => $status['post']['userName'],
|
|||
|
|
'text' => $status['post']['comment'],
|
|||
|
|
);
|
|||
|
|
if(!empty($files_for_api)){
|
|||
|
|
$fields_api['files'] = array(
|
|||
|
|
0 => array(
|
|||
|
|
'name' => $category,
|
|||
|
|
'files' => $files_for_api,
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
//$page['msg'][] = dpm(['API FILES', $status['post']['order_id'], $fields_api]);
|
|||
|
|
$result = $WebAppRaiserAPI->sendChatMessage($status['post']['order_id'], $fields_api);
|
|||
|
|
//$page['msg'][] = dpm(['API result', $result]);
|
|||
|
|
$page['status'] = $result['status'];
|
|||
|
|
$page['msg'][] = $result['msg'];
|
|||
|
|
//$page['msg'][] = $result['body'];
|
|||
|
|
|
|||
|
|
if($result['status'] == 'success'){
|
|||
|
|
//TODO записать событие в базу
|
|||
|
|
$page["msg"][] = "Сообщение отправлено.";
|
|||
|
|
$page["status"] = 'success';
|
|||
|
|
$flag_db_ok = true;
|
|||
|
|
$valid_fields = array(
|
|||
|
|
'id' => 'id',
|
|||
|
|
'date' => 'date',
|
|||
|
|
'type' => 'type',
|
|||
|
|
'orderId' => 'orderId',
|
|||
|
|
'fields' => 'fields',
|
|||
|
|
);
|
|||
|
|
/*$comment = $status['post']['userName']. ': ' .$status['post']['comment'];
|
|||
|
|
$fields_db = array(
|
|||
|
|
'id' => $result['result']['id'],
|
|||
|
|
'date' => time(),
|
|||
|
|
'type' => 'CHAT_MESSAGE',
|
|||
|
|
'orderId' => $status['post']['order_id'],
|
|||
|
|
'fields' => base64_encode(serialize(['comment' => $comment])),
|
|||
|
|
); // */
|
|||
|
|
//$fid = WebAppRaiserDB::save('war_msg', $fields_db, $valid_fields, 'id');
|
|||
|
|
/*foreach($files_for_db as $fields_db){
|
|||
|
|
$fid = WebAppRaiserDB::save('war_files', $fields_db, $valid_fields, 'fid');
|
|||
|
|
if(!$fid) {
|
|||
|
|
$flag_db_ok = false;
|
|||
|
|
}
|
|||
|
|
} // */
|
|||
|
|
/*if($fid){
|
|||
|
|
$page["msg"][] = "Сообщение сохранено в базу";
|
|||
|
|
$page["status"] = 'success';
|
|||
|
|
}
|
|||
|
|
else{
|
|||
|
|
$page["msg"][] = "Возникла проблема при сохранении сообщения в базу данных.";
|
|||
|
|
$page["status"] = 'error';
|
|||
|
|
} // */
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
$page["msg"][] = "Возникла проблема при отправке сообщения.";
|
|||
|
|
$page["msg"][] = $result['result']['message'];
|
|||
|
|
$page["status"] = 'error';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
// валидация не прошла
|
|||
|
|
}
|
|||
|
|
parent::redirect($page);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function checkFileName($filename, $filepath, $i = 0)
|
|||
|
|
{
|
|||
|
|
if(!is_file($filepath.$filename)){
|
|||
|
|
return $filename;
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
$name = substr($filename, 0, strrpos($filename, '.'));
|
|||
|
|
$ext = substr($filename, strrpos($filename, '.'));
|
|||
|
|
if($i > 99) {
|
|||
|
|
return $name.'_'.$i.$ext;
|
|||
|
|
}
|
|||
|
|
if(!is_file($filepath.$name.'_'.$i.$ext)) {
|
|||
|
|
return $name.'_'.$i.$ext;
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
$i++;
|
|||
|
|
return $this->checkFileName($filename, $filepath, $i);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|