Initial commit
This commit is contained in:
25
README.md
25
README.md
@@ -1,3 +1,24 @@
|
||||
# import
|
||||
### import
|
||||
|
||||
Модуль импорта v2.26.0 (Light версия) Только для AVE.CMS ALT
|
||||
### Модуль импорта v2.26.0 (Light версия)
|
||||
|
||||
### Автор: @MadDen
|
||||
|
||||
#### `Внимание! Только новая установка модуля!`
|
||||
|
||||
|
||||
### Данный модуль осуществляет импорт документов из файлов различных типов.
|
||||
|
||||
### Changelog:
|
||||
|
||||
02.09.2019 - версия 2.26.0 - Адаптация для версии cms 3.26
|
||||
|
||||
13.04.2017 - версия 2.1
|
||||
|
||||
10.08.2016 - версия 2.0.1
|
||||
|
||||
08.08.2016 - версия 2.0
|
||||
|
||||
### Устанавливать только после удаления из системы предыдущей версии модуля.
|
||||
|
||||
03.07.2015 - версия 1.2.2
|
||||
192
class.import.parsers.php
Normal file
192
class.import.parsers.php
Normal file
@@ -0,0 +1,192 @@
|
||||
<?
|
||||
/**
|
||||
* Класс, включающий все парсеры импорта
|
||||
*
|
||||
* @package AVE.cms
|
||||
* @subpackage module_DocManager
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
class ModuleImportParsers
|
||||
{
|
||||
/* !CSV */
|
||||
function CSV2Array($csvfile, $sep=';', $protect='"')
|
||||
{
|
||||
$data = file_get_contents($csvfile);
|
||||
|
||||
if (! $data)
|
||||
return;
|
||||
|
||||
// проверяем кодировку
|
||||
if (mb_check_encoding($data, 'cp1251'))
|
||||
{
|
||||
$utf8_tmp = true;
|
||||
$csvfile = $csvfile . '.utf8.tmp';
|
||||
$data = @iconv('cp1251', 'UTF-8', $data);
|
||||
file_put_contents($csvfile, $data);
|
||||
}
|
||||
|
||||
$handle = fopen($csvfile, 'r');
|
||||
|
||||
// берём первую строку как теги
|
||||
$tags = fgetcsv($handle, 0, $sep, $protect);
|
||||
|
||||
array_walk_recursive($tags, 'trim');
|
||||
|
||||
$ii = 0;
|
||||
|
||||
$items = array();
|
||||
|
||||
while ($item = fgetcsv($handle, 0, $sep, $protect))
|
||||
{
|
||||
array_walk_recursive($item, 'trim');
|
||||
|
||||
foreach($item AS $key => $val)
|
||||
{
|
||||
if ($val != '')
|
||||
$items[$ii][$tags[$key]] = $val;
|
||||
}
|
||||
|
||||
$ii++;
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
if ($utf8_tmp)
|
||||
unlink($csvfile);
|
||||
|
||||
$result =
|
||||
[
|
||||
'num' => count($items),
|
||||
'tags' => $tags,
|
||||
'rows' => $items
|
||||
];
|
||||
|
||||
unset($tags, $items);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/* !Excel */
|
||||
function Excel2Array($fname)
|
||||
{
|
||||
require_once(dirname(__FILE__).'/excel_reader.php');
|
||||
|
||||
$Excel = new Spreadsheet_Excel_Reader(); // создаем объект
|
||||
|
||||
$Excel->setOutputEncoding('UTF-8'); // устанавливаем кодировку
|
||||
|
||||
$Excel->read($fname); // открываем файл
|
||||
|
||||
$tags = $Excel->sheets[0]['cells'][1]; // Определяем теги
|
||||
|
||||
$items = array();
|
||||
|
||||
$ii = 0;
|
||||
|
||||
foreach ($Excel->sheets[0]['cells'] AS $key => $value)
|
||||
{
|
||||
if ($key == 1)
|
||||
continue;
|
||||
|
||||
foreach($value AS $k => $val)
|
||||
{
|
||||
$items[$ii][$tags[$k]] = $val;
|
||||
}
|
||||
|
||||
$ii++;
|
||||
}
|
||||
|
||||
$result =
|
||||
[
|
||||
'num' => count($items),
|
||||
'tags' => $tags,
|
||||
'rows' => $items
|
||||
];
|
||||
|
||||
unset($Excel, $tags, $items);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/* !XML */
|
||||
function XML2Array($fname)
|
||||
{
|
||||
$xml = (simplexml_load_file($fname));
|
||||
|
||||
|
||||
$xml = object2array($xml);
|
||||
|
||||
unset ($xml['@attributes']);
|
||||
|
||||
$a = array_values($xml);
|
||||
|
||||
$tags = array(); // Определяем теги
|
||||
|
||||
foreach ($a[0][0] AS $key => $value)
|
||||
{
|
||||
$tags[] = $key;
|
||||
}
|
||||
|
||||
$items = array();
|
||||
|
||||
foreach ($a[0] AS $key => $row)
|
||||
{
|
||||
foreach($row AS $k => $val)
|
||||
{
|
||||
if ($val != '')
|
||||
$items[$key][$k] = $val;
|
||||
}
|
||||
}
|
||||
|
||||
$result =
|
||||
[
|
||||
'num' => count($items),
|
||||
'tags' => $tags,
|
||||
'rows' => $items
|
||||
];
|
||||
|
||||
unset($xml, $a, $tags, $items);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/* !DBF */
|
||||
public static function DBF2Array($fname)
|
||||
{
|
||||
$db = dbase_open($fname, 0);
|
||||
|
||||
$cols = dbase_get_header_info($db);
|
||||
|
||||
$count = dbase_numrecords($db);
|
||||
|
||||
$rows = array();
|
||||
|
||||
$tags = array();
|
||||
|
||||
foreach($cols AS $k => $v)
|
||||
{
|
||||
$tags[] = $v['name'];
|
||||
}
|
||||
|
||||
$ii = 1;
|
||||
|
||||
for ($ii; $ii <= $count; $ii++)
|
||||
{
|
||||
$rows[] = dbase_get_record_with_names($db, $ii);
|
||||
}
|
||||
|
||||
$result =
|
||||
[
|
||||
'num' => $count - $parser_row,
|
||||
'tags' => $tags,
|
||||
'rows' => $rows
|
||||
];
|
||||
|
||||
dbase_close($db);
|
||||
|
||||
unset($cols, $count, $tags, $rows);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
732
class.import.php
Normal file
732
class.import.php
Normal file
@@ -0,0 +1,732 @@
|
||||
<?
|
||||
/**
|
||||
* Класс, включающий все свойства и методы для управления документами
|
||||
*
|
||||
* @package AVE.cms
|
||||
* @subpackage module_DocManager
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
class ModuleImport
|
||||
{
|
||||
|
||||
/**
|
||||
* Свойства класса
|
||||
*/
|
||||
|
||||
/**
|
||||
* Путь к директории с шаблонами модуля
|
||||
*/
|
||||
var $tpl_dir;
|
||||
|
||||
/**
|
||||
* Основные поля документа, предлагаемые для импорта
|
||||
*/
|
||||
var $fields_main = array(
|
||||
'Id',
|
||||
'document_title',
|
||||
'document_alias',
|
||||
'document_meta_keywords',
|
||||
'document_meta_description',
|
||||
'document_meta_robots',
|
||||
'document_published',
|
||||
'document_expire',
|
||||
'document_in_search',
|
||||
'document_status',
|
||||
'document_deleted',
|
||||
'document_linked_navi_id',
|
||||
'document_breadcrum_title',
|
||||
'document_parent',
|
||||
'document_count_view',
|
||||
'document_lang'
|
||||
);
|
||||
|
||||
/**
|
||||
* Внутренние методы
|
||||
*/
|
||||
|
||||
/**
|
||||
* Метод получения импорта
|
||||
* $small - для сохранения памяти при импорте
|
||||
*/
|
||||
function _import($import_id, $type='row', $small = false)
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
// забираем импорт
|
||||
$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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод рекурсивно создаёт массив замен
|
||||
*/
|
||||
function _replace($mixed, $key = '', $new = true)
|
||||
{
|
||||
static $arr = array();
|
||||
|
||||
if ($new)
|
||||
$arr = array();
|
||||
|
||||
if (! is_array($mixed))
|
||||
return $arr['[row' . $key . ']'] = $mixed;
|
||||
|
||||
$res = $key;
|
||||
|
||||
foreach ($mixed as $k => $v)
|
||||
{
|
||||
if(is_array($v))
|
||||
{
|
||||
$arr['[row:' . $k . ']'] = serialize($v);
|
||||
}
|
||||
$this->_replace($v, $res . ':' . $k, false);
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод рекурсивно создаёт массив замен
|
||||
*/
|
||||
function _maketag($key)
|
||||
{
|
||||
return '[row:' . $key . ']';
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод заменяет в шаблонах полей теги и выполняет код php
|
||||
*/
|
||||
function _parse_tpl(&$item, &$key, $replace)
|
||||
{
|
||||
$code = stripslashes(strtr($item,$replace));
|
||||
|
||||
$item = trim(eval2var('?>' . $code . '<?'));
|
||||
|
||||
if ($unser = unserialize($item))
|
||||
$item = $unser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка наличия документа по ключевым полям
|
||||
*
|
||||
* @param array $array - массив ID_поля_в_рубрике=>Ключевое_значение
|
||||
* @param int $rub - id рубрики
|
||||
*
|
||||
* @return int/false - возвращает Id документа или false
|
||||
*/
|
||||
function _docs_find(&$fields_key, $fields_comp, $item_fields, $rub_id)
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
if (! $fields_key)
|
||||
return 0;
|
||||
|
||||
foreach($fields_key['main'] as $field_id => &$val)
|
||||
{
|
||||
$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]) . "'";
|
||||
}
|
||||
|
||||
if ($main)
|
||||
$main = ' AND ' . implode(' AND ', $main);
|
||||
|
||||
$x = 0;
|
||||
|
||||
foreach($fields_key['body'] as $field_id => &$val)
|
||||
{
|
||||
$val = $item_fields['body'][$field_id];
|
||||
|
||||
$tables[] = PREFIX . "_document_fields AS t" . $x;
|
||||
|
||||
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]) . "'))";
|
||||
|
||||
$x++;
|
||||
}
|
||||
|
||||
if ($tables)
|
||||
$tables = ', ' . implode(', ', $tables);
|
||||
|
||||
if ($body)
|
||||
$body = ' AND ' . implode(' AND ', $body);
|
||||
|
||||
$docids = array();
|
||||
|
||||
$sql = $AVE_DB->Real_Query("
|
||||
SELECT
|
||||
a.Id AS id
|
||||
FROM
|
||||
" . PREFIX . "_documents AS a " . $tables . "
|
||||
WHERE
|
||||
a.rubric_id = " . $rub_id .
|
||||
$main .
|
||||
$body
|
||||
);
|
||||
|
||||
while ($docid = $sql->FetchRow()->id)
|
||||
$docids[] = $docid;
|
||||
|
||||
return $docids;
|
||||
}
|
||||
|
||||
/**
|
||||
* Внешние методы
|
||||
*/
|
||||
|
||||
/**
|
||||
* Метод вывода импортов
|
||||
*/
|
||||
function importsList ()
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
// Забираем все импорты
|
||||
$limit = 20;
|
||||
|
||||
$start = get_current_page() * $limit - $limit;
|
||||
|
||||
$sql = $AVE_DB->Query("
|
||||
SELECT SQL_CALC_FOUND_ROWS
|
||||
*
|
||||
FROM
|
||||
" . PREFIX . "_module_import
|
||||
ORDER BY
|
||||
id ASC
|
||||
LIMIT
|
||||
" . $start . "," . $limit
|
||||
);
|
||||
|
||||
while ($import = $sql->FetchAssocArray())
|
||||
{
|
||||
$import['rub_title'] = $AVE_DB->Query("
|
||||
SELECT
|
||||
rubric_title
|
||||
FROM
|
||||
" . PREFIX . "_rubrics
|
||||
WHERE
|
||||
id=" . (int)$import['rub_id']
|
||||
)->GetCell();
|
||||
|
||||
$imports[] = $import;
|
||||
}
|
||||
|
||||
$num = $AVE_DB->NumAllRows;
|
||||
|
||||
if ($num > $limit)
|
||||
{
|
||||
$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);
|
||||
}
|
||||
|
||||
$AVE_Template->assign('imports',$imports);
|
||||
$AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'admin_list.tpl'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод создания и редактирования импорта
|
||||
*/
|
||||
function importEdit ($import_id=null)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
if ($import_id)
|
||||
{
|
||||
$import = $this->_import($import_id, 'array');
|
||||
|
||||
$import_fields = array();
|
||||
|
||||
// основные поля
|
||||
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;
|
||||
|
||||
$import_fields['body'][$field_id] = isset($import['fields']['body'][$field_id])
|
||||
? $import['fields']['body'][$field_id]
|
||||
: array();
|
||||
|
||||
$import_fields['body'][$field_id]['title'] = $field->title;
|
||||
}
|
||||
|
||||
$import['fields'] = $import_fields;
|
||||
}
|
||||
else
|
||||
{
|
||||
// рубрики
|
||||
$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);
|
||||
}
|
||||
|
||||
// парсеры
|
||||
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'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод сохранения профиля обмена
|
||||
*/
|
||||
function importSave ($import_id=null)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
// если новый
|
||||
if (! $import_id)
|
||||
{
|
||||
$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();
|
||||
}
|
||||
else // если редактирование
|
||||
{
|
||||
$import_fields = array(
|
||||
'main' => array(),
|
||||
'body' => array()
|
||||
);
|
||||
|
||||
// чистим массив от пустых шаблонов
|
||||
foreach ($_POST['fields']['main'] as $field_id => $field)
|
||||
{
|
||||
$field['tpl'] = trim((string)$field['tpl']);
|
||||
|
||||
if ($field['tpl'] === '')
|
||||
unset($field['tpl']);
|
||||
|
||||
if (!$field['comp'])
|
||||
unset($field['comp']);
|
||||
elseif ($field['comp'] === 'LIKE' && isset($field['active']))
|
||||
unset($field['active']);
|
||||
|
||||
if (! empty($field))
|
||||
$import_fields['main'][$field_id] = $field;
|
||||
}
|
||||
|
||||
foreach ($_POST['fields']['body'] as $field_id => $field)
|
||||
{
|
||||
$field['tpl'] = trim((string)$field['tpl']);
|
||||
|
||||
if ($field['tpl'] === '')
|
||||
unset($field['tpl']);
|
||||
|
||||
if (!$field['comp'])
|
||||
unset($field['comp']);
|
||||
elseif ($field['comp'] === 'LIKE' && isset($field['active']))
|
||||
unset($field['active']);
|
||||
|
||||
if (! empty($field)) $import_fields['body'][$field_id] = $field;
|
||||
}
|
||||
|
||||
// записываем изменения в бд
|
||||
$AVE_DB->Query("
|
||||
UPDATE
|
||||
" . PREFIX . "_module_import
|
||||
SET
|
||||
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() . "'
|
||||
WHERE
|
||||
id = '" . $import_id . "'
|
||||
");
|
||||
}
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $import_id;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод удаления импорта
|
||||
*/
|
||||
function importDelete ($import_id)
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
$AVE_DB->Query("
|
||||
DELETE FROM
|
||||
" . PREFIX . "_module_import
|
||||
WHERE
|
||||
id = " . $import_id
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод копирования импорта
|
||||
*/
|
||||
function importCopy ($import_id)
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
$_POST = $this->_import($import_id,'array');
|
||||
|
||||
// сначала создаём и получаем id
|
||||
$import_id = $this->importSave();
|
||||
|
||||
// теперь сохраняем всё остальное
|
||||
return $this->importSave($import_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Импорт
|
||||
*/
|
||||
function importRun ($import_id, $tags_only = false, $file = null, $write_log = false)
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
require_once(BASE_DIR . '/class/class.docs.php');
|
||||
$AVE_Document = new AVE_Document();
|
||||
|
||||
// задаём переменные
|
||||
$fields_active = array();
|
||||
$fields_key = array();
|
||||
$fields_oblig = array();
|
||||
$fields_comp = array();
|
||||
$fields = array();
|
||||
|
||||
// Получаем параметры импорта и создаём переменные с параметрами полей
|
||||
$import = $this->_import($import_id, 'row', true);
|
||||
|
||||
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;
|
||||
|
||||
if ($field['key'])
|
||||
{
|
||||
$fields_key['main'][$field_id] = '';
|
||||
$fields_comp['main'][$field_id] = (isset($field['comp']) && $field['comp'] == 'LIKE') ? 'LIKE' : '';
|
||||
}
|
||||
|
||||
if ($field['oblig'])
|
||||
$fields_oblig['main'][] = $field_id;
|
||||
|
||||
if ($field['active'] || $field['tpl'] > '')
|
||||
$fields['main'][$field_id] = $field['tpl'];
|
||||
}
|
||||
|
||||
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'])
|
||||
{
|
||||
$fields_key['body'][$field_id] = '';
|
||||
$fields_comp['body'][$field_id] = (isset($field['comp']) && $field['comp'] == 'LIKE') ? 'LIKE' : '';
|
||||
}
|
||||
|
||||
if ($field['oblig'])
|
||||
$fields_oblig['body'][] = $field_id;
|
||||
|
||||
if ($field['active'] || $field['tpl'] > '')
|
||||
$fields['body'][$field_id] = $field['tpl'];
|
||||
}
|
||||
|
||||
// определяем файл
|
||||
// если файл не передан как аргумент функции, то берём из настроек
|
||||
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
|
||||
);
|
||||
|
||||
return $tags;
|
||||
}
|
||||
|
||||
// Помечаем документы как неактивные в указанной рубрике, если нужно
|
||||
if($import->docs_disable && !$tags_only)
|
||||
{
|
||||
$AVE_DB->Query("
|
||||
UPDATE
|
||||
" . PREFIX . "_documents
|
||||
SET
|
||||
document_status = '0'
|
||||
WHERE
|
||||
rubric_id=" . $import->rub_id
|
||||
);
|
||||
}
|
||||
|
||||
// чистим память
|
||||
unset ($import->fields, $import->code_start, $parser, $ModuleImportParsers, $file);
|
||||
|
||||
$i = 0;
|
||||
|
||||
$log = array(
|
||||
'updated' => array(),
|
||||
'created' => array(),
|
||||
'notfound' => array()
|
||||
);
|
||||
|
||||
// Обрабатываем по очереди каждый объект
|
||||
foreach($import_data['rows'] as $item)
|
||||
{
|
||||
// создаем массив замен
|
||||
$replace = array();
|
||||
$replace = $this->_replace($item);
|
||||
$replace['[Y-m-d]'] = date('d.m.Y H:i');
|
||||
|
||||
// парсим шаблоны
|
||||
$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)
|
||||
{
|
||||
if (trim($item_fields['main'][$field_id]) === '')
|
||||
{
|
||||
$pass = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $pass)
|
||||
continue;
|
||||
|
||||
// проверяем обязательные поля в теле документа
|
||||
foreach ($fields_oblig['body'] as $field_id)
|
||||
{
|
||||
if (trim($item_fields['body'][$field_id]) === '')
|
||||
{
|
||||
$pass = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $pass)
|
||||
continue;
|
||||
|
||||
// находим документ по ключевым полям
|
||||
$docids = $this->_docs_find($fields_key, $fields_comp, $item_fields, $import->rub_id);
|
||||
|
||||
// если не совпал и не создаём новые
|
||||
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;
|
||||
|
||||
// проходим каждый документ
|
||||
foreach ($docids as $doc_id)
|
||||
{
|
||||
if ($doc_id)
|
||||
{
|
||||
$doc = $AVE_DB->Real_Query("
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
" . PREFIX . "_documents
|
||||
WHERE
|
||||
Id = '" . $doc_id . "'
|
||||
")->FetchAssocArray();
|
||||
|
||||
// прописываем текущие значения в поля main, которые не надо импортировать
|
||||
foreach($this->fields_main as $field_id)
|
||||
{
|
||||
if(! $fields_active['main'][$field_id])
|
||||
{
|
||||
$item_fields['main'][$field_id] = $doc[$field_id];
|
||||
}
|
||||
}
|
||||
|
||||
unset ($doc);
|
||||
}
|
||||
|
||||
// меняем время, если в 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']);
|
||||
|
||||
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]);
|
||||
else
|
||||
// если поле оказалось пустым, убираем значение из формы
|
||||
$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);
|
||||
|
||||
// если не совпал и создан
|
||||
else
|
||||
$log['created'][$response] = array('fields_key' => $fields_key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$AVE_DB->Query("
|
||||
UPDATE
|
||||
" . PREFIX . "_module_import
|
||||
SET
|
||||
time_run = '" . time() . "'
|
||||
WHERE
|
||||
id = " . $import_id
|
||||
);
|
||||
|
||||
return $log;
|
||||
}
|
||||
}
|
||||
1738
excel_reader.php
Normal file
1738
excel_reader.php
Normal file
File diff suppressed because it is too large
Load Diff
20
info.php
Normal file
20
info.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
if (! defined('BASE_DIR'))
|
||||
exit;
|
||||
|
||||
$module = array(
|
||||
'ModuleSysName' => 'import',
|
||||
'ModuleVersion' => '2.26.0',
|
||||
'ModuleAutor' => 'AVE.cms Team',
|
||||
'ModuleCopyright' => '© 2007-' . date('Y') . ' AVE.cms',
|
||||
'ModuleStatus' => 1,
|
||||
'ModuleIsFunction' => 1,
|
||||
'ModuleTemplate' => 0,
|
||||
'ModuleAdminEdit' => 1,
|
||||
'ModuleFunction' => 'import',
|
||||
'ModuleTag' => null,
|
||||
'ModuleTagLink' => null,
|
||||
'ModuleAveTag' => null,
|
||||
'ModulePHPTag' => null
|
||||
);
|
||||
?>
|
||||
4
lang/index.php
Normal file
4
lang/index.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
header('Location:/');
|
||||
exit;
|
||||
?>
|
||||
76
lang/ru.txt
Normal file
76
lang/ru.txt
Normal file
@@ -0,0 +1,76 @@
|
||||
[name]
|
||||
MODULE_NAME = "Импорт (Облегченная версия)"
|
||||
MODULE_DESCRIPTION = "Осуществляет импорт документов из файлов различных типов"
|
||||
|
||||
|
||||
[admin]
|
||||
mod_name = "Импорт"
|
||||
imports = "Список импортов"
|
||||
|
||||
import_add = "Добавить импорт"
|
||||
name = "Название"
|
||||
rub_name = "Рубрика"
|
||||
parser = "Парсер"
|
||||
time_edited = "Последнее изменение"
|
||||
time_run = "Последний запуск"
|
||||
actions = "Действия"
|
||||
create = "Создать"
|
||||
edit = "Редактировать"
|
||||
copy = "Копировать"
|
||||
run = "Запустить"
|
||||
delete = "Удалить"
|
||||
delete_t = "Удаление..."
|
||||
delete_m = "Вы уверены, что хотите удалить<br>импорт и все его настройки?"
|
||||
noimports = "Нет импортов"
|
||||
|
||||
import_edit_tit = "Редактирование импорта"
|
||||
import_new_tit = "Создание импорта"
|
||||
import_set = "Настройки импорта"
|
||||
docs_disable = "Перед импортом пометить все документы рубрики как неактивные"
|
||||
docs_create = "Создавать новый документ, если не удаётся найти совпадение по ключевому полю"
|
||||
monitor = "Отслеживать изменения файла и автоматически делать импорт"
|
||||
file = "Файл по умолчанию"
|
||||
|
||||
fields_main = "Основные поля документа"
|
||||
fields_body = "Поля рубрики"
|
||||
fields_file = "Теги файла"
|
||||
check_f_active = "Импортировать поле"
|
||||
check_f_key = "Ключевое поле. Например, Вы сделали импорт и после изменения файла хотите повторить операцию. Если у какого-либо документа ключевое поле совпало, то он будет изменён, в противном случае - создан заново или пропущен (в зависимости от настроек импорта)."
|
||||
check_f_oblig = "Обязательное поле"
|
||||
field = "Поле"
|
||||
compare_type = "Тип сравнения для ключевого поля. '==' - полностью совпадает, 'LIKE' - содержит подстроку. Обратите внимание, что опция 'LIKE' запрещает импортировать данное поле на уровне исполняемого кода."
|
||||
field_tpl = "Шаблон импорта поля"
|
||||
|
||||
tags = "Теги"
|
||||
tag_date = "Тег текущей даты. Формат вывода: yyyy-mm-dd"
|
||||
tag_one = "Значение из элемента массива, где XXX - имя ключа"
|
||||
tag_many = "Значение из многомерного массива, уровень вложенности через :"
|
||||
|
||||
create_cont = "Создать и продолжить редактирование"
|
||||
save = "Сохранить"
|
||||
save_cont = "Применить (CTRL+S)"
|
||||
saved = "Сохранено"
|
||||
tags_refresh = "Обновить список тегов"
|
||||
run_btn = "Запустить импорт"
|
||||
|
||||
success = "Выполнено"
|
||||
erorr = "Ошибка"
|
||||
|
||||
field_Id = "Id документа"
|
||||
field_document_title = "Название документа"
|
||||
field_document_alias = "Псевдоним документа (alias)"
|
||||
field_document_meta_keywords = "Ключевые слова (meta keywords)"
|
||||
field_document_meta_description = "Описание страницы (meta description)"
|
||||
field_document_meta_robots = "Тип индексирования страницы (meta robots)"
|
||||
field_document_published = "Начало публикации"
|
||||
field_document_expire = "Окончание публикации"
|
||||
field_document_deleted = "Временно удалён"
|
||||
field_document_in_search = "Разрешить поиск по документу (0 или 1)"
|
||||
field_document_status = "Статус документа (неактивен = 0 или<br>активен = 1)"
|
||||
field_document_linked_navi_id = "Связать с пунктом меню (navi_id)"
|
||||
field_document_breadcrum_title = "Название ссылки для хлебных крошек"
|
||||
field_document_parent = "Связать с документом (doc_id)"
|
||||
field_document_count_view = "Количество просмотров"
|
||||
field_document_lang = "Язык документа"
|
||||
|
||||
imported = "Импорт успешно выполнен"
|
||||
74
module.php
Normal file
74
module.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AVE.cms - Модуль Импорта
|
||||
*
|
||||
* @package AVE.cms
|
||||
* @subpackage module_import
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
if(!defined('BASE_DIR')) exit;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Админка
|
||||
*/
|
||||
if (defined('ACP') && (isset($_REQUEST['moduleaction'])))
|
||||
{
|
||||
// класс
|
||||
require_once(BASE_DIR . '/modules/import/class.import.php');
|
||||
|
||||
$import = new ModuleImport;
|
||||
|
||||
// папка с шаблонами
|
||||
$import->tpl_dir = BASE_DIR . '/modules/import/templates/';
|
||||
|
||||
// ланги
|
||||
$AVE_Template->config_load(BASE_DIR . '/modules/import/lang/' . $_SESSION['admin_language'] . '.txt', 'admin');
|
||||
$AVE_Template->assign('config_vars', $AVE_Template->get_config_vars());
|
||||
|
||||
$header_list = 'Location:index.php?do=modules&action=modedit&mod=import&moduleaction=1&cp=' . SESSION . '&page=' . $_REQUEST['page'];
|
||||
|
||||
switch($_REQUEST['moduleaction'])
|
||||
{
|
||||
case '1':
|
||||
$import->importsList();
|
||||
break;
|
||||
|
||||
case 'edit':
|
||||
$import->importEdit((int)$_REQUEST['import_id']);
|
||||
break;
|
||||
|
||||
case 'copy':
|
||||
$import_id = $import->importCopy((int)$_REQUEST['import_id']);
|
||||
header('Location:index.php?do=modules&action=modedit&mod=import&moduleaction=edit&import_id=' . $import_id . '&cp=' . SESSION);
|
||||
exit;
|
||||
|
||||
case 'save':
|
||||
$import_id = $import->importSave((int)$_REQUEST['import_id']);
|
||||
if (! $_REQUEST['import_id'])
|
||||
header('Location:index.php?do=modules&action=modedit&mod=import&moduleaction=edit&import_id=' . $import_id . '&cp=' . SESSION);
|
||||
else
|
||||
header($header_list);
|
||||
exit;
|
||||
|
||||
case 'delete':
|
||||
$import->importDelete((int)$_REQUEST['import_id']);
|
||||
header($header_list);
|
||||
exit;
|
||||
|
||||
case 'tags':
|
||||
$import_id = (int)$_REQUEST['import_id'];
|
||||
$import->importRun($import_id, true);
|
||||
header('Location:index.php?do=modules&action=modedit&mod=import&moduleaction=edit&import_id=' . $import_id . '&cp=' . SESSION);
|
||||
exit;
|
||||
|
||||
case 'run':
|
||||
$import_id = (int)$_REQUEST['import_id'];
|
||||
$import->importRun($import_id);
|
||||
header('Location:index.php?do=modules&action=modedit&mod=import&moduleaction=edit&import_id=' . $import_id . '&cp=' . SESSION);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
48
sql.php
Normal file
48
sql.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AVE.cms - Модуль импорта
|
||||
*
|
||||
* @package AVE.cms
|
||||
* @subpackage module_Import
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
/**
|
||||
* mySQL-запросы для установки, обновления и удаления модуля
|
||||
*/
|
||||
|
||||
$module_sql_install = array();
|
||||
$module_sql_deinstall = array();
|
||||
$module_sql_update = array();
|
||||
|
||||
$module_sql_deinstall[] = "DROP TABLE IF EXISTS %%PRFX%%_module_import;";
|
||||
|
||||
$module_sql_install[] = "CREATE TABLE %%PRFX%%_module_import (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`rub_id` int(10) unsigned NOT NULL,
|
||||
`parser` varchar(255) NOT NULL,
|
||||
`docs_disable` enum('0','1') NOT NULL default '0',
|
||||
`docs_create` enum('0','1') NOT NULL default '0',
|
||||
`file` varchar(255) NOT NULL,
|
||||
`monitor` enum('0','1') NOT NULL default '0',
|
||||
`tags` text NOT NULL,
|
||||
`fields` longtext NOT NULL,
|
||||
`time_edited` int(10) unsigned NOT NULL,
|
||||
`time_run` int(10) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
||||
|
||||
// Обновление модуля
|
||||
$module_sql_update[] = "
|
||||
UPDATE
|
||||
`%%PRFX%%_module`
|
||||
SET
|
||||
ModuleAveTag = '" . $modul['ModuleAveTag'] . "',
|
||||
ModulePHPTag = '" . $modul['ModulePHPTag'] . "',
|
||||
ModuleVersion = '" . $modul['ModuleVersion'] . "'
|
||||
WHERE
|
||||
ModuleSysName = '" . $modul['ModuleSysName'] . "'
|
||||
LIMIT 1;
|
||||
";
|
||||
337
templates/admin_edit.tpl
Normal file
337
templates/admin_edit.tpl
Normal file
@@ -0,0 +1,337 @@
|
||||
<script>
|
||||
var import_id = {$import_id};
|
||||
</script>
|
||||
|
||||
<div class="title">
|
||||
<h5>{if $import_id}{#import_edit_tit#}{else}{#import_new_tit#}{/if}</h5>
|
||||
</div>
|
||||
<div class="breadCrumbHolder module">
|
||||
<div class="breadCrumb module">
|
||||
<ul>
|
||||
<li class="firstB">
|
||||
<a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="index.php?do=modules&cp={$sess}">{#MODULES_SUB_TITLE#}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="index.php?do=modules&action=modedit&mod=import&moduleaction=1&cp={$sess}">{#mod_name#}</a>
|
||||
</li>
|
||||
<li>
|
||||
{if $import_id}{#import_edit_tit#}{else}{#import_new_tit#}{/if}
|
||||
</li>
|
||||
{if $import_id}
|
||||
<li>
|
||||
<strong class="code">{$import.name|escape|stripslashes}</strong>
|
||||
</li>
|
||||
{/if}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form action="index.php?do=modules&action=modedit&mod=import&moduleaction=save&import_id={$import_id}&cp={$sess}" method="post" class="mainForm" id="importSaveForm">
|
||||
|
||||
<div class="widget first">
|
||||
<div class="head {if $import_id}closed{/if}">
|
||||
<h5 class="iFrames">{#import_set#}</h5>
|
||||
</div>
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
|
||||
<tr class="noborder">
|
||||
<td width="250">{#name#}</td>
|
||||
<td>
|
||||
<input name="name" class="mousetrap" type="text" style="width:250px" value="{$import.name|escape|stripslashes}" autocomplete="off" id="importNameInput" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#rub_name#}</td>
|
||||
<td>
|
||||
{if !$import_id}
|
||||
<select name="rub_id">
|
||||
{foreach from=$rubs item=rub}
|
||||
<option value="{$rub.id}">{$rub.title}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
{else}
|
||||
{$import.rub_title|escape|stripslashes}
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#parser#}</td>
|
||||
<td>
|
||||
<select name="parser" style="width: 250px;">
|
||||
{foreach from=$parsers item=parser}
|
||||
<option value="{$parser}" {if $import.parser == $parser}selected="selected"{/if}>{$parser}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#docs_disable#}</td>
|
||||
<td><input class="mousetrap" type="checkbox" name="docs_disable" value="1" {if $import.docs_disable}checked="checked"{/if} /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#docs_create#}</td>
|
||||
<td><input type="checkbox" name="docs_create" value="1" {if $import.docs_create}checked="checked"{/if} /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#monitor#}</td>
|
||||
<td><input type="checkbox" name="monitor" value="1" {if $import.monitor}checked="checked"{/if} /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#file#}</td>
|
||||
<td>/ <input class="mousetrap" type="text" name="file" value="{$import.file|escape|stripslashes}" style="width:300px;" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="rowElem">
|
||||
<input type="submit" class="basicBtn" value="{if $import_id}{#save#}{else}{#create#}{/if}" />
|
||||
{if $import_id}
|
||||
|
||||
<input type="submit" class="blackBtn importSaveContBtn" value="{#save_cont#}" />
|
||||
<input type="submit" class="greenBtn" value="{#tags_refresh#}" onClick="location.href='index.php?do=modules&action=modedit&mod=import&moduleaction=tags&import_id={$import.id}&cp={$sess}';return false;" />
|
||||
<input type="submit" class="redBtn" onClick="location.href='index.php?do=modules&action=modedit&mod=import&moduleaction=run&import_id={$import_id}&cp={$sess}';return false;" value="{#run_btn#} (Ctrl+O)" />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{if $import_id}
|
||||
<div style="position:relative;width:73%;float:left">
|
||||
<div class="widget first">
|
||||
<div class="head {if $import_id}closed{/if}">
|
||||
<h5 class="iFrames">{#fields_main#}</h5>
|
||||
</div>
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
|
||||
<colgroup>
|
||||
<col width="1" />
|
||||
<col width="1" />
|
||||
<col width="1" />
|
||||
<col width="250" />
|
||||
<col width="1" />
|
||||
<col width="*" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="noborder">
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
<a href="javascript:void(0);" class="topDir icon_sprite ico_info" title="{#check_f_active#}"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
<a href="javascript:void(0);" class="topDir icon_sprite ico_info" title="{#check_f_key#}"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
<a href="javascript:void(0);" class="topDir icon_sprite ico_info" title="{#check_f_oblig#}"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td>{#field#}</td>
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
<a href="javascript:void(0);" class="topDir icon_sprite ico_info" title="{#compare_type#}"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td>{#field_tpl#}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach from=$import.fields.main key=field_id item=field}
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" value="1" name="fields[main][{$field_id}][active]" {if $field.active}checked="checked"{/if}/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" value="1" name="fields[main][{$field_id}][key]" {if $field.key}checked="checked"{/if}/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" value="1" name="fields[main][{$field_id}][oblig]" {if $field.oblig}checked="checked"{/if}/>
|
||||
</td>
|
||||
<td>{$field.title}</td>
|
||||
<td>
|
||||
<select name="fields[main][{$field_id}][comp]" style="width: 80px;">
|
||||
<option value="">==</option>
|
||||
<option value="LIKE" {if $field.comp=='LIKE'}selected="selected"{/if}>LIKE</option>
|
||||
</select>
|
||||
<td>
|
||||
<div class="pr12"><textarea class="mousetrap" name="fields[main][{$field_id}][tpl]" style="width:100%; height:24px;">{$field.tpl|escape|stripslashes}</textarea></div>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
|
||||
</table>
|
||||
</div>
|
||||
<div class="widget first">
|
||||
<div class="head">
|
||||
<h5 class="iFrames">{#fields_body#}</h5>
|
||||
</div>
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
|
||||
<colgroup>
|
||||
<col width="1" />
|
||||
<col width="1" />
|
||||
<col width="1" />
|
||||
<col width="1" />
|
||||
<col width="250" />
|
||||
<col width="1" />
|
||||
<col width="*" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="noborder">
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
<a href="javascript:void(0);" class="topDir icon_sprite ico_info" title="{#check_f_active#}"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
<a href="javascript:void(0);" class="topDir icon_sprite ico_info" title="{#check_f_key#}"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
<a href="javascript:void(0);" class="topDir icon_sprite ico_info" title="{#check_f_oblig#}"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
ID
|
||||
</div>
|
||||
</td>
|
||||
<td>{#field#}</td>
|
||||
<td align="center">
|
||||
<div align="center">
|
||||
<a href="javascript:void(0);" class="topDir icon_sprite ico_info" title="{#compare_type#}"></a>
|
||||
</div>
|
||||
</td>
|
||||
<td>{#field_tpl#}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach from=$import.fields.body key=field_id item=field}
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" value="1" name="fields[body][{$field_id}][active]" {if $field.active}checked="checked"{/if} />
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" value="1" name="fields[body][{$field_id}][key]" {if $field.key}checked="checked"{/if} />
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" value="1" name="fields[body][{$field_id}][oblig]" {if $field.oblig}checked="checked"{/if} />
|
||||
</td>
|
||||
<td><strong class="code">{$field_id}</strong></td>
|
||||
<td>{$field.title}</td>
|
||||
<td>
|
||||
<select name="fields[body][{$field_id}][comp]" style="width: 80px;">
|
||||
<option value="">==</option>
|
||||
<option value="LIKE" {if $field.comp=='LIKE'}selected="selected"{/if}>LIKE</option>
|
||||
</select>
|
||||
<td>
|
||||
<div class="pr12"><textarea class="mousetrap" name="fields[body][{$field_id}][tpl]" style="width:100%; height:24px;">{$field.tpl|escape|stripslashes}</textarea></div>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="widget first" style="position:relative;display:block;float:right;clear:none;width:25%">
|
||||
<div class="head">
|
||||
<h5 class="iFrames">{#tags#}</h5>
|
||||
</div>
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="pr12"><input class="mousetrap topleftDir" readonly style="width:100%" type="text" value="[Y-m-d]" title="{#tag_date#}"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="pr12"><input class="mousetrap topleftDir" readonly style="width:100%" type="text" value="[row:XXX]" title="{#tag_one#}"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="pr12"><input class="mousetrap topleftDir" readonly style="width:100%" type="text" value="[row:XXX:YYY:...]" title="{#tag_many#}"></div>
|
||||
</td>
|
||||
</tr>
|
||||
{if $import.tags}
|
||||
<tr>
|
||||
<td align="center">
|
||||
{#fields_file#}
|
||||
</td>
|
||||
</tr>
|
||||
{foreach from=$import.tags item=tag}
|
||||
<tr>
|
||||
<td>
|
||||
<div class="pr12"><input class="mousetrap" readonly style="width:100%" type="text" value="{$tag}"></div>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
<tr>
|
||||
{/if}
|
||||
</table>
|
||||
</div>
|
||||
{/if}
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
$(function() {ldelim}
|
||||
Mousetrap.bind(['ctrl+s', 'meta+s'], function(event) {ldelim}
|
||||
event.preventDefault();
|
||||
{if $import_id}
|
||||
saveCont();
|
||||
{else}
|
||||
$('#importSaveForm').submit();
|
||||
{/if}
|
||||
return false;
|
||||
{rdelim});
|
||||
|
||||
{if $import_id}
|
||||
Mousetrap.bind(['ctrl+o', 'meta+o'], function(event) {ldelim}
|
||||
event.preventDefault();
|
||||
importRun ();
|
||||
return false;
|
||||
{rdelim});
|
||||
{/if}
|
||||
|
||||
$('.importSaveContBtn').click(function(event) {ldelim}
|
||||
saveCont();
|
||||
return false;
|
||||
{rdelim});
|
||||
{rdelim});
|
||||
|
||||
// функция ajax-сохранения
|
||||
function saveCont () {ldelim}
|
||||
$('#importSaveForm').ajaxSubmit({ldelim}
|
||||
dataType: 'json',
|
||||
beforeSubmit: function () {ldelim} $.alerts._overlay('show');{rdelim},
|
||||
success: function (data) {ldelim}
|
||||
$.alerts._overlay('hide');
|
||||
$.jGrowl(data['message'], {ldelim}
|
||||
header: data['header'],
|
||||
theme: data['theme']
|
||||
{rdelim});
|
||||
{rdelim}
|
||||
{rdelim});
|
||||
return false;
|
||||
{rdelim}
|
||||
|
||||
// функция запуска импорта
|
||||
function importRun () {ldelim}
|
||||
location.href='index.php?do=modules&action=modedit&mod=import&moduleaction=importrun&import_id={$import_id}&cp={$sess}';
|
||||
/* $.ajax({ldelim}
|
||||
url: 'index.php?do=modules&action=modedit&mod=import&moduleaction=importrun&import_id={$import_id}&cp={$sess}',
|
||||
beforeSend: function () {ldelim} $.alerts._overlay('show');{rdelim},
|
||||
success: function () {ldelim}
|
||||
$.alerts._overlay('hide');
|
||||
$.jGrowl('{#imported#}', {ldelim} theme: 'accept'{rdelim});
|
||||
{rdelim}
|
||||
{rdelim});*/
|
||||
{rdelim}
|
||||
|
||||
</script>
|
||||
{if $import_id}
|
||||
{include file="$codemirror_connect"}
|
||||
{include conn_id="_1" file="$codemirror_editor" textarea_id='codemirror' ctrls='saveCont();' ctrlo='importRun();' height=200}
|
||||
{include conn_id="_2" file="$codemirror_editor" textarea_id='codemirror2' ctrls='saveCont();' ctrlo='importRun();' height=200}
|
||||
{include conn_id="_3" file="$codemirror_editor" textarea_id='codemirror3' ctrls='saveCont();' ctrlo='importRun();' height=200}
|
||||
{/if}
|
||||
96
templates/admin_list.tpl
Normal file
96
templates/admin_list.tpl
Normal file
@@ -0,0 +1,96 @@
|
||||
<div class="title">
|
||||
<h5>{#mod_name#}</h5>
|
||||
</div>
|
||||
<div class="breadCrumbHolder module">
|
||||
<div class="breadCrumb module">
|
||||
<ul>
|
||||
<li class="firstB">
|
||||
<a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="index.php?do=modules&cp={$sess}">{#MODULES_SUB_TITLE#}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="index.php?do=modules&action=modedit&mod=import&moduleaction=1&cp={$sess}">{#mod_name#}</a>
|
||||
</li>
|
||||
<li>
|
||||
<strong class="code">{#imports#}</strong>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="widget first">
|
||||
<div class="head">
|
||||
<h5 class="iFrames">{#imports#}</h5>
|
||||
<div class="num">
|
||||
<a class="basicNum" href="index.php?do=modules&action=modedit&mod=import&moduleaction=edit&cp={$sess}">{#import_add#}</a>
|
||||
</div>
|
||||
</div>
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic" id="importsTable">
|
||||
<colgroup>
|
||||
<col width="1" />
|
||||
<col width="*" />
|
||||
<col width="150" />
|
||||
<col width="80" />
|
||||
<col width="140" />
|
||||
<col width="140" />
|
||||
<col width="1" />
|
||||
<col width="1" />
|
||||
<col width="1" />
|
||||
<col width="1" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="noborder">
|
||||
<td>ID</td>
|
||||
<td>{#name#}</td>
|
||||
<td>{#rub_name#}</td>
|
||||
<td>{#parser#}</td>
|
||||
<td>{#time_edited#}</td>
|
||||
<td>{#time_run#}</td>
|
||||
<td colspan="4">{#actions#}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach from=$imports item=import}
|
||||
<tr>
|
||||
<td>{$import.id}</td>
|
||||
<td>
|
||||
<a class="topDir" href="index.php?do=modules&action=modedit&mod=import&moduleaction=edit&import_id={$import.id}&cp={$sess}" title="{#edit#}">
|
||||
<strong>{$import.name|escape|stripslashes}</strong>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">{$import.rub_title|escape|stripslashes}</td>
|
||||
<td align="center">{$import.parser|escape|stripslashes}</td>
|
||||
<td align="center" class="date_text nowrap">{$import.time_edited|date_format:$TIME_FORMAT|pretty_date}</td>
|
||||
<td align="center" class="date_text nowrap">{if $import.time_run}{$import.time_run|date_format:$TIME_FORMAT|pretty_date}{/if}</td>
|
||||
<td align="center">
|
||||
<a class="topDir icon_sprite ico_start" title="{#run#}" href="index.php?do=modules&action=modedit&mod=import&moduleaction=run&import_id={$import.id}&cp={$sess}"></a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a class="topDir icon_sprite ico_edit" title="{#edit#}" href="index.php?do=modules&action=modedit&mod=import&moduleaction=edit&import_id={$import.id}&cp={$sess}"></a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a class="topDir icon_sprite ico_copy" title="{#copy#}" href="index.php?do=modules&action=modedit&mod=import&moduleaction=copy&import_id={$import.id}&cp={$sess}"></a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a class="topleftDir icon_sprite ico_delete ConfirmDelete" dir="{#delete_t#}" name="{#delete_m#}" title="{#delete#}" href="index.php?do=modules&action=modedit&mod=import&moduleaction=delete&import_id={$import.id}&cp={$sess}"></a>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
{if !$imports}
|
||||
<div class="rowElem">
|
||||
<ul class="messages">
|
||||
<li class="highlight yellow">{#noimports#}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{if $page_nav}
|
||||
<div class="pagination">
|
||||
<ul class="pages">
|
||||
{$page_nav}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
4
templates/index.php
Normal file
4
templates/index.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
header('Location:/');
|
||||
exit;
|
||||
?>
|
||||
Reference in New Issue
Block a user