/**
* @package myAjax
*/
/** @ignore*/
if (!class_exists('myField')) include_once(dirname(__FILE__).'/myFields.php');
/**
*
* @package myAjax
*
* Classe che permette, utilizzando Ajax, di mostrare all'utente una serie di dati recuperati da un altro script,
* variabili a seconda di quello che è stato inserito.
*
* $ric=new MyRicercaAjax( new myCognome('Prova',$Prova) );
* $ric->set_opzioni('dati.php',3);
* //Esempio di utilizzo di un metodo non esistente in questa classe ma esistente nell'oggetto (myCognome) utilizzato nell'istanza
* $ric->set_tooltip("Metodo non appartenente a MyRicercaAjax ma ereditiato da myCognome ");
* echo $ric->get_html();
*
* //Lo script che viene richiamato per ottenere i dati deve ritornarli sotto forma di un elenco non ordinato
* $lista="
*/
class MyRicercaAjax {
/** @ignore*/
protected $myAutocompleter,
$campo_output,$showonly,$id,$myText,$function='';
/**
* Costruttore di classe
*
* @param MyText $myText E' il campo su cui applicare la ricerca Ajax (può anche essere un campo esteso da MyText)
*/
function MyRicercaAjax(&$myText){
if (is_object($myText)) $this->myText=&$myText;
else $this->myText=new MyText($myText,func_get_arg(1),func_get_arg(2));
$this->id=$this->myText->get_id_istanza();
$this->myAutocompleter=new myJQAutocomplete();
}
function set_campo_input($nome,&$campo){
if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete();
$this->myAutocompleter->set_campo_input($nome, $campo);
return $this;
}
function set_campo_output(&$campo){
if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete();
$this->campo_output=$campo;
$this->myAutocompleter->set_campo_output($campo);
return $this;
}
/**
*
* Imposta i n. di caratteri dopo cui la scelta si attiva
* @param int $caratteri
*/
public function set_tiping($caratteri=2){
if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete();
$this->myAutocompleter->set_tiping($caratteri);
return $this;
}
function get_titolo(){
return $this->myText->get_value();
}
/**
* Imposta il testo della riga di chiusura della pagina,
* se omesso non verrà mostrato quindi sarà impossibile chiudere la finistra senza effettuare una scelta
*
* @deprecated Non funziona più
*/
function set_messaggio_chiusura() {
}
/**
* Funzione obbligatoria, va utilizzata dopo l'istanza della classe
*
* @param string $script E' lo script da cui devo andare a recuperare i dati da visualizzare all'utente
* @param integer $car Indica dopo quanti caratteri devo visualizzare l'aiuto (ignorato se script è nullo)
* @param string $campoId (Opzionale) Da utilizzare se si ha la necessità di utilizzare una eventuale scelta dell'id
* @param string $parametri Parametri da inviare in post in aggiunta
* @param string $parametri Eventuali altri parametri da valorizzare tramite js es $parametriJS=array('pippo'=>'documento.getElementById('ciccio').value');
*
*/
function set_opzioni($script,$car=3,$campoId="",$parametri=array(),$parametrijs=array()){
if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete();
if (!$script) return;
$this->myAutocompleter->set_tiping($car);
$this->set_campo_output($campoId);
$this->myAutocompleter->set_source($script,$campoId,$parametri,$parametrijs);
}
function set_onselect_function($function) {
if(!$this->myAutocompleter) {echo "usare set_onselect_function() solo prima di set_opzioni()";exit;}
$this->myAutocompleter->set_onselect_function($function);
}
/** @ignore */
protected function js_update($campoId){
if ($this->function) $f="{$this->function}(text,li);";
if ($this->chiudi[0])
{ if (!$this->chiudi[1]) $messaggio=($this->trasl($this->chiudi[0]));
else $messaggio=($this->chiudi[0]);
$extra="if(text.value==\"$messaggio\")
{
document.getElementById('{$this->get_id()}').value=li.id;
return;
}";
}
return "function onSelectedMyAjax_{$this->id}(text, li) {
document.getElementById('$campoId').value=li.id;
$extra
$f
}
";
}
function set_showonly() {
$this->myText->set_showonly();
$this->showonly=true;
}
/**
* Funzione che mi permette di costruire l'HTML del campo
* @return l'HTML
*/
function &get_Html(){
if ($this->showonly) return $this->myText->get_html();
$this->myText->add_myjquery($this->myAutocompleter);
return $this->myText->get_html();
}
/**
* Impone altezza massima alla finestra di scroll
* @param int $px pixels
*/
function set_altezza_scroll($px){
if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete();
$this->myAutocompleter->set_altezza_scroll($px);
return $this;
}
/**
* Cosa deve comparire durante l'attesa di aggiornamento
* @param string $tag è la urla dell'icona da visualizzare o semplocemente l'html da visualizzare
*/
function set_indicatore_attesa($html){
if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete();
$this->myAutocompleter->set_indicatore_attesa($html);
return $this;
}
/**
* Imposta la facoltatività del tag, se facoltativo @see get_xml non restituirà nulla
* altrimenti si visualizza il tag vuoto ";
* $lista.="
";
* echo $lista;
*
* .. includo le myAjax
*
* $miaListaOrdinabile=new myListeOrdinabili('Nome',array('Primo','Secondo','Terzo','Quarto','Quinto'));
*
* echo $miaListaOrdinabile->get_html();
*
*
* E' possibile salvare la posizione attuale delle liste passando alla variabile $scriptUpdate uno script esterno
* Esempio:
*
*
* $miaListaOrdinabile=new myListeOrdinabili('Nome',array('Primo','Secondo','Terzo','Quarto','Quinto'),"process-sortable.php");
* ?>
*
* Lo script richiamato può leggere le liste ordinate:
*
* foreach ($_GET[$nome] as $position => $item) {
*
* //puoi salvare la posizione della chiave in una $_SESSION o direttamente sulla tabella di un d.b.
*
* }
* ?>
*
*
* Si può utilizzare un css diverso da quello di default, ma si deve avere l'accortenza che le classi che compongono il css
* abbiano lo stesso nome del oggetto istanziato
*
* Esempio:
* $miaListaOrdinabile=new myListeOrdinabili('Nome',array('Primo','Secondo','Terzo','Quarto','Quinto'),'','mio.css');
*
* File mio.css
* #Nome {
* list-style: none;
* }
*
* #Nome li {
* display: block;
* padding: 10px 5px; margin-bottom: 3px;
* background-color: #efefef;
* }
*
* #Nome li img.handle {
* margin-right: 10px;
* cursor: move;
* }
*/
class myJQListeOrdinabili {
private $myLista;
private $scriptSalvataggio;
private $stile;
private $immagine;
private $percorso;
private $id,$div;
private $css;
/**
* @param array $valori (array contenenti le voci da ordinare nel formato chiave=>testo
* @param string $div id del div in cui è contenuta la lista
* @param string $scriptUpdate (l'eventuale script da utilizzare per salvare le modifiche)
*/
public function __construct($valori,$div,$scriptUpdate=''){
if (is_array($valori)) $this->myLista=$valori;
if ($scriptUpdate) $this->scriptSalvataggio=$scriptUpdate;
$this->id="ul_$div";
$this->div=$div;
$this->percorso="/".MyField::get_MyFormsPath();
$this->immagine=$this->percorso."img/imm_list.png";
//if ($style) $this->stile=$style;else
}
/**
* Metodo che ritorna l'html delle liste ordinabili
*
*/
public function get_html(){
$out.="