db = $pdo; $this->vocabolario = self::defaultVocabolario(); $this->ente = $_SESSION["ente"]->getInfo(); $this->tipologia = $tipologia; $this->riferimento = $riferimento; $this->idEditor = "editorStandard"; $this->exportFormat = "portrait"; $this->exportSize = "A4"; } else { return false; } } public static function defaultVocabolario() { return [ "linkNormeTecniche" => $_SESSION["config"]["link_sito"]."/norme_tecniche.php", "linkRegistrazione" => $_SESSION["config"]["link_sito"]."/register.php", "ente" => $_SESSION["ente"]->getInfo() ]; } public function getIDS() { $return = ["index"=>0,"content"=>0]; $index = $this->db->go("SELECT codice FROM b_editor WHERE tipologia = :tipologia AND riferimento = :riferimento AND codice_ente = :codice_ente AND attivo = 'S' ORDER BY codice DESC LIMIT 0,1",[":tipologia"=>$this->tipologia,":riferimento"=>$this->riferimento,":codice_ente"=>$this->ente["codice"]])->fetch(PDO::FETCH_COLUMN); if (!empty($index)) { $content = $this->db->go("SELECT codice FROM b_editor_content WHERE codice_riferimento = :index",[":index"=>$index])->fetch(PDO::FETCH_COLUMN); if (!empty($content)) { $return = ["index"=>$index,"content"=>$content]; } } return $return; } public function printVersionButton() { if (count($this->versions()) > 1) { include(__DIR__."/views/versionButton.php"); } } public function getContent($codice_riferimento) { $return = ""; $content = $this->db->go("SELECT content FROM b_editor_content WHERE codice_riferimento = :codice",[":codice"=>$codice_riferimento])->fetch(PDO::FETCH_COLUMN) ?? null; if (isset($content)) { $return = simple_decrypt($content,hash("sha256","editorManager".$codice_riferimento)); } return $return; } public function versions($number=NULL) { $where = ""; if ($number===0) $where = " AND attivo = 'S' "; $sql = "SELECT * FROM b_editor WHERE tipologia = :tipologia AND riferimento = :riferimento AND codice_ente = :codice_ente {$where} ORDER BY codice DESC"; $return = $this->db->go($sql,[":tipologia"=>$this->tipologia,":riferimento"=>$this->riferimento,":codice_ente"=>$this->ente["codice"]])->fetchAll(PDO::FETCH_ASSOC); if ($number === NULL) { return $return; } else if (!empty($return[$number])) { $return[$number]["content"] = $this->getContent($return[$number]["codice"]); return $return[$number]; } return false; } public static function fixValue($value) { $return = $value; if (!is_array($value)) { if (is_numeric($value)) { $explode = explode(".",$value); if (count($explode) > 1) { $return = number_format($value,2,",","."); } } else { if (preg_match("/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/", $value)) { $return = mysql2datetime($value); } } } return $return; } public static function replacePlaceholder($content,$vocabolario) { if (!empty($vocabolario) && !empty($content)) { $replace = []; foreach($vocabolario AS $key => $values) { if (is_array($values)) { foreach($values AS $valueKey => $value) { $value = static::fixValue($value); $replace["##--{$key}-{$valueKey}--##"] = $value; } } else { $values = static::fixValue($values); $replace["##--{$key}--##"] = $values; } } $content = strtr($content,$replace); } return $content; } public function getModello() { $sql = "SELECT content FROM b_modelli WHERE attivo = 'S' AND soft_delete = 'N' AND tipologia = :tipologia AND codice_ente = :codice_ente"; $content = $this->db->go($sql,[":tipologia"=>$this->tipologia,":codice_ente"=>$this->ente["codice"]])->fetch(PDO::FETCH_ASSOC); $return = false; if (!empty($content)) { $return = $content["content"]; } else { global $pdo; $content = $this->db->go($sql,[":tipologia"=>$this->tipologia,":codice_ente"=>0])->fetch(PDO::FETCH_ASSOC); if (!empty($content)) { $return = $content["content"]; } } if (!empty($return)) { if (!empty($this->ente["logo"])) { $logo = $_SESSION["config"]["link_sito"]."/documenti/{$this->ente["logo"]}"; $ente["logo"] = "\"".__("logo")."\""; } $return = $this->replacePlaceholder($return,$this->vocabolario); } return $return; } public function latest() { $content = $this->versions(0); if (!empty($content)) { $content = $content["content"]; } return $content; } public function edit($version=0) { $content = $this->versions($version)["content"] ?? null; if (!isset($content)) { $content = $this->getModello(); $content = self::replacePlaceholder($content,$this->vocabolario); } self::printEditor($content,$this->idEditor,$this->exportFormat,$this->exportSize); } public function delete() { $return = false; $ids = $this->getIDS(); if (!empty($ids["index"])) { $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "b_editor"; $salva->operazione = "UPDATE"; $salva->oggetto = ["codice"=>$ids["index"],"attivo"=>"N"]; $return = $salva->save(); } return $return; } public function save($content,$bozza = "N") { $return = false; if (!empty($content)) { $ids = $this->getIDS(); $object = []; $object["codice"] = $ids["index"]; $object["codice_ente"] = $this->ente["codice"]; $object["tipologia"] = $this->tipologia; $object["riferimento"] = $this->riferimento; $object["bozza"] = $bozza; $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "b_editor"; $salva->operazione = (!empty($ids["index"])) ? "UPDATE":"INSERT"; $salva->oggetto = $object; $return = $salva->save(); if (!empty($return)) { $object = []; $object["codice"] = $ids["content"]; $object["codice_riferimento"] = $return; $object["content"] = simple_encrypt($content,hash("sha256","editorManager".$return)); $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "b_editor_content"; $salva->operazione = (!empty($ids["content"])) ? "UPDATE":"INSERT"; $salva->oggetto = $object; $salva->save(); } } return $return; } public static function printEditor($content="",$idEditor="editorStandard",$exportFormat = "portrait",$exportSize = "A4") { include(__DIR__."/form.php"); } } ?>