This commit is contained in:
pezcurrel 2020-05-02 22:49:30 +02:00
parent 463d2eaf72
commit 0921d2a041
4 changed files with 122 additions and 49 deletions

View file

@ -164,30 +164,6 @@ if ($riprendi) {
$riprendi=true;
}
$tronconi=array();
function flushtronc($id) {
global $tronconi;
foreach ($tronconi as $row) {
if (!is_null($id)) {
if ($row['tab']=='Blacklist')
$eurl='edblinsts.php';
elseif ($row['tab']=='Instances')
$eurl='edinst.php';
elseif ($row['tab']=='Languages')
$eurl='editlang.php';
// questo qui sotto non è errore: la tabella InstTrends non ha ID perciò non è editabile, il massimo che si può fare è andare a vedere la tabella Instances e i trends collegati (l'id che viene passato è infatti quello della tabella Instances)
elseif ($row['tab']=='InstTrends')
$eurl='edinst.php';
}
$msg=$row['ctx'].': ho dovuto troncare a '.$row['size'].' caratteri il valore da inserire nella colonna «'.$row['col'].'» della tabella «'.$row['tab'].'» perché troppo lungo ('.$row['len'].' caratteri).';
if (!is_null($id))
$msg.=' Puoi <a href="'.$eurl.'?id='.$id.'">editarlo qui</a>.';
notify($msg,2);
}
$tronconi=array();
}
function truncs($str,$tab,$col,$ctx) {
global $tables, $tronconi, $iswin;
if ($iswin)
@ -195,7 +171,7 @@ function truncs($str,$tab,$col,$ctx) {
$size=$tables[$tab][$col];
$len=mb_strlen($str,'UTF-8');
if ($len>$size) {
$tronconi[]=array('id'=>null,'tab'=>$tab,'col'=>$col,'ctx'=>$ctx,'len'=>$len,'size'=>$size);
notify($ctx.': ho dovuto troncare a '.$size.' caratteri il valore da inserire nella colonna «'.$col.'» della tabella «'.$tab.'» perché troppo lungo ('.$len.' caratteri).',2);
$str=mb_substr($str,0,$size-1,'UTF-8').'…';
}
return($str);
@ -310,9 +286,8 @@ if (!$riprendi) {
if (!willtrunc($row['Domain'],'Blacklist','Domain')) {
mysqli_query($link,'INSERT INTO Blacklist (ID, Domain, CreatedAt, ModifiedAt, Severity, RejectMedia, RejectReports, PrivateComment, PublicComment) VALUES (NULL, \''.myesc($link,$row['Domain']).'\', \''.myesc($link,$row['CreatedAt']).'\', \''.myesc($link,$row['ModifiedAt']).'\', \''.myesc($link,$row['Severity']).'\', \''.myesc($link,$row['RejectMedia']).'\', \''.myesc($link,$row['RejectReports']).'\', NULL, \''.myesc($link,$row['Domain']).'\')')
or mexit(__LINE__.': '.mysqli_error($link).N,3);
flushtronc(mysqli_insert_id($link));
} else {
notify('Non ho potuto inserire «'.$row['Domain'].'» nella tabella delle istanze blacklistate perché il dominio è troppo lungo per il campo corrispondente nel DB.',2);
lecho('Non ho potuto inserire «'.$row['Domain'].'» nella tabella delle istanze blacklistate perché il dominio è troppo lungo per il campo corrispondente nel DB.',2);
}
}
@ -578,7 +553,6 @@ function langs($instid, $uri, $auto) {
mysqli_query($link, $q)
or mexit(__LINE__.': '.mysqli_error($link).N,3);
$langid=mysqli_insert_id($link);
flushtronc($langid);
} else {
$row=mysqli_fetch_assoc($res);
$langid=$row['ID'];
@ -667,8 +641,7 @@ while ($i<$cinsts) {
if (mysqli_num_rows($res)<1) {
$res=mysqli_query($link,'INSERT INTO Platforms (Name) VALUES (\''.myesc($link,truncs($info['x-nodeinfo']['software']['name'],'Platforms','Name','«'.$info['uri'].'»')).'\')')
or mexit(__LINE__.': '.mysqli_error($link).N,3);
notify('«'.$info['uri'].'» utilizza come software «'.$info['x-nodeinfo']['software']['name'].'»; lo aggiungo alla tabella delle piattaforme incontrate. Se non si tratta di mastodon o corgidon, che già vengono accettati, sarebbe buona cosa verificare se è una variante di mastodon e quanto è compatibile, per valutare se accettare le istanze che lo utilizzano.',1);
flushtronc(null);
notify('«'.$info['uri'].'» utilizza come software «'.$info['x-nodeinfo']['software']['name'].'»; lho aggiunto alla tabella delle piattaforme incontrate. Se non si tratta di mastodon o corgidon, che già vengono accettati, sarebbe buona cosa verificare se è una variante di mastodon e quanto è compatibile, per valutare se accettare le istanze che lo utilizzano.',1);
}
}
} else {
@ -815,22 +788,21 @@ while ($i<$cinsts) {
if (mysqli_num_rows($res)>0) {
lecho('«'.$instrow['URI'].'» è già presente nel DB, la aggiorno...'.N);
$oldinstrow=mysqli_fetch_assoc($res);
flushtronc($oldinstrow['ID']);
$instid=$oldinstrow['ID'];
$instrow['ID']=$oldinstrow['ID'];
$instrow['FirstSeen']=$oldinstrow['FirstSeen'];
$instrow['New']=$oldinstrow['New'];
if ($instrow['Good']==1 && $oldinstrow['Good']==0) {
notify('Listanza «<a href="edinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» non era papabile, ma lo è diventata!',1);
notify('Listanza «<a href="viewinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» non era papabile, ma lo è diventata!',1);
} elseif ($instrow['Good']==0 && $oldinstrow['Good']==1) {
notify('Listanza «<a href="edinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» era papabile, ma non lo è più per i seguenti motivi: '.implode('; ',$whynot),3);
notify('Listanza «<a href="viewinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» era papabile, ma non lo è più per i seguenti motivi: '.implode('; ',$whynot),3);
}
$instrow['Chosen']=$oldinstrow['Chosen'];
$instrow['Visible']=$oldinstrow['Visible'];
if ($instrow['ShortDesc']!=$oldinstrow['ShortDesc'])
notify('<p>La «Descrizione breve» dellistanza «<a href="edinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» è cambiata. La vecchia era...</p><div class="valdesc">'.$oldinstrow['ShortDesc'].'</div><p>La nuova è...</p><div class="valdesc">'.$instrow['ShortDesc'].'</div>',1);
notify('<p>La «Descrizione breve» dellistanza «<a href="viewinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» è cambiata.',1);
if ($instrow['LongDesc']!=$oldinstrow['LongDesc'])
notify('<p>La «Descrizione lunga» dellistanza «<a href="edinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» è cambiata. La vecchia era...</p><div class="valdesc">'.$oldinstrow['LongDesc'].'</div><p>La nuove è...</p><div class="valdesc">'.$instrow['LongDesc'].'</div>',1);
notify('<p>La «Descrizione lunga» dellistanza «<a href="viewinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» è cambiata.',1);
$instrow['OurDesc']=$oldinstrow['OurDesc'];
$instrow['OurDescEN']=$oldinstrow['OurDescEN'];
$instrow['LocalityID']=$oldinstrow['LocalityID'];
@ -856,7 +828,7 @@ while ($i<$cinsts) {
$oldinstlangs[]=$row;
$instlangs=langs($instrow['ID'], $instrow['URI'], false);
if ($instlangs!=$oldinstlangs) {
notify('La lista delle lingue utilizzate dichiarate dallistanza «<a href="edinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» è cambiata da «'.subarimp(', ','Code',$oldinstlangs).'» a «'.subarimp(', ','Code',$instlangs).'».',1);
notify('La lista delle lingue utilizzate dichiarate dallistanza «<a href="viewinst.php?id='.$instrow['ID'].'">'.$instrow['URI'].'</a>» è cambiata da «'.subarimp(', ','Code',$oldinstlangs).'» a «'.subarimp(', ','Code',$instlangs).'».',1);
mysqli_query($link,'DELETE FROM InstLangs WHERE InstID='.$instrow['ID'])
or mexit(__LINE__.': '.mysqli_error($link).N,3);
foreach ($instlangs as $row) {
@ -896,8 +868,7 @@ while ($i<$cinsts) {
mysqli_query($link,$query)
or mexit(__LINE__.': '.mysqli_error($link).N,3);
$instid=mysqli_insert_id($link);
flushtronc($instid);
notify('Ho trovato una nuova istanza: «<a href="viewinst.php?id='.$instid.'">'.$instrow['URI'].'</a>».',2);
$instlangs=langs($instid, $instrow['URI'], false);
foreach ($instlangs as $row) {
@ -912,7 +883,7 @@ while ($i<$cinsts) {
}
if ($instrow['Good']==1)
notify('La nuova istanza «<a href="edinst.php?id='.$instid.'">'.$instrow['URI'].'</a>» è papabile!',1);
notify('La nuova istanza «<a href="viewinst.php?id='.$instid.'">'.$instrow['URI'].'</a>» è papabile!',1);
}
@ -957,15 +928,10 @@ while ($i<$cinsts) {
$query='INSERT INTO InstTrends (InstID, LastDay, Name, URL, Pos) VALUES ('.$trend['InstID'].', \''.$trend['LastDay'].'\', \''.myesc($link,truncs($trend['Name'],'InstTrends','Name','«'.$instrow['URI'].'»')).'\', \''.myesc($link,truncs($trend['URL'],'InstTrends','URL','«'.$instrow['URI'].'»')).'\', '.$pos.')';
mysqli_query($link,$query)
or mexit(__LINE__.': '.mysqli_error($link).N,3);
// questo qui sotto non è errore, vedi il commento relativo nella funzione
flushtronc($instid);
}
}
mysqli_query($link,'INSERT INTO InstChecks (InstID, Time, Status) VALUES ('.$instid.', '.time().', 1)')
or mexit(__LINE__.': '.mysqli_error($link).N,3);
}
}

View file

@ -3,6 +3,7 @@
* fatto
# in corso
* viewinst.php
- pagina gestione accounts
- pagina gestione proprio account
- pagina gestione blacklist
@ -11,13 +12,13 @@
? edinstres.php deve mostrare messaggio di successo
* edinst.php: un'icona per deselezionare Locality
* nei vari helper, sarebbe meglio morisse in json, alla bisogna
- aggiungere notifiche quando "guest" edita istanza, località, lingua, modalità di finanziamento, ecc.
* aggiungere notifica quando "guest" edita istanza
? index.php: lunghezza automatica di username
- serve un "notifs.php" (è già linkato dalla lista notifiche accessibile dalla campanella) per la gestione accurata delle notifiche (possibilità di marcarle tutte o "precedenti a" come lette, possibilità di cancellarle tutte o "precedenti a")
- rinominare tutto da "Mastodon Startpage Admin" a "MastoStartAdm"
- crawler.php: ricorsivizzarlo?
- crawler.php: le notifiche, invece di edinst.php, devono linkare un viewinst.php che mostri l'istanza
- crawler.php: sarebbe tanto bello fare a meno di tutta la faccenda "tronconi" ecc.
* rinominare tutto da "Mastodon Startpage Admin" a "Mustard"
* crawler.php: ricorsivizzarlo? - fatto, in questo modo: peerscrawl.php crea una lista di "tutte le istanze note" a partire da una certa instanza, crawler.php usa questa lista per importare nel db i dati delle istanze che rispondono
* crawler.php: le notifiche, invece di edinst.php, devono linkare un viewinst.php che mostri l'istanza
* crawler.php: sarebbe tanto bello fare a meno di tutta la faccenda "tronconi" ecc.
- crawler.php: deve controllare se nella tabella Instances GuestID è definito; se è definito e la mail del corrispettivo account "guest" è cambiata, deve aggiornare l'account "guest" corrispettivo in Admins con la mail e il nome utente attuali e creare nuova password; se i dati dell'istanza sono già stati editati, mandare mail di "aggiornamento"; se non lo sono, mandare invito
- instances.php: possibilità di filtraggio per GuestID, LastGuestEdit, OurLangsLock
- instances.php: tradurre tutto in inglese

View file

@ -107,6 +107,10 @@ require('include/columns.php');
require('include/dispinst.php');
$out=dispinst($inst,$cols,$link,$dlang,$account,false,0,0);
if ($account['Level']=='guest')
mysqli_query($link,'INSERT INTO Notifications (ID, Notification, Severity, Microtime, Seen) VALUES (NULL, \''.myesc($link,$account['Email'].' ha editato la sua istanza «<a href="viewinst.php?id='.$inst['IID'].'">'.$inst['URI'].'</a>».').'\', 3, \''.microtime(true).'\', 0)')
or muoribene(__LINE__.': '.mysqli_error($link),true);
mysqli_close($link);
?>

102
web/admin/viewinst.php Normal file
View file

@ -0,0 +1,102 @@
<?php
require('include/glob.php');
require('include/muoribene.php');
require('include/sessionstart.php');
require('include/myconn.php');
require('include/getadmacc.php');
if ($account['Level']=='guest')
muoribene('Sorry, you are not authorized.',true);
require('include/menu.php');
$menu['menu']['selected']=true;
$menu['menu']['submenu']['instances']['selected']=true;
buildmenu($menu);
require('include/notifs.php');
$notifs=notifs($link);
$dbg='';
use function mysqli_real_escape_string as myesc;
// praticamente una macro
function hspech($str) {
return(htmlspecialchars($str,ENT_QUOTES|ENT_HTML5,'UTF-8'));
}
if (array_key_exists('id',$_GET) && preg_match('/^[0-9]+$/',$_GET['id'])) {
$_GET['id']+=0;
$res=mysqli_query($link,'SELECT *, ID AS IID FROM Instances WHERE ID='.$_GET['id'])
or muoribene(__LINE__.': '.mysqli_error($link),true);
if (mysqli_num_rows($res)>0) {
require('include/columns.php');
require('include/dispinst.php');
$inst=mysqli_fetch_assoc($res);
$out=dispinst($inst,$cols,$link,$dlang,$account,false,0,0);
} else {
$out='<p>Non esiste alcuna istanza con ID='.$_GET['id'].'.</p>'.N;
}
} else {
$out='<p>Nessuna istanza da mostrare.</p>';
}
mysqli_close($link);
?>
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Mustard - Visualizzatore istanze</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Admin pages for Mastodon Startpage">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="icon" type="image/png" href="imgs/icona-32.png" sizes="32x32">
<link rel="icon" type="image/png" href="imgs/icona-192.png" sizes="192x192">
<link rel="icon" type="image/png" href="imgs/icona-512.png" sizes="512x512">
<link rel="apple-touch-icon-precomposed" href="imgs/icona-180.png">
<link rel="stylesheet" type="text/css" href="theme.css?v=<?php echo($cjrand); ?>">
<script language="JavaScript" src="js/menu.js?v=<?php echo($cjrand); ?>"></script>
<script language="JavaScript">
<!--
//-->
</script>
</head>
<body>
<nav>
<div id="hmenu">
<ul>
<?php echo($menuout); ?>
</ul>
<div class="mtit">Visualizzatore istanze</div>
<div id="rightdiv">
<?php echo('<img src="'.$notifs['imgoff'].'" id="bell" class="rlinks" title="Show notifications" onclick="shidenotifs();">'.N); ?>
<img src="imgs/esci.svg" class="rlinks" title="Logout" onclick="document.location.href='logout.php';">
</div>
</div>
</nav>
<?php echo($notifs['div']); ?>
<div id="popup">
<div id="inpopup">
<div id="popupcont">
...
</div>
</div>
</div>
<!-- <div id="footer">
</div> -->
<div id="fullscreen">
<div id="middlerow">
<?php echo($out); ?>
</div>
</div>
<div id="debug">
<?php echo($dbg); ?>
</div>
</body>
</html>