Bathis-Automatischer-Badnav-Fixer (wie gesagt experimentell und nie getestet oder benutzt worden):
Ersatz für badnav.php (NIEMALS live anwenden, sondern als Inspiration verwenden
)
$this->bbcode_second_pass_code('', '
<?
// WICHTIG!
// function redirect(...){ } erweitern:
//
// function redirect($location,$reason=false){
// global $session,$REQUEST_URI;
//
// $session['lastrequest'] = $REQUEST_URI; //<= das ist neu
// [...alles andere bleibt identisch...]
// }
//
require_once 'common.php';
$session['debug'].='Badnav';
if ($session['user']['loggedin'] && $session['loggedin'])
{
$request = $session['lastrequest'];
if(!check_navs($session['allowednavs']))
{
$session['debug'].=' Keine sinnvolle allowed nav gefunden => reset der navs ';
debuglog(' Keine sinnvolle allowed nav gefunden => reset der navs [request: "'.$request.'" restorepage: "'.$session['user']['restorepage'].'"]');
redirect_village();
}
else // Navs und Output sind gültig und sinnvoll überprüfen wir also wo der request happert, sprich Fehler finden und bereinigen!
{
if(!array_key_exists($request,$session['allowednavs']))
{
if(check_nav_in_output($request)) // entwickler ist schuld! Hat einen Link ohne Addnav eingebaut!
{
debuglog(' Entwickler hat addnav in '.$request.' vergessen! Folgender '.$request.' war im Output, aber nicht in allowednavs zu finden!
Eintrag in allowednavs wurde als dirty workaround hinzugefügt. Schnellstmöglich beheben!!! ');
$session['allowednavs'][$request] = true;
}
else // user ist schuld ergo -> cheater!
{
debuglog(' Beim cheaten erwischt? '.$request.' war weder in allowednavs noch im Output zu finden! [restorepage: "'.$session['user']['restorepage'].'"]');
}
}
$session['user']['allowednavs'] = $session['allowednavs'];
saveuser();
if (is_new_day() && strpos($session['output'],"<!--CheckNewDay()-->") !== false)
{
debuglog(' Badnav [request: '.$request.'] ~> Newday [ restorepage: "'.$session['user']['restorepage'].'" wurde zurückgesetzt zu "village.php" ] ');
$session['user']['allowednavs'] = array();
addnav('','village.php');
$session['user']['restorepage'] = 'village.php';
redirect('newday.php');
}
echo $session['output'];
}
}
else
{
$session=array();
redirect('index.php');
}
// nützliche Funktionen
function check_navs($navs)
{
global $allownonnav,$nokeeprestore;
$noreturnnavs = array_merge($allownonnav, $nokeeprestore, array('httpreq.php' => 1)); //WICHTIG: Array mit ajax-php files ergänzen oder sonstige sinnlose navs...
if(is_array($navs))
{
foreach($navs as $key => $val)
{
if( array_key_exists("".( strpos($key,'?') ? substr($key,0,strpos($key,'?')) : $key )."",$noreturnnavs) || (trim($key)=='') || ($key===0) )
{
unset($navs[$key]);
}
else
{
if(!check_nav_in_output($key)) // ist die sinnvolle nav nicht im output?
{
unset($navs[$key]); // also aus dem temp array löschen, da user sie nicht benutzen kann
}
}
}
return ( (count($navs) > 0) ? true : false );
}
else
{
return false;
}
}
function check_nav_in_output($nav)
{
global $session;
if($session['output'] != '' && $nav != '')
{
if( preg_match('/<a\s[^>]*href\s*=\s*[\'\"]\s*'.$nav.'\s*[\'\"][^>]*>(.*)<\s*\/\s*a>/siU',$session['output']))
{
return true;
}
}
else
{
return false;
}
}
function redirect_village()
{
global $session;
$session['user']['allowednavs'] = array();
addnav('','village.php');
$session['user']['restorepage'] = 'village.php';
if(is_new_day())
{
redirect('newday.php');
}
else
{
$session['output'] = '<a href="village.php">Deine erlaubten Navs waren beschädigt. Zurück zum Dorf.</a>';
}
}
?>
')
Verbesserungen zum Skript hier:
viewtopic.php?f=25&t=5497&p=57055#p57055