Source for file func.rpc_query.php
Documentation is available at func.rpc_query.php
* Libreria di funzioni RPC.
* Queste funzioni sono richiamata tendenzialmente dal file {@link rpc.php} per eseguire
* chiamate al database dalle maschere.
* Sono presenti inoltre alcune funzioni di utilità.
* @subpackage Function-Libraries
* @author Mario Marcello Verona <marcelloverona@gmail.com>
* @copyright 2007 Mario Marcello Verona
* @license http://www.gnu.org/licenses/gpl.html GNU Public License
* Funzione per la codifica in javascript di caratteri speciali nelle url
$find= array("%u201C","%u201D",
$replace= array("\"","\"",
* Funzione di modifica di un record.
* Restituisce l'SQL per la modifica
$sql = "UPDATE $tabella SET ";
foreach($_dati as $k=> $val){
foreach($_pk as $k=> $val){
$sql.= ($db1['dbtype']== 'mysql') ? " LIMIT 1" : "";
* Funzione di inserimento nuovo record.
* Restituisce l'SQL per l'inserimento.
foreach ($_dati as $k=> $val){
//imposto gli eventuali hidden
$valori = substr($valori,0,- 1);
$sql = "INSERT INTO $tabella ($campi) VALUES ($valori)";
* Funzione di preparazione query di cancellazione record mediante la maschera di VFront.
* La funzione è richimata via chiamata esterna Javascript e restituisce il codice SQL.
foreach ($_pk as $k=> $val){
$condizione= substr($condizione,0,- 3);
$sql = "DELETE FROM $tabella WHERE $condizione";
if($db1['dbtype']== 'mysql') $sql.= " LIMIT 1";
* Ricerca mediante la maschera di VFront
* La funzione è richimata via chiamata esterna Javascript
* e restituisce gli ID dei record trovati
foreach ($_dati as $k=> $val){
// sperimentale... uso degli asterischi
$condizione= substr($condizione,0,- 3);
// PRENDI LA CHIAVE PRIMARIA DELLA TABELLA
$sql = "SELECT $campoPK FROM $tabella WHERE $condizione ORDER BY $orderby, $campoPK ";
* Funzione RPC per la duplicazione di un record
list ($campo_id, $val_id) = each($_pk);
for($i= 0;$i< count($info_tabella);$i++ ){
if($info_tabella[$i]!= $campo_id) $campi[]= $info_tabella[$i];
$sql= "INSERT INTO $tabella (". implode(",",$campi). ")
(SELECT ". implode(",",$campi). " FROM $tabella WHERE ". $campo_id. "=". $val_id. ")";
// TODO: duplicazione dei dati delle sottomaschere
$duplicazione_sub_test= array();
// sottomaschere da duplicare:
// prendi le info sottomaschere
$sql_sub= "SELECT * FROM {$db1['frontend']}.registro_submask WHERE id_submask in ($oid_sub)";
// SQL per i campi NON auto_increment da prendere
$sql_campi= "SELECT sc.column_name
FROM {$db1['frontend']}.registro_submask_col AS sc
WHERE id_submask=". $RS_sub['id_submask']. " AND sc.extra!='auto_increment'";
// DUPLICAZIONE DEGLI ALLEGATI
return $test. "|". $insert_id;
* Funzione di duplicazione record
* @param string $tabella_sub
* @param array $elenco_campi
* @param string $campo_fk
* @param string $valore_fk
* @param int|string$nuovo_valore
for($i= 0;$i< count($elenco_campi);$i++ ){
if($elenco_campi[$i] != $campo_fk) {
$elenco[]= $elenco_campi[$i];
$sql= "INSERT INTO ". $tabella_sub. " ($campo_fk, ". implode(",",$elenco). ")
(SELECT '$nuovo_valore', ". implode("," , $elenco). " FROM $tabella_sub WHERE $campo_fk='$valore_fk') ";
* Funzione di duplicazione (su richiesta) degli allegati collegati ad un record.
* Duplica i record informativi su DB e fa una copia fisica dei file
if(count($matrice_att)> 0){
for($i= 0;$i< count($matrice_att);$i++ ){
'". date("Y-m-d H:i:s"). "', '". $matrice_att[$i]['nomefileall']. "')"
// se ha inserito il record
else if($ok!= count($matrice_att)){
* Funzione di duplicazione (su richiesta) dei link collegati ad un record.
if(count($matrice_link)> 0){
for($i= 0;$i< count($matrice_link);$i++ ){
'". date("Y-m-d H:i:s"). "',
'". $matrice_link[$i]['descrizione']. "')"
// se ha inserito il record
else if($ok!= count($matrice_link)){
###############################################################################################
# FUNZIONI RPC per le sottomaschere
###############################################################################################
* Funzione di modifica dei record delle sottomaschere.
* @param string $_str_pk_indipendente
* @param string $pk_dipendente
* @param string $hash_campo
$sql_auto= "SELECT c.column_name
FROM {$db1['frontend']}.registro_col c , {$db1['frontend']}.registro_tab t
WHERE c.extra='auto_increment'
AND t.id_table=c.id_table
AND t.table_name='$tabella'";
// Cerca eventuali campi Autoincrement:
foreach($_dati as $k=> $arval){
foreach($arval as $campo=> $valore){
// non mettere i campi auto_increment se ci dovessero essere
if($campo!= $campo_auto_inc){
list ($campo_pk_indip,$valore_pk_indip) = explode("=",$_str_pk_indipendente);
// accodo i dati della pk indipendente se non è auto_increment
if($campo_pk_indip!= $campo_auto_inc){
$valori.= $valore_pk_indip;
$buffer_string= "INSERT INTO $tabella ($campi) VALUES ($valori)";
foreach($hash_campo_obj as $campo_h=> $valore_h){
$WHERE.= " AND ($campo_h IS NULL)";
// PREVENGO LA CREAZIONE DI UN UPDATE SENZA CONDIZIONI
$buffer_string= "UPDATE $tabella SET ";
foreach($arval as $campo=> $valore){
$buffer_string= substr($buffer_string,0,- 1);
if(!isset ($WHERE) || $WHERE== 'WHERE 1=1 '){
$buffer_string.= " $WHERE ";
$sql_out[]= $buffer_string;
* Funzione per la cancellazione di un record in sottomaschera.
* Restituisce il codice SQL
* @param string $campo_pk_dip
* @param string $valore_pk_dip
* @param string $campo_pk_indip
* @param string $valore_pk_indip
function rpc_sub_query_delete($campo_pk_dip,$valore_pk_dip,$campo_pk_indip,$valore_pk_indip,$tabella,$hash){
for($i= 0;$i< count($hash);$i++ ){
foreach($hash_campo_obj as $campo_h=> $valore_h){
$sql_out[]= "DELETE FROM $tabella $WHERE LIMIT 1";
* Funzione di cancellazione di un allegato di un record.
$sql_att= "SELECT codiceallegato FROM ". _TABELLA_ALLEGATO. " WHERE codiceentita='$id' AND tipoentita='$tabella'";
for($i= 0;$i< count($array_codice_allegati);$i++ ){
// elimino dal filesystem
$sql_del= "DELETE FROM ". _TABELLA_ALLEGATO. " WHERE codiceallegato=". $array_codice_allegati[$i]. " LIMIT 1";
return ($test_del_fs && $test_del) ? true: false;
* Funzione di cancellazione di un link di una scheda.
$sql_link = "SELECT codicelink FROM ". _TABELLA_LINK. " WHERE codiceentita='$id' AND tipoentita='$tabella'";
for($i= 0;$i< count($array_codice_link);$i++ ){
$sql_del= "DELETE FROM ". _TABELLA_LINK. " WHERE codicelink=". $array_codice_link[$i]. " LIMIT 1";
|