You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
838 lines
20 KiB
838 lines
20 KiB
4 years ago
|
<?php
|
||
|
|
||
|
class WorkDocs
|
||
|
{
|
||
|
//-- Templates directory
|
||
|
public static $tpl_dir;
|
||
|
|
||
|
|
||
|
/* ---------------------------------------------------------------------------------------------------------------------- */
|
||
|
/* ---------------------------------------------------------------------------------------------------------------------- */
|
||
|
/* ---------------------------------------------------------------------------------------------------------------------- */
|
||
|
|
||
|
|
||
|
/*
|
||
|
|-----------------------------------------------------------------------------------------------------------------------
|
||
|
| _json
|
||
|
|-----------------------------------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
| Return array in JSON format
|
||
|
|
|
||
|
*/
|
||
|
public static function _json ($data, $exit = false)
|
||
|
{
|
||
|
header("Content-Type: application/json;charset=utf-8");
|
||
|
|
||
|
$json = json_encode($data);
|
||
|
|
||
|
if ($json === false)
|
||
|
{
|
||
|
$json = json_encode(array("jsonError", json_last_error_msg()));
|
||
|
|
||
|
if ($json === false)
|
||
|
$json = '{"jsonError": "unknown"}';
|
||
|
|
||
|
http_response_code(500);
|
||
|
}
|
||
|
|
||
|
echo $json;
|
||
|
|
||
|
if ($exit)
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _get_all_rubrics ()
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$sql = "
|
||
|
SELECT
|
||
|
Id,
|
||
|
rubric_title
|
||
|
FROM
|
||
|
" . PREFIX . "_rubrics
|
||
|
ORDER BY rubric_position ASC
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
|
||
|
$rubrics = [];
|
||
|
|
||
|
while ($rub = $sql->FetchAssocArray())
|
||
|
array_push($rubrics, $rub);
|
||
|
|
||
|
return $rubrics;
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _get_rubric ($rubric_id = null)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$rubric_id = (isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : $rubric_id);
|
||
|
|
||
|
$sql = "
|
||
|
SELECT
|
||
|
*
|
||
|
FROM
|
||
|
" . PREFIX . "_rubrics
|
||
|
WHERE
|
||
|
Id = {$rubric_id}
|
||
|
LIMIT 0,1
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
|
||
|
return $sql->FetchAssocArray();
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _get_rubric_fields ($rubric_id = null)
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template;
|
||
|
|
||
|
$rubric_id = (isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : $rubric_id);
|
||
|
|
||
|
// Поля
|
||
|
$sql = "
|
||
|
SELECT
|
||
|
a.*,
|
||
|
b.group_title,
|
||
|
b.group_description,
|
||
|
b.group_position
|
||
|
FROM
|
||
|
" . PREFIX . "_rubric_fields AS a
|
||
|
LEFT JOIN
|
||
|
" . PREFIX . "_rubric_fields_group AS b
|
||
|
ON a.rubric_field_group = b.Id
|
||
|
WHERE
|
||
|
a.rubric_id = '" . $rubric_id . "'
|
||
|
ORDER BY
|
||
|
b.group_position ASC, a.rubric_field_position ASC
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
|
||
|
$fields_list = [];
|
||
|
|
||
|
while ($row = $sql->FetchRow())
|
||
|
{
|
||
|
$group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0;
|
||
|
|
||
|
$fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100;
|
||
|
$fields_list[$group_id]['group_title'] = $row->group_title;
|
||
|
$fields_list[$group_id]['group_description'] = $row->group_description;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['rubric_field_group'] = $row->rubric_field_group;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['rubric_field_alias'] = $row->rubric_field_alias;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['rubric_field_type'] = $row->rubric_field_type;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['rubric_field_numeric'] = $row->rubric_field_numeric;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default;
|
||
|
$fields_list[$group_id]['fields'][$row->Id]['rubric_field_search'] = $row->rubric_field_search;
|
||
|
}
|
||
|
|
||
|
$fields_list = msort($fields_list, 'group_position');
|
||
|
|
||
|
$AVE_Template->assign('groups_count', count($fields_list));
|
||
|
$AVE_Template->assign('fields_list', $fields_list);
|
||
|
$AVE_Template->assign('field_array', get_field_type());
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _get_work ($work_id = null)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$work_id = (isset($_REQUEST['work_id']) ? (int)$_REQUEST['work_id'] : $work_id);
|
||
|
|
||
|
$sql = "
|
||
|
SELECT
|
||
|
*
|
||
|
FROM
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
WHERE
|
||
|
id = {$work_id}
|
||
|
LIMIT 0,1
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
|
||
|
return $sql->FetchAssocArray();
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _get_works ()
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$sql = "
|
||
|
SELECT
|
||
|
*
|
||
|
FROM
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
|
||
|
$works = [];
|
||
|
|
||
|
while ($work = $sql->FetchAssocArray())
|
||
|
array_push($works, $work);
|
||
|
|
||
|
return $works;
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _get_num_docs ($rubric_id = null)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$rubric_id = (isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : $rubric_id);
|
||
|
|
||
|
$sql = "
|
||
|
SELECT
|
||
|
count(Id)
|
||
|
FROM
|
||
|
" . PREFIX . "_documents
|
||
|
WHERE
|
||
|
rubric_id = {$rubric_id}
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
|
||
|
return $sql->GetCell();
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _get_document ($doc_id = null)
|
||
|
{
|
||
|
if (! is_numeric($doc_id) OR $doc_id < 1)
|
||
|
return false;
|
||
|
|
||
|
$data = get_document($doc_id);
|
||
|
|
||
|
$fields = get_document_fields ($doc_id);
|
||
|
|
||
|
foreach ($fields AS $k => $v)
|
||
|
if (is_numeric($k))
|
||
|
$data['feld'][$k] = self::_field_type_value($v);
|
||
|
|
||
|
|
||
|
unset ($fields);
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _field_type_value ($data = [])
|
||
|
{
|
||
|
if (empty($data))
|
||
|
return false;
|
||
|
|
||
|
$func = 'get_field_' . $data['rubric_field_type'];
|
||
|
|
||
|
if (! is_callable($func))
|
||
|
$func = 'get_field_default';
|
||
|
|
||
|
$field_value = $func($data['field_value'], 'api', $data['rubric_field_id'], null, null, $x, null, null, null, $data['rubric_field_default']);
|
||
|
|
||
|
return $field_value;
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _set_first_start ($work_id)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
if (! $work_id)
|
||
|
return false;
|
||
|
|
||
|
$sql = "
|
||
|
DELETE FROM
|
||
|
" . PREFIX . "_module_workdocs_logs
|
||
|
WHERE
|
||
|
work_id = {$work_id}
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
$sql = "
|
||
|
UPDATE
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
SET
|
||
|
last_run = '" . time() . "',
|
||
|
last_count = 0
|
||
|
WHERE
|
||
|
id = {$work_id}
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _save_logs ($work_id, $document_id, $document_title, $rubric_id, $document_logs, $limit)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$document_title = htmlspecialchars($document_title, ENT_QUOTES);
|
||
|
|
||
|
if ($document_logs)
|
||
|
{
|
||
|
$sql = "
|
||
|
INSERT INTO
|
||
|
" . PREFIX . "_module_workdocs_logs
|
||
|
SET
|
||
|
`work_id` = '{$work_id}',
|
||
|
`rubric_id` = '{$rubric_id}',
|
||
|
`document_id` = '{$document_id}',
|
||
|
`document_title` = '{$document_title}',
|
||
|
`last_run` = '" . time() . "',
|
||
|
`logs` = '" . serialize($document_logs) . "'
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
}
|
||
|
|
||
|
$sql = "
|
||
|
UPDATE
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
SET
|
||
|
last_count = '" . ($limit + 1) . "'
|
||
|
WHERE
|
||
|
id = '{$work_id}'
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _doc_save ($document_id, $rubric_id, $data, $code, $revisions, $logs)
|
||
|
{
|
||
|
include_once BASE_DIR . '/class/class.docs.php';
|
||
|
|
||
|
$AVE_Document = new AVE_Document();
|
||
|
|
||
|
$document_id = $AVE_Document->documentSave($rubric_id, $document_id, $data, false, $code, $revisions, $logs, false);
|
||
|
|
||
|
return $document_id;
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function _get_logs_json ($work_id = null)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$work = self::_get_work($work_id);
|
||
|
|
||
|
$where = '';
|
||
|
|
||
|
switch ($_REQUEST['iSortCol_0'])
|
||
|
{
|
||
|
case '0':
|
||
|
$order = 'ORDER BY document_id ';
|
||
|
break;
|
||
|
|
||
|
case '1':
|
||
|
$order = 'ORDER BY document_title ';
|
||
|
break;
|
||
|
|
||
|
case '2':
|
||
|
$order = 'ORDER BY last_run ';
|
||
|
break;
|
||
|
|
||
|
case '3':
|
||
|
$order = 'ORDER BY logs ';
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
$order .= $_REQUEST['sSortDir_0'];
|
||
|
|
||
|
$start = $_REQUEST['iDisplayStart'] ? (int)$_REQUEST['iDisplayStart'] : 0;
|
||
|
$finish = $_REQUEST['iDisplayLength'] ? (int)$_REQUEST['iDisplayLength'] : 40;
|
||
|
|
||
|
if (isset($_REQUEST['sSearch']) && $_REQUEST['sSearch'] != '')
|
||
|
{
|
||
|
$where = "AND (document_id LIKE '%{$_REQUEST['sSearch']}%'";
|
||
|
$where .= " OR document_title LIKE '%{$_REQUEST['sSearch']}%'";
|
||
|
$where .= " OR last_run LIKE '%{$_REQUEST['sSearch']}%'";
|
||
|
$where .= " OR logs LIKE '%{$_REQUEST['sSearch']}%')";
|
||
|
}
|
||
|
|
||
|
$sql = "
|
||
|
SELECT SQL_CALC_FOUND_ROWS
|
||
|
*
|
||
|
FROM
|
||
|
" . PREFIX . "_module_workdocs_logs
|
||
|
WHERE
|
||
|
work_id = '{$work_id}'
|
||
|
{$where}
|
||
|
{$order}
|
||
|
LIMIT {$start},{$finish}
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
|
||
|
$num = $AVE_DB->GetFoundRows();
|
||
|
|
||
|
$output = [
|
||
|
'sEcho' => (int)$_REQUEST['sEcho'],
|
||
|
'iTotalRecords' => $num,
|
||
|
'iTotalDisplayRecords' => $num,
|
||
|
'aaData' => []
|
||
|
];
|
||
|
|
||
|
while ($log = $sql->FetchAssocArray())
|
||
|
{
|
||
|
$output['aaData'][] = [
|
||
|
'<a title="Edit" href="index.php?do=docs&action=edit&rubric_id='. $work['rubric_id'] .'&Id='. $log['document_id'] .'&cp='.SESSION.'" target="_blank">'. $log['document_id'] .'</a>',
|
||
|
'<a title="Show" href="/index.php?id='. $log['document_id'] .'" target="_blank"><strong>' . $log['document_title'] . '</strong></a>',
|
||
|
'<span class="date_text dgrey">' . translate_date(strftime(TIME_FORMAT, $log['last_run'])) . '</span>',
|
||
|
'<small>' . implode('<br>', unserialize($log['logs'])) . '</small>'
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function _clear_text ($string = null, $span = false)
|
||
|
{
|
||
|
// Убираем пробелы начало/конец
|
||
|
$string = trim($string);
|
||
|
|
||
|
// Замена <br>
|
||
|
$replace = [
|
||
|
'<br />' => '<br>',
|
||
|
'<br/>' => '<br>'
|
||
|
];
|
||
|
|
||
|
$string = str_replace(array_keys($replace), array_values($replace), $string);
|
||
|
|
||
|
// RegExp
|
||
|
$expression = [
|
||
|
// Убираем пустые теги
|
||
|
'~<(p|span)>(?>\s+| |(?R))*</\1>~' => '',
|
||
|
// Убираем стили из тегов
|
||
|
'/(<[^>]+) style=".*?"/i' => '$1',
|
||
|
// Убираем двойные пробелы
|
||
|
'/\s{2,}/' => ' ',
|
||
|
// Убираем переходы на новую строку
|
||
|
'/[\t\n]/' => ' ',
|
||
|
// Убираем пустые теги
|
||
|
'/<(\w+)\b(?:\s+[\w\-.:]+(?:\s*=\s*(?:"[^"]*"|"[^"]*"|[\w\-.:]+))?)*\s*\/?>\s*<\/\1\s*>/' => ''
|
||
|
];
|
||
|
|
||
|
// Очищаем текст по условиям
|
||
|
$string = preg_replace(array_keys($expression), array_values($expression), $string);
|
||
|
|
||
|
// Убираем span
|
||
|
if ($span)
|
||
|
{
|
||
|
$replace = [
|
||
|
'<span>' => '',
|
||
|
'</span>' => ''
|
||
|
];
|
||
|
|
||
|
$string = str_replace(array_keys($replace), array_values($replace), $string);
|
||
|
}
|
||
|
|
||
|
// Повторно проходимся по условиям
|
||
|
$string = preg_replace(array_keys($expression), array_values($expression), $string);
|
||
|
|
||
|
// Убираем пробелы начало/конец
|
||
|
$string = trim($string);
|
||
|
|
||
|
return $string;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function _is_image ($path = null)
|
||
|
{
|
||
|
if (@is_array(getimagesize($path)))
|
||
|
return true;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function _if_exists ($path = null)
|
||
|
{
|
||
|
if (file_exists($path))
|
||
|
return true;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function _link_exists ($string = null)
|
||
|
{
|
||
|
preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $string, $match);
|
||
|
|
||
|
return $match[0];
|
||
|
}
|
||
|
|
||
|
|
||
|
/* ---------------------------------------------------------------------------------------------------------------------- */
|
||
|
/* ---------------------------------------------------------------------------------------------------------------------- */
|
||
|
/* ---------------------------------------------------------------------------------------------------------------------- */
|
||
|
|
||
|
|
||
|
public static function mainPage ()
|
||
|
{
|
||
|
global $AVE_Template;
|
||
|
|
||
|
$AVE_Template->assign('works', self::_get_works());
|
||
|
$AVE_Template->assign('rubrics', self::_get_all_rubrics());
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch(self::$tpl_dir . 'main.tpl'));
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function editWork ()
|
||
|
{
|
||
|
global $AVE_Template;
|
||
|
|
||
|
$work_id = (isset($_REQUEST['work_id']) ? (int)$_REQUEST['work_id'] : '');
|
||
|
$rubric_id = (isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : '');
|
||
|
|
||
|
if (! $work_id)
|
||
|
{
|
||
|
$work = [
|
||
|
'title' => (isset($_REQUEST['title']) ? $_REQUEST['title'] : 'Без названия'),
|
||
|
'description' => (isset($_REQUEST['description']) ? $_REQUEST['description'] : ''),
|
||
|
'rubric_id' => $rubric_id
|
||
|
];
|
||
|
|
||
|
$AVE_Template->assign('work', $work);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$work = self::_get_work();
|
||
|
|
||
|
$rubric_id = $work['rubric_id'];
|
||
|
}
|
||
|
|
||
|
self::_get_rubric_fields($rubric_id);
|
||
|
|
||
|
$AVE_Template->assign('work', $work);
|
||
|
$AVE_Template->assign('work_id', $work_id);
|
||
|
$AVE_Template->assign('rubric', self::_get_rubric($rubric_id));
|
||
|
$AVE_Template->assign('rubric_id', $rubric_id);
|
||
|
$AVE_Template->assign('rubrics', self::_get_all_rubrics());
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch(self::$tpl_dir . 'edit.tpl'));
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function saveWork ()
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template;
|
||
|
|
||
|
$work_id = (int)$_REQUEST['work_id'];
|
||
|
|
||
|
if (! $work_id)
|
||
|
{
|
||
|
$sql = "
|
||
|
INSERT INTO
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
SET
|
||
|
title = '" . $_REQUEST['title'] . "',
|
||
|
description = '" . $_REQUEST['description'] . "',
|
||
|
rubric_id = '" . (int)$_REQUEST['rubric_id'] . "',
|
||
|
save_enable = '" . ($_REQUEST['save_enable'] ? '1' : '0') . "',
|
||
|
code_enable = '" . ($_REQUEST['code_enable'] ? '1' : '0') . "',
|
||
|
revisions_enable = '" . ($_REQUEST['revisions_enable'] ? '1' : '0') . "',
|
||
|
logs_enable = '" . ($_REQUEST['logs_enable'] ? '1' : '0') . "',
|
||
|
self_sql = '" . $_REQUEST['self_sql'] . "',
|
||
|
code_before = '" . $_REQUEST['code_before'] . "',
|
||
|
code_after = '" . $_REQUEST['code_after'] . "'
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
|
||
|
$work_id = $AVE_DB->InsertId();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$sql = "
|
||
|
UPDATE
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
SET
|
||
|
title = '" . $_REQUEST['title'] . "',
|
||
|
description = '" . $_REQUEST['description'] . "',
|
||
|
save_enable = '" . ($_REQUEST['save_enable'] ? '1' : '0') . "',
|
||
|
code_enable = '" . ($_REQUEST['code_enable'] ? '1' : '0') . "',
|
||
|
revisions_enable = '" . ($_REQUEST['revisions_enable'] ? '1' : '0') . "',
|
||
|
logs_enable = '" . ($_REQUEST['logs_enable'] ? '1' : '0') . "',
|
||
|
self_sql = '" . $_REQUEST['self_sql'] . "',
|
||
|
code_before = '" . $_REQUEST['code_before'] . "',
|
||
|
code_after = '" . $_REQUEST['code_after'] . "'
|
||
|
WHERE
|
||
|
id = '" . $work_id . "'
|
||
|
";
|
||
|
|
||
|
$sql = $AVE_DB->Query($sql);
|
||
|
}
|
||
|
|
||
|
$return = [
|
||
|
'success' => $sql ? true : false,
|
||
|
'work_id' => $work_id,
|
||
|
'message' => $sql ? $AVE_Template->get_config_vars('mod_edit_save_succes_t') : $AVE_Template->get_config_vars('mod_edit_save_error_t'),
|
||
|
'header' => $sql ? $AVE_Template->get_config_vars('mod_edit_save_succes_h') : $AVE_Template->get_config_vars('mod_edit_save_error_h'),
|
||
|
'theme' => $sql ? 'accept' : 'error',
|
||
|
];
|
||
|
|
||
|
if (isAjax())
|
||
|
{
|
||
|
self::_json($return, true);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$location = $work_id
|
||
|
? 'index.php?do=modules&action=modedit&mod=workdocs&moduleaction=1&cp=' . SESSION
|
||
|
: 'index.php?do=modules&action=modedit&mod=workdocs&moduleaction=1&cp=' . SESSION;
|
||
|
header('Location:' . $location);
|
||
|
exit;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function runWork ()
|
||
|
{
|
||
|
global $AVE_Template;
|
||
|
|
||
|
$work_id = (int)$_REQUEST['work_id'];
|
||
|
|
||
|
$work = self::_get_work($work_id);
|
||
|
|
||
|
$rubric_id = $work['rubric_id'];
|
||
|
|
||
|
$counts = self::_get_num_docs($rubric_id);
|
||
|
|
||
|
$diff = ($counts == $work['last_count']);
|
||
|
|
||
|
$AVE_Template->assign('work_id', $work_id);
|
||
|
$AVE_Template->assign('work', $work);
|
||
|
$AVE_Template->assign('diff', $diff);
|
||
|
$AVE_Template->assign('rubric_id', $rubric_id);
|
||
|
$AVE_Template->assign('count', $counts);
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch(self::$tpl_dir . 'run.tpl'));
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function stepOne ()
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template;
|
||
|
|
||
|
Debug::startTime('step');
|
||
|
|
||
|
// Логи
|
||
|
$document_logs = [];
|
||
|
|
||
|
// Лимит
|
||
|
$limit = (isset($_REQUEST['limit']) ? (int)$_REQUEST['limit'] : 0);
|
||
|
|
||
|
// ID Работы
|
||
|
$work_id = (int)$_REQUEST['work_id'];
|
||
|
|
||
|
// Если не получено, то
|
||
|
if (! $work_id)
|
||
|
{
|
||
|
$return = ['success' => false];
|
||
|
|
||
|
self::_json($return, true);
|
||
|
}
|
||
|
|
||
|
// Получаем настройки
|
||
|
$work = self::_get_work($work_id);
|
||
|
|
||
|
// ID рубрики
|
||
|
$rubric_id = (int)$work['rubric_id'];
|
||
|
|
||
|
// Если первый документ, очищаем логи и ставим время обхода
|
||
|
if ($limit == 0)
|
||
|
self::_set_first_start($work_id);
|
||
|
|
||
|
// Свой SQL, код
|
||
|
if ($work['self_sql'])
|
||
|
eval (' ?>' . $work['self_sql'] . '<?'.'php ');
|
||
|
|
||
|
// SQL запрос, на получение ID документа
|
||
|
if (! isset($sql))
|
||
|
{
|
||
|
$sql = "
|
||
|
SELECT
|
||
|
Id
|
||
|
FROM
|
||
|
" . PREFIX . "_documents
|
||
|
WHERE
|
||
|
rubric_id = {$work['rubric_id']}
|
||
|
ORDER BY Id DESC
|
||
|
LIMIT {$limit}, 1;
|
||
|
";
|
||
|
}
|
||
|
|
||
|
// Получаем ID документа
|
||
|
if (! isset($document_id))
|
||
|
$document_id = $AVE_DB->Query($sql)->GetCell();
|
||
|
|
||
|
// Получаем данные документа, включая данные полей
|
||
|
$data = self::_get_document($document_id);
|
||
|
|
||
|
// Выполняем код перед сохранением документа
|
||
|
if ($work['code_before'] > '')
|
||
|
eval (' ?>' . $work['code_before'] . '<?'.'php ');
|
||
|
|
||
|
// Сохранение документа, если стоит галочка и есть данные
|
||
|
if ($work['save_enable'] == 1 && $data)
|
||
|
$save_id = self::_doc_save($document_id, $rubric_id, $data, (bool)$work['code_enable'], (bool)$work['revisions_enable'], (bool)$work['logs_enable']);
|
||
|
|
||
|
// Выполняем код после сохранением документа
|
||
|
if ($work['code_after'] > '')
|
||
|
eval (' ?>' . $work['code_after'] . '<?'.'php ');
|
||
|
|
||
|
// Сохраняем логи
|
||
|
self::_save_logs($work_id, $document_id, $data['document_title'], $rubric_id, $document_logs, $limit);
|
||
|
|
||
|
// Ответ
|
||
|
$return = [
|
||
|
'success' => true,
|
||
|
'time' => Debug::endTime('step'),
|
||
|
'limit' => $limit + 1,
|
||
|
'document_id' => $document_id,
|
||
|
'rubric_id' => $rubric_id,
|
||
|
'document_title' => $data['document_title'],
|
||
|
'document_alias' => $data['document_alias'],
|
||
|
'document_log' => implode('<br>', $document_logs)
|
||
|
];
|
||
|
|
||
|
self::_json($return, true);
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function logWork ()
|
||
|
{
|
||
|
global $AVE_Template;
|
||
|
|
||
|
$work_id = (int)$_REQUEST['work_id'];
|
||
|
|
||
|
$AVE_Template->assign('work_id', $work_id);
|
||
|
$AVE_Template->assign('work', self::_get_work($work_id));
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch(self::$tpl_dir . 'log.tpl'));
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function logJson ()
|
||
|
{
|
||
|
$work_id = (int)$_REQUEST['work_id'];
|
||
|
|
||
|
$output = self::_get_logs_json($work_id);
|
||
|
|
||
|
self::_json($output, true);
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function delWork ()
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$work_id = (int)$_REQUEST['work_id'];
|
||
|
|
||
|
$location = 'index.php?do=modules&action=modedit&mod=workdocs&moduleaction=1&cp=' . SESSION;
|
||
|
|
||
|
if (! $work_id)
|
||
|
{
|
||
|
header('Location:' . $location);
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
$sql = "
|
||
|
DELETE FROM
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
WHERE
|
||
|
id = '{$work_id}'
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
$sql = "
|
||
|
DELETE FROM
|
||
|
" . PREFIX . "_module_workdocs_logs
|
||
|
WHERE
|
||
|
work_id = '{$work_id}'
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
header('Location:' . $location);
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function clearWork ()
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$work_id = (int)$_REQUEST['work_id'];
|
||
|
|
||
|
$sql = "
|
||
|
DELETE FROM
|
||
|
" . PREFIX . "_module_workdocs_logs
|
||
|
WHERE
|
||
|
work_id = '{$work_id}'
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
$sql = "
|
||
|
UPDATE
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
SET
|
||
|
last_run = '',
|
||
|
last_count = '0'
|
||
|
WHERE
|
||
|
id = '{$work_id}'
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
$return = [
|
||
|
'success' => true
|
||
|
];
|
||
|
|
||
|
self::_json($return, true);
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function clearWorks ()
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
|
||
|
$sql = "
|
||
|
TRUNCATE TABLE " . PREFIX . "_module_workdocs_logs
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
$sql = "
|
||
|
UPDATE
|
||
|
" . PREFIX . "_module_workdocs
|
||
|
SET
|
||
|
last_run = '',
|
||
|
last_count = '0'
|
||
|
";
|
||
|
|
||
|
$AVE_DB->Query($sql);
|
||
|
|
||
|
$return = [
|
||
|
'success' => true
|
||
|
];
|
||
|
|
||
|
self::_json($return, true);
|
||
|
}
|
||
|
}
|