", $text); $text = str_replace("'", "’", $text); $text = mres($text); return $text; } /** * Funzione di sostituzione a mysql_real_escape_string()/mysql_escape_string(). * * @param string $value * @return mixed */ function mres($value) { $search = array("\\","\x00","\n","\r","'",'"',"\x1a"); $replace = array("\\\\","\\0","\\n","\\r","\'",'\"',"\\Z"); return str_replace($search, $replace, $value); } /** * Rimuove eventuali carattari speciali dalla stringa. * * @param unknown $text * @return mixed */ function clean($string) { $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens. $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars. return preg_replace('/-+/', ' ', $string); // Replaces multiple hyphens with single one. } /** * Trasforma un testo in un nome di id valido per l'html (sostituisce gli spazi). * * @param unknown $text * @return mixed */ function makeid($text) { $text = strtolower($text); $text = str_replace(" ", "_", $text); return $text; } /** * Sostituisce ", < e > per evitare hacking del database e risolvere vari problemi. * * @param unknown $text * @return string */ function save($text) { $text = htmlentities($text, ENT_QUOTES, "UTF-8"); return $text; } /** * Legge il valore di un'impostazione dalla tabella zz_impostazioni. * Se descrizione = 1 e il tipo è 'query=' mi restituisce il valore del campo descrizione della query. * * @param unknown $name * @param string $sezione * @param string $descrizione * @return mixed */ function get_var($name, $sezione = "", $descrizione = "") { global $dbo; if ($sezione == '') $rs = $dbo->fetchArray("SELECT valore,tipo FROM zz_impostazioni WHERE nome=\"$name\""); else $rs = $dbo->fetchArray("SELECT valore,tipo FROM zz_impostazioni WHERE nome=\"$name\" AND sezione=\"$sezione\" "); if (($descrizione == '') or ($descrizione == 0)) { return $rs[0]['valore']; } else { if (strpos($rs[0]['tipo'], 'query=') !== false) { $q2 = str_replace('query=', '', $rs[0]['tipo']); $rs2 = $dbo->fetchArray($q2); if (sizeof($rs2) > 0) { return $rs2[0]['descrizione']; } else { return $rs2[0]['valore']; } } else { return $rs2[0]['valore']; } } } /** * Sostituisce la sequenza " con " (da HTMLEntities a visualizzabile) * * @param unknown $text */ function read($text) { return str_replace(""", "\"", $text); } /** * Taglia un testo ($str) al numero di caratteri stabilito ($length), fermandosi però al primo spazio successivo * per non troncare una parola se specificato $at_next_space=1 * * @param unknown $str * @param unknown $length * @param number $at_next_space * @return string|unknown */ function cut_text($str, $length, $at_next_space = 0) { if (strlen($str) > $length) { $s = substr($str, 0, $length); if ($at_next_space) { for($i = $length; $i < strlen($str); $i ++) { $carattere = substr($str, $i, 1); if ($carattere == " " || $carattere == ",") return $s . "..."; else $s .= $carattere; } } else $s .= "..."; return $s; } else return $str; } /** * Esegue il redirect. * * @param unknown $url * @param string $type * @return boolean */ function redirect($url, $type = "php") { switch ($type) { case "php" : header("Location: $url"); break; case "js" : echo ""; } return true; } /** * Crea il formato della data modificanto il campo di input (JQuery Datepicker). * * @param unknown $data */ function saveDate($data) { if ($data == '') { return '0000-00-00'; } else { $date = explode('/', $data); $date = $date[1] . '/' . $date[0] . '/' . $date[2]; $date = strtotime($date); return date('Y-m-d', $date); } } /** * Crea il formato della data leggendo dal database (?) e modificanto il campo di input (JQuery Datepicker). * * @param unknown $data */ function readDate($data) { $date = $data; if ($date != '') { $date = explode('-', $date); $date = $date[2] . '/' . $date[1] . '/' . $date[0]; } return $date; } /** * Carica gli script JavaScript inclusi nell'array indicato. * * @param unknown $jscript_modules_array */ function loadJscriptModules($jscript_modules_array) { foreach ($jscript_modules_array as $jsname) { echo "\n"; } } /** * Carica i file di stile CSS inclusi nell'array indicato. * * @param unknown $jscript_modules_array */ function loadCSSModules($css_modules_array) { foreach ($css_modules_array as $css) { if (is_array($css)) echo "\n"; else echo "\n"; } } /** * Legge la versione del software in uso * * @param string $file * @return mixed */ function getVersion($file = 'VERSION') { global $docroot; $version = file_get_contents($docroot . "/" . $file); $version = str_replace("\r\n", '', $version); $version = str_replace("\n", '', $version); return $version; } /** * Legge la revisione del software in uso * * @param string $file * @return mixed */ function getRevision($file = 'REVISION') { global $docroot; $revision = file_get_contents($docroot . "/" . $file); $revision = str_replace("\r\n", '', $revision); $revision = str_replace("\n", '', $revision); return $revision; } /** * Legge l'ora nel formato hh:mm * * @param unknown $time * @return string */ function readTime($time) { $vtime = explode(':', $time); $hour = $vtime[0]; $minutes = $vtime[1]; $seconds = $vtime[2]; return "$hour:$minutes"; } /** * Salva l'ora controllando che non vi siano inseriti contenuti inappropriati. * * @param unknown $time * @return mixed */ function saveTime($time) { // scrive solo l'ora (16, oppure 9) $result = $time; if (preg_match("/^([0-9]{1,2})$/", $time)) $result = "$time:00:00"; $result = str_replace(',', ':', $result); $result = str_replace('.', ':', $result); return $result; } /** * Verifica e corregge il nome di un file. * * @param unknown $filename * @return mixed */ function sanitizeFilename($filename) { $filename = str_replace(" ", "-", $filename); $filename = preg_replace("/[^A-Za-z0-9_\-\.?!]/", "", $filename); return $filename; } /** * Rimuove ricorsivamente una directory. * * @param unknown $path * @return boolean */ function deltree($path) { if (is_dir($path)) { if (version_compare(PHP_VERSION, '5.0.0') < 0) { $entries = array(); if ($handle = opendir($path)) { while ( false !== ($file = readdir($handle)) ) $entries[] = $file; closedir($handle); } } else { $entries = scandir($path); if ($entries === false) $entries = array(); // just in case scandir fail... } foreach ($entries as $entry) { if ($entry != '.' && $entry != '..') { deltree($path . '/' . $entry); } } return rmdir($path); } else { return unlink($path); } } /** * Copy a file, or recursively copy a folder and its contents * * @author Aidan Lister * @version 1.0.1 * @link http://aidanlister.com/repos/v/function.copyr.php * @param string $source * Source path * @param string $dest * Destination path * @param string $exclude * Path to exclude * @return bool Returns TRUE on success, FALSE on failure */ function copyr($source, $dest, $exclude) { if (! is_array($exclude)) $exclude = array($exclude); // Simple copy for a file if (is_file($source) && (! in_array($source, $exclude))) {return copy($source, $dest);} // Make destination directory if (! is_dir($dest)) { mkdir($dest); } // If the source is a symlink if (is_link($source)) { $link_dest = readlink($source); return symlink($link_dest, $dest); } // Loop through the folder $dir = dir($source); while ( false !== $entry = $dir->read() ) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } // Deep copy directories if ($dest !== $source . "/" . $entry) { $go = true; foreach ($exclude as $excluded) { if (strstr($source . "/" . $entry . "/", $excluded)) $go = false; } if ($go) copyr($source . "/" . $entry, $dest . "/" . $entry, $exclude); } } // Clean up $dir->close(); return true; } /** * Crea un file zip comprimendo ricorsivamente tutte le sottocartelle a partire da una cartella specificata * * @link http://stackoverflow.com/questions/1334613/how-to-recursively-zip-a-directory-in-php * @param unknown $source * @param unknown $destination */ function create_zip($source, $destination) { if (! extension_loaded('zip') || ! file_exists($source)) { array_push($_SESSION['errors'], "Estensione zip non supportata!"); return false; } $zip = new ZipArchive(); if ($zip->open($destination, ZIPARCHIVE::CREATE)) { $source = str_replace(array('\\','/'), DIRECTORY_SEPARATOR, realpath($source)); if (is_dir($source) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = str_replace(array('\\','/'), DIRECTORY_SEPARATOR, realpath($file)); $file = str_replace($source . DIRECTORY_SEPARATOR, '', $file); if (is_dir($file) === true) { $zip->addEmptyDir($file); } else if (is_file($file) === true) { $zip->addFromString($file, file_get_contents($file)); } } } else if (is_file($source) === true) { $zip->addFromString(basename($source), file_get_contents($source)); } $zip->close(); return true; } else { array_push($_SESSION['errors'], "Errore durante la creazione dell'archivio!"); return false; } } /** * Individua la differenza tra le date indicate. * $interval può essere: * yyyy - Number of full years * q - Number of full quarters * m - Number of full months * y - Difference between day numbers * (eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The datediff is "-32".) * d - Number of full days * w - Number of full weekdays * ww - Number of full weeks * h - Number of full hours * n - Number of full minutes * s - Number of full seconds (default) * * @param unknown $interval * @param unknown $datefrom * @param unknown $dateto * @param string $using_timestamps */ function datediff($interval, $datefrom, $dateto, $using_timestamps = false) { if (! $using_timestamps) { $datefrom = strtotime($datefrom, 0); $dateto = strtotime($dateto, 0); } $difference = $dateto - $datefrom; // Difference in seconds switch ($interval) { case 'yyyy' : // Number of full years $years_difference = floor($difference / 31536000); if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom) + $years_difference) > $dateto) { $years_difference --; } if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto) - ($years_difference + 1)) > $datefrom) { $years_difference ++; } $datediff = $years_difference; break; case "q" : // Number of full quarters $quarters_difference = floor($difference / 8035200); while ( mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom) + ($quarters_difference * 3), date("j", $dateto), date("Y", $datefrom)) < $dateto ) { $months_difference ++; } $quarters_difference --; $datediff = $quarters_difference; break; case "m" : // Number of full months $months_difference = floor($difference / 2678400); while ( mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom) + ($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto ) { $months_difference ++; } $months_difference --; $datediff = $months_difference; break; case 'y' : // Difference between day numbers $datediff = date("z", $dateto) - date("z", $datefrom); break; case "d" : // Number of full days $datediff = floor($difference / 86400); break; case "w" : // Number of full weekdays $days_difference = floor($difference / 86400); $weeks_difference = floor($days_difference / 7); // Complete weeks $first_day = date("w", $datefrom); $days_remainder = floor($days_difference % 7); $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder? if ($odd_days > 7) { // Sunday $days_remainder --; } if ($odd_days > 6) { // Saturday $days_remainder --; } $datediff = ($weeks_difference * 5) + $days_remainder; break; case "ww" : // Number of full weeks $datediff = floor($difference / 604800); break; case "h" : // Number of full hours $datediff = floor($difference / 3600); break; case "n" : // Number of full minutes $datediff = floor($difference / 60); break; default : // Number of full seconds (default) $datediff = $difference; break; } return $datediff; } /** * Controllo dei file zip e gestione errori * * @param unknown $zip_file * @return string|boolean */ function checkZip($zip_file) { $errno = zip_open($zip_file); zip_close($errno); if (! is_resource($errno)) { // using constant name as a string to make this function PHP4 compatible $zipFileFunctionsErrors = array('ZIPARCHIVE::ER_MULTIDISK' => 'archivi multi-disco non supportati','ZIPARCHIVE::ER_RENAME' => 'ridenominazione del file temporaneo fallita','ZIPARCHIVE::ER_CLOSE' => 'impossibile chiudere il file zip','ZIPARCHIVE::ER_SEEK' => 'errore durante la ricerca dei file','ZIPARCHIVE::ER_READ' => 'errore di lettura','ZIPARCHIVE::ER_WRITE' => 'errore di scrittura','ZIPARCHIVE::ER_CRC' => 'errore CRC','ZIPARCHIVE::ER_ZIPCLOSED' => 'l’archivio zip é stato chiuso','ZIPARCHIVE::ER_NOENT' => 'file non trovato','ZIPARCHIVE::ER_EXISTS' => 'il file esiste già','ZIPARCHIVE::ER_OPEN' => 'impossibile aprire il file','ZIPARCHIVE::ER_TMPOPEN' => 'impossibile creare il file temporaneo','ZIPARCHIVE::ER_ZLIB' => 'errore nella libreria Zlib','ZIPARCHIVE::ER_MEMORY' => 'fallimento nell’allocare memoria','ZIPARCHIVE::ER_CHANGED' => 'voce modificata','ZIPARCHIVE::ER_COMPNOTSUPP' => 'metodo di compressione non supportato','ZIPARCHIVE::ER_EOF' => 'fine del file non prevista','ZIPARCHIVE::ER_INVAL' => 'argomento non valido','ZIPARCHIVE::ER_NOZIP' => 'file zip non valido','ZIPARCHIVE::ER_INTERNAL' => 'errore interno','ZIPARCHIVE::ER_INCONS' => 'archivio zip inconsistente','ZIPARCHIVE::ER_REMOVE' => 'impossibile rimuovere la voce','ZIPARCHIVE::ER_DELETED' => 'voce eliminata'); foreach ($zipFileFunctionsErrors as $constName => $errorMessage) { if (defined($constName) and constant($constName) === $errno) {return "Errore: $errorMessage";} } } else return true; } /** * Funzione per fare il dump del database * * @link http://davidwalsh.name/backup-mysql-database-php * @param string $tables * @return string */ function backup_tables($tables = '*') { global $dbo; if ($tables == '*') { $tables = array(); $result = $dbo->fetchRows("SHOW TABLES"); if ($result != null) { foreach ($result as $res) $tables[] = $res[0]; } } else { $tables = is_array($tables) ? $tables : explode(',', $tables); } // Eliminazione di tutte le tabelle foreach ($tables as $table) { $return .= "delete from `$table`;\n"; } // Ricreazione della struttura di ogni tabella e ri-popolazione database foreach ($tables as $table) { $result = $dbo->fetchRows('SELECT * FROM ' . $table); $num_fields = count($result[0]); $row2 = $dbo->fetchArray('SHOW CREATE TABLE ' . $table); $return .= "\n" . $row2[1] . ";\n"; $num_record="1"; // for($i = 0; $i < sizeof($result); $i ++) { for($i = 0; $i < $num_record; $i ++) { if ($result != false) { foreach ($result as $row) { $return .= 'INSERT INTO ' . $table . ' VALUES('; for($j = 0; $j < $num_fields; $j ++) { $row[$j] = addslashes($row[$j]); $row[$j] = str_replace("\r\n", "\\n", $row[$j]); $row[$j] = str_replace("\n", "\\n", $row[$j]); if (isset($row[$j])) { $return .= '"' . $row[$j] . '"'; } else { $return .= '""'; } if ($j < ($num_fields - 1)) { $return .= ','; } } $return .= ");\n"; } } } $return .= "\n"; } return $return; // save file // $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); // fwrite($handle,$return); // fclose($handle); } /** * Scurisce un determinato colore. * * @param unknown $color * @param number $dif * @return string */ function ColorDarken($color, $dif = 20) { $color = str_replace('#', '', $color); if (strlen($color) != 6) {return '000000';} $rgb = ''; for($x = 0; $x < 3; $x ++) { $c = hexdec(substr($color, (2 * $x), 2)) - $dif; $c = ($c < 0) ? 0 : dechex($c); $rgb .= (strlen($c) < 2) ? '0' . $c : $c; } return '#' . $rgb; } /** * Recupera informazioni sistema operativo dell'utente. * * @return string */ function GetSistemaOperativo() { $os = array('Windows NT 6.1' => 'Windows 7','Windows NT 6.0' => 'Windows Vista','Windows NT 5.1' => 'Windows XP','Windows NT 5.0' => 'Windows 2000','Windows NT 4.90' => 'Windows ME','Win95' => 'Windows 95','Win98' => 'Windows 98','Windows NT 5.2' => 'Windows NET','WinNT4.0' => 'Windows NT','Mac' => 'Mac','PPC' => 'Mac','Linux' => 'Linux','FreeBSD' => 'FreeBSD','SunOS' => 'SunOS','Irix' => 'Irix','BeOS' => 'BeOS','OS/2' => 'OS/2','AIX' => 'AIX'); foreach ($os as $chiave => $valore) { if (strpos($_SERVER['HTTP_USER_AGENT'], $chiave)) {return $valore;} } return "Altro"; } /** * Legge una stringa presumibilmente codificata (tipo "8D001") e, se possibile, restituisce il codice successivo ("8D002") * * @param $str string * Codice di partenza da incrementare * @param $qty int * Unità da aggiungere alla parte numerica del codice (di default incrementa di 1). * @param $mask string * Specifica i caratteri da sostituire con numeri nel caso di generazione di codici complessi (esempio: se un codice attuale fosse 56/D e volessi calcolare il successivo (57/D), dovrei usare una maschera. La maschera in questo caso potrebbe essere ##/D. In questo modo so che i caratteri ## vanno sostituiti da numeri e il totale di caratteri sarà 2. Quindi il primo codice non sarebbe 1/D, ma 01/D). */ function get_next_code($str, $qty = 1, $mask = '') { // Se è il primo codice che sto inserendo sostituisco gli zeri al carattere jolly # if ($str == '') $str = str_replace("#", "0", $mask); // Se non uso una maschera, estraggo l'ultima parte numerica a destra della stringa e la incremento if ($mask == '') { preg_match("/(.*?)([\d]*$)/", $str, $m); $first_part = $m[1]; $numeric_part = $m[2]; // Se non c'è una parte numerica ritorno stringa vuota if ($numeric_part == '') return ''; else { $pad_length = strlen($numeric_part); $second_part = str_pad(intval($numeric_part) + $qty, $pad_length, "0", STR_PAD_LEFT); return $first_part . $second_part; } } // Utilizzo della maschera else { // Calcolo prima parte (se c'è) $pos1 = strpos($mask, "#"); $first_part = substr($str, 0, $pos1); // Calcolo terza parte (se c'è) $pos2 = strlen($str) - strpos(strrev($mask), "#"); $third_part = substr($str, $pos2, strlen($mask)); // Calcolo parte numerica $numeric_part = substr($str, $pos1, $pos2); $pad_length = intval(strlen($numeric_part)); $first_part_length = intval(strlen($first_part)); $third_part_length = intval(strlen($third_part)); $numeric_part = str_pad(intval($numeric_part) + intval($qty), $pad_length, "0", STR_PAD_LEFT); // $numeric_part = str_pad( intval($numeric_part)+intval($qty), ( $pad_length - $third_part_length ), "0", STR_PAD_LEFT ); return $first_part . $numeric_part . $third_part; } } /** * Restituisce l'ultima directory prima della pagina php richiamata * * @param string $url * @return string */ function getLastPathSegment($url) { $path = parse_url($url, PHP_URL_PATH); // to get the path from a whole URL $pathTrimmed = trim($path, '/'); // normalise with no leading or trailing slash $pathTokens = explode('/', $pathTrimmed); // get segments delimited by a slash if (substr($path, - 1) !== '/') { array_pop($pathTokens); } return end($pathTokens); // get the last segment } /** * Legge i permessi del modulo selezionato e dell'utente corrente e li ritorna come stringa. * * @param string $nome_modulo * @return string */ function get_permessi($nome_modulo) { global $dbo; $query = "SELECT *, (SELECT idanagrafica FROM zz_utenti WHERE idutente='" . $_SESSION['idutente'] . "') AS idanagrafica FROM zz_permessi WHERE idgruppo=(SELECT idgruppo FROM zz_utenti WHERE idutente='" . $_SESSION['idutente'] . "') AND idmodule=(SELECT id FROM zz_modules WHERE name='" . $nome_modulo . "')"; $rs = $dbo->fetchArray($query); if (sizeof($rs) <= 0) { // Ultimo tentativo: se non ci sono i permessi ma sono l'amministratore posso comunque leggere il modulo if (isAdminAutenticated()) { return 'rw'; } else { return '-'; } } else { if ($rs[0]['permessi'] == '-') { return '-'; } else if ($rs[0]['permessi'] == 'r') { return 'r'; } else if ($rs[0]['permessi'] == 'rw') {return 'rw';} } } /** * Esegue le operazioni di accesso e di log a gest366. * * @param string $idutente * @param string $username * @param string $password * @param string $autenticato * @param string $abilitato * @param string $gruppo */ function logaccessi($idutente, $username, $password, $autenticato, $abilitato, $gruppo) { global $dbo; $password = "*****"; if ($autenticato <= 0) { $stato = 0; } else { $stato = 1; if ($abilitato == 0) { $stato = 2; } if ($gruppo != 'Amministratori') { $q = "SELECT id, module_dir, options FROM zz_modules WHERE parent='0' AND enabled='1' AND id IN (SELECT idmodule FROM zz_permessi WHERE idgruppo=(SELECT id FROM zz_gruppi WHERE nome='" . $gruppo . "') AND permessi IN ('r', 'rw') ) AND type='menu' ORDER BY `order` ASC"; $rs = $dbo->fetchArray($q); if (sizeof($rs) <= 0) $stato = 3; } } $dbo->query("INSERT INTO zz_log( idutente, username, password, timestamp, ip, stato ) VALUES( \"" . $idutente . "\", \"" . $username . "\", \"" . $password . "\", NOW(), \"" . $_SERVER['REMOTE_ADDR'] . "\", \"" . $stato . "\" )"); } /** * Restituisce l'estensione del file * * @param string $string */ function estensione_del_file($string) { $f = pathinfo($string); return $f['extension']; } /** * Se il server non supporta "parse_ini_string" lo simulo */ if (! function_exists('parse_ini_string')) { /** * Simulazione di "parse_ini_string". * * @param unknown $ini * @param string $process_sections * @param unknown $scanner_mode */ function parse_ini_string($ini, $process_sections = false, $scanner_mode = null) { // Generate a temporary file. $tempname = tempnam('/tmp', 'ini'); $fp = fopen($tempname, 'w'); fwrite($fp, $ini); $ini = parse_ini_file($tempname, ! empty($process_sections)); fclose($fp); @unlink($tempname); return $ini; } } /** * Forza una string a essere un numero decimale (sostituisce , con .) * * @param unknown $str * @return number */ function force_decimal($str) { $str = str_replace(",", ".", $str); return floatval($str); } /** * * @param unknown $datetime * @return string */ function saveDateTime($datetime) { $data = substr($datetime, 0, - 6); $date = explode('/', $data); $date = $date[1] . '/' . $date[0] . '/' . $date[2]; $date = strtotime($date); $date = date('Y-m-d', $date); $time = substr($datetime, - 5); $result = $time; $result = str_replace(',', ':', $result); $result = str_replace('.', ':', $result); $time = date('H:i', strtotime($result)); $datetime = $date . " " . $time; return $datetime; } /** * * @param unknown $datetime * @return string */ function readDateTime($datetime) { $data = substr($datetime, 0, - 9); $date = explode('-', $data); $date = $date[2] . '/' . $date[1] . '/' . $date[0]; $time = substr($datetime, - 8); $result = $time; $result = str_replace(',', ':', $result); $result = str_replace('.', ':', $result); $time = date('H:i', strtotime($result)); $datetime = $date . " " . $time; return $datetime; } /** * Converte una stringa da un formato ad un altro * "2010-01-15 08:30:00" => "15/01/2010 08:30" (con $view='') * "2010-01-15 08:30:00" => "15/01/2010" (con $view='date') * "2010-01-15 08:30:00" => "08:30" (con $view='time') * * @param unknown $datetime * @param unknown $view * @return string */ function readDateTimePrint($datetime, $view) { $data = substr($datetime, 0, - 9); $date = explode('-', $data); $date = $date[2] . '/' . $date[1] . '/' . $date[0]; $time = substr($datetime, - 8); $result = $time; $result = str_replace(',', ':', $result); $result = str_replace('.', ':', $result); $time = date('H:i', strtotime($result)); $datetime = $date . " " . $time; if ($view == "date") return $date; if ($view == "time") return $time; } /** * Verifica che il nome del file non sia già usato nella cartella inserita, nel qual caso aggiungo un suffisso * * @param unknown $filename * @param unknown $dir * @return string */ function unique_filename($filename, $dir) { $f = pathinfo($filename); $suffix = 1; while ( file_exists($dir . "/" . $filename) ) { $filename = $f['filename'] . "_" . $suffix . "." . $f['extension']; $suffix ++; } return $filename; } /** * Crea le thumbnails di $filename da dentro $dir e le salva in $dir * * @param unknown $tmp * @param unknown $filename * @param unknown $dir * @return boolean */ function create_thumbnails($tmp, $filename, $dir) { $f = pathinfo($filename); $name = $f['filename']; $ext = strtolower($f['extension']); $photo = new Photo(array("name" => $name . "_thumb100." . $ext,"tmp_name" => $tmp)); $photo->doThumb(100, $dir . "/"); $photo = new Photo(array("name" => $name . "_thumb250." . $ext,"tmp_name" => $tmp)); $photo->doThumb(250, $dir . "/"); $photo = new Photo(array("name" => $name . "." . $ext,"tmp_name" => $tmp)); $photo->doResize(600, $dir . "/"); return true; } /** * Ottiene l'indirizzo IP del client. * * @return string|unknown */ function get_client_ip() { $ipaddress = ''; if ($_SERVER['HTTP_CLIENT_IP']) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if ($_SERVER['HTTP_X_FORWARDED_FOR']) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if ($_SERVER['HTTP_X_FORWARDED']) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if ($_SERVER['HTTP_FORWARDED_FOR']) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if ($_SERVER['HTTP_FORWARDED']) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if ($_SERVER['REMOTE_ADDR']) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; } /** * Esegue il backup dell'intero database. * * @return boolean */ function do_backup() { global $docroot; global $backup_dir; if (extension_loaded("zip")) { $tmp_backup_dir = "/tmp/"; } else { $tmp_backup_dir = "/ges360 backup " . date("Y-m-d") . " " . date("H_i_s") . "/"; } $tmp_backup_dir = "/Backup del " . date("Y-m-d") . " " . date("H_i_s") . "/"; // Creazione cartella temporanea if (! file_exists($backup_dir . $tmp_backup_dir)) { if (@mkdir($backup_dir . $tmp_backup_dir)) { $do_backup = true; } else { $do_backup = false; } } else { $do_backup = true; } if ($do_backup) { $database_file = "bk_database.sql"; $backup_file = "ges360_backup " . date("Y-m-d") . " " . date("H_i_s") . ".zip"; // Dump database $dump = "SET foreign_key_checks = 0;\n"; $dump .= backup_tables(); file_put_contents($backup_dir . $tmp_backup_dir . $database_file, $dump); // Copia file di gest366 (escludendo la cartella di backup) copyr($docroot, $backup_dir . $tmp_backup_dir, array($backup_dir,"config.inc.php","mysql.log","setup.log")); // Creazione zip } return $do_backup; } /** * Inverte il colore inserito. * * @link http://www.splitbrain.org/blog/2008-09/18-calculating_color_contrast_with_php * @param unknown $start_colour * @return string */ function color_inverse($start_colour) { $R1 = hexdec(substr($start_colour, 1, 2)); $G1 = hexdec(substr($start_colour, 3, 2)); $B1 = hexdec(substr($start_colour, 5, 2)); $R2 = 255; $G2 = 255; $B2 = 255; $L1 = 0.2126 * pow($R1 / 255, 2.2) + 0.7152 * pow($G1 / 255, 2.2) + 0.0722 * pow($B1 / 255, 2.2); $L2 = 0.2126 * pow($R2 / 255, 2.2) + 0.7152 * pow($G2 / 255, 2.2) + 0.0722 * pow($B2 / 255, 2.2); if ($L1 > $L2) { $lum = ($L1 + 0.05) / ($L2 + 0.05); } else { $lum = ($L2 + 0.05) / ($L1 + 0.05); } if ($lum >= 2.5) { return "#fff"; } else { return "#000"; } } /** * Dato un id, restituisce il nome del modulo relativo. * * @param unknown $filename * @param unknown $dir * @return string */ function get_module_name_by_id($id_module) { global $dbo; $rs = $dbo->fetchArray("SELECT name FROM zz_modules WHERE id = " . $id_module . " "); // Se c'è un modulo con questo id if (sizeof($rs) == 1) { $nome_modulo = $rs[0]['name']; return $nome_modulo; } else { array_push($_SESSION['errors'], "Controlla id del modulo!"); return false; } } /** * Dato un elemento pricipale, costruisce tutti i sottomenu. * * @param string $filename * @param string $dir * @param string $dir * @return string */ function sidebarMenu($element, $permessi, $actual = "") { global $dbo; global $rootdir; $options = ($element['options2'] != "") ? $element['options2'] : $element['options']; $link = ($options != "" && $options != "menu") ? $rootdir . "/controller.php?id_module=" . $element['id'] : "javascript:;"; $name = ($element['name2'] != '') ? $element['name2'] : $element['name']; $target = ($element['new'] == 1) ? "_blank" : "_self"; $show = false; foreach ($permessi as $key => $value) { if ($value[0] == $element["id"]) $show = true; } $active = ($actual == $element['name']); $submenus = $dbo->fetchArray("SELECT * FROM zz_modules WHERE enabled='1' AND parent='" . $element['id'] . "' AND `type`='menu' ORDER BY `order` ASC"); if ($submenus != null && count($submenus) != 0) { $temp = ""; foreach ($submenus as $submenu) { $r = sidebarMenu($submenu, $permessi, $actual); $active = $active || $r[1]; if (! $show && $r[2]) $link = "javascript:;"; $show = $show || $r[2]; $temp .= $r[0]; } } $result = ""; if ($show || isAdminAutenticated()) { $result .= '
  • ' . $name . ''; if ($submenus != null && count($submenus) != 0) { $result .= ' '; } else $result .= ' '; $result .= '
  • '; } return array($result,$active,$show); } /** * Traduce il template semplificato in componenti HTML. */ function translateTemplate() { global $id_module; global $dbo; $template = ob_get_clean(); preg_match_all('/\{\[(.+?)\]\}/i', $template, $m); for($i = 0; $i < sizeof($m[0]); $i ++) { $template = str_replace($m[0][$i], build_html_element($m[0][$i]), $template); } if (isset($id_module)) $template = str_replace('$id_module$', $id_module, $template); if (isset($dbo)) $dbo->close(); echo $template; } /** * Controlla se è stato effettuato il login. */ function isUserAutenticated() { return isset($_SESSION["idutente"]) && $_SESSION["idutente"] != ""; } /** * Controlla se è stato effettuato il login come amministratore. */ function isAdminAutenticated() { return isUserAutenticated() && isset($_SESSION["is_admin"]) && $_SESSION["is_admin"] == 1; } /** * Esegue il logout se l'utente è autenticato. */ function logout() { if (isUserAutenticated()) { session_unset(); session_destroy(); setcookie("PHPSESSID", "", time() - 3600, "/"); // delete session cookie session_start(); session_regenerate_id(); $_SESSION['infos'] = array(); array_push($_SESSION['infos'], _("Arrivederci!")); } } /** * restituisce un'insieme di array comprendenti le informazioni per la costruzione della query del modulo indicato. */ function getQuery($id_module) { global $dbo; $fields = array(); $summable = array(); $search_inside = array(); $search = array(); $slow = array(); $order_by = array(); $select = "*"; $allineamento=array(); $grassetto=array(); $a_capo=array(); $module = $dbo->fetchArray("SELECT * FROM zz_modules WHERE id=".prepare($id_module))[0]; $module_query = ($module['options2'] != "") ? $module['options2'] : $module['options']; if(strpos($module_query, "|fields|") !== false){ $datas = $dbo->fetchArray("SELECT * FROM `zz_viste` WHERE `id_module`=" . prepare($id_module) . " AND `id` IN (SELECT `id_vista` FROM `zz_gruppi_viste` WHERE `id_gruppo`=(SELECT `idgruppo` FROM `zz_utenti` WHERE `idutente`=" . prepare($_SESSION['idutente']) . ")) ORDER BY `order` ASC"); if ($datas != null) { $select = ""; foreach ($datas as $data) { $select .= $data["query"]; if ($data["name"] != "") $select .= " AS '" . $data["name"] . "', "; if ($data["enabled"]) { array_push($fields, trim($data["name"])); if ($data["summable"]) array_push($summable, " FORMAT(SUM(REPLACE(REPLACE(`" . trim($data["name"] . "`, '.', ''), ',', '.')), " . get_var("Cifre decimali") . ") AS 'sum_" . (count($fields) - 1) . "'")); //if ($data["summable"]) array_push($summable, " FORMAT(SUM(REPLACE(REPLACE(REPLACE(`" . trim($data["name"] . "`, '.', '#'), ',', '.'), '#', ',')), " . get_var("Cifre decimali") . ") AS 'sum_" . (count($fields) - 1) . "'")); array_push($search_inside, trim($data["search_inside"]) != "" ? trim($data["search_inside"]) : trim($data["name"])); array_push($order_by, (trim($data["order_by"]) != "") ? trim($data["order_by"]) : trim($data["name"])); array_push($search, $data["search"]); array_push($slow, $data["slow"]); array_push($allineamento, $data["allineamento"]); array_push($grassetto, $data["grassetto"]); array_push($a_capo, $data["capo_caratteri"]); } } $select = substr($select, 0, strlen($select) - 2); } } else{ $module_query = json_decode($module_query, true); $fields = explode(",", $module_query['main_query'][0]['fields']); foreach ($fields as $key => $value) { $fields[$key] = trim($value); array_push($search, 1); array_push($slow, 0); } $search_inside = $fields; $order_by = $fields; } $result = array(); $result["select"] = $select; $result["fields"] = $fields; $result["search_inside"] = $search_inside; $result["order_by"] = $order_by; $result["search"] = $search; $result["slow"] = $slow; $result["summable"] = $summable; $result["allineamento"] = $allineamento; $result["grassetto"] = $grassetto; $result["a_capo"] = $a_capo; return $result; } /** * Sostituisce la prima occorenza di una determinata stringa. * * @param string $str_pattern * @param string $str_replacement * @param string $string * @return string */ function str_replace_once($str_pattern, $str_replacement, $string){ if (strpos($string, $str_pattern) !== false){ $occurrence = strpos($string, $str_pattern); return substr_replace($string, $str_replacement, strpos($string, $str_pattern), strlen($str_pattern)); } return $string; } function tr($string, $parameters = [], $operations = []) { return $string; // return Translator::translate($string, $parameters, $operations); } /** ricerco niome utente */ function username_name( $idutente , $campo ){ global $dbo; $query = "SELECT ".$campo." FROM zz_utenti where idutente='".$idutente."'"; $rs_parametri = $dbo->fetchArray($query); return $rs_parametri[0][$campo]; } /** ricerco campo in mg_articoli utente */ function get_var_articolo( $idarticolo , $campo ){ global $dbo; $query = "SELECT ".$campo." FROM mg_articoli where id='".$idarticolo."'"; $rs_parametri = $dbo->fetchArray($query); return $rs_parametri[0][$campo]; } function cerca_insoluti($idanagrafica){ global $dbo; $year=date('Y'); $month=date('m'); $day=date('d'); $data_test=$year."-".$month."-".$day." 00-00-00"; $rw = $dbo->fetchArray( "SELECT * , co_scadenziario.id as id_scad ,co_documenti.id as id_doc , co_tipidocumento.descrizione as des_doc FROM (co_scadenziario INNER JOIN (((co_documenti INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_pagamenti ON co_documenti.idpagamento=co_pagamenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id) ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id HAVING 1=1 AND (ABS(`pagato`) < ABS(`da_pagare`) ) and co_documenti.idanagrafica='".$idanagrafica."' and scadenza < '".$data_test."' ORDER BY `scadenza` ASC"); return sizeof($rw); } /** * ricerco impostazioni tipo documento */ function get_var_tipodoc( $idtipodocumento , $campo ){ global $dbo; $query = "SELECT ".$campo." FROM co_tipidocumento where id='".$idtipodocumento."'"; $rs_parametri = $dbo->fetchArray($query); return $rs_parametri[0][$campo]; } function get_var_tipodoc2( $iddocumento, $campo ){ global $dbo; $query = "SELECT ".$campo." FROM co_tipidocumento LEFT JOIN co_documenti ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE co_documenti.id='".$iddocumento."'"; $rs_parametri = $dbo->fetchArray($query); return $rs_parametri[0][$campo]; } function get_var_documento( $iddocumento, $campo ){ global $dbo; $query = "SELECT ".$campo." FROM co_documenti where id='".$iddocumento."'"; $rs_parametri = $dbo->fetchArray($query); return $rs_parametri[0][$campo]; } function query_secca( $str_query , $campo , $tabella ,$condizioni ){ global $dbo; $query = "SELECT ".$campo." FROM ".$tabella." ".$condizioni.""; $rs_parametri = $dbo->fetchArray($query); return $rs_parametri[0][$campo]; } function query_secca2( $str_query , $campo , $tabella ,$condizioni,$campo_ritorno ){ global $dbo; $query = "SELECT ".$campo." FROM ".$tabella." ".$condizioni.""; $rs_parametri = $dbo->fetchArray($query); return $rs_parametri[0][$campo_ritorno]; } function agg_doc_stato( $iddocumento, $idstatoold , $idstatonew ){ global $dbo; $query = "update co_documenti set idstatodocumento='".$idstatonew."' , idstatodocumento_prec='".$idstatoold."' where id='".$iddocumento."'"; $dbo->query($query); } function agg_doc_stato_rip( $iddocumento ){ global $dbo; $query = "update co_documenti set idstatodocumento= idstatodocumento_prec where id='".$iddocumento."'"; $dbo->query($query); } function cerca_modulo( $nome_modulo ){ global $dbo; $query = "SELECT id FROM zz_modules WHERE name='".$nome_modulo."'"; $rs_testmodulo = $dbo->fetchArray($query); return sizeof($rs_testmodulo); } function cerca_canone_qta( $idcontratto , $idarticolo ){ global $dbo; $q = "SELECT sum(qta) as tot_qta FROM `co_righe_documenti` WHERE idcontratto='".$idcontratto."' and riga_canone='1' and idarticolo='".$idarticolo."'"; $rs_consumato= $dbo->fetchArray( $q ); return $rs_consumato[0]['tot_qta']; } function cerca_canone_prezzo( $idcontratto , $idarticolo ){ global $dbo; $rs_contratto = $dbo->fetchArray("SELECT id_tipocanone FROM co_contratti WHERE id=\"".$idcontratto."\""); $id_tipocontratto=$rs_contratto[0]['id_tipocanone']; $q = "SELECT subtotale FROM `co_contratti_tipi_righe` WHERE idtipocontratto='".$id_tipocontratto."' and idarticolo='".$idarticolo."'"; $rs_consumato= $dbo->fetchArray( $q ); return $rs_consumato[0]['subtotale']; } function cerca_canone_qta_scalare( $idcontratto , $idarticolo ){ global $dbo; $rs_contratto = $dbo->fetchArray("SELECT id_tipocanone FROM co_contratti WHERE id=\"".$idcontratto."\""); $id_tipocontratto=$rs_contratto[0]['id_tipocanone']; $q = "SELECT qta FROM `co_contratti_tipi_righe_qta` WHERE idtipocontratto='".$id_tipocontratto."' and idarticolo='".$idarticolo."'"; $rs = $dbo->fetchArray( $q ); return $rs[0]['qta']; } function cerca_contratti_attivi($idcontratto){ global $dbo; $rw = $dbo->fetchArray("SELECT * FROM co_contratti WHERE id_tipocanone='".$idcontratto."' AND idstato ='3'"); return sizeof($rw); } function cerca_contratti_documenti($idcontratto){ global $dbo; $rw = $dbo->fetchArray("SELECT id FROM co_documenti WHERE id_contratto='".$idcontratto."'"); return sizeof($rw); } function cerca_contratti_a_zero($idcontratto){ global $dbo; $rs_contratto = $dbo->fetchArray("SELECT id_tipocanone FROM co_contratti WHERE id=\"".$idcontratto."\""); $id_tipocontratto=$rs_contratto[0]['id_tipocanone']; $rs = $dbo->fetchArray("SELECT v_ins_righe_zero FROM co_contratti_tipi WHERE id='".$id_tipocontratto."'"); return $rs[0]['v_ins_righe_zero']; } function cerca_contratti($idanagrafica){ global $dbo; $year=date('Y'); $month=date('m'); $day=date('d'); $data_test=$year."-".$month."-".$day." 00-00-00"; $rw = $dbo->fetchArray("SELECT co_contratti.id AS idcontratto, an_anagrafiche.idanagrafica, numero, nome FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE an_anagrafiche.idanagrafica='".$idanagrafica."' AND idstato NOT IN (SELECT `id` FROM co_staticontratti WHERE descrizione='Bozza' OR descrizione='Rifiutato' OR descrizione='Pagato') ORDER BY id"); return sizeof($rw); } function traduzione($lablel){ global $dbo; // $_SESSION['idlingua']= get_var("Lingua"); $rs_traduci = $dbo->fetchArray("SELECT label_tr FROM lng_traduzioni WHERE idlingua='".$_SESSION['idlingua']."' and label=\"".$lablel."\""); if ( sizeof($rs_traduci) == '0' ){ $dbo->query("INSERT INTO lng_traduzioni( idlingua, label, label_tr ) VALUES( \"".$_SESSION['idlingua']."\", \"".$lablel."\",\"".$lablel."\" )"); $tradotto=$lablel; } else { $tradotto=$rs_traduci[0]['label_tr']; } return ($tradotto); } function testa_query_sql($id_module) { global $dbo; $start = '1'; $length = '3'; $columns = filter("columns"); $order = filter("order")[0]; $_SESSION['id_module'] = $id_module; $total = getQuery($id_module); // Lettura parametri modulo $module = $dbo->fetchArray("SELECT * FROM zz_modules WHERE id=" . prepare($id_module))[0]; $module_query = ($module['options2'] != "") ? $module['options2'] : $module['options']; if(strpos($module_query, "|fields|") === false){ $module_query = json_decode($module_query, true); $module_query = $module_query['main_query'][0]['query']; } $module_query = str_replace("|period_start|", $_SESSION['period_start'], $module_query); $module_query = str_replace("|period_end|", $_SESSION['period_end'], $module_query); $module_query = str_replace("|fields|", $total["select"], $module_query); $results = array(); $results["data"] = array(); $results["recordsTotal"] = 0; $results["recordsFiltered"] = 0; $results["summable"] = array(); /* * Modifico la query principale per limitare i record nel caso l'utente abbia permessi da limitare */ $permessi = $dbo->fetchArray("SELECT clause FROM zz_gruppi_modules WHERE idgruppo=(SELECT id FROM zz_gruppi WHERE nome=" . prepare($_SESSION['gruppo']) . ") AND idmodule=" . prepare($id_module)); if (sizeof($permessi) == 1) { // Includo il file init.php che contiene già i replace corretti di $additional_where[] if (file_exists($docroot . "/modules/" . $module['module_dir'] . "/".$modulo_custom."/init.php")) include ($docroot . "/modules/" . $module['module_dir'] . "/".$modulo_custom."/init.php"); else if (file_exists($docroot . "/modules/" . $module['module_dir'] . "/init.php")) include ($docroot . "/modules/" . $module['module_dir'] . "/init.php"); } if ($module_query != '' && $module_query != 'menu' && $module_query != 'custom') { $query = str_replace_once("SELECT", "SELECT COUNT(*) as tot, ", $module_query); $cont = $dbo->fetchArray($query); if($cont!= null) $results["recordsTotal"] = $cont[0]['tot']; // Se ci sono dei parametri di ricerca per questo modulo li accodo alla query $search_filters = array(); for($i = 0; isset($columns[$i]["search"]["value"]); $i ++) { if ($columns[$i]["search"]["value"] != "") { if(strpos($total["search_inside"][$i], "|search|") !== false){ $sears = explode(",", $columns[$i]["search"]["value"]); foreach ($sears as $sear) { $sear = trim($sear); array_push($search_filters, str_replace("|search|", prepare("%".$sear."%"), $total["search_inside"][$i])); } } else array_push($search_filters, "`".$total["search_inside"][$i] . "` LIKE ".prepare("%" . trim($columns[$i]["search"]["value"]) . "%")); } } if (sizeof($search_filters) > 0) { $module_query = str_replace("1=1", "1=1 AND (" . implode(" AND ", $search_filters) . ") ", $module_query); } // cerco se sono previsti dei filtri per i moduli esempio documenti $query_documenti="select * from zz_modules_documenti where idmodule='".$id_module."'"; $rs_filtro = $dbo->fetchArray( $query_documenti ); if ( sizeof($rs_filtro) == '1' ){ $module_query = str_replace( $rs_filtro[0]['cerca'], $rs_filtro[0]['sostituisci'] , $module_query ); if ( ($_SESSION['gruppo'] != 'Amministratori') && ($_SESSION['gruppo'] != 'Agenti') && ($_SESSION['gruppo'] != 'Tecnici') ){ $module_query = str_replace("1=1", "1=1 and co_documenti.idanagrafica='".$_SESSION['idanagrafica']."'", $module_query); } } $id_gruppo=query_secca("","id","zz_gruppi","where nome ='".$_SESSION['gruppo']."'"); $query_filtri="select * from zz_gruppi_modules where idmodule='".$id_module."' and idgruppo='".$id_gruppo."' and enabled='1'"; $rs_filtro = $dbo->fetchArray( $query_filtri ); if ( sizeof($rs_filtro) == '1' ){ $filtro=$rs_filtro[0]['clause']; $filtro=str_replace("|idanagrafica|", $_SESSION['idanagrafica'] , $filtro); $filtro=str_replace("|idagente|", $_SESSION['idanagrafica'] , $filtro); $filtro=str_replace("|idtecnico|", $_SESSION['idanagrafica'] , $filtro); $module_query = str_replace("1=1", "1=1 " . $filtro, $module_query); } if (isset($order["dir"]) && isset($order["column"])) { $module_query = explode("ORDER", $module_query)[0] . "ORDER BY `" . $total["order_by"][$order["column"]] . "` " . $order["dir"]; } if(count ($total["summable"])!=0){ $query = str_replace_once("SELECT", "SELECT ".implode(",",$total["summable"])." FROM(SELECT ", $module_query).") AS `z`"; $sums = $dbo->fetchArray($query)[0]; if($sums != null){ $r = array(); foreach ($sums as $key => $sum) { if(strpos($key, "sum_") !== false) $r[str_replace("sum_", "", $key)] = $sum; } $results["summable"] = $r; } } // Paginazione $module_query .= " LIMIT " . $start . ", " . $length; $module_query = str_replace("and co_documenti.idanagrafica=|idanagrafica|", "" , $module_query); $query = str_replace_once("SELECT", "SELECT SQL_CALC_FOUND_ROWS", $module_query); return ($query ); } }