2016-08-07 22:01:18 +03:00
< ?
2016-06-20 21:36:09 +03:00
/**
2016-08-07 22:01:18 +03:00
* Класс , включающий все свойства и методы для управления документами
2016-06-20 21:36:09 +03:00
*
* @ package AVE . cms
2016-08-07 22:01:18 +03:00
* @ subpackage module_DocManager
2016-06-20 21:36:09 +03:00
* @ filesource
*/
2016-08-07 22:01:18 +03:00
class ModuleImport
2016-06-20 21:36:09 +03:00
{
/**
* Свойства класса
*/
/**
2016-08-07 22:01:18 +03:00
* Путь к директории с шаблонами модуля
*/
var $tpl_dir ;
2016-06-20 21:36:09 +03:00
/**
2016-08-07 22:01:18 +03:00
* Основные поля документа , предлагаемые для импорта
*/
var $fields_main = array (
2016-06-20 21:36:09 +03:00
'Id' ,
'document_title' ,
'document_alias' ,
'document_meta_keywords' ,
'document_meta_description' ,
'document_meta_robots' ,
'document_published' ,
2016-08-07 22:01:18 +03:00
'document_expire' ,
2016-06-20 21:36:09 +03:00
'document_in_search' ,
'document_status' ,
2016-08-07 22:01:18 +03:00
'document_deleted' ,
2016-06-20 21:36:09 +03:00
'document_linked_navi_id' ,
'document_breadcrum_title' ,
'document_parent' ,
'document_count_view' ,
2016-08-07 22:01:18 +03:00
'document_lang'
2016-06-20 21:36:09 +03:00
);
/**
2016-08-07 22:01:18 +03:00
* Внутренние методы
2016-06-20 21:36:09 +03:00
*/
/**
2016-08-07 22:01:18 +03:00
* Метод получения импорта
* $small - для сохранения памяти при импорте
*/
function _import ( $import_id , $type = 'row' , $small = false )
2016-06-20 21:36:09 +03:00
{
global $AVE_DB ;
2016-08-07 22:01:18 +03:00
// забираем импорт
$import = $AVE_DB -> Query ( "
SELECT " . ( $small
? " i.rub_id,i.name,i.parser,i.docs_disable,i.docs_create,i.fields,i.file FROM " . PREFIX . " _module_import AS i "
: " i.*, r.rubric_title AS rub_title
FROM
" . PREFIX . " _module_import AS i
LEFT JOIN
" . PREFIX . " _rubrics AS r ON r . Id = i . rub_id "
) . "
WHERE
i . id = " . (int) $import_id
) -> FetchRow ();
// поля
$import -> fields = $import -> fields ? unserialize ( $import -> fields ) : array ();
// теги
if ( isset ( $import -> tags ))
$import -> tags = $import -> tags
? unserialize ( $import -> tags )
: array ();
// возвращаем массив, если попросили
if ( $type != 'row' && $type != 'r' )
$import = ( array ) $import ;
return $import ;
2016-06-20 21:36:09 +03:00
}
/**
2016-08-07 22:01:18 +03:00
* Метод рекурсивно создаёт массив замен
*/
function _replace ( $mixed , $key = '' , $new = true )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
static $arr = array ();
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( $new )
$arr = array ();
if ( ! is_array ( $mixed ))
return $arr [ '[row' . $key . ']' ] = $mixed ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$res = $key ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
foreach ( $mixed as $k => $v )
{
if ( is_array ( $v ))
{
$arr [ '[row:' . $k . ']' ] = serialize ( $v );
}
$this -> _replace ( $v , $res . ':' . $k , false );
}
return $arr ;
2016-06-20 21:36:09 +03:00
}
/**
2016-08-07 22:01:18 +03:00
* Метод рекурсивно создаёт массив замен
*/
function _maketag ( $key )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
return '[row:' . $key . ']' ;
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
/**
* Метод заменяет в шаблонах полей теги и выполняет код php
*/
function _parse_tpl ( & $item , & $key , $replace )
{
$code = stripslashes ( strtr ( $item , $replace ));
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$item = trim ( eval2var ( '?>' . $code . '<?' ));
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( $unser = unserialize ( $item ))
$item = $unser ;
2016-06-20 21:36:09 +03:00
}
/**
* Проверка наличия документа по ключевым полям
*
2016-08-07 22:01:18 +03:00
* @ param array $array - массив ID_по ля_в_р у б р ике => К люче во е _зна че ние
2016-06-20 21:36:09 +03:00
* @ param int $rub - id рубрики
*
* @ return int / false - возвращает Id документа или false
*/
2016-08-07 22:01:18 +03:00
function _docs_find ( & $fields_key , $fields_comp , $item_fields , $rub_id )
2016-06-20 21:36:09 +03:00
{
global $AVE_DB ;
2016-08-07 22:01:18 +03:00
if ( ! $fields_key )
return 0 ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
foreach ( $fields_key [ 'main' ] as $field_id => & $val )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$val = $item_fields [ 'main' ][ $field_id ];
if ( $fields_comp [ 'main' ][ $field_id ] == 'LIKE' )
$main [] = 'a.' . $field_id . " LIKE '% " . ( string ) addslashes ( $item_fields [ 'main' ][ $field_id ]) . " %' " ;
else
$main [] = 'a.' . $field_id . " = ' " . ( string ) addslashes ( $item_fields [ 'main' ][ $field_id ]) . " ' " ;
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
if ( $main )
$main = ' AND ' . implode ( ' AND ' , $main );
2016-06-20 21:36:09 +03:00
$x = 0 ;
2016-08-07 22:01:18 +03:00
foreach ( $fields_key [ 'body' ] as $field_id => & $val )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$val = $item_fields [ 'body' ][ $field_id ];
2016-06-20 21:36:09 +03:00
$tables [] = PREFIX . " _document_fields AS t " . $x ;
2016-08-07 22:01:18 +03:00
if ( $fields_comp [ 'body' ][ $field_id ] == 'LIKE' )
$body [] = " (a.Id=t " . $x . " .document_id AND (t " . $x . " .rubric_field_id = " . $field_id . " AND t " . $x . " .field_value LIKE '% " . ( string ) addslashes ( $item_fields [ 'body' ][ $field_id ]) . " %')) " ;
else
$body [] = " (a.Id=t " . $x . " .document_id AND (t " . $x . " .rubric_field_id = " . $field_id . " AND t " . $x . " .field_value = ' " . ( string ) addslashes ( $item_fields [ 'body' ][ $field_id ]) . " ')) " ;
2016-06-20 21:36:09 +03:00
$x ++ ;
}
2016-08-07 22:01:18 +03:00
if ( $tables )
$tables = ', ' . implode ( ', ' , $tables );
if ( $body )
$body = ' AND ' . implode ( ' AND ' , $body );
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$docids = array ();
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$sql = $AVE_DB -> Real_Query ( "
SELECT
a . Id AS id
FROM
" . PREFIX . " _documents AS a " . $tables . "
2016-06-20 21:36:09 +03:00
WHERE
2016-08-07 22:01:18 +03:00
a . rubric_id = " . $rub_id .
$main .
$body
);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
while ( $docid = $sql -> FetchRow () -> id )
$docids [] = $docid ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
return $docids ;
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
/**
* Внешние методы
*/
2016-06-20 21:36:09 +03:00
/**
2016-08-07 22:01:18 +03:00
* Метод вывода импортов
*/
function importsList ()
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
global $AVE_DB , $AVE_Template ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// Забираем все импорты
$limit = 20 ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$start = get_current_page () * $limit - $limit ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$sql = $AVE_DB -> Query ( "
SELECT SQL_CALC_FOUND_ROWS
*
FROM
" . PREFIX . " _module_import
ORDER BY
id ASC
LIMIT
" . $start . " , " . $limit
);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
while ( $import = $sql -> FetchAssocArray ())
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$import [ 'rub_title' ] = $AVE_DB -> Query ( "
SELECT
rubric_title
FROM
" . PREFIX . " _rubrics
WHERE
id = " . (int) $import['rub_id']
) -> GetCell ();
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$imports [] = $import ;
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$num = $AVE_DB -> NumAllRows ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( $num > $limit )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$page_nav = '<a class="pnav" href="index.php?do=modules&action=modedit&mod=import&moduleaction=1&page={s}&cp=' . SESSION . '">{t}</a>' ;
$page_nav = get_pagination ( $pages , 'page' , $page_nav );
$AVE_Template -> assign ( 'page_nav' , $page_nav );
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
$AVE_Template -> assign ( 'imports' , $imports );
$AVE_Template -> assign ( 'content' , $AVE_Template -> fetch ( $this -> tpl_dir . 'admin_list.tpl' ));
2016-06-20 21:36:09 +03:00
}
/**
2016-08-07 22:01:18 +03:00
* Метод создания и редактирования импорта
2016-06-20 21:36:09 +03:00
*/
2016-08-07 22:01:18 +03:00
function importEdit ( $import_id = null )
2016-06-20 21:36:09 +03:00
{
global $AVE_DB , $AVE_Template ;
2016-08-07 22:01:18 +03:00
if ( $import_id )
{
$import = $this -> _import ( $import_id , 'array' );
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$import_fields = array ();
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// основные поля
foreach ( $this -> fields_main as $field_id )
{
$import_fields [ 'main' ][ $field_id ] = isset ( $import [ 'fields' ][ 'main' ][ $field_id ]) ? $import [ 'fields' ][ 'main' ][ $field_id ] : array ();
$import_fields [ 'main' ][ $field_id ][ 'title' ] = $AVE_Template -> get_config_vars ( 'field_' . $field_id );
}
// поля рубрики
$sql = $AVE_DB -> Query ( "
SELECT
Id AS id ,
rubric_field_title AS title
FROM
" . PREFIX . " _rubric_fields
WHERE
rubric_id = '" . (int)$import[' rub_id '] . "'
ORDER BY
rubric_field_position
" );
while ( $field = $sql -> FetchRow ())
{
$field_id = $field -> id ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$import_fields [ 'body' ][ $field_id ] = isset ( $import [ 'fields' ][ 'body' ][ $field_id ])
? $import [ 'fields' ][ 'body' ][ $field_id ]
: array ();
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$import_fields [ 'body' ][ $field_id ][ 'title' ] = $field -> title ;
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$import [ 'fields' ] = $import_fields ;
}
else
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
// рубрики
$sql = $AVE_DB -> Query ( "
SELECT
Id AS id ,
rubric_title AS title
FROM
" . PREFIX . " _rubrics
" );
while ( $row = $sql -> FetchAssocArray ())
{
$rubs [] = $row ;
}
$AVE_Template -> assign ( 'rubs' , $rubs );
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
// парсеры
require_once ( BASE_DIR . '/modules/import/class.import.parsers.php' );
$parsers = get_class_methods ( 'ModuleImportParsers' );
$AVE_Template -> assign ( 'parsers' , $parsers );
$AVE_Template -> assign ( 'import_id' , $import_id );
$AVE_Template -> assign ( 'import' , $import );
$AVE_Template -> assign ( 'content' , $AVE_Template -> fetch ( $this -> tpl_dir . 'admin_edit.tpl' ));
2016-06-20 21:36:09 +03:00
}
/**
2016-08-07 22:01:18 +03:00
* Метод сохранения профиля обмена
2016-06-20 21:36:09 +03:00
*/
2016-08-07 22:01:18 +03:00
function importSave ( $import_id = null )
2016-06-20 21:36:09 +03:00
{
global $AVE_DB , $AVE_Template ;
2016-08-07 22:01:18 +03:00
// если новый
if ( ! $import_id )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$AVE_DB -> Query ( "
INSERT INTO
" . PREFIX . " _module_import
SET
name = '" . addslashes($_POST[' name ']) . "' ,
rub_id = '" . (int)$_POST[' rub_id '] . "' ,
parser = '" . $_POST[' parser '] . "' ,
docs_disable = '" . (int)$_POST[' docs_disable '] . "' ,
docs_create = '" . (int)$_POST[' docs_create '] . "' ,
file = '" . trim(trim($_POST[' file ']),' / ') . "' ,
monitor = '" . (int)$_POST[' monitor '] . "' ,
time_edited = '" . time() . "'
" );
$import_id = $AVE_DB -> InsertId ();
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
else // если редактирование
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$import_fields = array (
'main' => array (),
'body' => array ()
);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// чистим массив от пустых шаблонов
foreach ( $_POST [ 'fields' ][ 'main' ] as $field_id => $field )
{
$field [ 'tpl' ] = trim (( string ) $field [ 'tpl' ]);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( $field [ 'tpl' ] === '' )
unset ( $field [ 'tpl' ]);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( ! $field [ 'comp' ])
unset ( $field [ 'comp' ]);
elseif ( $field [ 'comp' ] === 'LIKE' && isset ( $field [ 'active' ]))
unset ( $field [ 'active' ]);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( ! empty ( $field ))
$import_fields [ 'main' ][ $field_id ] = $field ;
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
foreach ( $_POST [ 'fields' ][ 'body' ] as $field_id => $field )
{
$field [ 'tpl' ] = trim (( string ) $field [ 'tpl' ]);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( $field [ 'tpl' ] === '' )
unset ( $field [ 'tpl' ]);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( ! $field [ 'comp' ])
unset ( $field [ 'comp' ]);
elseif ( $field [ 'comp' ] === 'LIKE' && isset ( $field [ 'active' ]))
unset ( $field [ 'active' ]);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( ! empty ( $field )) $import_fields [ 'body' ][ $field_id ] = $field ;
}
// записываем изменения в бд
2016-06-20 21:36:09 +03:00
$AVE_DB -> Query ( "
2016-08-07 22:01:18 +03:00
UPDATE
" . PREFIX . " _module_import
2016-06-20 21:36:09 +03:00
SET
2016-08-07 22:01:18 +03:00
name = '" . addslashes($_POST[' name ']) . "' ,
parser = '" . $_POST[' parser '] . "' ,
docs_disable = '" . (int)$_POST[' docs_disable '] . "' ,
docs_create = '" . (int)$_POST[' docs_create '] . "' ,
file = '" . trim(trim($_POST[' file ']),' / ') . "' ,
monitor = '" . (int)$_POST[' monitor '] . "' ,
fields = '" . addslashes(serialize($import_fields)) . "' ,
time_edited = '" . time() . "'
2016-06-20 21:36:09 +03:00
WHERE
2016-08-07 22:01:18 +03:00
id = '" . $import_id . "'
2016-06-20 21:36:09 +03:00
" );
2016-08-07 22:01:18 +03:00
}
if ( isAjax ())
{
$message = $AVE_Template -> get_config_vars ( 'saved' );
$header = $AVE_Template -> get_config_vars ( 'success' );
$theme = 'accept' ;
echo json_encode ( array ( 'message' => $message , 'header' => $header , 'theme' => $theme ));
exit ;
2016-06-20 21:36:09 +03:00
}
else
{
2016-08-07 22:01:18 +03:00
return $import_id ;
}
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
/**
* Метод удаления импорта
*/
function importDelete ( $import_id )
{
global $AVE_DB ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
$AVE_DB -> Query ( "
DELETE FROM
" . PREFIX . " _module_import
WHERE
id = " . $import_id
);
2016-06-20 21:36:09 +03:00
}
/**
2016-08-07 22:01:18 +03:00
* Метод копирования импорта
2016-06-20 21:36:09 +03:00
*/
2016-08-07 22:01:18 +03:00
function importCopy ( $import_id )
2016-06-20 21:36:09 +03:00
{
global $AVE_DB ;
2016-08-07 22:01:18 +03:00
$_POST = $this -> _import ( $import_id , 'array' );
// сначала создаём и получаем id
$import_id = $this -> importSave ();
// теперь сохраняем всё остальное
return $this -> importSave ( $import_id );
2016-06-20 21:36:09 +03:00
}
/**
* Импорт
*/
2016-08-07 22:01:18 +03:00
function importRun ( $import_id , $tags_only = false , $file = null , $write_log = false )
2016-06-20 21:36:09 +03:00
{
global $AVE_DB ;
2016-08-07 22:01:18 +03:00
require_once ( BASE_DIR . '/class/class.docs.php' );
$AVE_Document = new AVE_Document ();
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// задаём переменные
$fields_active = array ();
$fields_key = array ();
$fields_oblig = array ();
$fields_comp = array ();
$fields = array ();
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// Получаем параметры импорта и создаём переменные с параметрами полей
$import = $this -> _import ( $import_id , 'row' , true );
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
foreach ( $import -> fields [ 'main' ] as $field_id => & $field )
{
if ( ! isset ( $field [ 'tpl' ]))
$field [ 'tpl' ] = '' ;
if ( $field [ 'active' ] && $field [ 'comp' ] != 'LIKE' )
$fields_active [ 'main' ][ $field_id ] = true ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( $field [ 'key' ])
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$fields_key [ 'main' ][ $field_id ] = '' ;
$fields_comp [ 'main' ][ $field_id ] = ( isset ( $field [ 'comp' ]) && $field [ 'comp' ] == 'LIKE' ) ? 'LIKE' : '' ;
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
if ( $field [ 'oblig' ])
$fields_oblig [ 'main' ][] = $field_id ;
if ( $field [ 'active' ] || $field [ 'tpl' ] > '' )
$fields [ 'main' ][ $field_id ] = $field [ 'tpl' ];
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
foreach ( $import -> fields [ 'body' ] as $field_id => & $field )
{
if ( ! isset ( $field [ 'tpl' ]))
$field [ 'tpl' ] = '' ;
if ( $field [ 'active' ] && $field [ 'comp' ] != 'LIKE' )
$fields_active [ 'body' ][ $field_id ] = true ;
if ( $field [ 'key' ])
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$fields_key [ 'body' ][ $field_id ] = '' ;
$fields_comp [ 'body' ][ $field_id ] = ( isset ( $field [ 'comp' ]) && $field [ 'comp' ] == 'LIKE' ) ? 'LIKE' : '' ;
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
if ( $field [ 'oblig' ])
$fields_oblig [ 'body' ][] = $field_id ;
if ( $field [ 'active' ] || $field [ 'tpl' ] > '' )
$fields [ 'body' ][ $field_id ] = $field [ 'tpl' ];
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
// определяем файл
// если файл не передан как аргумент функции, то берём из настроек
if ( ! isset ( $file ))
$file = BASE_DIR . '/' . $import -> file ;
// если файл существует, парсим е г о
if ( file_exists ( $file ) && is_file ( $file ))
{
require_once ( BASE_DIR . '/modules/import/class.import.parsers.php' );
$ModuleImportParsers = new ModuleImportParsers ;
$parser = $import -> parser ;
$import_data = $ModuleImportParsers -> $parser ( $file );
}
// если в итоге (из файла или из кода) был
// сформирован массив $import_data, то продолжаем
// иначе, выходим
if ( ! isset ( $import_data ))
exit ( 'Отсутствует файл! В ходе выполнения кода массив $import_data также не был передан!' );
// Если просили узнать только теги, проходим весь массив $import_data и собираем теги
/* !tags_only */
if ( $tags_only )
{
$tags = array ();
foreach ( $import_data [ 'tags' ] as $item )
{
$tags [] = $this -> _maketag ( $item );
}
$tags = array_unique ( $tags );
$AVE_DB -> Query ( "
UPDATE
" . PREFIX . " _module_import
SET
tags = '" . serialize($tags) . "'
WHERE
id = " . $import_id
);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
return $tags ;
}
// Помечаем документы как неактивные в указанной рубрике, если нужно
if ( $import -> docs_disable && ! $tags_only )
2016-06-20 21:36:09 +03:00
{
$AVE_DB -> Query ( "
2016-08-07 22:01:18 +03:00
UPDATE
" . PREFIX . " _documents
2016-06-20 21:36:09 +03:00
SET
document_status = '0'
2016-08-07 22:01:18 +03:00
WHERE
rubric_id = " . $import->rub_id
2016-06-20 21:36:09 +03:00
);
}
2016-08-07 22:01:18 +03:00
// чистим память
unset ( $import -> fields , $import -> code_start , $parser , $ModuleImportParsers , $file );
$i = 0 ;
$log =
[
'updated' => array (),
'created' => array (),
'notfound' => array ()
];
2016-06-20 21:36:09 +03:00
// Обрабатываем по очереди каждый объект
2016-08-07 22:01:18 +03:00
foreach ( $import_data [ 'rows' ] as $item )
2016-06-20 21:36:09 +03:00
{
// создаем массив замен
2016-08-07 22:01:18 +03:00
$replace = array ();
$replace = $this -> _replace ( $item );
$replace [ '[Y-m-d]' ] = date ( 'd.m.Y H:i' );
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// парсим шаблоны
$item_fields = $fields ;
array_walk_recursive ( $item_fields , array ( $this , '_parse_tpl' ), $replace );
// чистим память
unset ( $replace , $item );
$pass = true ;
// проверяем обязательные поля в параметрах документа
foreach ( $fields_oblig [ 'main' ] as $field_id )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
if ( trim ( $item_fields [ 'main' ][ $field_id ]) === '' )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$pass = false ;
break ;
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( ! $pass ) continue ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// проверяем обязательные поля в теле документа
foreach ( $fields_oblig [ 'body' ] as $field_id )
{
if ( trim ( $item_fields [ 'body' ][ $field_id ]) === '' )
{
$pass = false ;
break ;
}
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( ! $pass ) continue ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// находим документ по ключевым полям
$docids = $this -> _docs_find ( $fields_key , $fields_comp , $item_fields , $import -> rub_id );
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// если не совпал и не создаём новые
if ( ! $docids && ! $import -> docs_create && $write_log )
{
$log [ 'notfound' ][] = array ( 'fields_key' => $fields_key , 'fields_values' => $item_fields );
continue ;
}
// если указано создавать документы при несовпадении, добавляем нулевой id
elseif ( ! $docids && $import -> docs_create )
$docids [] = 0 ;
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// проходим каждый документ
foreach ( $docids as $doc_id )
{
if ( $doc_id )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$doc = $AVE_DB -> Real_Query ( "
SELECT
*
FROM
" . PREFIX . " _documents
WHERE
Id = '" . $doc_id . "'
" )->FetchAssocArray();
// прописываем текущие значения в поля main, которые не надо импортировать
foreach ( $this -> fields_main as $field_id )
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
if ( ! $fields_active [ 'main' ][ $field_id ])
2016-06-20 21:36:09 +03:00
{
2016-08-07 22:01:18 +03:00
$item_fields [ 'main' ][ $field_id ] = $doc [ $field_id ];
2016-06-20 21:36:09 +03:00
}
2016-08-07 22:01:18 +03:00
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
unset ( $doc );
}
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
// меняем время, если в UNIX-е
if ( strlen (( string ) $item_fields [ 'main' ][ 'document_published' ]) == 10 )
$item_fields [ 'main' ][ 'document_published' ] = date ( 'd.m.Y H:i' , $item_fields [ 'main' ][ 'document_published' ]);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
if ( strlen (( string ) $item_fields [ 'main' ][ 'document_expire' ]) == 10 )
$item_fields [ 'main' ][ 'document_expire' ] = date ( 'd.m.Y H:i' , $item_fields [ 'main' ][ 'document_expire' ]);
// удаляем ненужные поля из полей рубрики
foreach ( $item_fields [ 'body' ] as $field_id => $field )
{
if ( ! $fields_active [ 'body' ][ $field_id ])
unset ( $item_fields [ 'body' ][ $field_id ]);
2016-08-10 09:01:30 +03:00
else
2016-08-07 22:01:18 +03:00
// если поле оказалось пустым, убираем значение из формы
$item_fields [ 'body' ][ $field_id ] = preg_replace ( '/\[row:(.+?)\]/' , '' , $item_fields [ 'body' ][ $field_id ]);
}
// удаляем Id документа
unset ( $item_fields [ 'main' ][ 'Id' ]);
// сохраняем документ
$data = array ();
$data = $item_fields [ 'main' ];
$data [ 'doc_title' ] = $data [ 'document_title' ];
$data [ 'document_expire' ] = date ( " d.m.Y H:i " , strtotime ( '+20 year' ));
$data [ 'feld' ] = $item_fields [ 'body' ];
$data [ 'import' ] = 1 ;
$response = $AVE_Document -> documentSave ( $import -> rub_id , $doc_id , $data );
// записываем лог
if ( $write_log )
{
// если совпал и обновлён
if ( $doc_id )
$log [ 'updated' ][ $doc_id ] = array ( 'fields_key' => $fields_key );
// если не совпал и создан
2016-06-20 21:36:09 +03:00
else
2016-08-07 22:01:18 +03:00
$log [ 'created' ][ $response ] = array ( 'fields_key' => $fields_key );
2016-06-20 21:36:09 +03:00
}
}
}
2016-08-07 22:01:18 +03:00
$AVE_DB -> Query ( "
UPDATE
" . PREFIX . " _module_import
SET
time_run = '" . time() . "'
WHERE
id = " . $import_id
);
2016-06-20 21:36:09 +03:00
2016-08-07 22:01:18 +03:00
return $log ;
2016-06-20 21:36:09 +03:00
}
}