diff --git a/README.md b/README.md index b9ddf71..6e75022 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -Progetto per un sito di introduzione a mastodon ([vedi il pad su cisti](https://pad.cisti.org/p/uhXFbSxe5EaMPE4syEKI)) che dia inoltre la possibilità di scegliere un'istanza in base a vari criteri, da una base di istanze sufficientemente occhei. +Progetto per un sito di introduzione a mastodon ([al momento pubblicato qui](https://rame.altervista.org/mastostart/)) che dia inoltre la possibilità di scegliere un’istanza in base a vari criteri, da una base di istanze sufficientemente occhei. diff --git a/web/admin/.htaccess b/web/admin/.htaccess new file mode 100644 index 0000000..226358b --- /dev/null +++ b/web/admin/.htaccess @@ -0,0 +1,2 @@ +RewriteEngine Off +RewriteEngine On diff --git a/web/admin/crawler/crawler.php b/web/admin/crawler/crawler.php index db4279e..543edda 100755 --- a/web/admin/crawler/crawler.php +++ b/web/admin/crawler/crawler.php @@ -600,7 +600,7 @@ while ($i<$cinsts) { $res=mysqli_query($link,'SELECT * FROM Instances WHERE URI=\''.myesc($link,mb_substr($dom,0,$tables['Instances']['URI'],'UTF-8')).'\'') or mexit(mysqli_error($link).N,3); if (mysqli_num_rows($res)>0) { - lecho('«'.$dom.'» non risponde, ma è presente nel database; aggiorno InstChecks.'); + lecho('«'.$dom.'» non risponde, ma è presente nel database; aggiorno InstChecks.'.N); $row=mysqli_fetch_assoc($res); mysqli_query($link,'INSERT INTO InstChecks (InstID, Time, Status) VALUES ('.$row['ID'].', '.time().', 0)') or mexit(mysqli_error($link).N,3); @@ -613,7 +613,7 @@ while ($i<$cinsts) { } if ($ok && !is_null($info) && akeavinn('uri',$info) && !is_null(nempty($info['uri'])) && !willtrunc($info['uri'],'Instances','URI') && akeavinn('version',$info) && preg_match('/pleroma|pixelfed/i',$info['version'])===0) { $qok++; - $instrow=array('ID'=>null, 'New'=>0, 'Good'=>0, 'Chosen'=>0, 'Visible'=>0, 'Blacklisted'=>0, 'URI'=>null, 'Title'=>null, 'ShortDesc'=>null, 'LongDesc'=>null, 'OurDesc'=>null, 'PlaceID'=>null, 'Email'=>null, 'Software'=>null, 'Version'=>null, 'UserCount'=>null, 'StatusCount'=>null, 'DomainCount'=>null, 'ActiveUsersMonth'=>null, 'ActiveUsersHalfYear'=>null, 'Thumb'=>null, 'RegOpen'=>null, 'RegReqApproval'=>null, 'MaxTootChars'=>null, 'AdmAccount'=>null, 'AdmDisplayName'=>null, 'AdmCreatedAt'=>null, 'AdmNote'=>null, 'AdmURL'=>null, 'AdmAvatar'=>null, 'AdmHeader'=>null); + $instrow=array('ID'=>null, 'New'=>0, 'Good'=>0, 'Chosen'=>0, 'Visible'=>0, 'Blacklisted'=>0, 'URI'=>null, 'Title'=>null, 'ShortDesc'=>null, 'LongDesc'=>null, 'OurDesc'=>null, 'LocalityID'=>null, 'Email'=>null, 'Software'=>null, 'Version'=>null, 'UserCount'=>null, 'StatusCount'=>null, 'DomainCount'=>null, 'ActiveUsersMonth'=>null, 'ActiveUsersHalfYear'=>null, 'Thumb'=>null, 'RegOpen'=>null, 'RegReqApproval'=>null, 'MaxTootChars'=>null, 'AdmAccount'=>null, 'AdmDisplayName'=>null, 'AdmCreatedAt'=>null, 'AdmNote'=>null, 'AdmURL'=>null, 'AdmAvatar'=>null, 'AdmHeader'=>null); if (array_key_exists($info['uri'],$blacklist)) $instrow['Blacklisted']=1; $instrow['URI']=$info['uri']; @@ -724,7 +724,7 @@ while ($i<$cinsts) { if ($instrow['LongDesc']!=$oldinstrow['LongDesc']) notify('

La «Descrizione lunga» dell’istanza «'.$instrow['URI'].'» è cambiata. La vecchia era...

'.$oldinstrow['LongDesc'].'

La nuove è...

'.$instrow['LongDesc'].'
',1); $instrow['OurDesc']=$oldinstrow['OurDesc']; - $instrow['PlaceID']=$oldinstrow['PlaceID']; + $instrow['LocalityID']=$oldinstrow['LocalityID']; $query='UPDATE Instances SET '; foreach ($instrow as $field=>$value) { if (!is_null($value)) @@ -786,8 +786,8 @@ while ($i<$cinsts) { if (array_key_exists('x-activity',$info) && is_array($info['x-activity'])) { mysqli_query($link,'DELETE FROM InstActivity WHERE InstID='.$instid); + $pos=0; foreach ($info['x-activity'] as $buf) { - $pos=0; if (akeavinn('week',$buf) && akeavinn('statuses',$buf) && akeavinn('logins',$buf) && akeavinn('registrations',$buf)) { $pos++; $query='INSERT INTO InstActivity (InstID, Week, Statuses, Logins, Registrations, Pos) VALUES (\''.$instid.'\', \''.myesc($link,$buf['week']).'\', \''.myesc($link,$buf['statuses']).'\', \''.myesc($link,$buf['logins']).'\', \''.myesc($link,$buf['registrations']).'\', '.$pos.')'; diff --git a/web/admin/crawler/snippettoni.php b/web/admin/crawler/snippettoni.php deleted file mode 100644 index 43f00fa..0000000 --- a/web/admin/crawler/snippettoni.php +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/web/admin/dafa.txt b/web/admin/dafa.txt index f4f7302..11df0fc 100644 --- a/web/admin/dafa.txt +++ b/web/admin/dafa.txt @@ -3,9 +3,14 @@ * fatto ~ più o meno +? instances.php: bottoni per pagina precedente-successiva +- instances.php: disabilitare la possibilità di cambiare pagina quando vengono modificati i criteri di ricerca/ordinamento +- instances.php: possibilità di vedere solo le istanze che non rispondono da tot giorni (o forse farla a parte?) +- instances.php: notifiche +- instances.php: scomparsa-comparsa div di debug - instances.php: ckf: controllare che non venga eseguito ordinamento su una stessa colonna più volte (non rompe query ma è ridondante) * instances.php: quando ordinamento è su una "1 a molti", eseguirlo su "GROUP_CONCAT" di questi molti ordinati per "Pos" della joinosa tabella -* ripristinare le colonne descrittive in Languages: una per la locale impostata (it), una per en, una per fr, una per sp... +* ripristinare le colonne descrittive in Languages: una per la locale impostata (it), una per en, una per fr, una per es... * instancesh.php: ritornare di tutte solo quelle che effettivamente sono usate, magari con un count tra () * instances.php: definito/non definito non vengono riprodotte bene dalla plancia dopo post * instances.php: quando si seleziona definito/non definito, oltre a disabilitare il campo valsel/valinp, farlo sparire proprio? assegnargli un css che da disabilitato lo fa diventare tuttonero? tipo diff --git a/web/admin/edinst.php b/web/admin/edinst.php new file mode 100644 index 0000000..457b95a --- /dev/null +++ b/web/admin/edinst.php @@ -0,0 +1,506 @@ +'.print_r($_POST,1).''; + + +mysqli_close($link); + +?> + + + +Mastodon Startpage Admin - Modifica di «<?php echo($data['URI']); ?>» + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
Ciao sono una istanza
+ + + + + + +
 
 
 
 
 
+
+ Orpo +
+
+
+ + + diff --git a/web/admin/include/connuser.php b/web/admin/include/connuser.php deleted file mode 100644 index dabb900..0000000 --- a/web/admin/include/connuser.php +++ /dev/null @@ -1,10 +0,0 @@ -Login.',true); -$user=mysqli_fetch_assoc($res); - -?> diff --git a/web/admin/include/menu.php b/web/admin/include/menu.php index 9871388..6858d75 100644 --- a/web/admin/include/menu.php +++ b/web/admin/include/menu.php @@ -1,14 +1,15 @@ array('liadd'=>null, 'href'=>'istanze.php', 'title'=>'Istanze', 'selected'=>false, 'submenu'=> - array( - 'aggiungi'=>array('liadd'=>null, 'href'=>'editinst?m=new', 'title'=>'Aggiungi', 'selected'=>false, 'submenu'=>null), - ) + 'istanze'=>array('liadd'=>null, 'href'=>null, 'title'=>'Istanze', 'selected'=>false, 'submenu'=> + array( + 'elenco'=>array('liadd'=>null, 'href'=>'instances.php', 'title'=>'Elenco', 'selected'=>false, 'submenu'=>null), + 'modifica'=>array('liadd'=>null, 'href'=>null, 'title'=>'Modifica', 'selected'=>false, 'submenu'=>null) ), - 'blacklist'=>array('liadd'=>null, 'href'=>'#', 'title'=>'Blacklist', 'selected'=>false, 'submenu'=>null), - 'magari'=>array('liadd'=>null, 'href'=>'#', 'title'=>'Chissà', 'selected'=>false, 'submenu'=>null), - 'forse'=>array('liadd'=>null, 'href'=>'#', 'title'=>'Forse', 'selected'=>false, 'submenu'=>null) + ), +/* 'blacklist'=>array('liadd'=>null, 'href'=>'#', 'title'=>'Blacklist', 'selected'=>false, 'submenu'=>null), + 'accounts'=>array('liadd'=>null, 'href'=>'#', 'title'=>'Accounts', 'selected'=>false, 'submenu'=>null), + 'forse'=>array('liadd'=>null, 'href'=>'#', 'title'=>'Forse', 'selected'=>false, 'submenu'=>null)*/ ); diff --git a/web/admin/index.html b/web/admin/index.html new file mode 100644 index 0000000..424f5d4 --- /dev/null +++ b/web/admin/index.html @@ -0,0 +1,24 @@ + + + +Mastodon Startpage Admin Login + + + + + + + + + + +
+

Ciao,
+qui puoi usare un accrocchio che ho fatto per la sezione di admin della Mastodon Startpage; chiamiamolo “browser di istanze lato admin”; è uno strumento che permette di “sfogliare” e cercare-ordinare secondo tanti criteri un database di metadati relativi a tante istanze mastodon (poi spiego meglio). Non è il browser di istanze che dovrebbe poi essere mostrato “lato utente” sulla Mastodon Startpage, quello ancora non c’è; è invece quello destinato “a uso interno”, “lato admin”, quindi è un po’ più complicato all’uso, ma anche più duttile, rispetto a come pensavo di fare quello “lato utente”.
+Ho deciso di renderlo pubblicamente utilizzabile soprattutto perché così magari può essere testato più a fondo.
+Rispetto alla versione su cui sto lavorando ha solo tre limitazioni: la possibilità di salvare-modificare-cancellare dei preset di ricerca e ordinamento è disabilitata, i criteri di ricerca impostabili sono al massimo otto, i criteri di ordinamento impostabili sono al massimo sei.
+Qualche parola in più sul progetto nel suo insieme, per come l‘avevamo pensato io che son pongrebio e Ca_Gi. In pratica si dovrebbe comporre di vari accrocchi, alcuni dei quali ci sono già, altri invece no: un crawler (c’è) che periodicamente recupera e salva-aggiorna in un database tutti i metadati disponibili relativi alle istanze note a cinque istanze italiane amiche, che al momento sono bida, cisti, nebbia (da un po’ di tempo è rotta), snapj e stereodon, tenendo conto delle rispettive “blacklist” (liste di istanze bloccate), ovvero marcando come tali le istanze blacklistate da una qualsiasi delle cinque istanze amiche, e marcando inoltre come “papabili” le istanze che corrispondono a certi criteri (l’istanza non è blacklistata, la registrazione di nuovi account è aperta, il numero di utenti è compreso tra 10 e 30.000, il numero di istanze note all’istanza è maggiore di 500, il numero di utenti attivi negli ultimi 30 giorni è maggiore di 10); una sezione di admin con un accrocchio (c’è, è quello linkato all’inizio ma poi anche qui) per “sfogliare” questi dati e un altro accrocchio (non c’è) che dia la possibilità di editarli, ovvero per ogni istanza nota poter per esempio scegliere se renderla visibile tramite il “browser di istanze lato utente” e poterne editare alcuni metadati aggiuntivi/alternativi rispetto a quelli “standard” recuperati dal crawler: una descrizione alternativa (perché quella impostata dagli admin e disponibile tra i metadati “standard” recuperabili dal crawler è spesso troppo vaga o troppo scarna o troppo lunga), una localizzazione geografica (relativa al collettivo o al singolo che gestisce l’istanza, non alla collocazione del server; metadato non presente tra quelli “standard”), le lingue più impiegate sull’istanza (quella dichiarata nei metadati “standard” recuperabili dal crawler spesso non corrisponde a quella maggiormente impiegata realmente sull’istanza, e ci sono istanze spiccatamente multilingue), modalità di finanziamento (metadato non presente tra quelli “standard”), restrizioni (policy) sui contenuti postabili (metadato non presente tra quelli “standard”), tag descrittive riassuntive del tipo di istanza (metadato non presente tra quelli “standard”). Questi metadati aggiuntivi/alternativi rispetto a quelli “standard” hanno già le proprie strutture nel database e sono visibili dal “browser di istanze lato admin”, quello che manca è appunto la possibilità di editarli; manca inoltre una pagina di gestione degli account admin e, come già detto, il browser di istanze “lato utente”.
+Se qualcuno volesse dare una mano il codice si trova qui, nella cartella web/admin.

+
+ + diff --git a/web/admin/index.php b/web/admin/index.php index 2c229ff..92b316e 100644 --- a/web/admin/index.php +++ b/web/admin/index.php @@ -42,7 +42,7 @@ Mastodon Startpage Admin Login Nome: Password: -Password dimenticata? + diff --git a/web/admin/instances.php b/web/admin/instances.php index ceffcdf..2cf3456 100644 --- a/web/admin/instances.php +++ b/web/admin/instances.php @@ -7,6 +7,8 @@ require('include/sessionstart.php'); require('include/menu.php'); $menu['istanze']['href']=null; $menu['istanze']['selected']=true; +$menu['istanze']['submenu']['elenco']['href']=null; +$menu['istanze']['submenu']['elenco']['selected']=true; buildmenu($menu); require('include/myconn.php'); @@ -86,47 +88,55 @@ function booly($pre,$val,$nottoobad=false,$invcol=false) { } } +function trimname($str) { + return(substr($str,1,strlen($str)-2)); +} + $dbg.='
'.print_r($_POST,1).'
'; +$page=0; +if (array_key_exists('p',$_POST) && preg_match('/^[0-9]*$/',$_POST['p'])==1) + $page=$_POST['p']+0; + /*SELECT *, Instances.ID AS IID, GROUP_CONCAT(OrdOurLanguages.NameIt ORDER BY OrdInstOurLangs.Pos ASC SEPARATOR '; ') AS OrdOurLangs FROM Instances LEFT JOIN InstOurLangs ON InstOurLangs.InstID=Instances.ID LEFT JOIN Languages AS OurLanguages ON OurLanguages.ID=InstOurLangs.OurLangID LEFT JOIN InstOurLangs AS OrdInstOurLangs ON OrdInstOurLangs.InstID=Instances.ID LEFT JOIN Languages AS OrdOurLanguages ON OrdOurLanguages.ID=OrdInstOurLangs.OurLangID WHERE OurLanguages.NameIT LIKE '%italiano%' GROUP BY IID LIMIT 50*/ $cols=array( - 'Instances.New'=>array('field'=>'Instances.New','name'=>'Nuova','type'=>'bool'), - 'Instances.Good'=>array('field'=>'Instances.Good','name'=>'Papabile','type'=>'bool'), - 'Instances.Chosen'=>array('field'=>'Instances.Chosen','name'=>'Scelta','type'=>'bool'), - 'Instances.Visible'=>array('field'=>'Instances.Visible','name'=>'Visibile','type'=>'bool'), - 'Instances.Blacklisted'=>array('field'=>'Instances.Blacklisted','name'=>'Blacklistata','type'=>'bool'), + 'Instances.New'=>array('field'=>'Instances.New','name'=>'[Nuova]','type'=>'bool'), + 'Instances.Good'=>array('field'=>'Instances.Good','name'=>'[Papabile]','type'=>'bool'), + 'Instances.Chosen'=>array('field'=>'Instances.Chosen','name'=>'[Scelta]','type'=>'bool'), + 'Instances.Visible'=>array('field'=>'Instances.Visible','name'=>'[Visibile]','type'=>'bool'), + 'Instances.Blacklisted'=>array('field'=>'Instances.Blacklisted','name'=>'[Blacklistata]','type'=>'bool'), 'Instances.URI'=>array('field'=>'Instances.URI','name'=>'URI','type'=>'text'), 'Instances.Title'=>array('field'=>'Instances.Title','name'=>'Titolo','type'=>'text'), 'Instances.ShortDesc'=>array('field'=>'Instances.ShortDesc','name'=>'Descrizione breve','type'=>'text'), 'Instances.LongDesc'=>array('field'=>'Instances.LongDesc','name'=>'Descrizione lunga','type'=>'text'), - 'Instances.OurDesc'=>array('field'=>'Instances.OurDesc','name'=>'Descrizione nostra','type'=>'text'), + 'Instances.OurDesc'=>array('field'=>'Instances.OurDesc','name'=>'[Descrizione nostra]','type'=>'text'), //-------------------------------- - 'Instances.LocalityID'=>array('field'=>'Instances.LocalityID','name'=>'Località ⮞','type'=>'join','join'=>array(),'ord'=>false), - 'Localities.Locality'=>array('field'=>'Localities.Locality','name'=>'Località','type'=>'joini','join'=>array('Localities ON Localities.ID=Instances.LocalityID'),'subtype'=>'text'), + 'Instances.LocalityID'=>array('field'=>'Instances.LocalityID','name'=>'[Località] ⮞','type'=>'join','join'=>array(),'ord'=>false), + 'Localities.Locality'=>array('field'=>'Localities.Locality','name'=>'[Località]','type'=>'joini','join'=>array('Localities ON Localities.ID=Instances.LocalityID'),'subtype'=>'text'), - 'Provinces.ID'=>array('field'=>'Provinces.ID','name'=>'Provincia ⮞','type'=>'join','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID'),'ord'=>false), - 'Provinces.Province'=>array('field'=>'Provinces.Province','name'=>'Provincia','type'=>'joini','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID'),'subtype'=>'text'), + 'Provinces.ID'=>array('field'=>'Provinces.ID','name'=>'[Provincia] ⮞','type'=>'join','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID'),'ord'=>false), + 'Provinces.Province'=>array('field'=>'Provinces.Province','name'=>'[Provincia]','type'=>'joini','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID'),'subtype'=>'text'), - 'Regions.ID'=>array('field'=>'Regions.ID','name'=>'Regione ⮞','type'=>'join','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID','Regions ON Regions.ID=Provinces.RegionID'),'ord'=>false), - 'Regions.Region'=>array('field'=>'Regions.Region','name'=>'Regione','type'=>'joini','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID','Regions ON Regions.ID=Provinces.RegionID'),'subtype'=>'text'), + 'Regions.ID'=>array('field'=>'Regions.ID','name'=>'[Regione] ⮞','type'=>'join','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID','Regions ON Regions.ID=Provinces.RegionID'),'ord'=>false), + 'Regions.Region'=>array('field'=>'Regions.Region','name'=>'[Regione]','type'=>'joini','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID','Regions ON Regions.ID=Provinces.RegionID'),'subtype'=>'text'), - 'States.ID'=>array('field'=>'States.ID','name'=>'Stato ⮞','type'=>'join','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID','Regions ON Regions.ID=Provinces.RegionID','States ON States.ID=Regions.StateID'),'ord'=>false), - 'States.State'=>array('field'=>'States.State','name'=>'Stato','type'=>'joini','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID','Regions ON Regions.ID=Provinces.RegionID','States ON States.ID=Regions.StateID'),'subtype'=>'text'), + 'States.ID'=>array('field'=>'States.ID','name'=>'[Stato] ⮞','type'=>'join','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID','Regions ON Regions.ID=Provinces.RegionID','States ON States.ID=Regions.StateID'),'ord'=>false), + 'States.State'=>array('field'=>'States.State','name'=>'[Stato]','type'=>'joini','join'=>array('Localities ON Localities.ID=Instances.LocalityID','Provinces ON Provinces.ID=Localities.ProvinceID','Regions ON Regions.ID=Provinces.RegionID','States ON States.ID=Regions.StateID'),'subtype'=>'text'), //-------------------------------- 'Instances.Email'=>array('field'=>'Instances.Email','name'=>'Email di contatto','type'=>'text'), 'Instances.Software'=>array('field'=>'Instances.Software','name'=>'Software','type'=>'text'), 'Instances.Version'=>array('field'=>'Instances.Version','name'=>'Versione','type'=>'text'), - 'Instances.UserCount'=>array('field'=>'Instances.UserCount','name'=>'Utenti','type'=>'int'), - 'Instances.StatusCount'=>array('field'=>'Instances.StatusCount','name'=>'Stati','type'=>'int'), - 'Instances.DomainCount'=>array('field'=>'Instances.DomainCount','name'=>'Istanze note','type'=>'int'), - 'Instances.ActiveUsersMonth'=>array('field'=>'Instances.ActiveUsersMonth','name'=>'Utenti attivi (mese)','type'=>'int'), - 'Instances.ActiveUsersHalfYear'=>array('field'=>'Instances.ActiveUsersHalfYear','name'=>'Utenti attivi (6 mesi)','type'=>'int'), + 'Instances.UserCount'=>array('field'=>'Instances.UserCount','name'=>'Numero utenti','type'=>'int'), + 'Instances.StatusCount'=>array('field'=>'Instances.StatusCount','name'=>'Numero stati','type'=>'int'), + 'Instances.DomainCount'=>array('field'=>'Instances.DomainCount','name'=>'Numero istanze note','type'=>'int'), + 'Instances.ActiveUsersMonth'=>array('field'=>'Instances.ActiveUsersMonth','name'=>'Numero utenti attivi (mese)','type'=>'int'), + 'Instances.ActiveUsersHalfYear'=>array('field'=>'Instances.ActiveUsersHalfYear','name'=>'Numero utenti attivi (6 mesi)','type'=>'int'), 'Instances.Thumb'=>array('field'=>'Instances.Thumb','name'=>'Logo','type'=>'text','search'=>false,'ord'=>false), 'Instances.RegOpen'=>array('field'=>'Instances.RegOpen','name'=>'Registrazioni aperte','type'=>'bool'), 'Instances.RegReqApproval'=>array('field'=>'Instances.RegReqApproval','name'=>'Approvazione registrazioni','type'=>'bool'), @@ -152,51 +162,51 @@ $cols=array( //-------------------------------- - 'InstOurLangs'=>array('name'=>'Lingue impostate da noi','search'=>false,'ord'=>false), + 'InstOurLangs'=>array('name'=>'[Lingue impostate da noi]','search'=>false,'ord'=>false), - 'InstOurLangs.OurLangID'=>array('field'=>'InstOurLangs%.OurLangID','name'=>'Una lingua impostata da noi ⮞','type'=>'join','join'=>array('InstOurLangs AS InstOurLangs% ON InstOurLangs%.InstID=Instances.ID'),'ord'=>false), + 'InstOurLangs.OurLangID'=>array('field'=>'InstOurLangs%.OurLangID','name'=>'[Una lingua impostata da noi] ⮞','type'=>'join','join'=>array('InstOurLangs AS InstOurLangs% ON InstOurLangs%.InstID=Instances.ID'),'ord'=>false), - 'OurLanguages.NameIT'=>array('field'=>'OurLanguages%.NameIT','name'=>'Una lingua impostata da noi','type'=>'joini','join'=>array('InstOurLangs AS InstOurLangs% ON InstOurLangs%.InstID=Instances.ID','Languages AS OurLanguages% ON OurLanguages%.ID=InstOurLangs%.OurLangID'),'subtype'=>'text','ord'=>true,'ordname'=>'Lingue impostate da noi','ordjoin'=>array('InstOurLangs AS OrdInstOurLangs ON OrdInstOurLangs.InstID=Instances.ID','Languages AS OrdOurLanguages ON OrdOurLanguages.ID=OrdInstOurLangs.OurLangID'),'ordselmore'=>'GROUP_CONCAT(OrdOurLanguages.NameIT ORDER BY OrdInstOurLangs.Pos ASC SEPARATOR \'\') AS xOrdOurLangs','ordby'=>'xOrdOurLangs'), + 'OurLanguages.NameIT'=>array('field'=>'OurLanguages%.NameIT','name'=>'[Una lingua impostata da noi]','type'=>'joini','join'=>array('InstOurLangs AS InstOurLangs% ON InstOurLangs%.InstID=Instances.ID','Languages AS OurLanguages% ON OurLanguages%.ID=InstOurLangs%.OurLangID'),'subtype'=>'text','ord'=>true,'ordname'=>'Lingue impostate da noi','ordjoin'=>array('InstOurLangs AS OrdInstOurLangs ON OrdInstOurLangs.InstID=Instances.ID','Languages AS OrdOurLanguages ON OrdOurLanguages.ID=OrdInstOurLangs.OurLangID'),'ordselmore'=>'GROUP_CONCAT(OrdOurLanguages.NameIT ORDER BY OrdInstOurLangs.Pos ASC SEPARATOR \'\') AS xOrdOurLangs','ordby'=>'xOrdOurLangs'), - 'InstOurLangs.OurLangID.First'=>array('field'=>'InstOurLangs.OurLangID','name'=>'Lingua primaria impostata da noi ⮞','type'=>'join','join'=>array('InstOurLangs AS InstOurLangs ON InstOurLangs.InstID=Instances.ID AND InstOurLangs.Pos=1'),'ord'=>false), + 'InstOurLangs.OurLangID.First'=>array('field'=>'InstOurLangs.OurLangID','name'=>'[Lingua primaria impostata da noi] ⮞','type'=>'join','join'=>array('InstOurLangs AS InstOurLangs ON InstOurLangs.InstID=Instances.ID AND InstOurLangs.Pos=1'),'ord'=>false), - 'OurLanguages.NameIT.First'=>array('field'=>'OurLanguages.NameIT','name'=>'Lingua primaria impostata da noi','type'=>'joini','join'=>array('InstOurLangs AS InstOurLangs ON InstOurLangs.InstID=Instances.ID AND InstOurLangs.Pos=1','Languages AS OurLanguages ON OurLanguages.ID=InstOurLangs.OurLangID'),'subtype'=>'text','ord'=>false), + 'OurLanguages.NameIT.First'=>array('field'=>'OurLanguages.NameIT','name'=>'[Lingua primaria impostata da noi]','type'=>'joini','join'=>array('InstOurLangs AS InstOurLangs ON InstOurLangs.InstID=Instances.ID AND InstOurLangs.Pos=1','Languages AS OurLanguages ON OurLanguages.ID=InstOurLangs.OurLangID'),'subtype'=>'text','ord'=>false), //-------------------------------- - 'InstFinancing'=>array('name'=>'Modalità di finanziamento','search'=>false,'ord'=>false), + 'InstFinancing'=>array('name'=>'[Modalità di finanziamento]','search'=>false,'ord'=>false), - 'InstFinancing.FinID'=>array('field'=>'InstFinancing%.FinID','name'=>'Una modalità di finanziamento ⮞','type'=>'join','join'=>array('InstFinancing AS InstFinancing% ON InstFinancing%.InstID=Instances.ID'),'ord'=>false), + 'InstFinancing.FinID'=>array('field'=>'InstFinancing%.FinID','name'=>'[Una modalità di finanziamento] ⮞','type'=>'join','join'=>array('InstFinancing AS InstFinancing% ON InstFinancing%.InstID=Instances.ID'),'ord'=>false), - 'Financing.Type'=>array('field'=>'Financing%.Type','name'=>'Una modalità di finanziamento','type'=>'joini','join'=>array('InstFinancing AS InstFinancing% ON InstFinancing%.InstID=Instances.ID','Financing AS Financing% ON Financing%.ID=InstFinancing%.FinID'),'subtype'=>'text','ord'=>true,'ordname'=>'Modalità di finanziamento','ordjoin'=>array('InstFinancing AS OrdInstFinancing ON OrdInstFinancing.InstID=Instances.ID','Financing AS OrdFinancing ON OrdFinancing.ID=OrdInstFinancing.FinID'),'ordselmore'=>'GROUP_CONCAT(OrdFinancing.Type ORDER BY OrdInstFinancing.Pos ASC SEPARATOR \'\') AS xOrdFinancing','ordby'=>'xOrdFinancing'), + 'Financing.Type'=>array('field'=>'Financing%.Type','name'=>'[Una modalità di finanziamento]','type'=>'joini','join'=>array('InstFinancing AS InstFinancing% ON InstFinancing%.InstID=Instances.ID','Financing AS Financing% ON Financing%.ID=InstFinancing%.FinID'),'subtype'=>'text','ord'=>true,'ordname'=>'Modalità di finanziamento','ordjoin'=>array('InstFinancing AS OrdInstFinancing ON OrdInstFinancing.InstID=Instances.ID','Financing AS OrdFinancing ON OrdFinancing.ID=OrdInstFinancing.FinID'),'ordselmore'=>'GROUP_CONCAT(OrdFinancing.Type ORDER BY OrdInstFinancing.Pos ASC SEPARATOR \'\') AS xOrdFinancing','ordby'=>'xOrdFinancing'), - 'InstFinancing.FinID.First'=>array('field'=>'InstFinancing.FinID','name'=>'Modalità di finanziamento primaria ⮞','type'=>'join','join'=>array('InstFinancing AS InstFinancing ON InstFinancing.InstID=Instances.ID AND InstFinancing.Pos=1'),'ord'=>false), + 'InstFinancing.FinID.First'=>array('field'=>'InstFinancing.FinID','name'=>'[Modalità di finanziamento primaria] ⮞','type'=>'join','join'=>array('InstFinancing AS InstFinancing ON InstFinancing.InstID=Instances.ID AND InstFinancing.Pos=1'),'ord'=>false), - 'Financing.Type.First'=>array('field'=>'Financing.Type','name'=>'Modalità di finanziamento primaria','type'=>'joini','join'=>array('InstFinancing AS InstFinancing ON InstFinancing.InstID=Instances.ID AND InstFinancing.Pos=1','Financing AS Financing ON Financing.ID=InstFinancing.FinID'),'subtype'=>'text','ord'=>false), + 'Financing.Type.First'=>array('field'=>'Financing.Type','name'=>'[Modalità di finanziamento primaria]','type'=>'joini','join'=>array('InstFinancing AS InstFinancing ON InstFinancing.InstID=Instances.ID AND InstFinancing.Pos=1','Financing AS Financing ON Financing.ID=InstFinancing.FinID'),'subtype'=>'text','ord'=>false), //-------------------------------- - 'InstPolicies'=>array('name'=>'Restrizioni sui contenuti','search'=>false,'ord'=>false), + 'InstPolicies'=>array('name'=>'[Restrizioni sui contenuti]','search'=>false,'ord'=>false), - 'InstPolicies.PolID'=>array('field'=>'InstPolicies%.PolID','name'=>'Una restrizione sui contenuti ⮞','type'=>'join','join'=>array('InstPolicies AS InstPolicies% ON InstPolicies%.InstID=Instances.ID'),'ord'=>false), + 'InstPolicies.PolID'=>array('field'=>'InstPolicies%.PolID','name'=>'[Una restrizione sui contenuti] ⮞','type'=>'join','join'=>array('InstPolicies AS InstPolicies% ON InstPolicies%.InstID=Instances.ID'),'ord'=>false), - 'Policies.Name'=>array('field'=>'Policies%.Name','name'=>'Una restrizione sui contenuti','type'=>'joini','join'=>array('InstPolicies AS InstPolicies% ON InstPolicies%.InstID=Instances.ID','Policies AS Policies% ON Policies%.ID=InstPolicies%.PolID'),'subtype'=>'text','ord'=>true,'ordname'=>'Restrizioni sui contenuti','ordjoin'=>array('InstPolicies AS OrdInstPolicies ON OrdInstPolicies.InstID=Instances.ID','Policies AS OrdPolicies ON OrdPolicies.ID=OrdInstPolicies.PolID'),'ordselmore'=>'GROUP_CONCAT(OrdPolicies.Name ORDER BY OrdInstPolicies.Pos ASC SEPARATOR \'\') AS xOrdPolicies','ordby'=>'xOrdPolicies'), + 'Policies.Name'=>array('field'=>'Policies%.Name','name'=>'[Una restrizione sui contenuti]','type'=>'joini','join'=>array('InstPolicies AS InstPolicies% ON InstPolicies%.InstID=Instances.ID','Policies AS Policies% ON Policies%.ID=InstPolicies%.PolID'),'subtype'=>'text','ord'=>true,'ordname'=>'Restrizioni sui contenuti','ordjoin'=>array('InstPolicies AS OrdInstPolicies ON OrdInstPolicies.InstID=Instances.ID','Policies AS OrdPolicies ON OrdPolicies.ID=OrdInstPolicies.PolID'),'ordselmore'=>'GROUP_CONCAT(OrdPolicies.Name ORDER BY OrdInstPolicies.Pos ASC SEPARATOR \'\') AS xOrdPolicies','ordby'=>'xOrdPolicies'), - 'InstPolicies.PolID.First'=>array('field'=>'InstPolicies.PolID','name'=>'Restrizione sui contenuti primaria ⮞','type'=>'join','join'=>array('InstPolicies AS InstPolicies ON InstPolicies.InstID=Instances.ID AND InstPolicies.Pos=1'),'ord'=>false), + 'InstPolicies.PolID.First'=>array('field'=>'InstPolicies.PolID','name'=>'[Restrizione sui contenuti primaria] ⮞','type'=>'join','join'=>array('InstPolicies AS InstPolicies ON InstPolicies.InstID=Instances.ID AND InstPolicies.Pos=1'),'ord'=>false), - 'Policies.Name.First'=>array('field'=>'Policies.Name','name'=>'Restrizione sui contenuti primaria','type'=>'joini','join'=>array('InstPolicies AS InstPolicies ON InstPolicies.InstID=Instances.ID AND InstPolicies.Pos=1','Policies AS Policies ON Policies.ID=InstPolicies.PolID'),'subtype'=>'text','ord'=>false), + 'Policies.Name.First'=>array('field'=>'Policies.Name','name'=>'[Restrizione sui contenuti primaria]','type'=>'joini','join'=>array('InstPolicies AS InstPolicies ON InstPolicies.InstID=Instances.ID AND InstPolicies.Pos=1','Policies AS Policies ON Policies.ID=InstPolicies.PolID'),'subtype'=>'text','ord'=>false), //-------------------------------- - 'InstTags'=>array('name'=>'Tags','search'=>false,'ord'=>false), + 'InstTags'=>array('name'=>'[Tags]','search'=>false,'ord'=>false), - 'InstTags.TagID'=>array('field'=>'InstTags%.TagID','name'=>'Una tag ⮞','type'=>'join','join'=>array('InstTags% ON InstTags%.InstID=Instances.ID'),'ord'=>false), + 'InstTags.TagID'=>array('field'=>'InstTags%.TagID','name'=>'[Una tag] ⮞','type'=>'join','join'=>array('InstTags AS InstTags% ON InstTags%.InstID=Instances.ID'),'ord'=>false), - 'Tags.Name'=>array('field'=>'Tags%.Name','name'=>'Una tag','type'=>'joini','join'=>array('InstTags AS InstTags% ON InstTags%.InstID=Instances.ID','Tags AS Tags% ON Tags%.ID=InstTags%.TagID'),'subtype'=>'text','ord'=>true,'ordname'=>'Tags','ordjoin'=>array('InstTags AS OrdInstTags ON OrdInstTags.InstID=Instances.ID','Tags AS OrdTags ON OrdTags.ID=OrdInstTags.TagID'),'ordselmore'=>'GROUP_CONCAT(OrdTags.Name ORDER BY OrdInstTags.Pos ASC SEPARATOR \'\') AS xOrdTags','ordby'=>'xOrdTags'), + 'Tags.Name'=>array('field'=>'Tags%.Name','name'=>'[Una tag]','type'=>'joini','join'=>array('InstTags AS InstTags% ON InstTags%.InstID=Instances.ID','Tags AS Tags% ON Tags%.ID=InstTags%.TagID'),'subtype'=>'text','ord'=>true,'ordname'=>'Tags','ordjoin'=>array('InstTags AS OrdInstTags ON OrdInstTags.InstID=Instances.ID','Tags AS OrdTags ON OrdTags.ID=OrdInstTags.TagID'),'ordselmore'=>'GROUP_CONCAT(OrdTags.Name ORDER BY OrdInstTags.Pos ASC SEPARATOR \'\') AS xOrdTags','ordby'=>'xOrdTags'), - 'InstTags.TagID.First'=>array('field'=>'InstTags.TagID','name'=>'Tag primaria ⮞','type'=>'join','join'=>array('InstTags AS InstTags ON InstTags.InstID=Instances.ID AND InstTags.Pos=1'),'ord'=>false), + 'InstTags.TagID.First'=>array('field'=>'InstTags.TagID','name'=>'[Tag primaria] ⮞','type'=>'join','join'=>array('InstTags AS InstTags ON InstTags.InstID=Instances.ID AND InstTags.Pos=1'),'ord'=>false), - 'Tags.Name.First'=>array('field'=>'Tags.Name','name'=>'Tag primaria','type'=>'joini','join'=>array('InstTags AS InstTags ON InstTags.InstID=Instances.ID AND InstTags.Pos=1','Tags AS Tags ON Tags.ID=InstTags.TagID'),'subtype'=>'text','ord'=>false), + 'Tags.Name.First'=>array('field'=>'Tags.Name','name'=>'[Tag primaria]','type'=>'joini','join'=>array('InstTags AS InstTags ON InstTags.InstID=Instances.ID AND InstTags.Pos=1','Tags AS Tags ON Tags.ID=InstTags.TagID'),'subtype'=>'text','ord'=>false), //-------------------------------- @@ -268,6 +278,7 @@ foreach ($_POST as $key=>$val) { $type=$buf[2]; $subtype=$buf[3]; if (array_key_exists($tagk,$cols) && in_array($type,$types)) { + ($tagk=='Instances.AdmCreatedAt') ? $inpisdate=true : $inpisdate=false; if (strpos($cols[$tagk]['field'],'%')!==false) $ji++; $where.=str_replace('%',$ji,$cols[$tagk]['field']); @@ -301,10 +312,13 @@ foreach ($_POST as $key=>$val) { $jssetrows.=',""'; } if (preg_match('/^valueinp-\d+$/',$key)===1) { - if (preg_match('/^LIKE|NOT LIKE$/',$cond)===1) + if ($inpisdate && preg_match('/^([0-9]{1,2}) ([0-9]{1,2}) ([0-9]{4,5})$/',$val,$buf)===1) { + $where.=mktime(0,0,0,$buf[2]+0,$buf[1]+0,$buf[3]+0); + } elseif (preg_match('/^LIKE|NOT LIKE$/',$cond)===1) { $where.='\'%'.myesc($link,$val).'%\''; - else + } else { $where.='\''.myesc($link,$val).'\''; + } $jssetrows.=',"NOMMITROVI!"'; $jssetrows.=','.json_encode($val); } @@ -386,29 +400,53 @@ if (count($havings)>0) else $havings=''; -$query='SELECT *, Instances.ID AS IID'.$sels.' FROM Instances '.$joins.' '.$where.' GROUP BY IID '.$havings.' '.$order.' LIMIT 50'; +$query='SELECT Instances.ID AS IID '.$sels.' FROM Instances '.$joins.' '.$where.' GROUP BY IID '.$havings; +$res=mysqli_query($link,$query) + or muoribene($dbg.'
'.$query.': '.mysqli_error($link).'
'.'La query è fallita. Resetta.',true); +$cinsts=mysqli_num_rows($res); +$iperp=25; +if ($page*$iperp>$cinsts) + $page=0; +$finst=$page*$iperp; + +$query='SELECT *, Instances.ID AS IID '.$sels.' FROM Instances '.$joins.' '.$where.' GROUP BY IID '.$havings.' '.$order.' LIMIT '.$finst.','.$iperp; $dbg.='QUERONA: '.$query.'
'.N; $tini=microtime(true); $res=mysqli_query($link,$query) or muoribene($dbg.'
'.$query.': '.mysqli_error($link).'
'.'La query è fallita. Resetta.',true); $dbg.='Durata esecuzione query: '.round(microtime(true)-$tini,4).' sec.
'.N; +$cinstsp=mysqli_num_rows($res); -if (mysqli_num_rows($res)<1) { +if ($cinstsp<1) { + $pgout=''; $out='

Nessuna istanza da mostrare.

'.N; } else { +// $pgout='Pag. '.($page+1).'/'.(ceil($cinsts/$iperp)-1); + $pgout=''; +// --- + $ci=0; $out=''; while ($row=mysqli_fetch_assoc($res)) { + $ci++; $out.=''.N; // $out.=''.N; $out.=''.N; - $out.=''.N; - $attr=booly($cols['Instances.Blacklisted']['name'].': ',$row['Blacklisted'],false,true).N; - $attr.=booly($cols['Instances.New']['name'].': ',$row['New'],true).N; - $attr.=booly($cols['Instances.Good']['name'].': ',$row['Good']).N; - $attr.=booly($cols['Instances.Chosen']['name'].': ',$row['Chosen']).N; - $attr.=booly($cols['Instances.Visible']['name'].': ',$row['Visible']).N; -/* $attr.=booly($cols['Instances.RegOpen']['name'].': ',$row['RegOpen']).N; - $attr.=booly($cols['Instances.RegReqApproval']['name'].': ',$row['RegReqApproval'],true,true).N;*/ + $out.=''.N; + $attr=booly(trimname($cols['Instances.Blacklisted']['name']).': ',$row['Blacklisted'],false,true).N; + $attr.=booly(trimname($cols['Instances.New']['name']).': ',$row['New'],true).N; + $attr.=booly(trimname($cols['Instances.Good']['name']).': ',$row['Good']).N; + $attr.=booly(trimname($cols['Instances.Chosen']['name']).': ',$row['Chosen']).N; + $attr.=booly(trimname($cols['Instances.Visible']['name']).': ',$row['Visible']).N; +/* $attr.=booly(trimname($cols['Instances.RegOpen']['name']).': ',$row['RegOpen']).N; + $attr.=booly(trimname($cols['Instances.RegReqApproval']['name']).': ',$row['RegReqApproval'],true,true).N;*/ $sres=mysqli_query($link,'SELECT * FROM InstChecks WHERE InstID='.$row['IID'].' ORDER BY Time DESC') or muoribene(mysqli_error($link),true); $csres=mysqli_num_rows($sres); @@ -419,7 +457,7 @@ if (mysqli_num_rows($res)<1) { $bene++; } $width=str_replace(',','.',100/$csres*$bene); - $attr.='
Percentuale di risposta ai nostri check: '.round($width,1).'%
'; + $attr.='
Percentuale di risposta ai nostri check ('.$csres.'): '.round($width,1).'%
'; $attr.='
'.N; mysqli_data_seek($sres,0); $srow=mysqli_fetch_assoc($sres); @@ -461,14 +499,28 @@ if (mysqli_num_rows($res)<1) { $attr.='
Non disponibili
'.N; } $out.='
AttributiInfo
'.$row['URI'].' {'.$row['IID'].'}
'.$row['URI'].' ('.($finst+$ci).'/'.$cinsts.') - Modifica
'.$attr.''.N; + if ($row['Blacklisted']>0) { + $sres=mysqli_query($link,'SELECT * FROM Blacklist WHERE Domain=\''.myesc($link,$row['URI']).'\'') + or muoribene(mysqli_error($link),true); + if (mysqli_num_rows($sres)>0) { + $srow=mysqli_fetch_assoc($sres); + if (!is_null($srow['PublicComment']) && preg_match('/^\s*$/',$srow['PublicComment'])!==1) { + $out.='
Questa istanza è blacklistata per questo motivo: '.hspech($srow['PublicComment']).'
'.N; + } else { + $out.='
Questa istanza è blacklistata, ma nella blacklist non è specificato il motivo.
'.N; + } + } else { + $out.='
Questa istanza risulta blacklistata nella tabella delle istanze, ma nella tabella “Blacklist” non è presente: probabilmente è stata rimossa dalla tabella “Blacklist” e il crawler non l’ha ancora aggiornata.
'.N; + } + } $out.='
'.$cols['Instances.URI']['name'].': '.$row['URI'].'
'.N; $out.='
'.$cols['Instances.Title']['name'].': '.nully($row['Title'],false,'strip').'
'.N; $out.='
'.$cols['Instances.Thumb']['name'].': '.nully($row['Thumb'],true,'image').'
'.N; $out.='
'.$cols['Instances.ShortDesc']['name'].': '.nully($row['ShortDesc'],true,'strip').'
'.N; $out.='
'.$cols['Instances.LongDesc']['name'].': '.nully($row['LongDesc'],true,'strip').'
'.N; // 'strip' o 'htmlent' per la descrizione nostra? - $out.='
'.$cols['Instances.OurDesc']['name'].': '.nully($row['OurDesc'],true,'strip').'
'.N; - $out.='
'.$cols['Localities.Locality']['name'].': '; + $out.='
'.trimname($cols['Instances.OurDesc']['name']).': '.nully($row['OurDesc'],true,'strip').'
'.N; + $out.='
'.trimname($cols['Localities.Locality']['name']).': '; if (!is_null($row['LocalityID'])) { $sres=mysqli_query($link,'SELECT * FROM Localities LEFT JOIN Provinces ON Provinces.ID=Localities.ProvinceID LEFT JOIN Regions ON Regions.ID=Provinces.RegionID LEFT JOIN States ON States.ID=Regions.StateID WHERE Localities.ID='.$row['LocalityID']) or muoribene(mysqli_error($link),true); @@ -499,9 +551,9 @@ if (mysqli_num_rows($res)<1) { $i++; $buf[]=$i.': '.hspech($srow['Code'].' ['.$srow['NameIT'].']'); } - $out.='
'.$cols['InstOurLangs']['name'].': '.implode('; ',$buf).'
'.N; + $out.='
'.trimname($cols['InstOurLangs']['name']).': '.implode('; ',$buf).'
'.N; } else { - $out.='
'.$cols['InstOurLangs']['name'].': Non definite
'.N; + $out.='
'.trimname($cols['InstOurLangs']['name']).': Non definite
'.N; } $sres=mysqli_query($link,'SELECT * FROM InstFinancing LEFT JOIN Financing ON Financing.ID=FinID WHERE InstID='.$row['IID'].' ORDER BY Pos ASC') or muoribene(mysqli_error($link),true); @@ -512,9 +564,9 @@ if (mysqli_num_rows($res)<1) { $i++; $buf[]=$i.': '.hspech($srow['Type']); } - $out.='
'.$cols['InstFinancing']['name'].': '.implode('; ',$buf).'
'.N; + $out.='
'.trimname($cols['InstFinancing']['name']).': '.implode('; ',$buf).'
'.N; } else { - $out.='
'.$cols['InstFinancing']['name'].': Non definite
'.N; + $out.='
'.trimname($cols['InstFinancing']['name']).': Non definite
'.N; } $sres=mysqli_query($link,'SELECT * FROM InstPolicies LEFT JOIN Policies ON Policies.ID=PolID WHERE InstID='.$row['IID'].' ORDER BY Pos ASC') or muoribene(mysqli_error($link),true); @@ -525,9 +577,9 @@ if (mysqli_num_rows($res)<1) { $i++; $buf[]=$i.': '.hspech($srow['Name']); } - $out.='
'.$cols['InstPolicies']['name'].': '.implode('; ',$buf).'
'.N; + $out.='
'.trimname($cols['InstPolicies']['name']).': '.implode('; ',$buf).'
'.N; } else { - $out.='
'.$cols['InstPolicies']['name'].': Non definite
'.N; + $out.='
'.trimname($cols['InstPolicies']['name']).': Non definite
'.N; } $sres=mysqli_query($link,'SELECT * FROM InstTags LEFT JOIN Tags ON Tags.ID=TagID WHERE InstID='.$row['IID'].' ORDER BY Pos ASC') or muoribene(mysqli_error($link),true); @@ -538,9 +590,9 @@ if (mysqli_num_rows($res)<1) { $i++; $buf[]=$i.': '.hspech($srow['Name']); } - $out.='
'.$cols['InstTags']['name'].': '.implode('; ',$buf).'
'.N; + $out.='
'.trimname($cols['InstTags']['name']).': '.implode('; ',$buf).'
'.N; } else { - $out.='
'.$cols['InstTags']['name'].': Non definite
'.N; + $out.='
'.trimname($cols['InstTags']['name']).': Non definite
'.N; } $out.='
'.$cols['Instances.Email']['name'].': '.nully($row['Email'],true,'email').'
'.N; $out.='
'.$cols['Instances.Software']['name'].': '.nully($row['Software'],false,'strip').'
'.N; @@ -566,7 +618,6 @@ if (mysqli_num_rows($res)<1) { $out.='
'; } - $presid=0; if (array_key_exists('presets',$_POST) && preg_match('/^[0-9]+$/',$_POST['presets'])===1) $presid=$_POST['presets']; @@ -586,7 +637,7 @@ mysqli_close($link); -Mastodon Startpage Admin - Istanze +Mastodon Startpage Admin - Elenco istanze @@ -611,21 +662,6 @@ function ulsh(el,sh) { else el.style.display='none'; } -function golang(lang) { - var loc=document.location.href; - loc=loc.replace(/#.*$/,''); - loc=loc.replace(/\/$/,''); - if (document.documentElement.lang=='en') { - if (lang!='en') - document.location.href=loc+'/'+lang; - } else { - if (lang!='en') - document.location.href=loc.substr(0,loc.length-3)+'/'+lang; - else - document.location.href=loc.substr(0,loc.length-3); - } -} - function shideplancia() { var plancia=document.getElementById('plancia'); var plctrl=document.getElementById('plctrl'); @@ -637,7 +673,9 @@ function shideplancia() { plctrl.innerHTML='Nascondi plancia'; } } - +function hent(str) { + return str.replace(/&/g,'&').replace(/>/g,'>').replace(/=0; i--) @@ -752,47 +790,55 @@ function popusels(index,valselval) { } function addrow(index,refresh) { var table=document.getElementById('planciafil'); - var newrow=table.insertRow(index); - var newcell0=newrow.insertCell(0); - var newcell1=newrow.insertCell(1); - var newcell2=newrow.insertCell(2); - var newcell3=newrow.insertCell(3); - var newcell4=newrow.insertCell(4); - var newcell5=newrow.insertCell(5); - var newcell6=newrow.insertCell(6); - var newcell7=newrow.insertCell(7); - newcell0.innerHTML=''; - newcell1.innerHTML=''; - newcell2.innerHTML=''; - newcell3.innerHTML=''; - newcell4.innerHTML=''; - newcell5.innerHTML=''; - newcell6.innerHTML=''; - newcell6.style.width='22px'; - newcell7.innerHTML=''; - newcell7.style.width='22px'; - if (refresh) { - synctai(); - popusels(index,false); + if (table.rows.length<9) { + var newrow=table.insertRow(index); + var newcell0=newrow.insertCell(0); + var newcell1=newrow.insertCell(1); + var newcell2=newrow.insertCell(2); + var newcell3=newrow.insertCell(3); + var newcell4=newrow.insertCell(4); + var newcell5=newrow.insertCell(5); + var newcell6=newrow.insertCell(6); + var newcell7=newrow.insertCell(7); + newcell0.innerHTML=''; + newcell1.innerHTML=''; + newcell2.innerHTML=''; + newcell3.innerHTML=''; + newcell4.innerHTML=''; + newcell5.innerHTML=''; + newcell6.innerHTML=''; + newcell6.style.width='22px'; + newcell7.innerHTML=''; + newcell7.style.width='22px'; + if (refresh) { + synctai(); + popusels(index,false); + } + } else { + alerta('Non è possibile impostare più di 8 criteri di ricerca.'); } } function ordaddrow(index,refresh) { var table=document.getElementById('planciaord'); - var newrow=table.insertRow(index); - var newcell0=newrow.insertCell(0); - var newcell1=newrow.insertCell(1); - var newcell2=newrow.insertCell(2); - var newcell3=newrow.insertCell(3); - newcell0.style.width='97%'; - newcell1.style.width='1%'; - newcell2.style.width='1%'; - newcell3.style.width='1%'; - newcell0.innerHTML=''; - newcell1.innerHTML=''; - newcell2.innerHTML=''; - newcell3.innerHTML=''; - if (refresh) - synctoi(); + if (table.rows.length<7) { + var newrow=table.insertRow(index); + var newcell0=newrow.insertCell(0); + var newcell1=newrow.insertCell(1); + var newcell2=newrow.insertCell(2); + var newcell3=newrow.insertCell(3); + newcell0.style.width='97%'; + newcell1.style.width='1%'; + newcell2.style.width='1%'; + newcell3.style.width='1%'; + newcell0.innerHTML=''; + newcell1.innerHTML=''; + newcell2.innerHTML=''; + newcell3.innerHTML=''; + if (refresh) + synctoi(); + } else { + alerta('Non è possibile impostare più di 6 criteri di ordinamento.'); + } } function synctai() { var i=0; @@ -1010,7 +1056,6 @@ function pupwait(on) { pup.style.display='none'; } } - //function setrow(index,openparv,fieldselv,condselv,valueselv,valueinpv,closeparv,andorv) function loadpres() { let pres=document.getElementById('presets'); @@ -1020,7 +1065,7 @@ function loadpres() { formdata.append('act','load'); formdata.append('pid',pres.value); let xhr=new XMLHttpRequest(); - xhr.open('POST','loadsavepres.php'); + xhr.open('POST','loadsaverempres.php'); xhr.responseType='json'; xhr.send(formdata); xhr.onload=function() { @@ -1057,6 +1102,27 @@ function loadpres() { alerta('

Non hai selezionato alcun preset ;)

'); } } +function rempres() { + pupwait(true); + let pres=document.getElementById('presets'); + let formdata=new FormData(document.forms.f); + formdata.append('act','remove'); + formdata.append('pid',pres.value); + let xhr=new XMLHttpRequest(); + xhr.open('POST','loadsaverempres.php'); + xhr.responseType='json'; + xhr.send(formdata); + xhr.onload=function() { + console.log(xhr.response); + pres.remove(pres.selectedIndex); + pres.selectedIndex=0; + pupwait(false); + }; + xhr.onerror=function() { + pupwait(false); + alert('La richiesta è fallita.'); + }; +} function savepres(txt,asnew) { pupwait(true); let pres=document.getElementById('presets'); @@ -1066,7 +1132,7 @@ function savepres(txt,asnew) { if (!asnew) formdata.append('pid',pres.value); let xhr=new XMLHttpRequest(); - xhr.open('POST','loadsavepres.php'); + xhr.open('POST','loadsaverempres.php'); xhr.responseType='json'; xhr.send(formdata); xhr.onload=function() { @@ -1092,12 +1158,21 @@ function pupsavepres(asnew) { var prestext=pres.options[pres.selectedIndex].text; var pre='

Se vuoi puoi modificare il nome del preset che stai per sovrascrivere

'; if (asnew) pre='

Dai un nuovo nome al nuovo preset che stai per salvare

'; - inpup.innerHTML='
'+pre+'
'; + inpup.innerHTML='
'+pre+'
'; pup.style.display='table'; } else { alerta('

Non hai selezionato alcun preset ;)

'); } } +function puprempres() { + var pres=document.getElementById('presets'); + if (pres.value!='null') { + var prestext=pres.options[pres.selectedIndex].text; + confirma('Confermi l’eliminazione del preset «'+hent(prestext)+'»?','rempres()'); + } else { + alerta('

Non hai selezionato alcun preset ;)

'); + } +} function ckpresname(asnew) { var pres=document.getElementById('presets'); var presname=document.getElementById('presname').value; @@ -1136,7 +1211,10 @@ function pupoff() { inpup.innerHTML='
...
'; pup.style.display='none'; } - +function gotopage(pi) { + document.getElementById('p').value=pi; + ckf(); +} //--> @@ -1149,7 +1227,8 @@ function pupoff() {
- + +
@@ -1161,13 +1240,12 @@ function pupoff() {
- --->
@@ -1184,7 +1262,8 @@ function pupoff() {
-
Preset:
+
Preset:
+
diff --git a/web/admin/loadsavepres.php b/web/admin/loadsaverempres.php similarity index 90% rename from web/admin/loadsavepres.php rename to web/admin/loadsaverempres.php index 76a5dbc..b7fe071 100644 --- a/web/admin/loadsavepres.php +++ b/web/admin/loadsaverempres.php @@ -106,7 +106,16 @@ if (array_key_exists('act',$_POST)) { or muoribene(mysqli_error($link),true); } } elseif ($_POST['act']=='remove' && array_key_exists('pid',$_POST) && preg_match('/^[0-9]+$/',$_POST['pid'])===1) { - echo(json_encode($_POST)); + $pid=$_POST['pid']; + $query='DELETE FROM PresFiltConds WHERE PresID='.$pid; + mysqli_query($link,$query) + or muoribene(mysqli_error($link),true); + $query='DELETE FROM PresOrdConds WHERE PresID='.$pid; + mysqli_query($link,$query) + or muoribene(mysqli_error($link),true); + $query='DELETE FROM Presets WHERE ID='.$pid; + mysqli_query($link,$query) + or muoribene(mysqli_error($link),true); } } diff --git a/web/admin/theme.css b/web/admin/theme.css index 54ceb50..33c6afc 100644 --- a/web/admin/theme.css +++ b/web/admin/theme.css @@ -60,7 +60,7 @@ p { padding: 3px; color: white; height: 30px; - background-color: #916f6f; + background-color: #6f8a91; border-radius: 5px; text-align: center; vertical-align: middle; @@ -68,6 +68,10 @@ p { font-size: 12pt; font-weight: bold; } +.bigtab .insthead a { + color: #1c2224; + /*text-decoration: underline;*/ +} .bigtab img { max-width: 100%; display: block; @@ -459,6 +463,78 @@ input { min-width: 320px; } +.edtab { + background-color: white; + font-size: 10pt; + margin-left: auto; + margin-right: auto; + width: 400px; + margin-top: 32px; +} +.edtab .insthead { + padding: 3px; + color: white; + height: 30px; + background-color: #916f6f; + border-radius: 5px; + text-align: center; + vertical-align: middle; + color: white; + font-size: 12pt; + font-weight: bold; +} +.edtab input { + width: auto; + font-size: 10pt; + padding: 0; +} +.edtab img { + max-width: 100%; + display: block; + margin-left: auto; + margin-right: auto; +} +/*720x1280*/ +.edtab td { + padding: 3px; + text-align: left; + vertical-align: top; +/* word-break: break-word;*/ + background-color: lightgrey; + border-radius: 5px; +} +.edtab .left { + width: 1%; + text-align: right; +} +.edtab .right { + width: 99%; +} +.edtab .tarea { + width: 100%; + resize: none; + padding: 3px; + border-radius: 3px; + border: 1px; +} + +.cbtab { + background-color: red; + border-spacing: 0; +} +.cbtab td { + border-radius: 0; + padding: 0; + border: none; +} + +#pageselect { + position: absolute; + left: 50%; + transform: translateX(-50%); + margin-top: 5px; +} + #debug { position: fixed; left: 0; @@ -467,6 +543,20 @@ input { height: 240px; font-size: 8pt; overflow: auto; + display: none; +} + +#intro { + width:800px; + margin-left:auto; + margin-right:auto; + padding:10px; + font-size:14pt; + line-height: 18pt; + background-color:lightgrey; +} +#intro p { + margin-bottom: 0; } @media only screen and (max-width:720px) { diff --git a/web/admin/zzz-materiali/mastostart_struttura_e_dati.sql.gz b/web/admin/zzz-materiali/mastostart_struttura_e_dati.sql.gz index 1201c41..894dd92 100644 Binary files a/web/admin/zzz-materiali/mastostart_struttura_e_dati.sql.gz and b/web/admin/zzz-materiali/mastostart_struttura_e_dati.sql.gz differ