module-editdoc/editdoc/class.editdoc.php

380 lines
14 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;
//var_dump($document_id);
$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;
//echo "<pre>";
//var_dump($result);
//echo "</pre>";
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']='';
}
$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
<input type=\"hidden\" name=\"editdoc_action\" value=\"$import_id\">\r\n
<input type=\"hidden\" name=\"editdoc_doc_id\" value=\"<?php echo @\$_REQUEST['editdoc_doc_id']?>\">\r\n
";
foreach($data['header'] as $k => $v)
$tmpl.=" <div id=\"edit_doc_header_$k\">[header:$k]</div>\r\n";
foreach($data['body'] as $k => $v)
$tmpl.=" <div id=\"edit_doc_body_$k\"><label>".$v[0]."</label>[body:$k]</div>\r\n";
$tmpl.='<input type="submit" value="Сохранить"></form>';
$row['editdoc_template']=$tmpl;
}
$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=Array();
$res['header']=array();
$res['header']['document_parent'][0]=($array['header']['document_parent'] ? $array['header']['document_parent'] : "<?\r\n return '0';\r\n?>");
$res['header']['document_title'][0]=($array['header']['document_title'] ? $array['header']['document_title'] : "<?\r\n return \$_REQUEST['document_title'] ? \$_REQUEST['document_title'] : \$data['header']['document_title'] ;\r\n?>");
$res['header']['document_alias'][0]=($array['header']['document_alias'] ? $array['header']['document_alias'] : "<?\r\n return '';\r\n?>");
$res['header']['document_published'][0]=($array['header']['document_published'] ? $array['header']['document_published'] : "<?\r\n \$res= \$_REQUEST['document_published'] ? \$_REQUEST['document_published'] : \$data['header']['document_published'];\r\n return (\$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 \$res= \$_REQUEST['document_expire'] ? \$_REQUEST['document_expire'] : \$data['header']['document_expire'];\r\n return (\$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 return '';\r\n?>");
$res['header']['document_meta_description'][0]=($array['header']['document_meta_description'] ? $array['header']['document_meta_description'] : "<?\r\n return '';\r\n?>");
$res['header']['document_in_search'][0]=($array['header']['document_in_search'] ? $array['header']['document_in_search'] : "<?\r\n return '0';\r\n?>");
$res['header']['document_meta_robots'][0]=($array['header']['document_meta_robots'] ? $array['header']['document_meta_robots'] : "<?\r\n return 'index,follow';\r\n?>");
$res['header']['document_status'][0]=($array['header']['document_status'] ? $array['header']['document_status'] : "<?\r\n return '0';\r\n?>");
$res['header']['document_deleted'][0]=($array['header']['document_deleted'] ? $array['header']['document_deleted']: "<?\r\n return '0';\r\n?>");
$res['header']['document_count_print'][0]=($array['header']['document_count_print'] ? $array['header']['document_count_print'] : "<?\r\n return '0';\r\n?>");
$res['header']['document_count_view'][0]=($array['header']['document_count_view'] ? $array['header']['document_count_view'] : "<?\r\n return '0';\r\n?>");
$res['header']['document_linked_navi_id'][0]=($array['header']['document_linked_navi_id'] ? $array['header']['document_linked_navi_id'] : "<?\r\n return '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())
{
$func='get_field_'.$result['rubric_field_type'];
if(!is_callable($func)) $func='get_field_default';
$val='<?php echo htmlspecialchars(stripslashes($_REQUEST["feld"]['.$result['Id'].'] ? ($_REQUEST["feld"]['.$result['Id'].']) : $data["body"]['.$result['Id'].']));?>';
$field=$func("{{ХХХХ}}",'edit',$result['Id'],'',0,$x,0,0,$result['rubric_field_default']);
$field=str_ireplace('{{ХХХХ}}',$val,$field);
$a=array(
'0'=>$result['rubric_field_title'],
'1'=>(
$array['body'][$result['Id']] ?
$array['body'][$result['Id']]:
"<?\r\n return (isset(\$_REQUEST['feld'][".$result['Id']."]) ? \$_REQUEST['feld'][".$result['Id']."] : \$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;
}
$v=base64_encode(serialize(stripslashes_deep($_REQUEST['document'])));
if (is_numeric($import_id))
{
$sql="
UPDATE " . PREFIX . "_module_editdoc
SET
`editdoc_name` = '" . ($_REQUEST['editdoc_name']) . "',
".($_REQUEST['editdoc_rub']> '' ? "`editdoc_rub` = '" . ($_REQUEST['editdoc_rub']) . "'," : "")."
`editdoc_lastchange` = '" . ($_REQUEST['editdoc_lastchange']) . "',
`editdoc_fill_filters` = '" . $v . "',
`editdoc_template` = '" . $_REQUEST['editdoc_template'] . "',
`editdoc_afteredit` = '" . (($_REQUEST['editdoc_afteredit'] ? $_REQUEST['editdoc_afteredit'] : addslashes("<?php
//header('Location: /'.rewrite_link('index.php?id='.\$GLOBALS['mod_editdoc'][".$import_id."]));
//exit();
?>"))) . "'
WHERE
id = '" . $import_id . "'
";
}
else
{
$sql="
INSERT
INTO " . PREFIX . "_module_editdoc
SET
id = '',
`editdoc_name` = '" . ($_REQUEST['editdoc_name']) . "',
".($_REQUEST['editdoc_rub']> '' ? "`editdoc_rub` = '" . ($_REQUEST['editdoc_rub']) . "'," : "")."
`editdoc_lastchange` = '" . ($_REQUEST['editdoc_lastchange']) . "',
`editdoc_fill_filters` = '" . $v . "',
`editdoc_template` = '" . ($_REQUEST['editdoc_template']) . "',
`editdoc_afteredit` = '" . ($_REQUEST['editdoc_afteredit']) . "'
";
}
$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(BASE_DIR . '/lib/redactor/ckeditor/ckeditor.php');
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){
//надо перед сохранением уточнить являюсь ли я хозяином документа .....не забыть!!!!!!!!!! а то админы тут делов наделают
$GLOBALS['mod_editdoc'][$import_id]=@$AVE_Document->documentSave((int)$row['editdoc_rub'],$document_id,$d,true);
eval(' ?>'.$row['editdoc_afteredit'].'<? ');
}
}
$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);
eval(' ?>'.$template.'<? ');
}
}
}
?>