Location: PHPKode > scripts > PXAServer > pxaserver/libreria/if_use_php5/Ajax.class.php
<?php
############################################################################
# This code is developed by Guerrieri Luca                                                                #
# copyright (C) 2006/2007 hide@address.com
# This code is released under the terms of the GPL v.2 License.
# 
# The author is not responsible for data loss, or any kind of trouble that 
# results from the use of this software.
# USE IT AT YOUR OWN RISK!
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
############################################################################

/*
 *  Classe usata per implementare Ajax
 *  nei modelli creati con TemplateManager
 *  1) 	L'utente interagisce con la pagina web, magari cliccando su di un link
	2) 	Un Javascript raccoglie questa richiesta creando un oggetto di tipo XMLHttpRequest che viene fornito
		direttamente dal browser.
	3) 	Attraverso questo oggetto il Javascript invia una richiesta al server remoto, usando il suo metodo "send".
	4) 	Il server web riceve ed elabora tale richiesta, magari attraverso un normale script PHP o più in generale
		attraverso un qualsiasi linguaggio di programmazione server-side.
	5) 	La risposta del server web viene intercettata dal Javascript e non comporta quindi il completo aggiornamento
		della pagina mostrata dal browser.
	6) 	Il Javascript estrapola i dati presenti nella risposta intercettata e modifica solo determinate porzioni di HTML
		della pagina web.
 */
class Ajax {
	private $resource;		//azione da compiere
	private $id;			//id del tag div
	private $xml_file;		//file xml di configurazione
	private $type;			//tipo di richiesta db o file
	
    function Ajax() {
    //costruttore
    	require('config.inc.php');    	//Richiede il file di configurazione generale
	  	$this -> error= new MSGmanager;	//Istanzia la classe dei messaggi di errore
    
    }
    public function set_xml_file ($file){
    //metodo che riceve la richiesta dal collector.php
    	$this->xml_file=$file;
    }
    public function set_request ($resource){
    //metodo che riceve la richiesta dal collector.php
    	$this->resource=$resource;
    }
    public function set_id ($id){
    //metodo che imposta l'id sul quale eseguire la risposta
    	$this->id=$id;
    }
    
    public function set_type ($type){
    //metodo che imposta il tipo di richiesta file o db
       	$this->type=$type;
    }        
    
    public function send_response (){
    //metodo per gestire la risposta da inviare da collector.php
    //leggo il file xml e dopo aver controllato la presenza della action e dell'id inseriti 
    //restituisco l'action da eseguire. 
    //L'action controllata all'interno del manager restituirà il codice html	
    	$array=$this->xml_read($this->xml_file);
    	if ($this->type=="static"){
    		if ($array[$this->id]){
    			$response=$array[$this->id][$this->resource];    		
    			return $response;
    		}else  {
    			return "Attenzione - la risorsa indicata o l'ID di destinazione non sono reperibili";
    		} 
    	}else if ($this->type=="dynamic"){
    		if ($array[$this->id]){
    			$response=$array[$this->id][$this->resource];
    			return $response;
    		}else  {
    			return "Attenzione - la risorsa indicata non e' reperibile, il DB server non risponde";
    		} 
    	}
    }
    
    private function xml_read($file){
	############################################################################
	# In this method i've used part of the code of pxw4pa                                                                #
	# copyright (C) 2005/2006 yayo (Roberto Correzzola) hide@address.com
	# http://pxw4pa.sourceforge.net/index.php
	# http://sourceforge.projects.pxw4pa/
	############################################################################

	global 	$_pXw4Pa;
	unset($_pXw4Pa['a'],
		$_pXw4Pa['n'],
		$_pXw4Pa['t'],
		$_pXw4Pa['gn'],
		$_pXw4Pa['pos'],
		$_pXw4Pa['status'],
		$_pXw4Pa['val']);

	$argsnum=func_num_args();
	$args=func_get_args();
	foreach($args as $k=>$v){
		if (!is_array($v) and strtolower($v)=='?v') $verbose='v';
		if (!is_array($v) and strtolower($v)=='?v+') $verbose='v+';
	}


	if (!$file) exit('<div style="width:90%;background-color:#FFDA74;color:#000000;font: 12pt;border:1px solid #000000;padding: 2px 12px 2px 12px;"><b>pXw4Pa ERROR!</b>&nbsp;&nbsp;I miss the array! It seems you forget to submit it to the function!</div>');


	$xml_parser = xml_parser_create();
	xml_parser_set_option ($xml_parser,2,'ISO-8859-1');
	
	xml_set_element_handler($xml_parser,
	create_function(
		'$parser, $current_element, $current_attribs',
			'global 	$_pXw4Pa;
	
			if ($current_element=="GROUP"){
				$_pXw4Pa["gn"][$_pXw4Pa["pos"]]=$current_attribs["NAME"];
				$_pXw4Pa["pos"]++;
			}
			elseif ($current_element=="ENTRY"){
				$_pXw4Pa["status"]=true;
				$_pXw4Pa["n"]=$current_attribs["NAME"];
				if (!($_pXw4Pa["t"]=$current_attribs["TYPE"])) $_pXw4Pa["t"]="string";
				if ($_pXw4Pa["t"]==="NULL") {
					if ($_pXw4Pa["n"]) {
						$a[$_pXw4Pa["pos"]][$_pXw4Pa["n"]]=null;}else{$a[$_pXw4Pa["pos"]][]=null;
					}
				}
			}'
	),create_function(
		'$parser, $current_element',
			'global 	$_pXw4Pa;
			if ($current_element=="GROUP"){
				$_pXw4Pa["pos"]--;
				if ($_pXw4Pa["gn"][$_pXw4Pa["pos"]]) {
					$_pXw4Pa["a"][$_pXw4Pa["pos"]][$_pXw4Pa["gn"][$_pXw4Pa["pos"]]]=$_pXw4Pa["a"][$_pXw4Pa["pos"]+1];
				}else{
					$_pXw4Pa["a"][$_pXw4Pa["pos"]][]=$_pXw4Pa["a"][$_pXw4Pa["pos"]+1];
				}
				unset($_pXw4Pa["a"][$_pXw4Pa["pos"]+1],$_pXw4Pa["gn"][$_pXw4Pa["pos"]]);

			}elseif ($current_element=="ENTRY"){
				if ($_pXw4Pa["n"]) {
					$_pXw4Pa["a"][$_pXw4Pa["pos"]][$_pXw4Pa["n"]]=$_pXw4Pa["val"];
				}else{
					$_pXw4Pa["a"][$_pXw4Pa["pos"]][]=$_pXw4Pa["val"];
				}
					end($_pXw4Pa["a"][$_pXw4Pa["pos"]]);
					settype($_pXw4Pa["a"][$_pXw4Pa["pos"]][key($_pXw4Pa["a"][$_pXw4Pa["pos"]])],$_pXw4Pa["t"]);
				$_pXw4Pa["val"]="";
				$_pXw4Pa["status"]=false;
			}'
	)
);
	xml_set_character_data_handler($xml_parser,
	create_function(
		'$parser, $data',
			'global 	$_pXw4Pa;
			if ($_pXw4Pa["status"]) {
				$_pXw4Pa["val"].=$data;
			}'
	)
);
	
	if (!($fp = fopen($file, "r"))) {
	    die('<div style="width:90%;background-color:#FFDA74;color:#000000;font: 12pt;border:1px solid #000000;padding: 2px 12px 2px 12px;"><b>pXw4Pa ERROR!</b>&nbsp;&nbsp;Cannot open the input XML file!</div>');
	}
	
	$data = fread($fp, filesize($file));
	    if (!xml_parse($xml_parser, $data, feof($fp))) {
		  die(sprintf("<div style=\"background-color:#FFDA74;color:#000000;font: 12pt;border:1px solid #000000;padding: 2px 12px 2px 12px;\"><b>pXw4Pa ERROR!</b>&nbsp;&nbsp;...on the XML file: <b>%s</b> at line <b>%d</b></div>",
				  xml_error_string(xml_get_error_code($xml_parser)),
				  xml_get_current_line_number($xml_parser)));
	    }
	
	xml_parser_free($xml_parser);
		if ($verbose) {
			echo'<div style="width:90%;background-color:#A0CBFF;color:#000000;font: 12pt;border:1px solid #000000;padding: 2px 12px 2px 12px;"><b>pXw4Pa info!</b>&nbsp;&nbsp;File <span style="font-family:monospace;">'.$file."</span> loaded:</div><pre>";
			if ($verbose=='v') print_r($_pXw4Pa['a'][0][0]);
			if ($verbose=='v+') var_dump($_pXw4Pa['a'][0][0]);
			echo "</pre>";
			}


	return ($_pXw4Pa['a'][0][0]);

	}

}
?>
Return current item: PXAServer