module-editdoc/editdoc/class.editdoc.php
2017-04-14 22:24:10 +05:00

580 lines
16 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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.'<? ');
}
}
}
?>