MastodonHelp/web/site/index.php

262 lines
9.4 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
define('N',"\n");
function muoribene($msg,$ec,$clmy=false) {
global $link;
if ($link) mysqli_close($link);
echo($msg);
exit($ec);
}
$inifp='../conf/mastostart.ini';
$conf=@parse_ini_file($inifp)
or muoribene('Non ho potuto aprire «'.$inifp.'».'.N,1);
if (!array_key_exists('instpath',$conf))
muoribene('«'.$inifp.'»: “instpath” non è definito.'.N,1);
$path=preg_replace('#\?.*$#','',$_SERVER['REQUEST_URI']);
$path=preg_replace('/^'.preg_quote($conf['instpath'],'/').'/','',$path);
$ndir=preg_match_all('/\//',$path)-1;
$prepath='';
for ($i=0; $i<$ndir; $i++)
$prepath.='../';
if (strlen($path)>0) {
while ($path[strlen($path)-1]=='/') {
$path=substr($path,0,-1);
if (strlen($path)<1)
break;
}
}
$supplangs=['ca','en','es','fr','it'];
if (preg_match('#/('.implode('|',$supplangs).')$#',$path,$lang)===1) {
$dlang=$lang[1];
$path=substr($path,0,-3);
} elseif (array_key_exists('HTTP_ACCEPT_LANGUAGE',$_SERVER)) {
$dlang=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
$dlang=in_array($dlang,$supplangs) ? $dlang : 'en';
} else {
$dlang='en';
}
$locale=$dlang;
// il blocale è per non dover avere installate tutte le locale corrispondenti
$blocale='en_US.UTF-8';
//putenv('LC_ALL='.$blocale);
setlocale(LC_ALL,$blocale);
bindtextdomain('masthelp','./locale/'.$locale);
textdomain('masthelp');
$needstrans=false;
$menu=array(
'guide'=>array('liadd'=>null, 'href'=>$conf['instpath'].'/'.$dlang, 'title'=>_('Guide'), 'selected'=>false, 'submenu'=>null),
'instances'=>array('liadd'=>null, 'href'=>$conf['instpath'].'/instances/'.$dlang, 'title'=>_('Instances'), 'selected'=>false, 'submenu'=>null),
'about'=>array('liadd'=>null, 'href'=>$conf['instpath'].'/about/'.$dlang, 'title'=>_('About'), 'selected'=>false, 'submenu'=>array(
'stats'=>array('liadd'=>null, 'href'=>$conf['instpath'].'/stats/'.$dlang, 'title'=>_('Statistics'), 'selected'=>false, 'submenu'=>null),
'contribute'=>array('liadd'=>null, 'href'=>$conf['instpath'].'/contribute/'.$dlang, 'title'=>_('Contribute'), 'selected'=>false, 'submenu'=>null)
)
),
'language'=>array('liadd'=>null, 'href'=>null, 'title'=>_('Language'), 'selected'=>false, 'submenu'=>array(
'ca'=>array('liadd'=>null, 'href'=>null, 'title'=>'Català', 'selected'=>false, 'submenu'=>null),
'en'=>array('liadd'=>null, 'href'=>null, 'title'=>'English', 'selected'=>false, 'submenu'=>null),
/* 'aa'=>array('liadd'=>null, 'href'=>null, 'title'=>'Prova', 'selected'=>false, 'submenu'=>array(
'bb'=>array('liadd'=>null, 'href'=>$conf['instpath'].'/stats/'.$dlang, 'title'=>'Statistics', 'selected'=>false, 'submenu'=>null),
'cc'=>array('liadd'=>null, 'href'=>$conf['instpath'].'/contribute/'.$dlang, 'title'=>'Contribute', 'selected'=>false, 'submenu'=>null)
)
),*/
'es'=>array('liadd'=>null, 'href'=>null, 'title'=>'Español', 'selected'=>false, 'submenu'=>null),
'fr'=>array('liadd'=>null, 'href'=>null, 'title'=>'Français', 'selected'=>false, 'submenu'=>null),
'it'=>array('liadd'=>null, 'href'=>null, 'title'=>'Italiano', 'selected'=>false, 'submenu'=>null)
)
)
);
foreach ($supplangs as $lang)
$menu['language']['submenu'][$lang]['href']=$conf['instpath'].$path.'/'.$lang;
$menu['language']['submenu'][$dlang]['href']=null;
$menu['language']['submenu'][$dlang]['liadd']=null;
$menu['language']['submenu'][$dlang]['selected']=true;
$cont=array();
$cont['css']=array('theme.css','menu.css');
$cont['js']=array('menu.js');
$cont['bodyadd']='';
switch($path) {
case '':
$cont['fp']='home.php';
$cont['atit']=' - '._('Guide');
$cont['desc']=_('A thorough introduction to Mastodon');
$cont['js'][]='shsum.js';
$cont['js'][]='guideanchors.js';
$cont['js'][]='scrolltrack.js';
$cont['bodyadd']=' onscroll="scrolltrack()"';
$menu['guide']['href']=null;
$menu['guide']['selected']=true;
$url='home';
if (in_array($dlang,array('ca'))) $needstrans=true;
break;
case '/instances':
$cont['fp']='instances.php';
$cont['atit']=' - '._('Instances');
$cont['desc']=_('Recommended Mastodon instances');
$cont['css'][]='instances.css';
$menu['instances']['href']=null;
$menu['instances']['selected']=true;
$url='instances';
if (in_array($dlang,array('ca','es','fr'))) $needstrans=true;
break;
case '/about':
$cont['fp']='about.php';
$cont['atit']=' - '._('About');
$cont['desc']=_('Info about Mastodon Helps authors, contributors, license');
$menu['about']['href']=null;
$menu['about']['selected']=true;
$url='about';
if (in_array($dlang,array('ca','es'))) $needstrans=true;
break;
case '/stats':
$cont['fp']='stats.php';
$cont['atit']=' - '._('Statistics');
$cont['desc']=_('Statistics about Mastodon Help');
$cont['css'][]='stats.css';
$menu['about']['selected']=true;
$menu['about']['submenu']['stats']['href']=null;
$menu['about']['submenu']['stats']['selected']=true;
$url='stats';
if (in_array($dlang,array('ca','es'))) $needstrans=true;
break;
case '/contribute':
$cont['fp']='contribute.php';
$cont['atit']=' - '._('Contribute');
$cont['desc']=_('Contribute to Mastodon Help development');
$menu['about']['selected']=true;
$menu['about']['submenu']['contribute']['href']=null;
$menu['about']['submenu']['contribute']['selected']=true;
$url='contribute';
if (in_array($dlang,array('ca','es'))) $needstrans=true;
break;
default:
http_response_code(404);
$cont['fp']='404.php';
$cont['atit']=' - '._('Not found');
$cont['desc']=_('Page not found');
$url='404';
/*$nffp='404.log';
$nff=@fopen($nffp,'a');
if ($nff) {
fwrite($nff,$_SERVER['REQUEST_URI'].N);
fclose($nff);
} else {
echo('Mannaggia!');
}*/
if (in_array($dlang,array('ca','es'))) $needstrans=true;
break;
}
$cont['mtit']=substr($cont['atit'],3);
$uid[]=$_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_USER_AGENT',$_SERVER)) $uid[]=$_SERVER['HTTP_USER_AGENT'];
if (array_key_exists('HTTP_ACCEPT',$_SERVER)) $uid[]=$_SERVER['HTTP_ACCEPT'];
if (array_key_exists('HTTP_ACCEPT_LANGUAGE',$_SERVER)) $uid[]=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
if (array_key_exists('HTTP_ACCEPT_ENCODING',$_SERVER)) $uid[]=$_SERVER['HTTP_ACCEPT_ENCODING'];
$uid=md5(implode('|',$uid));
$link=mysqli_connect($conf['db_host'],$conf['db_user_name'],$conf['db_user_password'],$conf['db_name'],$conf['db_port'],$conf['db_socket']) or muoribene(_('Couldnt connect to database: ').mysqli_connect_error().' ['.mysqli_connect_errno().']',2,false);
mysqli_set_charset($link,'utf8mb4');
$now=time();
$res=mysqli_query($link,'SELECT * FROM ZHits WHERE UID="'.$uid.'" ORDER BY TS DESC') or muoribene(__LINE__.': '.mysqli_error($link),2,true);
if (mysqli_num_rows($res)>0) {
$row=mysqli_fetch_assoc($res);
if ($now-$row['TS']<2) sleep(1);
}
mysqli_query($link,'INSERT INTO ZHits (UID,URL,Lang,TS) VALUES ("'.$uid.'","'.$url.'","'.$dlang.'",'.$now.')') or muoribene(__LINE__.': '.mysqli_error($link),2,true);
mysqli_close($link);
$menuout='';
function buildmenu($menu,$submenu=false) {
global $menuout;
foreach ($menu as $key=>$arr) {
$liclasses=array();
$menuout.='<li';
if (!is_null($arr['liadd'])) $menuout.=' '.$arr['liadd'];
if ($arr['selected']) $liclasses[]='hil';
if (!is_null($arr['submenu'])) {
$menuout.=' onmouseover="chulsh(this,true)" onmouseout="chulsh(this,false)"';
($submenu) ? $liclasses[]='lipr' : $liclasses[]='lipd';
}
if (count($liclasses)>0) $menuout.=' class="'.implode(' ',$liclasses).'"';
$menuout.='>';
if (!is_null($arr['href'])) {
$menuout.='<a href="'.$arr['href'].'">'.$arr['title'].'</a>';
} else {
$menuout.=$arr['title'];
}
if (!is_null($arr['submenu'])) {
//$menuout.='<img src="/imgs/icona-32.png" width="5" height="5" style="float:right;">';
($submenu) ? $class='ulb' : $class='ula';
$menuout.=N.'<ul class="'.$class.'" onmouseover="ulsh(this,true)" onmouseout="ulsh(this,false)">'.N;
buildmenu($arr['submenu'],true);
$menuout.='</ul>'.N;
}
$menuout.='</li>'.N;
}
}
buildmenu($menu);
//echo(htmlentities($menuout));
$cjrand=rand(0,999999);
//$cjrand='0.1';
echo('<!DOCTYPE HTML>
<html lang="'.$dlang.'">
<head>
<title>Mastodon Help'.$cont['atit'].'</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="'.$cont['desc'].'">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta property="og:image" content="'.$prepath.'imgs/ogimage03.png">
<link rel="icon" type="image/png" href="'.$prepath.'imgs/icona-32.png" sizes="32x32">
<link rel="icon" type="image/png" href="'.$prepath.'imgs/icona-192.png" sizes="192x192">
<link rel="icon" type="image/png" href="'.$prepath.'imgs/icona-512.png" sizes="512x512">
<link rel="apple-touch-icon-precomposed" href="'.$prepath.'imgs/icona-180.png">'.N);
foreach ($cont['css'] as $val)
echo('<link rel="stylesheet" type="text/css" href="'.$prepath.'css/'.$val.'?v='.$cjrand.'">'.N);
foreach ($cont['js'] as $val)
echo('<script language="JavaScript" src="'.$prepath.'js/'.$val.'?v='.$cjrand.'"></script>'.N);
echo('</head>
<body'.$cont['bodyadd'].'>
<nav>
<div id="hmenu">
<img src="'.$prepath.'imgs/menuicon_inactive.svg" id="menuicon" onclick="swmenu()">
<div id="menutit">Mastodon Help'.$cont['atit'].'</div>
<div id="menu">
<ul>
'.$menuout.'
</ul>
</div>
</div>'.N);
require($cont['fp']);
if ($needstrans) printf('<div id="transd">'._('This translation is missing, incomplete or not up-to-date. Please click <a href="/contribute/%s">here</a> if youd like to help, or <span class="transc" onclick="document.getElementById(\'transd\').style.display=\'none\'">here</span> to close this message').'</div>'.N,$dlang);
echo('</body>
</html>'.N);
?>