2019-12-26 21:57:36 +01:00
< ? php
require ( 'include/glob.php' );
require ( 'include/muoribene.php' );
require ( 'include/sessionstart.php' );
2020-01-08 14:52:20 +01:00
2019-12-26 21:57:36 +01:00
require ( 'include/menu.php' );
2020-01-08 14:52:20 +01:00
$menu [ 'istanze' ][ 'href' ] = null ;
$menu [ 'istanze' ][ 'selected' ] = true ;
2019-12-26 21:57:36 +01:00
buildmenu ( $menu );
require ( 'include/myconn.php' );
2020-01-02 13:19:25 +01:00
2020-01-08 14:52:20 +01:00
$dbg = '' ;
use function mysqli_real_escape_string as myesc ;
2020-01-05 05:46:29 +01:00
// praticamente una macro
function hspech ( $str ) {
return ( htmlspecialchars ( $str , ENT_QUOTES | ENT_HTML5 , 'UTF-8' ));
}
2020-01-02 22:03:34 +01:00
function nully ( $val , $fem , $filter , $ntext = null ) {
2020-01-02 13:19:25 +01:00
if ( ! is_null ( $val )) {
if ( $filter == 'strip' ) {
2020-01-05 05:46:29 +01:00
return ( strip_tags ( $val , '<a><br><ol><ul><li><p><i><b><strong><em><small>' ));
} elseif ( $filter == 'htmlchars' ) {
return ( hspech ( $val ));
2020-01-02 22:03:34 +01:00
} elseif ( $filter == 'timestamp' ) {
return ( strftime ( '%a %d %b %Y, %T' , $val ));
} elseif ( $filter == 'email' ) {
return ( '<a href="mailto:' . strip_tags ( $val ) . '">' . strip_tags ( $val ) . '</a>' );
} elseif ( $filter == 'url' ) {
return ( '<a href="' . strip_tags ( $val ) . '" target="_blank">' . strip_tags ( $val ) . '</a>' );
} elseif ( $filter == 'image' ) {
2020-01-05 05:46:29 +01:00
return ( '<img src="' . str_replace ( '"' , '\\"' , strip_tags ( $val )) . '">' );
2020-01-02 22:03:34 +01:00
} elseif ( $filter == 'boolt' ) {
if ( $val )
return ( '<span class="good">Si</span>' );
else
return ( '<span class="bad">No</span>' );
} elseif ( $filter == 'boolf' ) {
if ( $val )
return ( '<span class="bad">Si</span>' );
else
return ( '<span class="good">No</span>' );
2020-01-02 13:19:25 +01:00
} else {
return ( $val );
}
} else {
2020-01-02 22:03:34 +01:00
if ( is_null ( $ntext )) {
if ( $fem )
return ( '<span class="nully">Non definita</span>' );
else
return ( '<span class="nully">Non definito</span>' );
}
else {
return ( '<span class="nully">' . $ntext . '</span>' );
}
2020-01-02 13:19:25 +01:00
}
}
function booly ( $pre , $val , $nottoobad = false , $invcol = false ) {
if ( $val ) {
if ( ! $invcol ) {
$p = '<p class="good">' ;
} else {
if ( ! $nottoobad ) {
$p = '<p class="bad">' ;
} else {
$p = '<p class="neut">' ;
}
}
return ( $p . $pre . 'SI</p>' );
} else {
if ( ! $invcol ) {
if ( ! $nottoobad ) {
$p = '<p class="bad">' ;
} else {
$p = '<p class="neut">' ;
}
} else {
$p = '<p class="good">' ;
}
return ( $p . $pre . 'NO</p>' );
}
}
2020-01-08 14:52:20 +01:00
$dbg .= '<pre>' . print_r ( $_POST , 1 ) . '</pre>' ;
2020-01-02 13:19:25 +01:00
$cols = array (
'New' => array ( 'name' => 'Nuova' , 'type' => 'bool' ),
'Good' => array ( 'name' => 'Papabile' , 'type' => 'bool' ),
'Chosen' => array ( 'name' => 'Scelta' , 'type' => 'bool' ),
'Visible' => array ( 'name' => 'Visibile' , 'type' => 'bool' ),
'Blacklisted' => array ( 'name' => 'Blacklistata' , 'type' => 'bool' ),
'URI' => array ( 'name' => 'URI' , 'type' => 'text' ),
'Title' => array ( 'name' => 'Titolo' , 'type' => 'text' ),
'ShortDesc' => array ( 'name' => 'Descrizione breve' , 'type' => 'text' ),
'LongDesc' => array ( 'name' => 'Descrizione lunga' , 'type' => 'text' ),
'OurDesc' => array ( 'name' => 'Descrizione nostra' , 'type' => 'text' ),
2020-01-08 14:52:20 +01:00
2020-01-11 21:53:37 +01:00
'PlaceID' => array ( 'name' => 'Località ⮞' , 'type' => 'join' , 'join' => array (), 'ord' => false ),
2020-01-08 14:52:20 +01:00
'Places.Locality' => array ( 'name' => 'Località' , 'type' => 'joini' , 'join' => array ( 'Places ON Places.ID=Instances.PlaceID' ), 'subtype' => 'text' ),
2020-01-02 13:19:25 +01:00
'Email' => array ( 'name' => 'Email di contatto' , 'type' => 'text' ),
'Software' => array ( 'name' => 'Software' , 'type' => 'text' ),
'Version' => array ( 'name' => 'Versione' , 'type' => 'text' ),
2020-01-05 05:46:29 +01:00
'UserCount' => array ( 'name' => 'Utenti' , 'type' => 'int' ),
'StatusCount' => array ( 'name' => 'Stati' , 'type' => 'int' ),
'DomainCount' => array ( 'name' => 'Istanze note' , 'type' => 'int' ),
'ActiveUsersMonth' => array ( 'name' => 'Utenti attivi (mese)' , 'type' => 'int' ),
'ActiveUsersHalfYear' => array ( 'name' => 'Utenti attivi (6 mesi)' , 'type' => 'int' ),
2020-01-11 20:05:15 +01:00
'Thumb' => array ( 'name' => 'Logo' , 'type' => 'text' , 'search' => false , 'ord' => false ),
2020-01-02 13:19:25 +01:00
'RegOpen' => array ( 'name' => 'Registrazioni aperte' , 'type' => 'bool' ),
'RegReqApproval' => array ( 'name' => 'Approvazione registrazioni' , 'type' => 'bool' ),
2020-01-05 05:46:29 +01:00
'MaxTootChars' => array ( 'name' => 'Limite caratteri' , 'type' => 'int' ),
2020-01-02 22:03:34 +01:00
'AdmAccount' => array ( 'name' => 'Account admin' , 'type' => 'text' ),
'AdmDisplayName' => array ( 'name' => 'Nome account admin' , 'type' => 'text' ),
2020-01-05 05:46:29 +01:00
'AdmCreatedAt' => array ( 'name' => 'Data creazione account admin' , 'type' => 'time' ),
2020-01-11 20:05:15 +01:00
'AdmURL' => array ( 'name' => 'Pagina dell’ admin' , 'type' => 'text' , 'ord' => false ),
'AdmAvatar' => array ( 'name' => 'Avatar admin' , 'type' => 'text' , 'search' => false , 'ord' => false ),
2020-01-05 05:46:29 +01:00
'AdmNote' => array ( 'name' => 'Note dell’ admin' , 'type' => 'text' ),
2020-01-08 14:52:20 +01:00
2020-01-11 21:53:37 +01:00
'LangID' => array ( 'name' => 'Lingue dichiarate ⮞' , 'type' => 'join' , 'join' => array ( 'InstLangs ON InstLangs.InstID=Instances.ID' ), 'ord' => false ),
2020-01-11 20:05:15 +01:00
'Languages.Code' => array ( 'name' => 'Lingue dichiarate' , 'type' => 'joini' , 'join' => array ( 'InstLangs ON InstLangs.InstID=Instances.ID' , 'Languages ON Languages.ID=InstLangs.LangID' ), 'subtype' => 'text' , 'ord' => false ),
2020-01-11 21:53:37 +01:00
'InstLangs.LangID' => array ( 'name' => 'Lingua primaria dichiarata ⮞' , 'type' => 'join' , 'join' => array ( 'InstLangs ON InstLangs.InstID=Instances.ID' ), 'wheremore' => 'AND InstLangs.Pos=1' , 'ord' => false ),
2020-01-11 20:05:15 +01:00
'Languages.NameIT' => array ( 'name' => 'Lingua primaria dichiarata' , 'type' => 'joini' , 'join' => array ( 'InstLangs ON InstLangs.InstID=Instances.ID' , 'Languages ON Languages.ID=InstLangs.LangID' ), 'subtype' => 'text' , 'wheremore' => 'AND InstLangs.Pos=1' ),
2020-01-08 14:52:20 +01:00
2020-01-11 21:53:37 +01:00
'OurLangID' => array ( 'name' => 'Lingue impostate da noi ⮞' , 'type' => 'join' , 'join' => array ( 'InstOurLangs ON InstOurLangs.InstID=Instances.ID' ), 'ord' => false ),
2020-01-11 20:05:15 +01:00
'OurLanguages.Code' => array ( 'name' => 'Lingue impostate da noi' , 'type' => 'joini' , 'join' => array ( 'InstOurLangs ON InstOurLangs.InstID=Instances.ID' , 'Languages AS OurLanguages ON OurLanguages.ID=InstOurLangs.OurLangID' ), 'subtype' => 'text' , 'ord' => false ),
2020-01-11 21:53:37 +01:00
'InstOurLangs.OurLangID' => array ( 'name' => 'Lingua primaria impostata da noi ⮞' , 'type' => 'join' , 'join' => array ( 'InstOurLangs ON InstOurLangs.InstID=Instances.ID' ), 'wheremore' => 'AND InstOurLangs.Pos=1' , 'ord' => false ),
2020-01-11 20:05:15 +01:00
'OurLanguages.NameIT' => array ( 'name' => 'Lingua primaria impostata da noi' , 'type' => 'joini' , 'join' => array ( 'InstOurLangs ON InstOurLangs.InstID=Instances.ID' , 'Languages AS OurLanguages ON OurLanguages.ID=InstOurLangs.OurLangID' ), 'subtype' => 'text' , 'wheremore' => 'AND InstOurLangs.Pos=1' ),
2020-01-08 14:52:20 +01:00
2020-01-11 21:53:37 +01:00
'FinID' => array ( 'name' => 'Modalità di finanziamento ⮞' , 'type' => 'join' , 'join' => array ( 'InstFinancing ON InstFinancing.InstID=Instances.ID' ), 'ord' => false ),
2020-01-11 20:05:15 +01:00
'Financing.Type' => array ( 'name' => 'Modalità di finanziamento' , 'type' => 'joini' , 'join' => array ( 'InstFinancing ON InstFinancing.InstID=Instances.ID' , 'Financing ON Financing.ID=InstFinancing.FinID' ), 'subtype' => 'text' ),
2020-01-11 21:53:37 +01:00
'InstFinancing.FinID' => array ( 'name' => 'Modalità di finanziamento primaria ⮞' , 'type' => 'join' , 'join' => array ( 'InstFinancing ON InstFinancing.InstID=Instances.ID' ), 'wheremore' => 'AND InstFinancing.Pos=1' , 'ord' => false ),
2020-01-11 20:05:15 +01:00
'XFinancing.Type' => array ( 'name' => 'Modalità di finanziamento primaria' , 'type' => 'joini' , 'join' => array ( 'InstFinancing ON InstFinancing.InstID=Instances.ID' , 'Financing AS XFinancing ON XFinancing.ID=InstFinancing.FinID' ), 'subtype' => 'text' , 'wheremore' => 'AND InstFinancing.Pos=1' ),
2020-01-08 14:52:20 +01:00
2020-01-11 21:53:37 +01:00
'PolID' => array ( 'name' => 'Restrizioni sui contenuti ⮞' , 'type' => 'join' , 'join' => array ( 'InstPolicies ON InstPolicies.InstID=Instances.ID' ), 'ord' => false ),
2020-01-08 14:52:20 +01:00
'Policies.Name' => array ( 'name' => 'Restrizioni sui contenuti' , 'type' => 'joini' , 'join' => array ( 'InstPolicies ON InstPolicies.InstID=Instances.ID' , 'Policies ON Policies.ID=InstPolicies.PolID' ), 'subtype' => 'text' ),
2020-01-11 21:53:37 +01:00
'InstPolicies.PolID' => array ( 'name' => 'Restrizione sui contenuti primaria ⮞' , 'type' => 'join' , 'join' => array ( 'InstPolicies ON InstPolicies.InstID=Instances.ID' ), 'wheremore' => 'AND InstPolicies.Pos=1' , 'ord' => false ),
2020-01-11 20:05:15 +01:00
'XPolicies.Name' => array ( 'name' => 'Restrizione sui contenuti primaria' , 'type' => 'joini' , 'join' => array ( 'InstPolicies ON InstPolicies.InstID=Instances.ID' , 'Policies AS XPolicies ON XPolicies.ID=InstPolicies.PolID' ), 'subtype' => 'text' , 'wheremore' => 'AND InstPolicies.Pos=1' ),
2020-01-08 14:52:20 +01:00
2020-01-11 21:53:37 +01:00
'TagID' => array ( 'name' => 'Tags ⮞' , 'type' => 'join' , 'join' => array ( 'InstTags ON InstTags.InstID=Instances.ID' ), 'ord' => false ),
2020-01-11 20:05:15 +01:00
'Tags.Name' => array ( 'name' => 'Tags' , 'type' => 'joini' , 'join' => array ( 'InstTags ON InstTags.InstID=Instances.ID' , 'Tags ON Tags.ID=InstTags.TagID' ), 'subtype' => 'text' ),
2020-01-11 21:53:37 +01:00
'InstTags.TagID' => array ( 'name' => 'Tag primaria ⮞' , 'type' => 'join' , 'join' => array ( 'InstTags ON InstTags.InstID=Instances.ID' ), 'wheremore' => 'AND InstTags.Pos=1' , 'ord' => false ),
2020-01-11 20:05:15 +01:00
'XTags.Name' => array ( 'name' => 'Tag primaria' , 'type' => 'joini' , 'join' => array ( 'InstTags ON InstTags.InstID=Instances.ID' , 'Tags AS XTags ON XTags.ID=InstTags.TagID' ), 'subtype' => 'text' , 'wheremore' => 'AND InstTags.Pos=1' ),
2020-01-08 14:52:20 +01:00
2020-01-11 20:05:15 +01:00
/* 'Statuses' => array ( 'name' => 'Stati ultima settimana' , 'type' => 'joini' , 'join' => array ( 'InstActivity ON InstActivity.InstID=Instances.ID' ), 'subtype' => 'int' , 'selmore' => 'MAX(Week) AS maxweek' ),
'Logins' => array ( 'name' => 'Logins ultima settimana' , 'type' => 'joini' , 'join' => array ( 'InstActivity ON InstActivity.InstID=Instances.ID' ), 'subtype' => 'int' , 'selmore' => 'MAX(Week) AS maxweek' ),
'Registrations' => array ( 'name' => 'Registrazioni ultima settimana' , 'type' => 'joini' , 'join' => array ( 'InstActivity ON InstActivity.InstID=Instances.ID' ), 'subtype' => 'int' , 'selmore' => 'MAX(Week) AS maxweek' ), */
2020-01-02 13:19:25 +01:00
);
2020-01-08 14:52:20 +01:00
$types = array ( 'bool' , 'int' , 'time' , 'text' , 'join' , 'joini' );
2020-01-05 05:46:29 +01:00
$fieldselopts = '' ;
2020-01-11 20:05:15 +01:00
$ordfieldselopts = '' ;
2020-01-05 05:46:29 +01:00
foreach ( $cols as $key => $val ) {
2020-01-11 20:05:15 +01:00
if ( ! array_key_exists ( 'search' , $val )) {
if ( $val [ 'type' ] == 'joini' ) {
$fieldselopts .= '<option value="' . $key . ':' . $val [ 'type' ] . ':' . $val [ 'subtype' ] . '">' . $val [ 'name' ] . '</option>' ;
} else {
$fieldselopts .= '<option value="' . $key . ':' . $val [ 'type' ] . ':null">' . $val [ 'name' ] . '</option>' ;
}
}
if ( ! array_key_exists ( 'ord' , $val )) {
if ( $val [ 'type' ] == 'joini' ) {
$ordfieldselopts .= '<option value="' . $key . ':' . $val [ 'type' ] . ':' . $val [ 'subtype' ] . '">' . $val [ 'name' ] . '</option>' ;
} else {
$ordfieldselopts .= '<option value="' . $key . ':' . $val [ 'type' ] . ':null">' . $val [ 'name' ] . '</option>' ;
}
2020-01-08 14:52:20 +01:00
}
}
2020-01-09 20:43:28 +01:00
$i = 0 ;
$jsaddrows = '' ;
$jssetrows = '' ;
$cp = count ( $_POST ) / 6 ; // /6 perché ogni "blocco" contiene 6 righe
2020-01-08 16:06:09 +01:00
$sels = array ();
2020-01-08 14:52:20 +01:00
$joins = array ();
$where = '' ;
foreach ( $_POST as $key => $val ) {
2020-01-09 20:43:28 +01:00
if ( preg_match ( '/^openpar-\d+/' , $key ) === 1 ) {
$i ++ ;
if ( preg_match ( '/^\(+$/' , $val ) === 1 )
$where .= $val ;
$jsaddrows .= 'addrow(' . $i . ',false);' . N ;
$jssetrows .= 'setrow(' . $i . ',' . json_encode ( $val );
}
2020-01-11 20:05:15 +01:00
if ( preg_match ( '/^fieldsel-\d+/' , $key ) === 1 && preg_match ( '/^(.+):(.+):(.+)$/' , $val , $buf ) === 1 ) {
2020-01-09 20:43:28 +01:00
$col = $buf [ 1 ];
$type = $buf [ 2 ];
$subtype = $buf [ 3 ];
if ( array_key_exists ( $col , $cols ) && in_array ( $type , $types )) {
2020-01-11 20:05:15 +01:00
if ( array_key_exists ( 'wheremore' , $cols [ $col ]))
$where .= '(' ;
2020-01-09 20:43:28 +01:00
$where .= $col ;
if ( $type == 'join' || $type == 'joini' ) {
foreach ( $cols [ $col ][ 'join' ] as $join ) {
2020-01-08 14:52:20 +01:00
if ( ! in_array ( $join , $joins ))
$joins [] = $join ;
}
2020-01-11 20:05:15 +01:00
if ( array_key_exists ( 'selmore' , $cols [ $col ]) && ! in_array ( $cols [ $col ][ 'selmore' ], $sels ))
$sels [] = $cols [ $col ][ 'selmore' ];
2020-01-08 14:52:20 +01:00
}
2020-01-09 20:43:28 +01:00
$jssetrows .= ',' . json_encode ( $val );
2020-01-08 14:52:20 +01:00
} else {
muoribene ( $dbg . '<br>Dati POST corrotti.<br>Puoi <a href="instances.php">riprovare</a> o <a href="index.php">tornare al login</a>.' , true );
}
}
if ( preg_match ( '/^condsel-\d+/' , $key ) === 1 ) {
$where .= ' ' . $val . ' ' ;
$cond = $val ;
2020-01-09 20:43:28 +01:00
$jssetrows .= ',' . json_encode ( $val );
2020-01-11 20:05:15 +01:00
// nel caso qui sotto, valuesel e valueinp sono entrambi disabilitati (non ci sono in $_POST), quindi li riempio di introvabile e nulla
if ( preg_match ( '/^(IS NULL|IS NOT NULL)$/' , $val ) === 1 )
$jssetrows .= ',"NOMMITROVI!",""' ;
2020-01-08 14:52:20 +01:00
}
2020-01-09 20:43:28 +01:00
if ( preg_match ( '/^valuesel-\d+/' , $key ) === 1 ) {
2020-01-08 14:52:20 +01:00
$where .= $val ;
2020-01-11 20:05:15 +01:00
if ( array_key_exists ( 'wheremore' , $cols [ $col ]))
$where .= ' ' . $cols [ $col ][ 'wheremore' ] . ')' ;
2020-01-09 20:43:28 +01:00
$jssetrows .= ',' . json_encode ( $val );
$jssetrows .= ',""' ;
}
2020-01-08 14:52:20 +01:00
if ( preg_match ( '/^valueinp-\d+/' , $key ) === 1 ) {
if ( preg_match ( '/^(LIKE|NOT LIKE)$/' , $cond ) === 1 )
$where .= '\'%' . myesc ( $link , $val ) . '%\'' ;
else
$where .= '\'' . myesc ( $link , $val ) . '\'' ;
2020-01-11 20:05:15 +01:00
if ( array_key_exists ( 'wheremore' , $cols [ $col ]))
$where .= ' ' . $cols [ $col ][ 'wheremore' ] . ')' ;
$jssetrows .= ',"NOMMITROVIHODETTO!"' ;
2020-01-09 20:43:28 +01:00
$jssetrows .= ',' . json_encode ( $val );
2020-01-08 14:52:20 +01:00
}
2020-01-09 20:43:28 +01:00
if ( preg_match ( '/^closepar-\d+/' , $key ) === 1 ) {
if ( preg_match ( '/^\)+$/' , $val ) === 1 )
$where .= $val ;
$jssetrows .= ',' . json_encode ( $val );
}
if ( preg_match ( '/^andor-\d+/' , $key ) === 1 && preg_match ( '/^(AND|OR)$/' , $val ) === 1 ) {
if ( $i < $cp )
$where .= ' ' . $val . ' ' ;
$jssetrows .= ',' . json_encode ( $val ) . ');' . N ;
}
}
if ( $jsaddrows != '' ) {
$jsaddrows .= 'document.getElementById("filbut").value="Rimuovi tutti i criteri di ricerca";' . N ;
$jsaddrows .= 'synctai();' . N ;
2020-01-05 05:46:29 +01:00
}
2020-01-08 16:06:09 +01:00
if ( count ( $sels ) > 0 )
$sels = ', ' . implode ( ', ' , $sels );
else
$sels = '' ;
2020-01-08 14:52:20 +01:00
if ( $where != '' )
$where = 'WHERE ' . $where ;
if ( count ( $joins ) > 0 )
$joins = 'LEFT JOIN ' . implode ( ' LEFT JOIN ' , $joins );
else
$joins = '' ;
2020-01-08 16:06:09 +01:00
$query = 'SELECT *, Instances.ID AS IID' . $sels . ' FROM Instances ' . $joins . ' ' . $where . ' GROUP BY IID ORDER BY Instances.URI ASC LIMIT 50' ;
2020-01-08 14:52:20 +01:00
$dbg .= 'QUERONA: ' . $query . '<br>' . N ;
2020-01-09 20:43:28 +01:00
$tini = microtime ( true );
2020-01-08 14:52:20 +01:00
$res = mysqli_query ( $link , $query )
2020-01-11 20:05:15 +01:00
or muoribene ( $dbg . '<br>' . $query . ': ' . mysqli_error ( $link ) . '<br>' . 'La query è fallita. <a href="instances.php">Resetta</a>.' , true );
2020-01-09 20:43:28 +01:00
$dbg .= 'Durata esecuzione query: ' . round ( microtime ( true ) - $tini , 4 ) . ' sec.<br>' . N ;
2020-01-05 05:46:29 +01:00
2019-12-26 21:57:36 +01:00
if ( mysqli_num_rows ( $res ) < 1 ) {
$out = '<p>Nessuna istanza da mostrare.</p>' . N ;
} else {
2020-01-05 05:46:29 +01:00
$out = '' ;
2019-12-26 21:57:36 +01:00
while ( $row = mysqli_fetch_assoc ( $res )) {
2020-01-05 05:46:29 +01:00
$out .= '<table class="bigtab">' . N ;
// $out.='<thead><tr><th class="tdattr">Attributi</th><th>Info</th></thead>'.N;
$out .= '<tbody>' . N ;
2020-01-08 14:52:20 +01:00
$out .= '<tr><td colspan="2" class="insthead">' . $row [ 'URI' ] . ' {' . $row [ 'IID' ] . '}</td></tr>' . N ;
2020-01-02 13:19:25 +01:00
$attr = booly ( $cols [ 'Blacklisted' ][ 'name' ] . ': ' , $row [ 'Blacklisted' ], false , true ) . N ;
$attr .= booly ( $cols [ 'New' ][ 'name' ] . ': ' , $row [ 'New' ], true ) . N ;
$attr .= booly ( $cols [ 'Good' ][ 'name' ] . ': ' , $row [ 'Good' ]) . N ;
$attr .= booly ( $cols [ 'Chosen' ][ 'name' ] . ': ' , $row [ 'Chosen' ]) . N ;
$attr .= booly ( $cols [ 'Visible' ][ 'name' ] . ': ' , $row [ 'Visible' ]) . N ;
2020-01-02 22:03:34 +01:00
/* $attr .= booly ( $cols [ 'RegOpen' ][ 'name' ] . ': ' , $row [ 'RegOpen' ]) . N ;
$attr .= booly ( $cols [ 'RegReqApproval' ][ 'name' ] . ': ' , $row [ 'RegReqApproval' ], true , true ) . N ; */
2020-01-05 05:46:29 +01:00
$sres = mysqli_query ( $link , 'SELECT * FROM InstChecks WHERE InstID=' . $row [ 'IID' ] . ' ORDER BY Time DESC' )
2020-01-08 14:52:20 +01:00
or muoribene ( mysqli_error ( $link ), true );
2020-01-05 05:46:29 +01:00
$csres = mysqli_num_rows ( $sres );
if ( $csres > 0 ) {
$bene = 0 ;
while ( $srow = mysqli_fetch_assoc ( $sres )) {
if ( $srow [ 'Status' ] == 1 )
$bene ++ ;
}
$width = str_replace ( ',' , '.' , 100 / $csres * $bene );
$attr .= '<div class="colsectheader">Percentuale di risposta ai nostri check: ' . round ( $width , 1 ) . '%</div>' ;
$attr .= '<div class="percbg"><div class="percfg" style="width:' . $width . '%;"></div></div>' . N ;
mysqli_data_seek ( $sres , 0 );
$srow = mysqli_fetch_assoc ( $sres );
$attr .= '<div class="colsectcont">Ultimo check ' . strftime ( '%e %b %Y, %T' , $srow [ 'Time' ]) . ': ' . (( $srow [ 'Status' ]) ? '<span class="good">OK</span>' : '<span class="bad">KO</span>' ) . '</div>' ;
} else {
2020-01-11 00:51:02 +01:00
$attr .= '<div class="colsectheader">Percentuale di risposta ai nostri check</div>' . N ;
2020-01-05 05:46:29 +01:00
$attr .= '<div class="colsectcont nully">Non disponibile (?!?!?!)</div>' . N ;
}
$attr .= '<div class="colsectheader">Attività delle ultime 12 settimane</div>' . N ;
2020-01-02 22:03:34 +01:00
$sres = mysqli_query ( $link , 'SELECT SUM(Statuses) AS tstatuses, SUM(Logins) AS tlogins, SUM(Registrations) AS tregs FROM InstActivity WHERE InstID=' . $row [ 'IID' ])
2020-01-08 14:52:20 +01:00
or muoribene ( mysqli_error ( $link ), true );
2020-01-02 22:03:34 +01:00
$tot = mysqli_fetch_assoc ( $sres );
$sres = mysqli_query ( $link , 'SELECT * FROM InstActivity WHERE InstID=' . $row [ 'IID' ] . ' ORDER BY Week DESC' )
2020-01-08 14:52:20 +01:00
or muoribene ( mysqli_error ( $link ), true );
2020-01-02 22:03:34 +01:00
if ( mysqli_num_rows ( $sres ) > 0 ) {
2020-01-05 05:46:29 +01:00
$attr .= '<div class="colsectcont">Stati: ' . $tot [ 'tstatuses' ] . '<br>Accessi: ' . $tot [ 'tlogins' ] . '<br>Registrazioni: ' . $tot [ 'tregs' ] . '</div>' . N ;
2020-01-02 22:03:34 +01:00
while ( $srow = mysqli_fetch_assoc ( $sres )) {
2020-01-11 00:51:02 +01:00
$attr .= '<div class="colsectcontb">' . strftime ( '%e %b %Y' , $srow [ 'Week' ]) . '</div>' . N ;
2020-01-02 22:03:34 +01:00
( $tot [ 'tstatuses' ] == 0 ) ? $width = 0 : $width = str_replace ( ',' , '.' , 100 / $tot [ 'tstatuses' ] * $srow [ 'Statuses' ]);
$attr .= '<div class="percstatuses" style="width:' . $width . '%;">' . $srow [ 'Statuses' ] . ' stati</div>' . N ;
( $tot [ 'tlogins' ] == 0 ) ? $width = 0 : $width = str_replace ( ',' , '.' , 100 / $tot [ 'tlogins' ] * $srow [ 'Logins' ]);
$attr .= '<div class="perclogins" style="width:' . $width . '%;">' . $srow [ 'Logins' ] . ' accessi</div>' . N ;
( $tot [ 'tregs' ] == 0 ) ? $width = 0 : $width = str_replace ( ',' , '.' , 100 / $tot [ 'tregs' ] * $srow [ 'Registrations' ]);
$attr .= '<div class="percregs" style="width:' . $width . '%;">' . $srow [ 'Registrations' ] . ' registrazioni</div>' . N ;
}
2020-01-05 05:46:29 +01:00
} else {
$attr .= '<div class="colsectcont nully">Non disponibile</div>' . N ;
2020-01-02 22:03:34 +01:00
}
2020-01-05 05:46:29 +01:00
$attr .= '<div class="colsectheader">Hashtags più usati durante l’ ultima settimana</div>' . N ;
$sres = mysqli_query ( $link , 'SELECT * FROM InstTrends WHERE InstID=' . $row [ 'IID' ] . ' ORDER BY Pos ASC' )
2020-01-08 14:52:20 +01:00
or muoribene ( mysqli_error ( $link ), true );
2020-01-05 05:46:29 +01:00
if ( mysqli_num_rows ( $sres ) > 0 ) {
$attr .= '<div class="colsectcont"><ol>' . N ;
2020-01-02 22:03:34 +01:00
while ( $srow = mysqli_fetch_assoc ( $sres )) {
2020-01-05 05:46:29 +01:00
$attr .= '<li><a href="' . $srow [ 'URL' ] . '">' . hspech ( $srow [ 'Name' ]) . '</a></li>' . N ;
2020-01-02 22:03:34 +01:00
}
2020-01-05 05:46:29 +01:00
$attr .= '</ol></div>' . N ;
} else {
$attr .= '<div class="colsectcont nully">Non disponibili</div>' . N ;
2020-01-02 22:03:34 +01:00
}
$out .= '<tr><td class="tdattr">' . $attr . '</td><td>' . N ;
2020-01-05 05:46:29 +01:00
$out .= '<div class="baloo"><span class="field">' . $cols [ 'URI' ][ 'name' ] . ':</span> <a href="https://' . $row [ 'URI' ] . '" target="_blank">' . $row [ 'URI' ] . '</a></div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'Title' ][ 'name' ] . ':</span> ' . nully ( $row [ 'Title' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'Thumb' ][ 'name' ] . ':</span> ' . nully ( $row [ 'Thumb' ], true , 'image' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'ShortDesc' ][ 'name' ] . ':</span> ' . nully ( $row [ 'ShortDesc' ], true , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'LongDesc' ][ 'name' ] . ':</span> ' . nully ( $row [ 'LongDesc' ], true , 'strip' ) . '</div>' . N ;
// 'strip' o 'htmlent' per la descrizione nostra?
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'OurDesc' ][ 'name' ] . ':</span> ' . nully ( $row [ 'OurDesc' ], true , 'strip' ) . '</div>' . N ;
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'Places.Locality' ][ 'name' ] . ':</span> ' ;
if ( ! is_null ( $row [ 'PlaceID' ])) {
$sres = mysqli_query ( $link , 'SELECT * FROM Places WHERE Places.ID=' . $row [ 'PlaceID' ])
or muoribene ( mysqli_error ( $link ), true );
$srow = mysqli_fetch_assoc ( $sres );
$out .= hspech ( $srow [ 'Locality' ]) . '</div>' . N ;
} else {
$out .= '<span class="nully">Non definita</span></div>' . N ;
}
2020-01-05 05:46:29 +01:00
$sres = mysqli_query ( $link , 'SELECT * FROM InstLangs LEFT JOIN Languages ON Languages.ID=LangID WHERE InstID=' . $row [ 'IID' ] . ' ORDER BY Pos ASC' )
2020-01-08 14:52:20 +01:00
or muoribene ( mysqli_error ( $link ), true );
2020-01-05 05:46:29 +01:00
if ( mysqli_num_rows ( $sres ) > 0 ) {
$i = 0 ;
$buf = array ();
while ( $srow = mysqli_fetch_assoc ( $sres )) {
$i ++ ;
$buf [] = $i . ': ' . hspech ( $srow [ 'Code' ] . ' [' . ucfirst ( locale_get_display_name ( $srow [ 'Code' ])) . ']' );
}
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="field">' . $cols [ 'Languages.Code' ][ 'name' ] . ':</span> ' . implode ( '; ' , $buf ) . '</div>' . N ;
2020-01-05 05:46:29 +01:00
} else {
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="field">' . $cols [ 'Languages.Code' ][ 'name' ] . ':</span> <span class="nully">Non definite</span></div>' . N ;
2020-01-05 05:46:29 +01:00
}
2020-01-08 14:52:20 +01:00
$sres = mysqli_query ( $link , 'SELECT * FROM InstOurLangs LEFT JOIN Languages ON Languages.ID=OurLangID WHERE InstID=' . $row [ 'IID' ] . ' ORDER BY Pos ASC' )
or muoribene ( mysqli_error ( $link ), true );
2020-01-05 05:46:29 +01:00
if ( mysqli_num_rows ( $sres ) > 0 ) {
$i = 0 ;
$buf = array ();
while ( $srow = mysqli_fetch_assoc ( $sres )) {
$i ++ ;
$buf [] = $i . ': ' . hspech ( $srow [ 'Code' ] . ' [' . ucfirst ( locale_get_display_name ( $srow [ 'Code' ], 'it' )) . ']' );
}
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'OurLanguages.Code' ][ 'name' ] . ':</span> ' . implode ( '; ' , $buf ) . '</div>' . N ;
2020-01-05 05:46:29 +01:00
} else {
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'OurLanguages.Code' ][ 'name' ] . ':</span> <span class="nully">Non definite</span></div>' . N ;
2020-01-05 05:46:29 +01:00
}
$sres = mysqli_query ( $link , 'SELECT * FROM InstFinancing LEFT JOIN Financing ON Financing.ID=FinID WHERE InstID=' . $row [ 'IID' ] . ' ORDER BY Pos ASC' )
2020-01-08 14:52:20 +01:00
or muoribene ( mysqli_error ( $link ), true );
2020-01-05 05:46:29 +01:00
if ( mysqli_num_rows ( $sres ) > 0 ) {
$i = 0 ;
$buf = array ();
while ( $srow = mysqli_fetch_assoc ( $sres )) {
$i ++ ;
2020-01-11 20:05:15 +01:00
$buf [] = $i . ': ' . hspech ( $srow [ 'Type' ]);
2020-01-05 05:46:29 +01:00
}
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'Financing.Type' ][ 'name' ] . ':</span> ' . implode ( '; ' , $buf ) . '</div>' . N ;
2020-01-05 05:46:29 +01:00
} else {
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'Financing.Type' ][ 'name' ] . ':</span> <span class="nully">Non definite</span></div>' . N ;
2020-01-05 05:46:29 +01:00
}
$sres = mysqli_query ( $link , 'SELECT * FROM InstPolicies LEFT JOIN Policies ON Policies.ID=PolID WHERE InstID=' . $row [ 'IID' ] . ' ORDER BY Pos ASC' )
2020-01-08 14:52:20 +01:00
or muoribene ( mysqli_error ( $link ), true );
2020-01-05 05:46:29 +01:00
if ( mysqli_num_rows ( $sres ) > 0 ) {
$i = 0 ;
$buf = array ();
while ( $srow = mysqli_fetch_assoc ( $sres )) {
$i ++ ;
$buf [] = $i . ': ' . hspech ( $srow [ 'Name' ]);
}
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'Policies.Name' ][ 'name' ] . ':</span> ' . implode ( '; ' , $buf ) . '</div>' . N ;
2020-01-05 05:46:29 +01:00
} else {
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'Policies.Name' ][ 'name' ] . ':</span> <span class="nully">Non definite</span></div>' . N ;
2020-01-05 05:46:29 +01:00
}
$sres = mysqli_query ( $link , 'SELECT * FROM InstTags LEFT JOIN Tags ON Tags.ID=TagID WHERE InstID=' . $row [ 'IID' ] . ' ORDER BY Pos ASC' )
2020-01-08 14:52:20 +01:00
or muoribene ( mysqli_error ( $link ), true );
2020-01-05 05:46:29 +01:00
if ( mysqli_num_rows ( $sres ) > 0 ) {
$i = 0 ;
$buf = array ();
while ( $srow = mysqli_fetch_assoc ( $sres )) {
$i ++ ;
$buf [] = $i . ': ' . hspech ( $srow [ 'Name' ]);
}
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'Tags.Name' ][ 'name' ] . ':</span> ' . implode ( '; ' , $buf ) . '</div>' . N ;
2020-01-05 05:46:29 +01:00
} else {
2020-01-11 20:05:15 +01:00
$out .= '<div class="baloo"><span class="ourfield">' . $cols [ 'Tags.Name' ][ 'name' ] . ':</span> <span class="nully">Non definite</span></div>' . N ;
2020-01-05 05:46:29 +01:00
}
$out .= '<div class="baloo"><span class="field">' . $cols [ 'Email' ][ 'name' ] . ':</span> ' . nully ( $row [ 'Email' ], true , 'email' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'Software' ][ 'name' ] . ':</span> ' . nully ( $row [ 'Software' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'Version' ][ 'name' ] . ':</span> ' . nully ( $row [ 'Version' ], true , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'UserCount' ][ 'name' ] . ':</span> ' . nully ( $row [ 'UserCount' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'StatusCount' ][ 'name' ] . ':</span> ' . nully ( $row [ 'StatusCount' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'DomainCount' ][ 'name' ] . ':</span> ' . nully ( $row [ 'DomainCount' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'ActiveUsersMonth' ][ 'name' ] . ':</span> ' . nully ( $row [ 'ActiveUsersMonth' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'ActiveUsersHalfYear' ][ 'name' ] . ':</span> ' . nully ( $row [ 'ActiveUsersHalfYear' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'RegOpen' ][ 'name' ] . ':</span> ' . nully ( $row [ 'RegOpen' ], false , 'boolt' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'RegReqApproval' ][ 'name' ] . ':</span> ' . nully ( $row [ 'RegReqApproval' ], false , 'boolf' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'MaxTootChars' ][ 'name' ] . ':</span> ' . nully ( $row [ 'MaxTootChars' ], false , 'strip' , '500' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'AdmAccount' ][ 'name' ] . ':</span> ' . nully ( $row [ 'AdmAccount' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'AdmDisplayName' ][ 'name' ] . ':</span> ' . nully ( $row [ 'AdmDisplayName' ], false , 'strip' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'AdmCreatedAt' ][ 'name' ] . ':</span> ' . nully ( $row [ 'AdmCreatedAt' ], true , 'timestamp' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'AdmURL' ][ 'name' ] . ':</span> ' . nully ( $row [ 'AdmURL' ], true , 'url' ) . '</div>' . N ;
$out .= '<div class="baloo"><span class="field">' . $cols [ 'AdmAvatar' ][ 'name' ] . ':</span> ' . nully ( $row [ 'AdmAvatar' ], false , 'image' ) . '</div>' . N ;
$out .= '<div><span class="field">' . $cols [ 'AdmNote' ][ 'name' ] . ':</span> ' . nully ( $row [ 'AdmNote' ], false , 'strip' ) . '</div>' . N ;
2020-01-02 22:03:34 +01:00
$out .= '</td></tr>' . N ;
2020-01-05 05:46:29 +01:00
$out .= '</tbody>' . N ;
$out .= '</table>' . N ;
2019-12-26 21:57:36 +01:00
}
2020-01-08 14:52:20 +01:00
$out .= '<div class="bigtabfoot"></div>' ;
2019-12-26 21:57:36 +01:00
}
2020-01-02 22:03:34 +01:00
mysqli_close ( $link );
2019-12-26 21:57:36 +01:00
?>
<! DOCTYPE HTML >
< html lang = " it " >
< head >
2020-01-05 05:46:29 +01:00
< title > Mastodon Startpage Admin - Istanze </ title >
2019-12-26 21:57:36 +01:00
< 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 " >
2020-01-08 14:52:20 +01:00
< script language = " JavaScript " src = " js/confirma.js?v=<?php echo( $cjrand ); ?> " ></ script >
2020-01-11 00:51:02 +01:00
< script language = " JavaScript " src = " js/alerta.js?v=<?php echo( $cjrand ); ?> " ></ script >
2019-12-26 21:57:36 +01:00
< link rel = " stylesheet " type = " text/css " href = " theme.css?v=<?php echo( $cjrand ); ?> " >
< script language = " JavaScript " >
<!--
function chulsh ( el , sh ) {
if ( sh )
2020-01-11 21:53:37 +01:00
el . querySelector ( 'ul' ) . style . display = 'block' ;
2019-12-26 21:57:36 +01:00
else
2020-01-11 21:53:37 +01:00
el . querySelector ( 'ul' ) . style . display = 'none' ;
2019-12-26 21:57:36 +01:00
}
function ulsh ( el , sh ) {
if ( sh )
2020-01-11 21:53:37 +01:00
el . style . display = 'block' ;
2019-12-26 21:57:36 +01:00
else
2020-01-11 21:53:37 +01:00
el . style . display = 'none' ;
2019-12-26 21:57:36 +01:00
}
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 );
}
}
2020-01-08 14:52:20 +01:00
function shideplancia () {
var plancia = document . getElementById ( 'plancia' );
2020-01-11 20:05:15 +01:00
var plctrl = document . getElementById ( 'plctrl' );
2020-01-08 14:52:20 +01:00
if ( plancia . style . display == 'block' ) {
plancia . style . display = 'none' ;
2020-01-11 20:05:15 +01:00
plctrl . innerHTML = 'Mostra plancia' ;
2020-01-08 14:52:20 +01:00
} else {
plancia . style . display = 'block' ;
2020-01-11 20:05:15 +01:00
plctrl . innerHTML = 'Nascondi plancia' ;
2020-01-08 14:52:20 +01:00
}
}
2020-01-05 05:46:29 +01:00
function truncsel ( el ) {
var sel = document . getElementById ( el ), len = sel . length , i = 0 ;
for ( i = len - 1 ; i >= 0 ; i -- )
sel . remove ( i );
}
function addselopt ( el , val , txt ) {
2020-01-08 14:52:20 +01:00
option = new Option ( txt , val );
2020-01-05 05:46:29 +01:00
el . add ( option );
}
function inpdisif ( index ) {
2020-01-11 21:53:37 +01:00
console . log ( 'inpdisif index: ' + index );
2020-01-08 14:52:20 +01:00
var source = document . getElementById ( 'condsel-' + index );
2020-01-08 16:06:09 +01:00
var inp = document . getElementById ( 'valueinp-' + index );
var sel = document . getElementById ( 'valuesel-' + index );
2020-01-05 05:46:29 +01:00
var conds = [ 'IS NULL' , 'IS NOT NULL' ];
if ( conds . includes ( source . value )) {
2020-01-08 16:06:09 +01:00
inp . disabled = true ;
sel . disabled = true ;
2020-01-05 05:46:29 +01:00
} else {
2020-01-08 16:06:09 +01:00
if ( inp . style . display != 'none' ) inp . disabled = false ;
if ( sel . style . display != 'none' ) sel . disabled = false ;
2020-01-05 05:46:29 +01:00
}
}
2020-01-09 20:43:28 +01:00
function popusels ( index , valselval ) {
2020-01-11 21:53:37 +01:00
console . log ( 'popusels index: ' + index );
2020-01-08 14:52:20 +01:00
var key = document . getElementById ( 'fieldsel-' + index ) . value ;
2020-01-11 20:05:15 +01:00
var type = key . replace ( /^.*: ( .* ) :.* $ / , '$1' );
var subtype = key . replace ( /^.*:.*: ( .* ) $ / , '$1' );
key = key . replace ( /^ ( .* ) :.*:.* $ / , '$1' );
2020-01-08 14:52:20 +01:00
var condsel = document . getElementById ( 'condsel-' + index );
var valsel = document . getElementById ( 'valuesel-' + index );
var valinp = document . getElementById ( 'valueinp-' + index );
2020-01-11 21:53:37 +01:00
condsel . setAttribute ( 'onchange' , 'inpdisif(' + index + ');' );
2020-01-08 14:52:20 +01:00
if ( type == 'joini' )
type = subtype ;
2020-01-05 05:46:29 +01:00
if ( type == 'bool' ) {
2020-01-08 14:52:20 +01:00
truncsel ( 'condsel-' + index );
2020-01-05 05:46:29 +01:00
addselopt ( condsel , 'IS' , 'è' );
2020-01-08 14:52:20 +01:00
truncsel ( 'valuesel-' + index );
2020-01-05 05:46:29 +01:00
addselopt ( valsel , 'TRUE' , 'vero' );
addselopt ( valsel , 'FALSE' , 'falso' );
2020-01-08 14:52:20 +01:00
addselopt ( valsel , 'NOT NULL' , 'definito' );
2020-01-05 05:46:29 +01:00
addselopt ( valsel , 'NULL' , 'non definito' );
2020-01-11 20:05:15 +01:00
if ( valselval !== false )
selind ( 'valuesel-' + index , valselval );
2020-01-11 21:53:37 +01:00
valinp . style . display = 'none' ;
2020-01-05 05:46:29 +01:00
valinp . disabled = true ;
2020-01-11 21:53:37 +01:00
valsel . style . display = 'block' ;
2020-01-05 05:46:29 +01:00
valsel . disabled = false ;
} else if ( type == 'text' ) {
2020-01-08 14:52:20 +01:00
truncsel ( 'condsel-' + index );
2020-01-05 05:46:29 +01:00
addselopt ( condsel , 'LIKE' , 'contiene' );
addselopt ( condsel , 'NOT LIKE' , 'non contiene' );
addselopt ( condsel , '=' , 'è uguale a' );
addselopt ( condsel , '!=' , 'è diverso da' );
2020-01-08 16:06:09 +01:00
addselopt ( condsel , '>=' , 'è maggiore o uguale a' );
addselopt ( condsel , '<=' , 'è minore o uguale a' );
addselopt ( condsel , '>' , 'è maggiore di' );
addselopt ( condsel , '<' , 'è minore di' );
2020-01-05 05:46:29 +01:00
addselopt ( condsel , 'IS NOT NULL' , 'è definito' );
addselopt ( condsel , 'IS NULL' , 'non è definito' );
2020-01-11 21:53:37 +01:00
valsel . style . display = 'none' ;
2020-01-05 05:46:29 +01:00
valsel . disabled = true ;
2020-01-11 21:53:37 +01:00
valinp . style . display = 'block' ;
2020-01-05 05:46:29 +01:00
valinp . disabled = false ;
} else if ( type == 'int' || type == 'time' ) {
2020-01-08 14:52:20 +01:00
truncsel ( 'condsel-' + index );
2020-01-08 16:06:09 +01:00
addselopt ( condsel , '>=' , 'è maggiore o uguale a' );
addselopt ( condsel , '<=' , 'è minore o uguale a' );
addselopt ( condsel , '>' , 'è maggiore di' );
addselopt ( condsel , '<' , 'è minore di' );
addselopt ( condsel , '=' , 'è uguale a' );
addselopt ( condsel , '!=' , 'è diverso da' );
2020-01-05 05:46:29 +01:00
addselopt ( condsel , 'IS NOT NULL' , 'è definito' );
addselopt ( condsel , 'IS NULL' , 'non è definito' );
2020-01-11 21:53:37 +01:00
valsel . style . display = 'none' ;
2020-01-05 05:46:29 +01:00
valsel . disabled = true ;
2020-01-11 21:53:37 +01:00
valinp . style . display = 'block' ;
2020-01-05 05:46:29 +01:00
valinp . disabled = false ;
2020-01-08 14:52:20 +01:00
} else if ( type == 'join' ) {
truncsel ( 'condsel-' + index );
2020-01-08 16:06:09 +01:00
addselopt ( condsel , '=' , 'è uguale a' );
addselopt ( condsel , '!=' , 'è diverso da' );
2020-01-08 14:52:20 +01:00
addselopt ( condsel , 'IS NOT NULL' , 'è definito' );
addselopt ( condsel , 'IS NULL' , 'non è definito' );
2020-01-11 21:53:37 +01:00
valsel . style . display = 'block' ;
2020-01-08 14:52:20 +01:00
valsel . disabled = false ;
2020-01-11 21:53:37 +01:00
valinp . style . display = 'none' ;
2020-01-08 14:52:20 +01:00
valinp . disabled = true ;
truncsel ( 'valuesel-' + index );
2020-01-09 20:43:28 +01:00
let xhr = new XMLHttpRequest ();
xhr . open ( 'GET' , 'instancesh.php?key=' + key );
xhr . responseType = 'json' ;
xhr . send ();
xhr . onload = function () {
let jarr = xhr . response ;
for ( i = 0 ; i < jarr . length ; i ++ )
addselopt ( valsel , jarr [ i ][ 0 ], jarr [ i ][ 1 ]);
console . log ( 'valsel pronto!' );
if ( valselval !== false )
selind ( 'valuesel-' + index , valselval );
};
xhr . onerror = function () {
alert ( 'Request failed' );
};
2020-01-05 05:46:29 +01:00
} else {
alert ( 'Attenziò: non so che farmene del tipo "' + type + '": diglielo, al programmatore.' );
}
}
2020-01-09 20:43:28 +01:00
function addrow ( index , refresh ) {
2020-01-08 14:52:20 +01:00
var table = document . getElementById ( 'planciafil' );
2020-01-05 05:46:29 +01:00
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 = '<select class="openpar"><option value="null"></option><option value="(">(</option><option value="((">((</option><option value="(((">(((</option></select>' ;
newcell1 . innerHTML = '<select class="fieldsel"><?php echo($fieldselopts); ?></select>' ;
newcell2 . innerHTML = '<select class="condsel"></select>' ;
2020-01-08 14:52:20 +01:00
newcell3 . innerHTML = '<select class="valuesel" style="display:none;"></select><input type="text" class="valueinp" maxlength="256" style="display:none;">' ;
2020-01-05 05:46:29 +01:00
newcell4 . innerHTML = '<select class="closepar"><option value="null"></option><option value=")">)</option><option value="))">))</option><option value=")))">)))</option></select>' ;
newcell5 . innerHTML = '<select class="andor"><option value="AND">E</option><option value="OR">O</option></select>' ;
newcell6 . innerHTML = '<img class="plus" src="imgs/plus.svg">' ;
newcell7 . innerHTML = '<img class="minus" src="imgs/minus.svg">' ;
2020-01-09 20:43:28 +01:00
if ( refresh ) {
synctai ();
popusels ( index , false );
}
2020-01-05 05:46:29 +01:00
}
function synctai () {
var i = 0 ;
2020-01-08 14:52:20 +01:00
var table = document . getElementById ( 'planciafil' );
2020-01-05 05:46:29 +01:00
var nodes = table . querySelectorAll ( '.minus' );
var cnodes = nodes . length ;
for ( i = 0 ; i < cnodes ; i ++ )
// +1 sempre per via della row iniziale
nodes [ i ] . setAttribute ( 'onclick' , 'remrow(' + ( i + 1 ) + ');' );
nodes = table . querySelectorAll ( '.plus' );
for ( i = 0 ; i < cnodes ; i ++ )
// +2 perché la devi aggiungere dopo la corrente
2020-01-09 20:43:28 +01:00
nodes [ i ] . setAttribute ( 'onclick' , 'addrow(' + ( i + 2 ) + ',true);' );
2020-01-05 05:46:29 +01:00
// da qui in poi faccio a scendere per non avere mai id e nomi duplicati
cnodes -- ;
nodes = table . querySelectorAll ( '.openpar' );
for ( i = cnodes ; i >- 1 ; i -- ) {
2020-01-08 14:52:20 +01:00
nodes [ i ] . setAttribute ( 'id' , 'openpar-' + ( i + 1 ));
nodes [ i ] . setAttribute ( 'name' , 'openpar-' + ( i + 1 ));
2020-01-05 05:46:29 +01:00
}
nodes = table . querySelectorAll ( '.fieldsel' );
for ( i = cnodes ; i >- 1 ; i -- ) {
2020-01-08 14:52:20 +01:00
nodes [ i ] . setAttribute ( 'id' , 'fieldsel-' + ( i + 1 ));
nodes [ i ] . setAttribute ( 'name' , 'fieldsel-' + ( i + 1 ));
2020-01-09 20:43:28 +01:00
nodes [ i ] . setAttribute ( 'onchange' , 'popusels(' + ( i + 1 ) + ',false);' );
2020-01-05 05:46:29 +01:00
}
nodes = table . querySelectorAll ( '.condsel' );
for ( i = cnodes ; i >- 1 ; i -- ) {
2020-01-08 14:52:20 +01:00
nodes [ i ] . setAttribute ( 'id' , 'condsel-' + ( i + 1 ));
nodes [ i ] . setAttribute ( 'name' , 'condsel-' + ( i + 1 ));
2020-01-11 21:53:37 +01:00
nodes [ i ] . setAttribute ( 'onchange' , 'inpdisif(' + ( i + 1 ) + ');' );
2020-01-05 05:46:29 +01:00
}
nodes = table . querySelectorAll ( '.valuesel' );
for ( i = cnodes ; i >- 1 ; i -- ) {
2020-01-08 14:52:20 +01:00
nodes [ i ] . setAttribute ( 'id' , 'valuesel-' + ( i + 1 ));
nodes [ i ] . setAttribute ( 'name' , 'valuesel-' + ( i + 1 ));
2020-01-05 05:46:29 +01:00
}
nodes = table . querySelectorAll ( '.valueinp' );
for ( i = cnodes ; i >- 1 ; i -- ) {
2020-01-08 14:52:20 +01:00
nodes [ i ] . setAttribute ( 'id' , 'valueinp-' + ( i + 1 ));
nodes [ i ] . setAttribute ( 'name' , 'valueinp-' + ( i + 1 ));
2020-01-05 05:46:29 +01:00
}
nodes = table . querySelectorAll ( '.closepar' );
for ( i = cnodes ; i >- 1 ; i -- ) {
2020-01-08 14:52:20 +01:00
nodes [ i ] . setAttribute ( 'id' , 'closepar-' + ( i + 1 ));
nodes [ i ] . setAttribute ( 'name' , 'closepar-' + ( i + 1 ));
2020-01-05 05:46:29 +01:00
}
nodes = table . querySelectorAll ( '.andor' );
for ( i = cnodes ; i >- 1 ; i -- ) {
2020-01-08 14:52:20 +01:00
nodes [ i ] . setAttribute ( 'id' , 'andor-' + ( i + 1 ));
nodes [ i ] . setAttribute ( 'name' , 'andor-' + ( i + 1 ));
2020-01-05 05:46:29 +01:00
nodes [ i ] . disabled = false ;
}
2020-01-08 14:52:20 +01:00
if ( cnodes >= 0 )
2020-01-05 05:46:29 +01:00
nodes [ cnodes ] . disabled = true ;
}
2020-01-09 20:43:28 +01:00
function selind ( id , val ) {
var el = document . getElementById ( id ), i = 0 , found = false ;
while ( ! found && i < el . length ) {
if ( el [ i ] . value == val ) {
el . selectedIndex = i ;
found = true ;
}
i ++ ;
}
if ( ! found )
2020-01-11 20:05:15 +01:00
console . log ( '"' + val + '" non è stato trovato in "' + id + '"' );
2020-01-09 20:43:28 +01:00
}
function setrow ( index , openparv , fieldselv , condselv , valueselv , valueinpv , closeparv , andorv ) {
selind ( 'openpar-' + index , openparv );
selind ( 'fieldsel-' + index , fieldselv );
popusels ( index , valueselv );
selind ( 'condsel-' + index , condselv );
// selind('valuesel-'+index,valueselv);
document . getElementById ( 'valueinp-' + index ) . value = valueinpv ;
2020-01-11 20:05:15 +01:00
if ( condselv == 'IS NULL' || condselv == 'IS NOT NULL' ) {
document . getElementById ( 'valueinp-' + index ) . disabled = true ;
document . getElementById ( 'valuesel-' + index ) . disabled = true ;
}
2020-01-09 20:43:28 +01:00
selind ( 'closepar-' + index , closeparv );
selind ( 'andor-' + index , andorv );
}
2020-01-05 05:46:29 +01:00
function remrow ( index ) {
2020-01-08 14:52:20 +01:00
var table = document . getElementById ( 'planciafil' );
2020-01-05 05:46:29 +01:00
table . deleteRow ( index );
synctai ();
2020-01-08 14:52:20 +01:00
if ( table . rows . length < 2 )
document . getElementById ( 'filbut' ) . value = 'Aggiungi criteri di ricerca' ;
}
function truncfil () {
var table = document . getElementById ( 'planciafil' );
while ( table . rows . length > 1 )
remrow ( 1 );
}
function manfil () {
var filbut = document . getElementById ( 'filbut' );
var table = document . getElementById ( 'planciafil' );
var crows = table . rows . length ;
if ( crows < 2 ) {
2020-01-09 20:43:28 +01:00
addrow ( 1 , true );
2020-01-08 14:52:20 +01:00
filbut . value = 'Rimuovi tutti i criteri di ricerca' ;
} else {
confirma ( 'Confermi di voler rimuovere tutti i criteri di ricerca?' , 'truncfil();filbut.value=\'Aggiungi criteri di ricerca\'' );
}
}
2020-01-11 00:51:02 +01:00
function ckpar () {
var i = 0 ;
2020-01-09 20:43:28 +01:00
var table = document . getElementById ( 'planciafil' );
2020-01-11 00:51:02 +01:00
var nodes = table . querySelectorAll ( '.openpar' );
var cnodes = nodes . length ;
var opars = [];
var cpars = [];
for ( i = 0 ; i < cnodes ; i ++ )
opars . push ( nodes [ i ] . value );
nodes = table . querySelectorAll ( '.closepar' );
for ( i = 0 ; i < cnodes ; i ++ )
cpars . push ( nodes [ i ] . value );
var spars = '' ;
for ( i = 0 ; i < cnodes ; i ++ ) {
if ( opars [ i ] != 'null' ) spars += opars [ i ];
if ( cpars [ i ] != 'null' ) spars += cpars [ i ];
}
var opq = 0 , cpq = 0 , ok = true ;
for ( i = 0 ; i < spars . length ; i ++ ) {
if ( spars [ i ] == '(' ) {
opq ++ ;
} else if ( spars [ i ] == ')' ) {
cpq ++ ;
}
if ( cpq > opq )
break ;
}
if ( opq != cpq )
ok = false ;
console . log ( i + '/' + spars . length + ': ' + ok );
return ok ;
}
function ckf () {
var emsg = '' ;
if ( ! ckpar ()) emsg += 'Qualcosa non va con le parentesi!<br>\n' ;
2020-01-11 20:05:15 +01:00
// emsg+='Comunque NO!<br>\n';
2020-01-11 00:51:02 +01:00
if ( emsg == '' ) {
var table = document . getElementById ( 'planciafil' );
var crows = table . rows . length ;
2020-01-11 20:05:15 +01:00
if ( crows > 1 )
document . getElementById ( 'andor-' + ( crows - 1 )) . disabled = false ;
2020-01-11 00:51:02 +01:00
document . getElementById ( 'f' ) . submit ();
} else {
alerta ( emsg );
}
2020-01-05 05:46:29 +01:00
}
2019-12-26 21:57:36 +01:00
//-->
</ script >
</ head >
2020-01-11 00:51:02 +01:00
< body >
2019-12-26 21:57:36 +01:00
< nav >
< div id = " hmenu " >
< ul >
< ? php echo ( $menuout ); ?>
</ ul >
2020-01-11 20:05:15 +01:00
< div id = " rightdiv " >
< div id = " plctrl " class = " rlinks " onclick = " shideplancia(); " > Mostra plancia </ div >
< div id = " logout " class = " rlinks " >< a href = " logout.php " > Esci </ a ></ div >
2019-12-26 21:57:36 +01:00
</ div >
</ nav >
2020-01-08 14:52:20 +01:00
< div id = " popup " >
< div id = " inpopup " >
< div id = " popupcont " >
...
</ div >
</ div >
</ div >
2019-12-26 21:57:36 +01:00
< div id = " footer " >
< form action = " edinst.php " name = " addinst " method = " post " >
< table >< tr >< td > Aggiungi un’ istanza :</ td >< td >< input type = " text " name = " URI " maxlength = " 512 " ></ td >< td >< input type = " button " value = " Vai " onClick = " ckaif(); " ></ td ></ tr ></ table >
</ form >
</ div >
2020-01-05 05:46:29 +01:00
2020-01-08 14:52:20 +01:00
< div id = " debug " >
< ? php echo ( $dbg ); ?>
</ div >
2020-01-05 05:46:29 +01:00
< form method = " post " id = " f " >
2020-01-08 14:52:20 +01:00
< div id = " plancia " >
< table id = " planciafil " class = " planciatab " >
< tr >< td colspan = " 8 " >< input type = " button " id = " filbut " value = " Aggiungi criteri di ricerca " class = " ctrlbut " onclick = " manfil(); " ></ td ></ tr >
2020-01-05 05:46:29 +01:00
</ table >
2020-01-08 14:52:20 +01:00
< table id = " planciaord " class = " planciatab " >
< tr >< td colspan = " 8 " >< input type = " button " id = " ordbut " value = " Aggiungi criteri di ordinamento " class = " ctrlbut " onclick = " alert('Aspetta!') " ></ td ></ tr >
</ table >
< table id = " planciaothers " class = " planciatab " >
< tr >< td >< input type = " button " id = " subbut " value = " Applica " class = " ctrlbut " onclick = " ckf(); " ></ td ></ tr >
</ table >
</ div >
2020-01-05 05:46:29 +01:00
</ form >
2020-01-09 20:43:28 +01:00
< script language = " JavaScript " >
<!--
< ? php
echo ( $jsaddrows );
echo ( $jssetrows );
?>
//-->
</ script >
< div id = " fullscreen " >
< div id = " middlerow " >
2020-01-05 05:46:29 +01:00
< ? php echo ( $out ); ?>
</ div >
</ div >
2019-12-26 21:57:36 +01:00
</ body >
</ html >