get('DEBUG')) {
printf("
%s:
Memory Usage: %s
", $message, memory_get_usage());
}
}
function urlsafe_b64encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_','.'),$data);
return $data;
}
function urlsafe_b64decode($string) {
$data = str_replace(array('-','_','.'),array('+','/','='),$string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
}
/////////////////////////////
// configure installation: //
/////////////////////////////
define("ROOT", "./");
require_once( ROOT.'lib/autoload.php' );
error_reporting(0);
ini_set("log_errors", 1);
ini_set("error_log", "php-error.log");
/** @var \Base $f3 */
$f3 = \Base::instance();
$f3->set('DEBUG', 0);
$f3->set('CACHE', FALSE);
$f3->set('AUTOLOAD', ROOT.'app/');
if (!is_dir($f3->get('TEMP'))) {
mkdir($f3->get('TEMP'));
}
function query_string_from_array($in){
$out = [];
foreach ($in as $key=>$value) {
$out[] = sprintf("%s=%s", $key, $value);
}
return implode("&", $out);
}
/////////////////////////
// main configuration: //
/////////////////////////
debug("before read config");
$f3->config( ROOT.'routes.cfg' );
$f3->config( ROOT.'main.cfg' );
if(!setlocale(LC_TIME, 'de_DE.UTF-8')) {
//echo "locale not set";
}
///////////////////////////////////////////////
// configuration based on configuration file //
///////////////////////////////////////////////
// rerouting
if(is_array($f3->get('reroutes'))) {
foreach ($f3->get('reroutes') as $source=>$dest) {
$f3->redirect('GET '.$source, $dest);
}
}
// set language
$languages = $f3->get('languages');
if ( ! is_array($languages) ) {
$languages = [$languages];
}
$f3->set('default_lang', array_shift($languages));
if (in_array(strtolower($f3->get('GET.lang')), $languages)) {
$f3->set('LANG', strtolower($f3->get('GET.lang')));
} else {
$f3->set('LANG', $f3->get('default_lang'));
}
// set content dir
if(array_key_exists($f3->get('LANG'), $f3->get('content'))) {
$content_dir=$f3->get('content.'.$f3->get('LANG'));
} else {
$content_dir=$f3->get('content.'.$f3->get('default_lang'));
}
$f3->set('CONTENT', $content_dir);
$f3->set('CONTENT_BASE', array_shift(explode("/",$f3->get('CONTENT'))).'/');
$f3->set('UI', implode(';', array(
ROOT.$f3->get('templatepath'),
ROOT.'app/views/',
ROOT.$f3->get('CONTENT_BASE') // content folders can contain .html templates
)));
function menu_recursion($m,$root="") {
$f3 = \Base::instance();
//$url = explode("/", $f3->get('url'));
$out=[];
foreach ($m as $key=>$value) {
$folder = $key == "index" ? "" : "/".$key;
$path = $root.$folder;
if (is_array($value)) {
# submenu
$submenu=menu_recursion($value,$path);
$out[$path]=$submenu[$path];
unset($submenu[$path]);
$out[$path]['submenu']=$submenu;
} else {
$class="";
$ex = explode(":=", $value);
if (count($ex) > 1) {
# external link
$href = trim($ex[1]);
if(!strncmp($href,"?",1)) {
// if 'external link' starts with '?'
// probably it is language switch
foreach (explode("&",substr($href,1)) as $option) {
if(!strncmp($option, "lang=", 5) !== FALSE) {
$value = substr( $option, 5);
$class .= ($value == $f3->get('LANG')) ? ' active' : ' away';
}
}
}
} else {
# internal link
$href = $f3->get('SITE_URL').$path;
$href .= count($f3->get('GET')) ? "?".query_string_from_array($f3->get('GET')):"";
$class .= in_array($path,$f3->get('url')) ? ' active' : ' away';
}
$out[$path]['name']=$ex[0];
$out[$path]['href']=$href;
$out[$path]['class']=$class;
}
}
return $out;
}
function read_menu($menu_name) {
$f3 = \Base::instance();
if(array_key_exists($f3->get('LANG'), $f3->get('nav.'.$menu_name))) {
$menu=$f3->get('nav.'.$menu_name.'.'.$f3->get('LANG'));
} else {
$menu=$f3->get('nav.'.$menu_name.'.'.$f3->get('default_lang'));
}
if (is_array($menu)) {
$menu=menu_recursion($menu);
}
$f3->set('navi.'.$menu_name, $menu);
}
// this is needed so the menu can compare the current page with a link to it
// and use this information to determine the active state
$tmp_url = substr($_SERVER['REQUEST_URI'],1);
$url=substr($tmp_url,0,(strpos($tmp_url,'?') === false) ? 999 : strpos($tmp_url,'?'));
$url_ex=explode('/',$url);
$url=array();
for ($i=1;$i<=count($url_ex);$i++) {
$url[]="/".implode("/",array_slice($url_ex,0,$i));
}
$f3->set('url', $url);
$f3->set('is_home', in_array($url[0],["/","/home"]));
$f3->set('level', 1); // this is for templates, to be abl to count nesting
if (is_array($f3->get('nav'))) {
foreach ($f3->get('nav') as $k=>$v) {
read_menu($k);
}
}
///////////////////////////////////
// development utility functions //
///////////////////////////////////
##############################################################################
// this need to go away from here -----------------------------------------
// just to be more tidy etc.
function is_image($path) {
$ex = explode('.',$path);
$ext = array_pop($ex);
return in_array($ext,array( 'jpg', 'jpeg', 'png' ));
}
function pic_cache($in1,$inwidth=360){
$f3 = \Base::instance();
if(is_image($in1)) {
$info = pathinfo($in1);
$fn = basename($in1,'.'.$info['extension']);
$width=$inwidth;
$name = md5($in1.$width);
$name = sprintf("%s%s.png",$fn,$name);
$out ='rsc/img_display/s'.$name;
if(!file_exists($in1)) { $in1='rsc/img/default.png'; }
if(!file_exists($out)) {
$img1 = new Image($in1);
$img1->resize($width);
$f3->write($out,$img1->dump('png',9));
}
} elseif(!strncmp("locallink:",$in1, strlen("locallink:"))) {
$key = substr($in1, strlen("locallink:"));
// localize internal links
if($f3->get('LANG') != 'DE') {
$key .= "?lang=".$f3->get('LANG');
}
$out = $key;
} else {
$out = $in1;
}
return $out;
}
//------------------------------------------------------------------------
###############################################################################
// HTML preloading of images
// this could also find some better place
$f3->mset(array(
'cached_images' => array(\Controller\Page::check_folder_for_backgroundimage($f3->get('CONTENT_BASE'))
)
));
debug("before run fatfree");
$bbb = new \Controller\Cart();
$bbb->index();
$f3->run();
if ($f3->get("GET.admin")) {
$admin = new \Controller\Admin;
$f3->set('backend',$admin->index());
} else {
$f3->set('backend',false);
}
echo \Template::instance()->render($f3->get('template'));