580 lines
16 KiB
PHP
580 lines
16 KiB
PHP
<?php
|
||
|
||
class Editdoc
|
||
{
|
||
/**
|
||
* Метод, предназначенный для получения структуры документа из БД
|
||
*
|
||
* @param int $document_id идентификатор Документа
|
||
* return - возвращает документ положенный в структуру ....
|
||
**/
|
||
public static function documentGet($document_id, $rubric_id = 0)
|
||
{
|
||
global $AVE_DB;
|
||
|
||
$document_id = (int)$document_id;
|
||
$rubric_id = (int)$rubric_id;
|
||
|
||
if ($document_id == 0 && $rubric_id == 0)
|
||
return false;
|
||
|
||
$sql = "
|
||
SELECT
|
||
*
|
||
FROM
|
||
" . PREFIX . "_documents
|
||
WHERE
|
||
Id = '" . $document_id . "'
|
||
AND
|
||
document_author_id = " . $_SESSION['user_id'] . "
|
||
LIMIT 1
|
||
";
|
||
|
||
$rows = $AVE_DB->Query($sql);
|
||
|
||
if ($rows->NumRows() > 0)
|
||
{
|
||
$rubric_id = 0;
|
||
}
|
||
|
||
if ($rubric_id > 0)
|
||
{
|
||
$rows = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_documents LIMIT 1");
|
||
}
|
||
|
||
while ($row = $rows->FetchAssocArray())
|
||
{
|
||
$header = $row;
|
||
}
|
||
|
||
if ($rubric_id > 0)
|
||
{
|
||
foreach($header as $k => &$v)
|
||
{
|
||
$v = '';
|
||
}
|
||
}
|
||
|
||
$felds = array();
|
||
|
||
$feldsType = array();
|
||
|
||
if(! $rubric_id > 0)
|
||
{
|
||
$rows = $AVE_DB->Query("
|
||
SELECT
|
||
doc.Id AS df_id,
|
||
rub.*,
|
||
rubric_field_default,
|
||
doc.field_value
|
||
FROM
|
||
" . PREFIX . "_rubric_fields AS rub
|
||
LEFT JOIN
|
||
" . PREFIX . "_document_fields AS doc
|
||
ON rubric_field_id = rub.Id
|
||
WHERE
|
||
document_id = '" . $document_id . "'
|
||
AND rubric_id
|
||
ORDER BY
|
||
rubric_field_position ASC
|
||
");
|
||
}
|
||
else
|
||
{
|
||
$rows = $AVE_DB->Query("
|
||
SELECT
|
||
0 as df_id,
|
||
rub.*,
|
||
rubric_field_default,
|
||
rubric_field_default as field_value
|
||
FROM
|
||
" . PREFIX . "_rubric_fields AS rub
|
||
WHERE
|
||
rub.rubric_id = '" . $rubric_id . "'
|
||
ORDER BY
|
||
rubric_field_position ASC
|
||
");
|
||
}
|
||
|
||
while ($row = $rows->FetchAssocArray())
|
||
{
|
||
$felds[$row['Id']]=$row['df_id']
|
||
? $row['field_value']
|
||
: $row['rubric_field_default'];
|
||
|
||
$feldsType[$row['Id']]['type']=$row['rubric_field_type'];
|
||
|
||
$feldsType[$row['Id']]['title']=$row['rubric_field_title'];
|
||
}
|
||
|
||
$result['header'] = $header;
|
||
$result['body'] = $felds;
|
||
$result['feld_type'] = $feldsType;
|
||
|
||
// Debug::_echo($result, true);
|
||
|
||
return $result;
|
||
}
|
||
|
||
|
||
public static function EditDocList($tpl_dir)
|
||
{
|
||
global $AVE_DB, $AVE_Template;
|
||
|
||
$imports = array();
|
||
|
||
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module_editdoc");
|
||
|
||
while ($result = $sql->FetchRow())
|
||
{
|
||
array_push($imports, $result);
|
||
}
|
||
|
||
$rubs = array();
|
||
|
||
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_rubrics");
|
||
|
||
while ($result = $sql->FetchRow())
|
||
{
|
||
array_push($rubs, $result);
|
||
}
|
||
|
||
$AVE_Template->assign('editdocs', $imports);
|
||
$AVE_Template->assign('rubs', $rubs);
|
||
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_list.tpl'));
|
||
}
|
||
|
||
|
||
/**
|
||
* Добавление нового
|
||
*
|
||
* @param int $import_id идентификатор
|
||
* @param string $tpl_dir - путь к папке с шаблонами модуля
|
||
*
|
||
*/
|
||
public static function EditDocNew($tpl_dir)
|
||
{
|
||
global $AVE_DB, $AVE_Template;
|
||
|
||
$rubs = array();
|
||
|
||
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_rubrics");
|
||
|
||
while ($result = $sql->FetchRow())
|
||
{
|
||
array_push($rubs, $result);
|
||
}
|
||
|
||
$AVE_Template->assign('rubs',$rubs);
|
||
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_edit.tpl'));
|
||
}
|
||
|
||
|
||
/**
|
||
* Редактирование
|
||
*
|
||
* @param int $import_id идентификатор
|
||
* @param string $tpl_dir - путь к папке с шаблонами модуля
|
||
*
|
||
*/
|
||
public static function EditDocEdit($import_id, $tpl_dir)
|
||
{
|
||
global $AVE_DB, $AVE_Template,$AVE_Document;
|
||
|
||
if (is_numeric($import_id))
|
||
{
|
||
$sql = $AVE_DB->Query("
|
||
SELECT
|
||
*
|
||
FROM
|
||
" . PREFIX . "_module_editdoc
|
||
WHERE
|
||
id = '" . $import_id . "'
|
||
");
|
||
|
||
$row = $sql->FetchAssocArray();
|
||
}
|
||
else
|
||
{
|
||
$row['editdoc_name'] = '';
|
||
$row['editdoc_fill_filters'] = '';
|
||
}
|
||
|
||
$template = false;
|
||
|
||
$row['editdoc_fill_filters'] = unserialize(base64_decode($row['editdoc_fill_filters']));
|
||
|
||
$rubs = array();
|
||
|
||
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_rubrics");
|
||
|
||
while ($result = $sql->FetchRow())
|
||
{
|
||
array_push($rubs, $result);
|
||
}
|
||
|
||
$AVE_Template->assign('rubs',$rubs);
|
||
|
||
$data = editdoc::getRubricFields($row['editdoc_rub'],$row['editdoc_fill_filters']);
|
||
|
||
//$data = editdoc::documentGet(null, $import_id);
|
||
|
||
if($row['editdoc_template'] == '')
|
||
{
|
||
$tmpl = "<form method=\"post\">\r\n\t<input type=\"hidden\" name=\"editdoc_action\" value=\"$import_id\">\r\n\t<input type=\"hidden\" name=\"editdoc_doc_id\" value=\"<?php echo (isset(\$_REQUEST['editdoc_doc_id']) ? \$_REQUEST['editdoc_doc_id'] : ''); ?>\">\r\n\n";
|
||
|
||
foreach($data['header'] as $k => $v)
|
||
$tmpl .= "\t<div id=\"edit_doc_header_$k\">\r\n\t\t[header:$k]\r\n\t</div>\r\n";
|
||
|
||
$tmpl .= "\r\n";
|
||
|
||
foreach($data['body'] as $k => $v)
|
||
$tmpl .= "\t<div id=\"edit_doc_body_$k\">\r\n\t\t<label for=\"field_$k\">[title:$k]</label>\r\n\t\t[body:$k]\r\n\t</div>\r\n";
|
||
|
||
$tmpl .= "\r\n";
|
||
|
||
$tmpl .= "\t<input type=\"submit\" value=\"Сохранить\">\r\n</form>";
|
||
|
||
$row['editdoc_template'] = $tmpl;
|
||
}
|
||
else
|
||
{
|
||
$template = true;
|
||
}
|
||
|
||
$AVE_Template->assign('template', $template);
|
||
|
||
$AVE_Template->assign('data', $data);
|
||
|
||
unset($row['editdoc_fill_filters']);
|
||
|
||
$AVE_Template->assign($row);
|
||
|
||
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_edit.tpl'));
|
||
}
|
||
|
||
|
||
/**
|
||
* Удаление
|
||
*
|
||
* @param int $import_id идентификатор
|
||
*/
|
||
public static function EditDocDelete($import_id)
|
||
{
|
||
global $AVE_DB;
|
||
|
||
if (is_numeric($import_id))
|
||
{
|
||
$AVE_DB->Query("
|
||
DELETE
|
||
FROM " . PREFIX . "_module_editdoc
|
||
WHERE id = '" . $import_id . "'
|
||
");
|
||
}
|
||
|
||
header('Location:index.php?do=modules&action=modedit&mod=editdoc&moduleaction=1&cp=' . SESSION);
|
||
}
|
||
|
||
|
||
/**
|
||
* Получение полей Документа
|
||
*
|
||
* @param inc $id - идентификатор рубрики
|
||
* @param array $array - массив со значениями
|
||
*/
|
||
public static function getRubricFields($id,$array)
|
||
{
|
||
global $AVE_DB;
|
||
|
||
$res = array();
|
||
|
||
if(! is_array($array))
|
||
$array = array();
|
||
|
||
$res['header'] = array();
|
||
|
||
$res['header']['document_parent'][0]= ($array['header']['document_parent']
|
||
? $array['header']['document_parent']
|
||
: "<?\r\n\treturn '0';\r\n?>");
|
||
|
||
$res['header']['document_title'][0] = ($array['header']['document_title']
|
||
? $array['header']['document_title']
|
||
: "<?\r\n\treturn \$_REQUEST['document_title']\r\n\t\t? \$_REQUEST['document_title']\r\n\t\t: \$data['header']['document_title'] ;\r\n?>");
|
||
|
||
$res['header']['document_alias'][0] = ($array['header']['document_alias']
|
||
? $array['header']['document_alias']
|
||
: "<?\r\n\treturn '';\r\n?>");
|
||
|
||
$res['header']['document_published'][0] = ($array['header']['document_published']
|
||
? $array['header']['document_published']
|
||
: "<?\r\n\t\$res = \$_REQUEST['document_published']\r\n\t\t? \$_REQUEST['document_published']\r\n\t\t: \$data['header']['document_published'];\r\n\n\treturn (\$res ? \$res : date('d.m.Y H:i'));\r\n?>");
|
||
|
||
$res['header']['document_expire'][0] = ($array['header']['document_expire']
|
||
? $array['header']['document_expire']
|
||
: "<?\r\n\t\$res = \$_REQUEST['document_expire']\r\n\t\t? \$_REQUEST['document_expire']\r\n\t\t: \$data['header']['document_expire'];\r\n\n\treturn (\$res ? \$res : date('d.m.Y H:i',strtotime('+20 years')));\r\n?>");
|
||
|
||
$res['header']['document_meta_keywords'][0] = ($array['header']['document_meta_keywords']
|
||
? $array['header']['document_meta_keywords']
|
||
: "<?\r\n\treturn '';\r\n?>");
|
||
|
||
$res['header']['document_meta_description'][0] = ($array['header']['document_meta_description']
|
||
? $array['header']['document_meta_description']
|
||
: "<?\r\n\treturn '';\r\n?>");
|
||
|
||
$res['header']['document_in_search'][0] = ($array['header']['document_in_search']
|
||
? $array['header']['document_in_search']
|
||
: "<?\r\n\treturn '0';\r\n?>");
|
||
|
||
$res['header']['document_meta_robots'][0] = ($array['header']['document_meta_robots']
|
||
? $array['header']['document_meta_robots']
|
||
: "<?\r\n\treturn 'index,follow';\r\n?>");
|
||
|
||
$res['header']['document_status'][0]=($array['header']['document_status']
|
||
? $array['header']['document_status']
|
||
: "<?\r\n\treturn '0';\r\n?>");
|
||
|
||
$res['header']['document_deleted'][0]=($array['header']['document_deleted']
|
||
? $array['header']['document_deleted']
|
||
: "<?\r\n\treturn '0';\r\n?>");
|
||
|
||
$res['header']['document_count_print'][0]=($array['header']['document_count_print']
|
||
? $array['header']['document_count_print']
|
||
: "<?\r\n\treturn '0';\r\n?>");
|
||
|
||
$res['header']['document_count_view'][0] = ($array['header']['document_count_view']
|
||
? $array['header']['document_count_view']
|
||
: "<?\r\n\treturn '0';\r\n?>");
|
||
|
||
$res['header']['document_linked_navi_id'][0] = ($array['header']['document_linked_navi_id']
|
||
? $array['header']['document_linked_navi_id']
|
||
: "<?\r\n\treturn '0';\r\n?>");
|
||
|
||
foreach($res['header'] as $k => $v)
|
||
$res['header'][$k][1]=(isset($array['template'][$k])
|
||
? $array['template'][$k]
|
||
:'');
|
||
|
||
$sql = $AVE_DB->Query("
|
||
SELECT
|
||
*
|
||
FROM
|
||
".PREFIX."_rubric_fields
|
||
WHERE
|
||
rubric_id = ".$id
|
||
);
|
||
|
||
while ($result = $sql->FetchAssocArray())
|
||
{
|
||
$field = "<?\r\n\t\$field_" . $result['Id'] . " = htmlspecialchars(stripslashes(isset(\$_REQUEST['feld'][" . $result['Id'] . "])\r\n\t\t? \$_REQUEST['feld'][" . $result['Id'] . "]\r\n\t\t: \$data['body'][" . $result['Id'] . "])\r\n\t);\r\n?>\r\n";
|
||
$field .= '<input type="text" id="field_' . $result['Id'] . '" placeholder="[title:' . $result['Id'] . ']" name="feld['.$result['Id'].']" value="<?= $field_' . $result['Id'] . '; ?>">';
|
||
|
||
$a = array(
|
||
'0' => $result['rubric_field_title'],
|
||
'1' => ($array['body'][$result['Id']]
|
||
? $array['body'][$result['Id']]
|
||
: "<?\r\n\treturn (isset(\$_REQUEST['feld'][".$result['Id']."])\r\n\t\t? \$_REQUEST['feld'][".$result['Id']."]\r\n\t\t: \$data['body'][".$result['Id']."]);\r\n?>"
|
||
),
|
||
'2' => (isset($array['template'][$result['Id']])
|
||
? $array['template'][$result['Id']]
|
||
: $field)
|
||
);
|
||
|
||
$res['body'][$result['Id']] = $a;
|
||
}
|
||
|
||
return $res;
|
||
}
|
||
|
||
|
||
/**
|
||
* Сохранение импорта
|
||
*
|
||
* @param int $import_id идентификатор импорта
|
||
*/
|
||
public static function EditDocSave($import_id = null)
|
||
{
|
||
global $AVE_DB;
|
||
|
||
function stripslashes_deep($value)
|
||
{
|
||
$value = is_array($value)
|
||
? array_map('stripslashes_deep', $value)
|
||
: stripslashes($value);
|
||
|
||
return $value;
|
||
}
|
||
|
||
$template = base64_encode(serialize(stripslashes_deep($_REQUEST['document'])));
|
||
|
||
if (is_numeric($import_id))
|
||
{
|
||
$sql="
|
||
UPDATE
|
||
" . PREFIX . "_module_editdoc
|
||
SET
|
||
editdoc_name = '" . $_REQUEST['editdoc_name'] . "',
|
||
editdoc_last_change = '" . time() . "',
|
||
editdoc_fill_filters = '" . $template . "',
|
||
editdoc_template = '" . $_REQUEST['editdoc_template'] . "',
|
||
editdoc_use_revisions = '" . ($_REQUEST['editdoc_use_revisions'] ? $_REQUEST['editdoc_use_revisions'] : 0) . "',
|
||
editdoc_use_rubric_code = '" . ($_REQUEST['editdoc_use_rubric_code'] ? $_REQUEST['editdoc_use_rubric_code'] : 0) . "',
|
||
editdoc_use_log_save = '" . ($_REQUEST['editdoc_use_log_save'] ? $_REQUEST['editdoc_use_log_save'] : 0) . "',
|
||
editdoc_before_edit = '" . $_REQUEST['editdoc_before_edit'] . "',
|
||
editdoc_after_edit = '" . $_REQUEST['editdoc_after_edit'] . "'
|
||
WHERE
|
||
id = '" . $import_id . "'
|
||
";
|
||
}
|
||
else
|
||
{
|
||
|
||
$editdoc_before_edit = "<?\r\n\t//Debug::_echo(\$_REQUEST, true);\r\n?>";
|
||
$editdoc_after_edit = "<?\r\n\t//header('Location: /' . rewrite_link('index.php?id=' . \$GLOBALS['mod_editdoc'][\$import_id]));\r\n\t//exit();\r\n?>";
|
||
|
||
$sql = "
|
||
INSERT INTO
|
||
" . PREFIX . "_module_editdoc
|
||
SET
|
||
id = '',
|
||
editdoc_name = '" . $_REQUEST['editdoc_name'] . "',
|
||
editdoc_rub = '" . $_REQUEST['editdoc_rub'] . "',
|
||
editdoc_last_change = '" . time() . "',
|
||
editdoc_fill_filters = '" . $template . "',
|
||
editdoc_template = '" . $_REQUEST['editdoc_template'] . "',
|
||
editdoc_before_edit = '" . addslashes($editdoc_before_edit) . "',
|
||
editdoc_after_edit = '" . addslashes($editdoc_after_edit) . "'
|
||
";
|
||
|
||
$AVE_DB->Query($sql);
|
||
|
||
$editor_id = $AVE_DB->InsertId();
|
||
|
||
header('Location:index.php?do=modules&action=modedit&mod=editdoc&moduleaction=edit&id=' . $editor_id . '&cp=' . SESSION);
|
||
exit;
|
||
}
|
||
|
||
$AVE_DB->Query($sql);
|
||
header('Location:index.php?do=modules&action=modedit&mod=editdoc&moduleaction=1&cp=' . SESSION);
|
||
}
|
||
|
||
static function EditDocDo($import_id)
|
||
{
|
||
global $AVE_DB, $AVE_Document;
|
||
|
||
if (is_numeric($import_id))
|
||
{
|
||
$sql = $AVE_DB->Query("
|
||
SELECT
|
||
*
|
||
FROM
|
||
" . PREFIX . "_module_editdoc
|
||
WHERE
|
||
id = '" . $import_id . "'
|
||
");
|
||
|
||
$row = $sql->FetchAssocArray();
|
||
|
||
$row['editdoc_fill_filters'] = unserialize(base64_decode($row['editdoc_fill_filters']));
|
||
|
||
$document_id = (isset($_REQUEST['editdoc_doc_id'])
|
||
? (int)$_REQUEST['editdoc_doc_id']
|
||
: null);
|
||
|
||
$data = editdoc::documentGet($document_id, (int)$row['editdoc_rub']);
|
||
|
||
//Пришла форма
|
||
if(isset($_REQUEST['editdoc_action']) && $_REQUEST['editdoc_action'] == $import_id)
|
||
{
|
||
//вот тут сохранение будет
|
||
$save = true;
|
||
|
||
foreach($row['editdoc_fill_filters']['header'] as $k => $v)
|
||
{
|
||
$exp = '
|
||
function editdoc_reth_' . $import_id . '_' . $k . '($data)
|
||
{
|
||
?>'.trim($v).'<?
|
||
};
|
||
';
|
||
|
||
eval($exp);
|
||
|
||
$ret = 'editdoc_reth_' . $import_id . '_' . $k;
|
||
|
||
$data['header'][$k] = $ret($data);
|
||
|
||
if($data['header'][$k] === NULL)
|
||
{
|
||
$save=false;
|
||
}
|
||
}
|
||
|
||
$data['header']['rubric_id']=$row['editdoc_rub'];
|
||
|
||
foreach($row['editdoc_fill_filters']['body'] as $k => $v)
|
||
{
|
||
$exp = '
|
||
function editdoc_retb_'.$import_id.'_'.$k.'($data)
|
||
{
|
||
?>'.trim($v).'<?
|
||
};
|
||
';
|
||
|
||
eval($exp);
|
||
|
||
$ret = 'editdoc_retb_' . $import_id . '_' . $k;
|
||
|
||
$data['body'][$k] = $ret($data);
|
||
|
||
if($data['body'][$k] === NULL)
|
||
{
|
||
$save = false;
|
||
}
|
||
}
|
||
|
||
$d = $data['header'];
|
||
|
||
$d['doc_title'] = $d['document_title'];
|
||
|
||
$d['feld'] = $data['body'];
|
||
|
||
require_once(BASE_DIR . '/class/class.docs.php');
|
||
|
||
$AVE_Document = new AVE_Document();
|
||
|
||
$AVE_Document->documentPermissionFetch($row['editdoc_rub']);
|
||
|
||
require_once(BASE_DIR.'/admin/functions/func.admin.common.php');
|
||
|
||
if ($save)
|
||
{
|
||
// Код перед сохранением
|
||
eval(' ?>'.$row['editdoc_before_edit'].'<? ');
|
||
|
||
// Надо перед сохранением уточнить являюсь ли я хозяином документа .....не забыть!!!!!!!!!! а то админы тут делов наделают
|
||
$GLOBALS['mod_editdoc'][$import_id] = @$AVE_Document->documentSave((int)$row['editdoc_rub'], $document_id, $d, true, $row['editdoc_use_rubric_code'], $row['editdoc_use_revisions'], $row['editdoc_use_log_save']);
|
||
|
||
// Код после сохранения
|
||
eval(' ?>'.$row['editdoc_after_edit'].'<? ');
|
||
}
|
||
}
|
||
|
||
$template = $row['editdoc_template'];
|
||
|
||
foreach($row['editdoc_fill_filters']["body"] as $k => $v)
|
||
$template = str_ireplace("[body:$k]", $row['editdoc_fill_filters']["template"][$k], $template);
|
||
|
||
foreach($row['editdoc_fill_filters']["header"] as $k => $v)
|
||
$template = str_ireplace("[header:$k]", $row['editdoc_fill_filters']["template"][$k], $template);
|
||
|
||
foreach($data['feld_type'] as $k => $v)
|
||
$template = str_ireplace("[type:$k]", $v['type'], $template);
|
||
|
||
foreach($data['feld_type'] as $k => $v)
|
||
$template = str_ireplace("[title:$k]", $v['title'], $template);
|
||
|
||
eval(' ?>'.$template.'<? ');
|
||
}
|
||
}
|
||
}
|
||
?>
|