Files
neoCMS/cms/core/restore.php
T

133 lines
5.0 KiB
PHP

<?php
error_reporting(E_ALL & ~E_NOTICE);
@session_start();
if (isset($_SESSION['neoCMSSess']) && strstr($_SESSION['neoCMSSess'], 'neoCMSsession')) {
include_once('createsession.php');
if (isset($_SESSION['neoCMSUserid'])) {
include_once('urldissect.php');
include_once('checkpath.php');
$message = '<strong>Error:</strong> There was an error restoring your page. Please try again.';
if (@file_exists($pageurl)) {
function loadfile($url, $incpath, $inc)
{
global $message, $pagepath;
// read the file
$doc = fopen($url, "r");
$content = stream_get_contents($doc);
fclose($doc);
$reginclude = '/(?:include\b|include_once\b|require\b|require_once\b)(?:\s*\(*[^;\?>]*)(?:\"|\')([^\"\'<>]*)(?:(\"|\')\)*(;|[\s\t\r\n]*\?>))/i'; // php include regexp
if (!preg_match($reginclude, $content)) $reginclude = '/(?:<!--#include\s(?:virtual|file)\=)(?:\"|\')([^\"\'<>]*)(?:\"|\')(?:\s*-->)/i'; // SSI regexp
// read the backup
$pagename = (strstr($url, $_SERVER['DOCUMENT_ROOT'])) ? explode($_SERVER['DOCUMENT_ROOT'], $url) : explode('../../', $url);
$pagename = trim($pagename[1], '/');
$pagename = str_ireplace('/', '-', $pagename);
$pageext = explode('.', $pagename);
$pagename = preg_replace('/(\.php|\.asp|\.html|\.htm|\.phtml|\.shtml|\.cfm)/', '', $pagename);
$backup = dirname(__FILE__) . '/../backups/' . $pagename . '_Bak.' . $pageext[1];
if (@file_exists($backup)) {
$backdoc = fopen($backup, "r");
$backcontent = stream_get_contents($backdoc);
fclose($backdoc);
echo "File Found: $backup\n\n";
editfile($content, $backcontent, $url, $incpath, $inc);
}
if (preg_match($reginclude, $content)) {
preg_match_all($reginclude, $content, $includes);
foreach ($includes[1] as &$value) {
if (@file_exists($_SERVER['DOCUMENT_ROOT'] . $value) && $value != '') {
$incfile = $_SERVER['DOCUMENT_ROOT'] . $value;
$incpath = false;
} elseif (!stristr($value, 'http://')) {
$incfile = "$pagepath/$value";
if ($incpath) {
$incpathreg = preg_replace('/\//', '\/', $incpath);
$incpathreg = '/(^' . $incpathreg . '\/|\/' . $incpathreg . '\/)/';
$incorigpath = preg_replace($incpathreg, '', $value, 1);
$newinc = "$pagepath/$incpath/$incorigpath";
$incfile = (@file_exists($newinc)) ? $newinc : $incfile;
$incpatharr = explode('/', $incorigpath);
array_pop($incpatharr);
$incpath = (sizeof($incpatharr) > 0) ? $incpath . implode('/', $incpatharr) : false;
} else {
$incpatharr = explode('/', $value);
array_pop($incpatharr);
$incpath = (sizeof($incpatharr) > 0) ? $incpath . implode('/', $incpatharr) : false;
}
} else $incpath = false;
if (!preg_match('/\/$/', $incfile)) loadfile($incfile, $incpath, true);
}
}
}
function editfile($content, $backcontent, $url, $incpath, $inc)
{
if ($content != $backcontent && ((!stristr($content, '<?php') && !strstr($content, '<%')) || (preg_match('/>[^<]+</', $backcontent) || preg_match('/<html/', $backcontent)) && strstr($backcontent, 'neocms'))) {
if (is_writable($url)) {
//restores file
$restdoc = fopen($url, "w");
fputs($restdoc, $backcontent);
fclose($restdoc);
} else $message = "<strong>Error:</strong> You do not have permission to edit this page.";
}
}
loadfile($pageurl, false, false);
$message = 'Your page was successfully restored.';
$script = '<script language="javascript" type="text/javascript">window.top.window.ifrReload();window.top.window.saveFeedback("' . $message . '");</script>';
echo $script;
} else {
$message = '<strong>Error:</strong> neocms could not find this page: <em>' . $url . '</em>';
$script = '<script language="javascript" type="text/javascript">window.top.window.saveFeedback("' . $message . '");</script>';
echo $script;
}
}
}