//читаем в переменные файлы XML и XSLT-документов
$ves=strlen($_SERVER['PHP_SELF']);
$mal=strlen(strrchr($_SERVER['SCRIPT_NAME'],"/"));
$curent_dir=substr($_SERVER['PHP_SELF'], 0, $ves-$mal)."/";
$shadow=$_SERVER['DOCUMENT_ROOT']."/shadow/";$start = $_GET['start'];
$id = $_GET['id'];
if(!isset($id))
{
$id = $_POST['id'];
}
$nw = $_GET['nw'];
if(!isset($nw))
{
$nw = $_POST['nw'];
}
$save = $_GET['save'];
if(!isset($save))
{
$save = $_POST['save'];
}
$save1 = $_GET['save1'];
if(!isset($save1))
{
$save1 = $_POST['save1'];
}
$level = $_GET['level'];
if(!isset($level))
{
$level = $_POST['level'];
}
$id0 = $_GET['id0'];
if(!isset($id0))
{
$id0 = $_POST['id0'];
}
$level2 = $_GET['level2'];
if(!isset($level2))
{
$level2 = $_POST['level2'];
}
$level1 = $_GET['level1'];
if(!isset($level1))
{
$level1 = $_POST['level1'];
}
$level3 = $_GET['level3'];
if(!isset($leve3))
{
$leve3 = $_POST['leve3'];
}
$level1admin = $_GET['level1admin'];
if(!isset($level1admin))
{
$level1admin = $_POST['level1admin'];
}
$level2admin = $_GET['level2admin'];
if(!isset($level2admin))
{
$level2admin = $_POST['level2admin'];
}
$level3admin = $_GET['level3admin'];
if(!isset($level3admin))
{
$level3admin= $_POST['level3admin'];
}
/**/
$imid = $_GET['imid'];
if(!isset($imid))
{
$imid= $_POST['imid'];
}
$numn = $_GET['num'];
if(!isset($num))
{
$num= $_POST['num'];
}
$name = $_GET['name'];
if(!isset($name))
{
$name= $_POST['name'];
}
$word = $_GET['word'];
if(!isset($word))
{
$word= $_POST['word'];
}
$title = $_GET['title'];
if(!isset($title))
{
$title= $_POST['title'];
}
$text = $_GET['text'];
if(!isset($text))
{
$text= $_POST['text'];
}
$razdel=$curent_dir;
//////////////////////NEW WINDOW//////////////////////
if (isset($nw)) {
if (isset($save)) {
mail("reklama@meridian-travel.ru","В наш форум ".$_SERVER['SERVER_NAME']." добавили сообщение", "http://".$_SERVER['SERVER_NAME']."/forum/index.php?".$level."&id=".$id."&id0=".$id0);
print("http://".$_SERVER['SERVER_NAME']."/forum/index.php?".$level."&id=".$id."&id0=".$id0);
check($id);
check($imid);
check($num);
check($nw);
check($level);
check($name);
check($word);
check($title);
check($text);
if ($name=="" || $title=="" || $text=="") {
echo ("
Некоторые поля не заполнены
");
exit();
}
$slogi1=array("we","as","po","zu","bo","sd","ty","ne","od","gu");
$slogi2=array("sx","lo","te","wo","pyt","ko","io","lm","ts","iz");
$a=explode("0",$imid);
$w=$slogi1[$a[0]].$slogi2[$a[1]].$slogi1[$a[4]];
if ($w!=$word) {
echo("
Неверно введено слово, изображенное на картинке, попробуйте снова
");
exit();
}
echo("");
$shadow=substr($_SERVER['DOCUMENT_ROOT'], 0, strrpos($_SERVER['DOCUMENT_ROOT'],"/"))."/shadow";
remem(file_get_contents($shadow.$razdel."/xml.xml"));
$papa_a=xpath_eval($ctx,"//forum/level1[@id='".$id."']");
// Создаем структуру
$level2=$doc->create_element("level2");
$replies=$doc->create_element("replies");
$item=$doc->create_element("item");
$dt=$doc->create_element("date");
$dt->set_content(date("F j, Y, g:i a"));
$item->set_attribute("id",date("siHdjy"));
$user=$doc->create_element("user");
$user->set_content(conv_back($name));
$user->set_attribute("ip",$REMOTE_ADDR);
$content=$doc->create_element("content");
$text=ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "\\0", $text);
$content->append_child($doc->create_cdata_section(conv_back(trim($text))));
$level2->set_attribute("id",date("siHdjy"));
$level2->set_attribute("title",conv_back($title));
$level2->set_attribute("stat","0");
// Добaвляем ноды
$item->append_child($dt);
$item->append_child($user);
$item->append_child($content);
$replies->append_child($item);
$level2->append_child($replies);
$papa_a->nodeset[0]->append_child($level2);
$doc->dump_file($shadow.$razdel."/xml.xml", false, true);
}
//////////////////////////////////////////////////////////////////////
if (isset($save1)) {
mail("reklama@meridian-travel.ru","В наш форум ".$_SERVER['SERVER_NAME']." добавили сообщение", "http://".$_SERVER['SERVER_NAME']."/forum/index.php?".$level."&id=".$id."&id0=".$id0);
check($id);
check($imid);
check($num);
check($nw);
check($level);
check($name);
check($word);
check($title);
check($text);
check($id0);
check($email);
if ($name=="" || $title=="" || $text=="") {
echo ("
Некоторые поля не заполнены
");
exit();
}
$slogi1=array("we","as","po","zu","bo","sd","ty","ne","od","gu");
$slogi2=array("sx","lo","te","wo","pyt","ko","io","lm","ts","iz");
$a=explode("0",$imid);
$w=$slogi1[$a[0]].$slogi2[$a[1]].$slogi1[$a[4]];
if ($w!=$word) {
echo("
Неверно введено слово, изображенное на картинке, попробуйте снова
");
exit();
}
echo("");
$shadow=substr($_SERVER['DOCUMENT_ROOT'], 0, strrpos($_SERVER['DOCUMENT_ROOT'],"/"))."/shadow";
remem(file_get_contents($shadow.$razdel."/xml.xml"));
$papa_a=xpath_eval($ctx,"//forum/level1[@id='".$id0."']/level2[@id='".$id."']/replies");
// Делаем рассылку
$papa_b=xpath_eval($ctx,"//forum/level1[@id='".$id0."']/level2[@id='".$id."']/replies/item/user[@email]");
foreach($papa_b->nodeset as $noda) {
if ($noda->get_attribute("email")) {
mail($noda->get_attribute("email"), "На ваше сообщение ответили (".$_SERVER['SERVER_NAME'].")", "Посмотреть новые сообшения можно перейдя по ссылке: http://".$_SERVER['SERVER_NAME']."/forum/index.php?".$level."&id=".$id."&id0=".$id0);
}
}
// Создаем структуру
$item=$doc->create_element("item");
$dt=$doc->create_element("date");
$dt->set_content(date("F j, Y, g:i a"));
$item->set_attribute("id",date("siHdjy"));
$user=$doc->create_element("user");
$user->set_content(conv_back($name));
$user->set_attribute("ip",$REMOTE_ADDR);
$user->set_attribute("email",$email);
$content=$doc->create_element("content");
$content->append_child($doc->create_cdata_section(conv_back(trim($text))));
// Добaвляем ноды
$item->append_child($dt);
$item->append_child($user);
$item->append_child($content);
$papa_a->nodeset[0]->append_child($item);
$doc->dump_file($shadow.$razdel."/xml.xml", false, true);
}
?>
Добавление новой записи
exit();
}
//////////////////////NEW WINDOW//////////////////////
if (isset($razdel) && $stop==0) {
// Парсим базу
remem(file_get_contents($shadow.$razdel."/xml.xml"));
// Если сделаны изменения, вносим их
$sun= domxml_new_doc("1.0");
$rt = $sun->create_element("d");
$sun->append_child($rt);
$l1_a=xpath_eval($ctx,"//forum/level1");
foreach($l1_a->nodeset as $noda) {
$i = $sun->create_element("i");
$k1 = $sun->create_element("k1");
$k2 = $sun->create_element("k2");
$i->set_attribute("value",$noda->get_attribute("title"));
$koll1=xpath_eval($ctx,"//forum/level1[@id='".$noda->get_attribute("id")."']/level2");
$koll2=xpath_eval($ctx,"//forum/level1[@id='".$noda->get_attribute("id")."']/level2/descendant::item");
$k1->set_attribute("value",count($koll1->nodeset));
$k2->set_attribute("value",count($koll2->nodeset));
$i->set_attribute("id",$noda->get_attribute('id'));
$i->append_child($k1);
$i->append_child($k2);
$rt->append_child($i);
}
mix_nodes($rt);
$vsx="/xslt/level1.xsl";
// ПОДКЛЮЧАЕМ РАЗНЫЕ УРОВНИ
if (isset($level2)) {
////////////////////////////////////////////// II ////////////////////
$sun= domxml_new_doc("1.0");
$rt = $sun->create_element("d");
$rt->set_attribute("id",$id);
$nm_a=xpath_eval($ctx,"//forum/level1[@id='".$id."']");
$rt->set_attribute("name",$nm_a->nodeset[0]->get_attribute('title'));
$sun->append_child($rt);
$l2_a=xpath_eval($ctx,"//forum/level1[@id='".$id."']/level2");
foreach($l2_a->nodeset as $noda) {
$i = $sun->create_element("i");
$k1 = $sun->create_element("kol");
$k2 = $sun->create_element("auth");
$k3 = $sun->create_element("c");
$i->set_attribute("value",$noda->get_attribute("title"));
$koll1=xpath_eval($ctx,"//forum/level1[@id='".$id."']/level2[@id='".$noda->get_attribute("id")."']/descendant::item");
$auth_a = xpath_eval($ctx, "//forum/level1[@id='". $id . "']/level2[@id='" . $noda->get_attribute("id") . "']/descendant::item/user");
$auth_n=$auth_a->nodeset[count($auth_a->nodeset)-1];
$auth=$auth_n->get_content();
if (!$auth) $auth="Unonimous";
$cont=$noda->get_attribute("stat");
if (!$cont) $cont="0";
$k1->set_attribute("value",count($koll1->nodeset));
$k2->set_attribute("value",$auth);
$k3->set_attribute("value",$cont);
$i->set_attribute("id",$noda->get_attribute('id'));
$i->append_child($k1);
$i->append_child($k2);
$i->append_child($k3);
$rt->append_child($i);
}
mix_nodes($rt);
$vsx="/xslt/level2.xsl";
////////////////////////////////////////////// II ////////////////////
}
if (isset($level3)) {
// visit counter
$sc_a = xpath_eval($ctx, "//forum/level1[@id='". $id0 . "']/level2[@id='".$id."']");
$nv=($sc_a->nodeset[0]->get_attribute("stat"))+1;
$sc_a->nodeset[0]->set_attribute("stat",$nv);
// visit counter
////////////////////////////////////////////// III ///////////////////
$sun= domxml_new_doc("1.0");
$rt = $sun->create_element("d");
$rt->set_attribute("id",$id);
$rt->set_attribute("id0",$id0);
$nm_a=xpath_eval($ctx,"//forum/level1[@id='".$id0."']");
$nm_b=xpath_eval($ctx,"//forum/level1[@id='".$id0."']/level2[@id='".$id."']");
$rt->set_attribute("title0",$nm_a->nodeset[0]->get_attribute('title'));
$rt->set_attribute("title",$nm_b->nodeset[0]->get_attribute('title'));
$sun->append_child($rt);
$l2_a=xpath_eval($ctx,"//forum/level1[@id='".$id0."']/level2[@id='".$id."']/replies/item");
for($ii=0; $iinodeset); $ii++) {
$noda=$l2_a->nodeset[$ii];
$i = $sun->create_element("i");
$k1 = $sun->create_element("date");
$k2 = $sun->create_element("auth");
$k3 = $sun->create_element("c");
$data_a=xpath_eval($ctx,"//forum/level1[@id='".$id0."']/level2[@id='".$id."']/replies/item[@id='".$noda->get_attribute("id")."']/date");
$auth_a=xpath_eval($ctx,"//forum/level1[@id='".$id0."']/level2[@id='".$id."']/replies/item[@id='".$noda->get_attribute("id")."']/user");
$c_a=xpath_eval($ctx,"//forum/level1[@id='".$id0."']/level2[@id='".$id."']/replies/item[@id='".$noda->get_attribute("id")."']/content");
$auth=$auth_a->nodeset[0];
$data=$data_a->nodeset[0];
$c=$c_a->nodeset[0];
if (!$auth) $auth="Unonimous";
$k1->set_attribute("value",$data->get_content());
$k2->set_attribute("value",$auth->get_content());
$k3->set_attribute("value", output($c->get_content()));
$i->set_attribute("id",$noda->get_attribute('id'));
$i->append_child($k1);
$i->append_child($k2);
$i->append_child($k3);
$rt->append_child($i);
//mix_nodes($rt);
}
$vsx="/xslt/level3.xsl";
$doc->dump_file($shadow.$razdel."/xml.xml", false, true);
////////////////////////////////////////////// III ///////////////////
}
$str2=file_get_contents($shadow.$vsx);
$str1=$sun->dump_mem();
$xh = xslt_create();
xslt_set_encoding($xh,'windows-1251');
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, array('_xml'=>$str1, '_xsl'=>$str2));
if ($result) {echo html_entity_decode($result); }
else{
echo "Error!, " . xslt_error($xh) .' ('.xslt_errno($xh).')';
}
xslt_free($xh);
}
function remove($noda) {
global $doc;
$papa=$noda->parent_node();
$papa->remove_child($noda);
}
function mix_nodes($noda){
//global $sun;
$arr=$noda->child_nodes();
for ($i=count($arr)-1; $i>=0; $i--) {
$noda->remove_child($arr[$i]);
$noda->append_child($arr[$i]);
}
}
function conv_back($txt) {
return iconv("windows-1251","utf-8",$txt);
}
function remem($txt) {
global $doc;
global $ctx;
$doc=domxml_open_mem($txt) or die('Ошибка при парсинге. Проверьте xml файл');
$doc->xpath_init();
$ctx=xpath_new_context($doc);
}
function check($txt) {
if (strlen($txt)>20000) {
echo ("
Превышен лимит по размеру сообщения
");
exit();
}
if (strpos($txt,">") || strpos($txt,"<") || strpos($txt,"<") || strpos($txt,">")) {
echo("
Использованы некорректные символы TAGS
");
exit();
}
}
function output($txt) {
$txt=stripslashes($txt);
$txt = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "\\0", $txt);
$txt=str_replace("\n","
",$txt);
$txt=str_replace("[b]","",$txt);
$txt=str_replace("[/b]","",$txt);
$txt=str_replace("[u]","",$txt);
$txt=str_replace("[/u]","",$txt);
$txt=str_replace("[i]","",$txt);
$txt=str_replace("[/i]","",$txt);
$txt=str_replace("[glad]","
",$txt);
$txt=str_replace("[sad]","
",$txt);
$txt=str_replace("[beer]","
",$txt);
$txt=str_replace("[shy]","
",$txt);
$txt=str_replace("[shut]","
",$txt);
$txt=str_replace("[cry]","
",$txt);
$txt=str_replace("[fun]","
",$txt);
$txt=str_replace("[cool]","
",$txt);
$txt=str_replace("[wonder]","
",$txt);
$txt=str_replace("[wink]","
",$txt);
return $txt;
}
?>