=$start && strtotime($array[$i][$dateKey])<=$end) $new[]=$array[$i]; } return $new; } function adjustFlow($aa){ $f=[]; foreach(array_keys($aa) as $k){ foreach($aa[$k] as $r){ $r["objectType"]=substr($k, 0, -1); $f[]=$r; } } sortByDateAll($f); array_reverse($f); return $f; } function sortByDateAll(&$ar){ usort($ar, function ($item1, $item2) { return strtotime($item1['publishedDate']) <=> strtotime($item2['publishedDate']); }); } function iten($n){ $sos=[ "previsto il"=>"planned", "effettuato il"=>"executed", "importo"=>"amount", "titolo"=>"title", "descrizione breve"=>"shortDescription", "descrizione in html"=>"htmlDescription", "data di creazione"=>"createdDate", "data di pubblicazione"=>"publishedDate", "data di ultima modifica"=>"lastEditedDate", "url anteprima"=>"thumbnailUrl", "url documento"=>"documentUrl", "data di inizio"=>"startDate", "data di fine"=>"endDate", "partecipanti"=>"participants", "tipo"=>"isAssembly", "data inizio raccolta risposte"=>"startDate", "data fine raccolta risposte"=>"endDate", "data pubblicazione dei risultati"=>"publishResultsDate", "testo in html"=>"htmlDescription", "titolo domanda"=>"questionTitle", "domanda"=>"questionText", "titolo risposta"=>"answerTitle", "risposta"=>"answerText", "data richiesta"=>"askDate", "data risposta"=>"answerDate", "richiedente"=>"asker", "rispondente"=>"replier" ]; return $sos[strtolower($n)]?:$n; } function contains($string, $array, $caseSensitive = true) { $stripedString = $caseSensitive ? str_replace($array, '', $string) : str_ireplace($array, '', $string); return strlen($stripedString) !== strlen($string); } function AAdateRect($array,$prase=["date","planned","executed"]){ foreach (array_keys($array) as $k){ if(contains($k,$prase)){ $array[$k]=dateRectify($array[$k]); } } return $array; } function AALRect(&$list){ for($i=0;$i$v){ if( ($nk=iten($k)) != $k){ $arr[$nk]=$v; unset($arr[$k]); } } return $arr; } use Spatie\ArrayToXml\ArrayToXml; function listDocs($pdo,$id=null){ if(!$id){ $q=$pdo->prepare('SELECT * FROM "Documenti" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $q->execute(); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } else{ $q=$pdo->prepare('SELECT * FROM "Documenti" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $q->execute([":id"=>$id]); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } $docs=aritenWrap($docs); $t=$pdo->prepare('SELECT * FROM "Eventi" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $t->execute(); $evs=$t->fetchAll(PDO::FETCH_ASSOC); $t=$pdo->prepare('SELECT * FROM "Contabilita" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $t->execute(); $cnts=$t->fetchAll(PDO::FETCH_ASSOC); $t=$pdo->prepare('SELECT * FROM "Domande" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $t->execute(); $qts=$t->fetchAll(PDO::FETCH_ASSOC); $t=$pdo->prepare('SELECT * FROM "Feedbacks" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $t->execute(); $fbs=$t->fetchAll(PDO::FETCH_ASSOC); for($i=0;$i$evs[$j]["Titolo"],"ID"=>(int)$evs[$j]["ID"],"UID"=>"e".$evs[$j]["ID"]]; } for($j=0;$j$cnts[$j]["Titolo"],"ID"=>(int)$cnts[$j]["ID"],"UID"=>"t".$cnts[$j]["ID"]]; } for($j=0;$j$qts[$j]["Titolo Domanda"],"ID"=>(int)$qts[$j]["ID"],"UID"=>"q".$qts[$j]["ID"]]; } for($j=0;$j$fbs[$j]["Titolo"],"ID"=>(int)$fbs[$j]["ID"],"UID"=>"f".$fbs[$j]["ID"]]; } $docs[$i]["tags"]=explode(",",trim($docs[$i]["Tags"])); if($docs[$i]["tags"]==[""]) $docs[$i]["tags"]=[]; unset($docs[$i]["Tags"]); if(!empty($docs[$i]["URL Firma Digitale"])){ $docs[$i]["signatureUrl"]=$docs[$i]["URL Firma Digitale"]; } unset($docs[$i]["URL Firma Digitale"]); $docs[$i]["format"]=["type"=>$docs[$i]["Tipo documento"],"description"=>DOCTypeDescr($docs[$i]["Tipo documento"]),"uiColor"=>colorByTypeDOC($docs[$i]["Tipo documento"])]; unset($docs[$i]["Tipo documento"]); } return $docs; } function listCont($pdo,$id=null){ if(!$id){ $q=$pdo->prepare('SELECT * FROM "Contabilita" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" ASC'); $q->execute(); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } else{ $q=$pdo->prepare('SELECT * FROM "Contabilita" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" ASC'); $q->execute([":id"=>$id]); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } $docs=aritenWrap($docs); $t=$pdo->prepare('SELECT * FROM "Feedbacks" WHERE "Data di pubblicazione" < DATETIME("NOW") ORDER BY "Data di pubblicazione" ASC'); $t->execute(); $fbs=$t->fetchAll(PDO::FETCH_ASSOC); $t=$pdo->prepare('SELECT * FROM "Domande" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" ASC'); $t->execute(); $qts=$t->fetchAll(PDO::FETCH_ASSOC); for($i=0;$i$qts[$j]["Titolo Domanda"],"ID"=>(int)$qts[$j]["ID"],"UID"=>"q".$qts[$j]["ID"]]; } for($j=0;$j$fbs[$j]["Titolo"],"ID"=>(int)$fbs[$j]["ID"],"UID"=>"f".$fbs[$j]["ID"]]; } $ef=explode(",",$docs[$i]["Documenti collegati"]); $ta=[]; foreach($ef as $d){ $t=$pdo->prepare('SELECT * FROM "Documenti" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$t->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"title"=>$tu["Titolo"],"UID"=>"d".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["documents"]=$ta; $docs[$i]["tags"]=explode(",",trim($docs[$i]["Tags"])); if($docs[$i]["tags"]==[""]) $docs[$i]["tags"]=[]; unset($docs[$i]["Tags"]); unset($docs[$i]["Documenti collegati"]); } return $docs; } function listEvents($pdo,$id=null){ if(!$id){ $q=$pdo->prepare('SELECT * FROM "Eventi" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $q->execute(); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } else{ $q=$pdo->prepare('SELECT * FROM "Eventi" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $q->execute([":id"=>$id]); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } $docs=aritenWrap($docs); $t=$pdo->prepare('SELECT * FROM "Feedbacks" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $t->execute(); $fbs=$t->fetchAll(PDO::FETCH_ASSOC); $t=$pdo->prepare('SELECT * FROM "Domande" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $t->execute(); $qts=$t->fetchAll(PDO::FETCH_ASSOC); for($i=0;$i$qts[$j]["Titolo Domanda"],"ID"=>(int)$qts[$j]["ID"],"UID"=>"q".$qts[$j]["ID"]]; } for($j=0;$j$fbs[$j]["Titolo"],"ID"=>(int)$fbs[$j]["ID"],"UID"=>"f".$fbs[$j]["ID"]]; } $ef=explode(",",$docs[$i]["Documenti collegati"]); $ta=[]; foreach($ef as $d){ $t=$pdo->prepare('SELECT * FROM "Documenti" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$t->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"title"=>$tu["Titolo"],"UID"=>"d".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["documents"]=$ta; $docs[$i]["tags"]=explode(",",$docs[$i]["Tags"]); if($docs[$i]["tags"]==[""]) $docs[$i]["tags"]=[]; unset($docs[$i]["Tags"]); unset($docs[$i]["Documenti collegati"]); } return $docs; } function listDomande($pdo,$id=null){ if(!$id){ $q=$pdo->prepare('SELECT * FROM "Domande" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $q->execute(); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } else{ $q=$pdo->prepare('SELECT * FROM "Domande" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $q->execute([":id"=>$id]); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } $docs=aritenWrap($docs); for($i=0;$iprepare('SELECT * FROM "Documenti" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$t->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"title"=>$tu["Titolo"],"UID"=>"d".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["documents"]=$ta; unset($docs[$i]["Documenti collegati"]); $ef=explode(",",$docs[$i]["Eventi collegati"]); $ta=[]; foreach($ef as $d){ $t=$pdo->prepare('SELECT * FROM "Eventi" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$t->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"title"=>$tu["Titolo"],"UID"=>"e".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["events"]=$ta; unset($docs[$i]["Eventi collegati"]); $ef=explode(",",$docs[$i]["Contabilita collegata"]); $ta=[]; foreach($ef as $d){ $t=$pdo->prepare('SELECT * FROM "Contabilita" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$q->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"title"=>$tu["Titolo"],"UID"=>"t".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["transactions"]=$ta; unset($docs[$i]["Contabilita collegata"]); $ef=explode(",",$docs[$i]["Feedback collegati"]); $ta=[]; foreach($ef as $d){ $t=$pdo->prepare('SELECT * FROM "Feedbacks" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$q->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"Titolo"=>$tu["Titolo"],"UID"=>"f".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["feedbacks"]=$ta; unset($docs[$i]["Feedback collegati"]); } return $docs; } function listFeedbacks($pdo,$id=null){ if(!$id){ $q=$pdo->prepare('SELECT * FROM "Feedbacks" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $q->execute(); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } else{ $q=$pdo->prepare('SELECT * FROM "Feedbacks" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $q->execute([":id"=>$id]); $docs=$q->fetchAll(PDO::FETCH_ASSOC); } $docs=aritenWrap($docs); $t=$pdo->prepare('SELECT * FROM "Domande" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") ORDER BY "Data di pubblicazione" DESC'); $t->execute(); $qts=$t->fetchAll(PDO::FETCH_ASSOC); for($i=0;$i$qts[$j]["Titolo Domanda"],"ID"=>(int)$qts[$j]["ID"],"UID"=>"q".$qts[$j]["ID"]]; } $ef=explode(",",$docs[$i]["Eventi collegati"]); $ta=[]; foreach($ef as $d){ $t=$pdo->prepare('SELECT * FROM "Eventi" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$t->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"title"=>$tu["Titolo"],"UID"=>"e".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["events"]=$ta; unset($docs[$i]["Eventi collegati"]); $ef=explode(",",$docs[$i]["Documenti collegati"]); $ta=[]; foreach($ef as $d){ $t=$pdo->prepare('SELECT * FROM "Documenti" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$t->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"title"=>$tu["Titolo"],"UID"=>"d".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["documents"]=$ta; unset($docs[$i]["Documenti collegati"]); $ef=explode(",",$docs[$i]["Contabilita collegata"]); $ta=[]; foreach($ef as $d){ $t=$pdo->prepare('SELECT * FROM "Contabilita" WHERE DATETIME("NOW") >= strftime("%s", "Data di pubblicazione") AND ID=:id ORDER BY "Data di pubblicazione" DESC'); $t->execute([":id"=>$d]); $tu=$t->fetch(PDO::FETCH_ASSOC); if($tu) $ta[]=["ID"=>(int)$d,"title"=>$tu["Titolo"],"UID"=>"t".$d]; } if(count($ta)) $docs[$i]["links"]["to"]["transactions"]=$ta; unset($docs[$i]["Contabilita collegata"]); $docs[$i]["tags"]=explode(",",trim($docs[$i]["Tags"])); if($docs[$i]["tags"]==[""]) $docs[$i]["tags"]=[]; unset($docs[$i]["Tags"]); } return $docs; } function listAll($pdo){ $a=[]; $a["documents"]=listDocs($pdo); $a["transactions"]=listCont($pdo); $a["feedbacks"]=listFeedbacks($pdo); $a["questions"]=listDomande($pdo); $a["events"]=listEvents($pdo); return $a; } function listTagsDetail($pdo){ $tagsList=[]; $heap=listAll($pdo); foreach($heap as $cat=>$list){ foreach($list as $el){ foreach($el["tags"] as $t){ if(!$el["title"]) continue; $tagsList[$t]["usage"]["categories"][$cat][]=["title"=>$el["title"],"ID"=>$el["ID"],"UID"=>$el["UID"]]; $tagsList[$t]["usage"]["timePoints"][dateRectify($el["publishedDate"])][]=["title"=>$el["title"],"ID"=>$el["ID"],"UID"=>$el["UID"]]; } } } return $tagsList; } function listTags($pdo){ $tagsList=[]; $heap=listAll($pdo); foreach($heap as $cat=>$list){ foreach($list as $el){ foreach($el["tags"] as $t){ $tagsList[$t]["usage"]["categories"][$cat]++; $tagsList[$t]["usage"]["timePoints"][$el["publishedDate"]]++; } } } return $tagsList; } function jsonSave($file,$data){ file_put_contents($file,json_encode($data,JSON_PRETTY_PRINT)); } class Reply{ private $enableCache,$cacheDir,$cacheTime,$ap; function __construct($enableCache,$cacheDir,$cacheTime,$ap){ $this->enableCache=$enableCache; $this->cacheDir=$cacheDir; $this->cacheTime=$cacheTime; $this->ap=$ap; } function die($errorName="GENERIC_ERROR",$description="Un errore non identificato si รจ verificato",$httpStatusCode=400){ http_response_code($httpStatusCode); $this->sendJson(["ok"=>false,"errorName"=>$errorName,"description"=>$description],true); } function send($data){ $this->sendJson(["ok"=>true,"data"=>$data]); } function sendJson($data,$isError=false){ $json=json_encode($data,JSON_PRETTY_PRINT); if($this->enableCache&&!$isError){ $contFile =$this->cacheDir."/".str_replace("/","-",$this->ap); $data["cache"]["last"]=date("d-m-Y H:i:s"); jsonSave($contFile,$data); } header("Content-type: application/json"); header("Content-Length: ".strlen($json)); echo $json; exit; } } function cachedReplier($enableCache,$cacheDir,$cacheTime,$ap){ if(!$enableCache) return false; $contFile =$cacheDir."/".str_replace("/","-",$ap); if(!file_exists($contFile)) return false; $fc=file_get_contents($contFile); $fcc=json_decode($fc,true); if( strtotime($fcc["cache"]["last"])< (int) file_get_contents($cacheDir."/lastDbUpdate") ){ return false; } header("Content-type: application/json"); header("Content-Length: ".strlen($fc)); echo $fc; exit; }