MastodonHelp/web/site/custard.php

555 lines
28 KiB
PHP
Raw Normal View History

2020-10-13 08:21:26 +02:00
<?php
use function mysqli_real_escape_string as myesc;
/*$dlang='fr';
$dtzbl=array('ca'=>'Europe/Madrid','en'=>'Europe/London','es'=>'Europe/Madrid','fr'=>'Europe/Paris','it'=>'Europe/Rome');
date_default_timezone_set($dtzbl[$dlang]);*/
$debug='';
$debug.='REQUEST_URI: '.$_SERVER['REQUEST_URI'].N;
$debug.='_GET: '.print_r($_GET,1);
$nottrans=['ca','es','fr'];
$locale=$dlang;
if (in_array($locale,$nottrans)) $locale='en';
$blocale='en_US.UTF-8';
//putenv('LC_ALL='.$blocale);
setlocale(LC_ALL,$blocale);
bindtextdomain('custard','./locale/'.$locale);
textdomain('custard');
$debug.='LOCALE: '.$locale.N;
2020-10-15 09:59:36 +02:00
$getc=count($_GET);
2020-10-13 08:21:26 +02:00
if (array_key_exists('advc',$_GET)) {
($_GET['advc']=='1') ? $_GET['advc']=1 : $_GET['advc']=0;
} else {
$_GET['advc']=0;
}
2020-10-14 19:03:43 +02:00
//non spostarli sopra sennò gettext non funge (css si può anche, ma tanto vale tenere insieme)
2020-10-22 17:54:05 +02:00
echo('<link rel="stylesheet" type="text/css" href="'.$prepath.'custard.css?v='.$cjrand.'">
2020-10-22 21:12:13 +02:00
<img src="'.$prepath.'imgs/helpbutti.svg" id="helpbutt" class="helpb" onmouseover="swhelpi(true);" onmouseout="swhelpi(false);" onclick="swhelp();">
2020-10-22 17:54:05 +02:00
<h3>'._('Istanze').'</h3>
<script language="JavaScript">
2020-10-22 21:12:13 +02:00
let dbgsh=false;
2020-10-13 08:21:26 +02:00
function shdbg() {
2020-10-22 21:12:13 +02:00
let dbgd=document.getElementById(\'debug\');
let dbgb=document.getElementById(\'dbgb\');
2020-10-13 08:21:26 +02:00
if (dbgsh) {
dbgd.style.display=\'none\';
dbgb.className=\'litbut\';
dbgsh=false;
} else {
dbgd.style.display=\'block\';
dbgb.className=\'litbuta\';
dbgsh=true;
}
}
2020-10-22 21:12:13 +02:00
let mctrlsh=false;
2020-10-13 08:21:26 +02:00
function shmctrl() {
2020-10-22 21:12:13 +02:00
let mctrl=document.getElementById(\'mctrl\');
let mctrlb=document.getElementById(\'mctrlb\');
let advc=document.getElementById(\'advc\');
2020-10-13 08:21:26 +02:00
if (mctrlsh) {
mctrl.style.display=\'none\';
mctrlb.className=\'litbut\';
2020-10-14 18:09:09 +02:00
mctrlb.value=\''._('Mostra criteri avanzati').'\';
2020-10-13 08:21:26 +02:00
advc.value=0;
mctrlsh=false;
} else {
mctrl.style.display=\'block\';
mctrlb.className=\'litbuta\';
2020-10-14 18:09:09 +02:00
mctrlb.value=\''._('Nascondi criteri avanzati').'\';
2020-10-13 08:21:26 +02:00
advc.value=1;
mctrlsh=true;
}
}
2020-10-22 21:12:13 +02:00
let helpsh='.(($getc==0) ? 'false' : 'true').';
2020-10-22 17:54:05 +02:00
function swhelp() {
2020-10-22 21:12:13 +02:00
let hdiv=document.getElementById(\'help\');
let himg=document.getElementById(\'helpbutt\');
2020-10-22 17:54:05 +02:00
if (helpsh) {
hdiv.style.display=\'none\';
2020-10-22 19:19:10 +02:00
himg.title=\''._('Mostra lintroduzione').'\';
2020-10-22 21:12:13 +02:00
himg.src=\''.$prepath.'imgs/helpbutti.svg\';
2020-10-22 17:54:05 +02:00
helpsh=false;
} else {
hdiv.style.display=\'block\';
2020-10-22 19:19:10 +02:00
himg.title=\''._('Nascondi lintroduzione').'\';
2020-10-22 21:12:13 +02:00
himg.src=\''.$prepath.'imgs/helpbutta.svg\';
2020-10-22 17:54:05 +02:00
helpsh=true;
}
}
2020-10-22 21:12:13 +02:00
function swhelpi(over) {
let himg=document.getElementById(\'helpbutt\'), ia;
if (helpsh)
(over) ? ia=\'i\' : ia=\'a\';
else
(over) ? ia=\'a\' : ia=\'i\';
himg.src=\''.$prepath.'imgs/helpbutt\'+ia+\'.svg\';
}
2020-10-22 17:54:05 +02:00
</script>
'.N);
2020-10-13 08:21:26 +02:00
function nullemp($inp) {
if (is_null($inp) || preg_match('/^\s*$/',$inp)===1) return(true);
return(false);
}
function ldate($ts,$dateonly=false) {
if (nullemp($ts)) return(null);
if (!$dateonly)
return(gmdate('d/m/Y H:i:s e',$ts));
else
return(gmdate('d/m/Y',$ts));
}
function hspech($str) {
if (nullemp($str)) return(null);
return(htmlspecialchars($str,ENT_QUOTES|ENT_HTML5,'UTF-8'));
}
function muorimeglio($msg,$close) {
global $link;
if ($close)
mysqli_close($link);
echo('<p>'.$msg.'</p>'.N.'</section>'.N.'</div>'.N.'</div>'.N.'</body>'.N);
exit(2);
}
function nully($str) {
if (nullemp($str)) return('<span class="null">'._('Non disponibile').'</span>');
return($str);
}
2020-10-17 21:23:09 +02:00
function nullyp($str) {
if (nullemp($str)) return('<span class="null">'._('Non disponibili').'</span>');
return($str);
}
2020-10-13 08:21:26 +02:00
function strip($str,$uri) {
if (nullemp($str)) return(null);
while (preg_match('#^\s*<br\s*[\\\/]?>#',$str)===1) $str=preg_replace('#^\s*<br\s*[\\\/]?>#','',$str);
while (preg_match('#<br\s*[\\\/]?>\s*$#',$str)===1) $str=preg_replace('#<br\s*[\\\/]?>\s*$#','',$str);
while (preg_match('#<br\s*[\\\/]?>\s*<br\s*[\\\/]?>#s',$str)===1)
$str=preg_replace('#<br\s*[\\\/]?>\s*<br\s*[\\\/]?>#s','<br>',$str);
$str=preg_replace('#<style( [^>]*)?>.*</style>#s','',$str);
$str=preg_replace('#<a href="(?![a-zA-Z]+://)([^"]+)#','<a href="https://'.$uri.'$1>',$str);
$str=preg_replace('#<h[1-9][^>]*>#','<p><strong>',$str);
$str=preg_replace('#</h[1-9]>#','</strong></p>',$str);
$str=preg_replace(array('#</p><br>#','#</li><br>#','#</ul><br>#','#<ul><br>#'),array('</p>','</li>','</ul>','<ul>'),$str);
$str=preg_replace('#<b>#','<strong>',$str);
$str=preg_replace('#</b>#','</strong>',$str);
2020-10-16 12:14:12 +02:00
$str=preg_replace('#<p></p>#','',$str);
2020-10-13 08:21:26 +02:00
$str=strip_tags($str,'<a><br><ol><ul><li><p><div><i><b><strong><em><small><img>');
return($str);
}
2020-10-22 17:54:05 +02:00
2020-10-15 09:59:36 +02:00
function pnum($num) {
$num.='';
$pnum='';
$li=strlen($num)-1;
$cc=1;
for ($i=$li; $i>=0; $i--) {
$pnum=$num[$i].$pnum;
if ($cc==3 && $i>0) $pnum='.'.$pnum;
$cc++;
if ($cc==4) $cc=1;
}
return($pnum);
}
2020-10-13 08:21:26 +02:00
//$blang=preg_replace(array('#,.*#','#-#'),array('','_'),$_SERVER['HTTP_ACCEPT_LANGUAGE']);
2020-10-15 09:59:36 +02:00
$link=mysqli_connect($conf['db_host'],$conf['db_user_name'],$conf['db_user_password'],$conf['db_name'],$conf['db_port'],$conf['db_socket']) or muorimeglio(_('Impossibile connettersi al database: ').mysqli_connect_error().' ['.mysqli_connect_errno().']',false);
2020-10-13 08:21:26 +02:00
mysqli_set_charset($link,'utf8mb4');
2020-10-22 17:54:05 +02:00
$res=mysqli_query($link,'SELECT COUNT(ID) AS tinsts, SUM(UserCount) AS tusers, SUM(StatusCount) AS tstatuses, SUM(ActiveUsersMonth) AS tactusers FROM Instances WHERE Instances.Dead=0 AND Instances.IsMastodon=1 AND Instances.FirstSeen IS NOT NULL') or muorimeglio(__LINE__.': '.mysqli_error($link),true);
$row=mysqli_fetch_assoc($res);
echo(_('<div id="help"><p class="intro">Questa è una versione beta del nostro motore di ricerca di istanze Mastodon. Funziona così: i dati relativi alle istanze già indicizzate vengono aggiornati ogni notte (alla fine di questo aggiornamento avviene anche il rimescolamento per lordinamento casuale, che quindi varia quotidianamente); una volta alla settimana, nella notte tra martedì e mercoledì, vengono inoltre cercate e aggiunte al database le nuove istanze.</p><p class="intro">I criteri di ricerca avanzati sono modificabili, ma per preimpostazione riflettono la nostra predilezione per un Fediverso decentralizzato ed egualitario; in particolare cerchiamo, con la nostra blacklist, di non dare visibilità a istanze su cui sono accettati contenuti fascisti, razzisti, sessisti, abilisti, sovranisti.</p></div>').N);
printf(_('<p class="introe">Al momento contiamo <span class="statd">%s</span> istanze Mastodon, con <span class="statd">%s</span> utenti (<span class="statd">%s</span> attiv* nellultimo mese) e <span class="statd">%s</span> stati pubblicati.</p>').N, pnum($row['tinsts']), pnum($row['tusers']), pnum($row['tactusers']), pnum($row['tstatuses']));
// <p class="intro">Nella prima versione stabile daremo a* admin delle istanze compatibili con questa politica la possibilità di descrivere ulteriormente la propria istanza con questi campi, tutti facoltativi: “Descrizione in inglese” (per le istanze la cui descrizione è in altre lingue), “Località” (se listanza è particolarmente legata a un territorio), “Lingue” (se le lingue utilizzate prevalentemente sullistanza non corrispondono a quelle rilevate automaticamente dal nostro crawler), “Modalità di copertura dei costi” (per esempio “Autonoma”, “Sottoscrizioni volontarie degli utenti”, “Iniziative benefit”), “Regole sui contenuti” (per esempio “Tag NSFW per i nudi”, “No link a siti di partiti politici”, “No pubblicità”, “Content Warning prima degli spoiler”), e “Categorie” (per esempio “Generalista”, “Astronomia”, “Politica”, “Musica folk”).</p>
// daremo la possibilità di segnalarci le istanze su cui sono accettati contenuti di questo tipo
// Le istanze che non rispondono da più di due mesi vengono dichiarate “morte” nel database e non vengono più mostrate tra i risultati della ricerca, ma una volta allanno, nella notte di Halloween (31 ottobre), vengono nuovamente controllate e, se rispondono, “resuscitate”
2020-10-15 09:59:36 +02:00
2020-10-13 08:21:26 +02:00
$maxuinp=10000000000;
if ((array_key_exists('black',$_GET) && $_GET['black']=='1') || !array_key_exists('black',$_GET)) {
$_GET['cbblack']=' checked';
$_GET['black']=1;
} else {
$_GET['cbblack']='';
$_GET['black']=0;
}
//echo('<p>black: '.$_GET['black'].'</p>');
if ((array_key_exists('creg',$_GET) && $_GET['creg']=='1') || !array_key_exists('creg',$_GET)) {
$_GET['cbcreg']=' checked';
$_GET['creg']=1;
} else {
$_GET['cbcreg']='';
$_GET['creg']=0;
}
if ((array_key_exists('appr',$_GET) && $_GET['appr']=='1') || !array_key_exists('appr',$_GET)) {
$_GET['cbappr']=' checked';
$_GET['appr']=1;
} else {
$_GET['cbappr']='';
$_GET['appr']=0;
}
if ((array_key_exists('lcok',$_GET) && $_GET['lcok']=='1') || !array_key_exists('lcok',$_GET)) {
$_GET['cblcok']=' checked';
$_GET['lcok']=1;
} else {
$_GET['cblcok']='';
$_GET['lcok']=0;
}
if (array_key_exists('lang',$_GET)) {
if (preg_match('#^[0-9]+$#',$_GET['lang'])===1)
$_GET['lang']=$_GET['lang']+0;
else
$_GET['lang']=0;
} else {
$res=mysqli_query($link,'SELECT ID FROM Languages WHERE Code="'.$dlang.'"') or muorimeglio(__LINE__.': '.mysqli_error($link),true);
if (mysqli_num_rows($res)>0) {
$row=mysqli_fetch_assoc($res);
$_GET['lang']=$row['ID'];
} else {
$_GET['lang']=0;
}
}
if ($_GET['lang']>5000000000) $_GET['lang']=0;
if (array_key_exists('desc',$_GET) && preg_match('#^.+$#',$_GET['lang'])===1)
$_GET['desc']=trim($_GET['desc']);
else
$_GET['desc']='';
if (mb_strlen($_GET['desc'])>64) $_GET['desc']='';
if (array_key_exists('minu',$_GET) && preg_match('#^[0-9]+$#',$_GET['minu'])===1)
$_GET['minu']=$_GET['minu']+0;
else
$_GET['minu']=10;
if ($_GET['minu']>$maxuinp) $_GET['minu']=$maxuinp;
if (array_key_exists('maxu',$_GET) && preg_match('#^[0-9]+$#',$_GET['maxu'])===1)
$_GET['maxu']=$_GET['maxu']+0;
else
$_GET['maxu']=30000;
if ($_GET['maxu']>$maxuinp) $_GET['maxu']=$maxuinp;
if ($_GET['maxu']<$_GET['minu']) $_GET['maxu']=$_GET['minu'];
if (array_key_exists('minau',$_GET) && preg_match('#^[0-9]+$#',$_GET['minau'])===1)
$_GET['minau']=$_GET['minau']+0;
else
$_GET['minau']=10;
if ($_GET['minau']>10000000) $_GET['minau']=10000000;
if (array_key_exists('minki',$_GET) && preg_match('#^[0-9]+$#',$_GET['minki'])===1)
$_GET['minki']=$_GET['minki']+0;
else
$_GET['minki']=500;
if ($_GET['minki']>100000) $_GET['minki']=100000;
$order=array(
2020-10-20 22:06:00 +02:00
'rand'=>array('t'=>_('Casuale, prima le consigliate'),'q'=>'Instances.Priority DESC, Instances.RPos ASC'),
2020-10-13 08:21:26 +02:00
// 'feat'=>array('t'=>_('Prima le consigliate'),'q'=>'Instances.Priority DESC'),
// partecipazione: totusers/activeusers
// 'part'=>array('t'=>_('Partecipazione (decr.)'),'q'=>'(Instances.UserCount / Instances.ActiveUsersMonth) ASC'),
2020-10-14 17:29:11 +02:00
'tusersa'=>array('t'=>_('Per numero di utenti, crescente'),'q'=>'Instances.UserCount ASC'),
'tusersd'=>array('t'=>_('Per numero di utenti, decrescente'),'q'=>'Instances.UserCount DESC'),
'ausersd'=>array('t'=>_('Per numero di utenti attivi, decrescente'),'q'=>'Instances.ActiveUsersMonth DESC'),
2020-10-14 22:47:12 +02:00
'kinstsd'=>array('t'=>_('Per numero di istanze note, decrescente'),'q'=>'Instances.DomainCount DESC'),
2020-10-14 17:29:11 +02:00
'charsd'=>array('t'=>_('Per numero massimo di caratteri per toot, decrescente'),'q'=>'Instances.MaxTootChars DESC'),
2020-10-13 08:21:26 +02:00
// 'open'=>array('t'=>_('Prima quelle con iscriz. aperte'),'q'=>'Instances.RegOpen DESC, Instances.RegReqApproval ASC'),
// 'alph'=>array('t'=>_('Alfabetico'),'q'=>'Instances.URI ASC'),
// new non ha senso di esistere visto che c'è firstseen
// 'new'=>array('t'=>_('Prima le nuove'),'q'=>'Instances.New DESC'),
// 'name'=>array('t'=>_('Nome (crescente)'),'q'=>'Instances.Title ASC'),
// 'admc'=>array('t'=>_('Data creazione account admin'),'q'=>'IF (Instances.AdmCreatedAt IS NULL, 9999999999, Instances.AdmCreatedAt) ASC'),
// 'fseena'=>array('t'=>_('Data di “avvistamento” cresc.'),'q'=>'Instances.FirstSeen ASC'),
// 'fseend'=>array('t'=>_('Data di “avvistamento” decr.'),'q'=>'Instances.FirstSeen DESC'),
);
if (!(array_key_exists('ord',$_GET) && array_key_exists($_GET['ord'],$order)))
$_GET['ord']='rand';
2020-10-20 22:06:00 +02:00
if ($_GET['lang']==0) $order['rand']=array('t'=>_('Casuale'),'q'=>'Instances.RPos ASC');
2020-10-13 08:21:26 +02:00
$p=1;
if (array_key_exists('p',$_GET) && preg_match('#^[0-9]+$#',$_GET['p'])===1) $p=$_GET['p']+0;
($_GET['lang']==0) ? $selected=' selected' : $selected='';
echo('<form method="get" id="searchf" class="sdbox">
2020-10-14 17:29:11 +02:00
<div class="sdtit">'._('Criteri di ricerca').'</div>
2020-10-13 08:21:26 +02:00
<div class="sdrow">
<div class="sdlabel"><label for="lang" title="'._('Includi solo le istanze in cui la lingua più usata è quella selezionata').'">'._('La lingua più usata è').'</label></div>
<div class="sdinput">
<select id="lang" name="lang" class="sselect">
<option value="0"'.$selected.'>'._('Indifferente').'</option>'.N);
$res=mysqli_query($link,'SELECT Languages.ID AS Lid, CONCAT(Name'.$dlang.', \' [\', Code, \'] (\', COUNT(Languages.ID), \')\') AS Txt FROM InstOurLangs LEFT JOIN Languages ON Languages.ID=OurLangID LEFT JOIN Instances ON Instances.ID=InstOurLangs.InstID WHERE Instances.Dead=0 AND Instances.IsMastodon=1 AND InstOurLangs.Pos=1 GROUP BY Languages.ID ORDER BY Name'.$dlang.' ASC') or muorimeglio(__LINE__.': '.mysqli_error($link),true);
//$res=mysqli_query($link,'SELECT Languages.ID AS Lid, CONCAT(Name'.$dlang.', \' (\', Code, \')\') AS Txt FROM InstOurLangs LEFT JOIN Languages ON Languages.ID=OurLangID LEFT JOIN Instances ON Instances.ID=InstOurLangs.InstID WHERE Instances.Dead=0 AND Instances.IsMastodon=1 AND InstOurLangs.Pos=1 GROUP BY Languages.ID ORDER BY Name'.$dlang.' ASC') or muorimeglio(__LINE__.': '.mysqli_error($link),true);
while ($row=mysqli_fetch_assoc($res)) {
($_GET['lang']==$row['Lid']) ? $selected=' selected' : $selected='';
echo('<option value="'.$row['Lid'].'"'.$selected.'>'.$row['Txt'].'</option>'.N);
}
echo('</select>
</div>
</div>
<div class="sdrow">
<div class="sdlabel"><label for="desc" title="'._('Includi solo le istanze la cui descrizione (breve o lunga) contiene lespressione specificata').'">'._('La descrizione contiene').'</label></div>
2020-10-15 19:24:45 +02:00
<div class="sdinput"><input type="text" id="desc" name="desc" class="sinput" maxlength="64" value="'.hspech($_GET['desc']).'"></div>
2020-10-13 08:21:26 +02:00
</div>
<div id="mctrl">
<div class="sdrow">
<div class="sdlabel"><label for="minu" title="'._('Includi solo le istanze che hanno almeno questo numero di utenti (“0” disabilita questo criterio)').'">'._('Il numero minimo di utenti è').'</label></div>
<div class="sdinput"><input type="number" id="minu" name="minu" min="0" max="'.$maxuinp.'" class="sinput" value="'.$_GET['minu'].'"></div>
</div>
<div class="sdrow">
<div class="sdlabel"><label for="maxu" title="'._('Includi solo le istanze che hanno al massimo questo numero di utenti (“0” disabilita questo criterio)').'">'._('Il numero massimo di utenti è').'</label></div>
<div class="sdinput"><input type="number" id="maxu" name="maxu" min="0" max="'.$maxuinp.'" class="sinput" value="'.$_GET['maxu'].'"></div>
</div>
<div class="sdrow">
<div class="sdlabel"><label for="minau" title="'._('Includi solo le istanze che negli ultimi 30 giorni hanno avuto almeno questo numero di utenti attivi (“0” disabilita questo criterio)').'">'._('Il numero minimo di utenti attivi è').'</label></div>
<div class="sdinput"><input type="number" id="minau" name="minau" min="0" max="100000000" class="sinput" value="'.$_GET['minau'].'"></div>
</div>
<div class="sdrow">
<div class="sdlabel"><label for="minki" title="'._('Includi solo le istanze che conoscono almeno questo numero di altre istanze (“0” disabilita questo criterio)').'">'._('Il numero minimo di istanze note è').'</label></div>
<div class="sdinput"><input type="number" id="minki" name="minki" min="0" max="100000" class="sinput" value="'.$_GET['minki'].'"></div>
</div>
<div class="sdrow">
<div class="sdlabel"><label for="cbblack" title="'._('Escludi le istanze blacklistate da Mastodon Help').'">'._('Escludi blacklistate').'</label></div>
<div class="sdinput">
<input type="checkbox" class="sckbox" id="cbblack" value="1"'.$_GET['cbblack'].' onchange="if (this.checked) document.getElementById(\'black\').value=1; else document.getElementById(\'black\').value=0;">
<input type="hidden" id="black" name="black" value="'.$_GET['black'].'">
</div>
</div>
<div class="sdrow">
<div class="sdlabel"><label for="cbcreg" title="'._('Escludi le istanze che non permettono nuove iscrizioni').'">'._('Escludi se iscriz. chiuse').'</label></div>
<div class="sdinput">
<input type="checkbox" class="sckbox" id="cbcreg" value="1"'.$_GET['cbcreg'].' onchange="if (this.checked) document.getElementById(\'creg\').value=1; else document.getElementById(\'creg\').value=0;">
<input type="hidden" id="creg" name="creg" value="'.$_GET['creg'].'">
</div>
</div>
<div class="sdrow">
<div class="sdlabel"><label for="cbappr" title="'._('Escludi le istanze su cui liscrizione è subordinata allapprovazione di un* admin').'">'._('Escludi se iscriz. richiede approvaz.').'</label></div>
<div class="sdinput">
<input type="checkbox" class="sckbox" id="cbappr" value="1"'.$_GET['cbappr'].' onchange="if (this.checked) document.getElementById(\'appr\').value=1; else document.getElementById(\'appr\').value=0;">
<input type="hidden" id="appr" name="appr" value="'.$_GET['appr'].'">
</div>
</div>
<div class="sdrow">
<div class="sdlabel"><label for="cblcok" title="'._('Escludi le istanze che non hanno risposto allultimo check').'">'._('Escludi se offline allultimo check').'</label></div>
<div class="sdinput">
<input type="checkbox" class="sckbox" id="cblcok" value="1"'.$_GET['cblcok'].' onchange="if (this.checked) document.getElementById(\'lcok\').value=1; else document.getElementById(\'lcok\').value=0;">
<input type="hidden" id="lcok" name="lcok" value="'.$_GET['lcok'].'">
</div>
</div>
</div>
<div class="sdcrow">
2020-10-14 18:09:09 +02:00
<input type="button" class="litbut" id="mctrlb" value="'._('Criteri avanzati').'" onclick="shmctrl()">
2020-10-13 08:21:26 +02:00
</div>
2020-10-14 17:29:11 +02:00
<div class="sdtitb">'._('Ordinamento dei risultati').'</div>
2020-10-14 08:37:41 +02:00
<div class="sdcrow">
2020-10-14 17:29:11 +02:00
<select id="ord" name="ord" class="sselect100">'.N);
foreach ($order as $key=>$buf) {
($key!=$_GET['ord']) ? $selected='' : $selected=' selected';
echo('<option value="'.$key.'"'.$selected.'>'.$buf['t'].'</option>'.N);
}
echo('</select>
2020-10-14 08:37:41 +02:00
</div>
<!-- <input type="button" class="litbut" id="dbgb" value="'._('Info di debug').'" onclick="shdbg()" style="margin:0"> //-->
2020-10-13 08:21:26 +02:00
<div class="sdlrow">
<input type="submit" value="'._('Cerca').'" class="ssubmit">
</div>
2020-10-14 17:29:11 +02:00
<div class="sdlcrow">
2020-10-14 18:09:09 +02:00
<input type="button" class="litbut" value="'._('Resetta la ricerca').'" onclick="document.location.href=document.location.href.replace(/\\?.*$/,\'\')">
2020-10-14 17:29:11 +02:00
</div>
2020-10-13 08:21:26 +02:00
<input type="hidden" id="advc" name="advc" value="'.$_GET['advc'].'">
<input type="hidden" id="p" name="p" value="'.$p.'">
</form>
<script language="JavaScript">
mctrlsh='.(($_GET['advc']==1) ? 'false' : 'true').';
shmctrl();
2020-10-22 17:54:05 +02:00
swhelp();
2020-10-13 08:21:26 +02:00
</script>'.N);
$joins=array();
$wheres=array();
2020-10-14 00:03:40 +02:00
$wheres[]='Instances.Dead=0 AND Instances.IsMastodon=1 AND Instances.FirstSeen IS NOT NULL';
2020-10-13 08:21:26 +02:00
if ($_GET['black']==1) $wheres[]='Instances.Blacklisted=0';
if ($_GET['creg']==1) $wheres[]='Instances.RegOpen=1';
if ($_GET['appr']==1) $wheres[]='Instances.RegReqApproval=0';
if ($_GET['lcok']==1) $wheres[]='Instances.LastCheckOk=1';
/*if ($_GET['lcok']==1) {
$joins[]='LEFT JOIN InstChecks AS InstChecks ON InstChecks.InstID=Instances.ID AND InstChecks.Time=(SELECT MAX(InstChecks.Time) AS MaxTime FROM InstChecks WHERE InstChecks.InstID=Instances.ID)';
$wheres[]='InstChecks.Status=1';
}*/
if ($_GET['lang']>0) {
$joins[]='LEFT JOIN InstOurLangs ON InstOurLangs.InstID=Instances.ID';
$wheres[]='(InstOurLangs.OurLangID='.$_GET['lang'].' AND InstOurLangs.Pos=1)';
}
$buf=preg_replace('#%#','\%',myesc($link,$_GET['desc']));
if ($_GET['desc']!='') $wheres[]='(Instances.ShortDesc LIKE "%'.$buf.'%" OR Instances.LongDesc LIKE "%'.$buf.'%")';
if ($_GET['minu']>0) $wheres[]='Instances.UserCount>='.$_GET['minu'];
if ($_GET['maxu']>0) $wheres[]='Instances.UserCount<='.$_GET['maxu'];
if ($_GET['minau']>0) $wheres[]='Instances.ActiveUsersMonth>='.$_GET['minau'];
if ($_GET['minki']>0) $wheres[]='Instances.DomainCount>='.$_GET['minki'];
$joins=implode(' ',$joins);
$wheres='WHERE '.implode(' AND ',$wheres);
$que='SELECT * FROM Instances '.$joins.' '.$wheres.' ORDER BY '.$order[$_GET['ord']]['q'];
$debug.='QUERY: «'.hspech($que).'»'.N;
$qit=microtime(true);
$res=mysqli_query($link,$que) or muorimeglio(__LINE__.': '.mysqli_error($link),true);
$debug.='MAIN QUERY EXEC TIME: '.(microtime(true)-$qit).' sec.'.N;
$itot=mysqli_num_rows($res);
$debug.='RESULTS: '.$itot;
2020-10-14 08:37:41 +02:00
//echo('<div id="debug"><textarea spellcheck="false">'.$debug.'</textarea></div>'.N);
2020-10-14 19:11:40 +02:00
$ipp=10;// istanze per pagina
2020-10-13 08:21:26 +02:00
$if=$ipp*($p-1);
if ($if>=$itot) {
$if=0;
$p=1;
}
$il=$if+$ipp;
$ptot=ceil($itot/$ipp);
//echo('ptot: '.$ptot.'<br>'.N);
if ($ptot>1) {
$out='<div>'.N;
$out.='<select id="pagesel" onchange="document.getElementById(\'p\').value=this.value; document.getElementById(\'searchf\').submit();">'.N;
for ($i=1; $i<=$ptot; $i++) {
($i!=$p) ? $selected='' : $selected=' selected';
$li=$i*$ipp;
if ($li>$itot) $li=$itot;
//page number prefix
$out.='<option value="'.$i.'"'.$selected.'>'._('P.').' '.$i.'/'.$ptot.' ('.(($i-1)*$ipp+1).'-'.$li.'/'.$itot.')</option>'.N;
}
$out.='</select>'.N;
$out.='</div>'.N;
echo($out);
2020-10-14 19:11:40 +02:00
} else {
2020-10-14 19:18:17 +02:00
echo('<script language="JavaScript">document.getElementById(\'bmenu\').style.display=\'none\';</script>'.N);
2020-10-13 08:21:26 +02:00
}
mysqli_data_seek($res,$if);
while ($if<$il && $row=mysqli_fetch_assoc($res)) {
$if++;
$out='<div class="ihead"><a href="https://'.hspech($row['URI']).'" title="'._('Vai allistanza').'">'.hspech($row['URI']).'</a> (<span title="'._('ID istanza').': '.$row['ID'].'">'.$if.'</span>/'.$itot.')</div>'.N;
$out.='<div class="ibody">'.N;
$rres=mysqli_query($link,'SELECT CONCAT(Languages.Name'.strtoupper($dlang).'," (",Languages.Code,")") AS Lang FROM InstOurLangs LEFT JOIN Languages ON Languages.ID=InstOurLangs.OurLangID WHERE InstOurLangs.InstID='.$row['ID'].' ORDER BY InstOurLangs.Pos ASC') or muorimeglio(__LINE__.': '.mysqli_error($link),true);
$buf=array();
while ($rrow=mysqli_fetch_assoc($rres))
$buf[]=hspech($rrow['Lang']);
$out.='<a href="https://'.hspech($row['URI']).'" title="'._('Vai allistanza').'"><div class="iimgc"><img class="iimg" src="'.$row['Thumb'].'">';
if (!is_null($row['Priority'])) $out.='<img src="'.$prepath.'imgs/featured-it.svg" class="ifeat">';
$out.='</div></a>'.N;
$out.='<div class="icol">'.N;
$out.='<div><span class="ilab">'._('Nome').'</span> <a href="https://'.hspech($row['URI']).'" title="'._('Vai allistanza').'">'.nully(hspech($row['Title'])).'</a></div>'.N;
/*$out.='<div><span class="ilab">'._('Consigliata').'</span> ';
(!is_null($row['Priority'])) ? $out.='<span class="ivgood">'._('Si!').'</span>' : $out.=_('No');
$out.='</div>'.N;*/
$out.='<div><span class="ilab">'._('Lingue').'</span> '.nully(implode(', ',$buf)).'</div>'.N;
$out.='<div><span class="ilab">'._('Utenti').'</span> '.nully($row['UserCount']).'</div>'.N;
$out.='<div><span class="ilab">'._('Utenti attiv* nellultimo mese').'</span> '.nully($row['ActiveUsersMonth']).'</div>'.N;
$out.='<div><span class="ilab">'._('Utenti attiv* negli ultimi sei mesi').'</span> '.nully($row['ActiveUsersHalfYear']).'</div>'.N;
$out.='<div><span class="ilab">'._('Istanze note a questa istanza').'</span> '.nully($row['DomainCount']).'</div>'.N;
$out.='</div>'.N;
$out.='<div class="icol">'.N;
$out.='<div><span class="ilab">'._('Caratteri per toot (max)').'</span> ';
if (nullemp($row['MaxTootChars']))
$out.='<span class="null">500</span>';
else
$out.=$row['MaxTootChars'];
$out.='</div>'.N;
$out.='<div><span class="ilab">'._('Nella blacklist').'</span> ';
($row['Blacklisted']==1) ? $out.='<span class="ibad">'._('Si').'</span>' : $out.='<span class="igood">'._('No').'</span>';
$out.='</div>'.N;
$out.='<div><span class="ilab">'._('Nuova').'</span> ';
($row['New']==1) ? $out.='<span class="ivgood">'._('Si!').'</span>' : $out.=_('No');
$out.='</div>'.N;
$out.='<div><span class="ilab">'._('Versione mastodon').'</span> '.nully(hspech($row['Version'])).'</div>'.N;
$out.='<div><span class="ilab">'._('Iscrizioni').'</span> ';
($row['RegReqApproval']==1) ? $buf=' <span class="iwarn">('._('con approvazione admin').')</span>' : $buf='';
if (nullemp($row['RegOpen']))
$out.='<span class="null">'._('Non disponibile').'</span>';
elseif ($row['RegOpen']==1)
$out.='<span class="igood">'._('Aperte').'</span>'.$buf;
else
$out.='<span class="iwarn">'._('Chiuse').'</span>';
$out.='</div>'.N;
$out.='<div><span class="ilab">'._('E-mail').'</span> ';
if (nullemp($row['Email']))
$out.='<span class="null">'._('Non disponibile').'</span>';
else
$out.='<a href="mailto:'.$row['Email'].'">'.$row['Email'].'</a>';
$out.='</div>'.N;
$out.='</div>'.N;
2020-10-15 09:59:36 +02:00
$out.='<div><span class="ilab">'._('Hashtag più usati (ult. settimana)').'</span> ';
2020-10-13 08:21:26 +02:00
$rres=mysqli_query($link,'SELECT * FROM InstTrends WHERE InstID='.$row['ID'].' ORDER BY Pos ASC') or muorimeglio(__LINE__.': '.mysqli_error($link),true);
if (mysqli_num_rows($rres)>0) {
$buf=array();
while ($rrow=mysqli_fetch_assoc($rres))
$buf[]='<a href="'.hspech($rrow['URL']).'">'.hspech($rrow['Name']).'</a>';
$out.=implode(', ',$buf);
} else {
$out.='<span class="null">'._('Non disponibili').'</span>';
}
$out.='</div>'.N;
$out.='<div><div class="idlab">'._('Descrizione breve').'</div><div class="idesc">'.nully(strip(nl2br(trim($row['ShortDesc']),false),$row['URI'])).'</div></div>'.N;
$out.='<div><div class="idlab">'._('Descrizione lunga').'</div><div class="idesc">'.nully(strip(trim($row['LongDesc']),$row['URI'])).'</div></div>'.N;
2020-10-17 21:23:09 +02:00
$out.='<div class="abox"><img class="aimg" src="'.$row['AdmAvatar'].'"><div><span class="ilab">'._('Account admin').'</span> '.nully(hspech($row['AdmAccount'])).'</div><div><span class="ilab">'._('Data di creazione').'</span> '.nully(ldate($row['AdmCreatedAt'],true)).'</div><div><span class="ilab">'._('Nome admin').'</span> '.nully(hspech($row['AdmDisplayName'])).'</div><div><div class="idlab">'._('Note admin').'</div><div class="inote">'.nullyp(strip(trim($row['AdmNote']),$row['URI'])).'</div>'.N;
2020-10-13 08:21:26 +02:00
$out.='</div></div>';
2020-10-15 06:27:27 +02:00
$out.='<div class="ghost"><div class="idlab">'._('Statistiche').'</div><div class="istat">';
2020-10-13 08:21:26 +02:00
$rres=mysqli_query($link,'SELECT COUNT(InstID) AS cnt, SUM(Statuses) AS tstatuses, SUM(Logins) AS tlogins, SUM(Registrations) AS tregs FROM InstActivity WHERE InstID='.$row['ID']) or muorimeglio(__LINE__.': '.mysqli_error($link),true);
$out.='<div class="dida">'._('Attività delle ultime 12 settimane');
if (mysqli_num_rows($rres)>0) {
$rrow=mysqli_fetch_assoc($rres);
if ($rrow['cnt']>0)
$out.=' ('._('totali:').' '.$rrow['tstatuses'].' '._('stati').', '.$rrow['tlogins'].' '._('accessi').', '.$rrow['tregs'].' '._('iscrizioni').')';
}
$out.='</div>'.N;
$rres=mysqli_query($link,'SELECT * FROM InstActivity WHERE InstID='.$row['ID'].' ORDER BY Week ASC') or muorimeglio(__LINE__.': '.mysqli_error($link),true);
$out.='<table class="abar"><tr>';
$tot=mysqli_num_rows($rres);
if ($tot>0) {
while ($rrow=mysqli_fetch_assoc($rres))
2020-10-14 22:47:12 +02:00
// initials for Statuses (Toots), Logins, Registrations
2020-10-13 08:21:26 +02:00
$out.='<td width="'.(100/$tot).'%">'._('S').': '.$rrow['Statuses'].'<br>'._('A').': '.$rrow['Logins'].'<br>'._('I').': '.$rrow['Registrations'].'</td>';
} else {
$out.='<td><span class="null">'._('Non disponibile').'</span></td>';
}
$out.='</tr></table>'.N;
2020-10-15 06:27:27 +02:00
$rres=mysqli_query($link,'SELECT * FROM InstChecks WHERE InstID='.$row['ID'].' ORDER BY Time DESC LIMIT 0,8') or muorimeglio(__LINE__.': '.mysqli_error($link),true);
$tot=mysqli_num_rows($rres);
$buf=array();
while ($rrow=mysqli_fetch_assoc($rres)) $buf[]=$rrow;
$out.='<div class="dida">'._('Ultimi check (verde: OK; rosso: KO)').'</div><table class="cbar"><tr>';
for ($i=$tot-1; $i>=0; $i--) {
$out.='<td width="'.(100/$tot).'%"';
if ($buf[$i]['Status']==1) $out.=' class="cbarok"';
$out.='>'.ldate($buf[$i]['Time']).'</td>';
}
$out.='</tr></table>'.N;
2020-10-13 08:21:26 +02:00
$out.='</div></div>'.N;
$out.='</div>'.N;
echo($out);
}
mysqli_close($link);
?>