Back to top

Autore Topic: Librerie Pear e Zend in joomla  (Letto 2265 volte)

Offline alexdi

  • Appassionato
  • ***
  • Post: 304
  • Sesso: Maschio
  • M5S , forse riusciamo a mandarli tutti a casa !!
    • Mostra profilo
Librerie Pear e Zend in joomla
« il: 06 Feb 2011, 19:40:16 »
Vengo subito al dunque.

Il fatto sarebbe far "comunicare" joomla con il crm vtiger, parlare poi di integrazione è tuttaltra cosa, anche perchè, non sono un programmatore. Vorrei però arrivare almeno a capire quale strada sia possibile percorrere o, comunque sia, si fa esperienza...

...sul sito ufficiale di vtiger c'è questa pagina che spiega come far richieste al cmr tramite webservice.http://wiki.vtiger.com/index.php/vtiger510:WebServices_tutorials

Dal codice dei tutorial riportato nei vari esempi, viene utilizzata la classe HTTP_client, che fa parte delle librerie pear, presenti solo in parte in joomla. Infatti, ciò che riguarda l' oggetto HTTP_CLIENT non è presente nelle librerie pear di joomla (almeno fino alla verione 1.5.22 di joomla). Tale oggetto http_client risulta essere utile per l' invio delle richieste al crm.

Sempre dal codice del tutorial, viene spesso utilizzata la funzione "Zend_JSON::decode" che fa parte delle librerie zend, non presenti in joomla. Tale funzione, risulta molto utile per "decodificare" le risposte ricevute dal crm.

Ho provato a cercare fra le api di joomla, per vedere se era presente qualche funzionalità simile ma, a meno che la mia ignoranza sulle api joomla non venga confermata, non ho trovato nulla di simile.

Allora, non ho fatto altro che integrare tali "mancanze" ed aggiugerle alle librerie già presenti nella distribuzione di joomla, più o meno 200k di codice, facendo attenzione anche alle dipendenze.

A questo punto, provando alcuni esempi riportati nel tutorial di vtiger, tutto ha funzionato egregiamente. Per esempio, creando un file php contenente il seguente codice ed eseguedolo, si ottiene come output "grezzo" la lista dei prodotti presenti su vtiger. Quello che mi chiedevo e se , in una ipotetica installazione di un componente, plugin, etc., è giusto aggiungere librerire a quelle già presenti nella distribuzione ufficiale di joomla, ciò per avere ulteriori funzionalità altrimenti non presenti o difficilmente riproducibili.


Codice: [Seleziona]
<?php

/* 
 */

define'_JEXEC');

define('JPATH_BASE'dirname(__FILE__) );
define'DS'DIRECTORY_SEPARATOR );

require_once ( 
JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( 
JPATH_BASE .DS.'includes'.DS.'framework.php' );

require(
'libraries/joomla/factory.php');
// initialize the application

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();



//e.g.challengeToken
require('libraries/pear/Client.php');
require(
'libraries/Zend/json.php');
$endpointUrl "http://localhost/vtigercrm/webservice.php";
//username of the user who is to logged in. 
$userName="admin";
$httpc = new HTTP_CLIENT();
//getchallenge request must be a GET request.
$httpc->get("$endpointUrl?operation=getchallenge&username=".$userName);
$response $httpc->currentResponse();
//decode the json encode response from the server.
$jsonResponse Zend_JSON::decode($response['body']);
//check for whether the requested operation was successful or not.
if($jsonResponse['success']==false
    
//handle the failure case.
    
die('getchallenge failed:'.$jsonResponse['error']['errorMsg']);
//operation was successful get the token from the reponse.
$challengeToken $jsonResponse['result']['token'];
echo 
$challengeToken;
  


//LOGIN
//access key of the user admin, found on my preferences page.
$userAccessKey '5wNd96KZLMxdpEpK';
//create md5 string concatenating user accesskey from my preference page 
//and the challenge token obtained from get challenge result. 
$generatedKey md5($challengeToken.$userAccessKey);
//login request must be POST request.
$httpc->post("$endpointUrl"
    array(
'operation'=>'login''username'=>$userName
        
'accessKey'=>$generatedKey), true);
$response $httpc->currentResponse();
//decode the json encode response from the server.
$jsonResponse Zend_JSON::decode($response['body']);
//operation was successful get the token from the reponse.
if($jsonResponse['success']==false)
    
//handle the failure case.
    
die('login failed:'.$jsonResponse['error']['errorMsg']);
//login successful extract sessionId and userId from LoginResult to it can used for further calls.
$sessionId $jsonResponse['result']['sessionName']; 
$userId $jsonResponse['result']['userId'];
echo 
$userId;



//QUERY SUI PRODOTTI VTIGER
//sessionId is obtained from loginResult.
$query "select * from Products;";
//urlencode to as its sent over http.
$queryParam urlencode($query);
//sessionId is obtained from login result.
$params "sessionName=$sessionId&operation=query&query=$queryParam";
//query must be GET Request.
$httpc->get("$endpointUrl?$params");
$response $httpc->currentResponse();
//decode the json encode response from the server.
$jsonResponse Zend_JSON::decode($response['body']);
//operation was successful get the token from the reponse.
if($jsonResponse['success']==false)
    
//handle the failure case.
    
die('query failed:'.$jsonResponse['errorMsg']);
//Array of vtigerObjects
$retrievedObjects $jsonResponse['result'];
foreach (
$retrievedObjects as $a) {
echo 
'<br />';
foreach ($a as $b) {

echo 
$b ;
}}
?>

Non è la specie più intelligente a sopravvivere e nemmeno quella piu' forte. E' quella più predisposta al cambiamento. Charles Darwin

Blog Personale

mau_develop

  • Visitatore
Re:Librerie Pear e Zend in joomla
« Risposta #1 il: 06 Feb 2011, 21:13:48 »
bello e interessante, esisteva una pseudo integrazione di sugar o forse proprio di tiger nn ricordo ma non mi soddisfava per nulla.

Includere librerie è previsto e permesso solo che il più delle volte è inutile poichè esiste un metodo o una classe di joomla che fa cose simili, ma dovresti spulciarti per bene le docs. Mi sembra strano non abbia un metodo per gestire JSON.

M.

EDIT: ..in effetti le librerie JSON sono un po' discusse per la 1.5 in quanto non sono interamente supportate ma per l'encoding usano funzioni native di php

http://docs.joomla.org/Handling_the_server_side_of_Ajax_requests

« Ultima modifica: 06 Feb 2011, 21:28:33 da mau_develop »

Offline alexdi

  • Appassionato
  • ***
  • Post: 304
  • Sesso: Maschio
  • M5S , forse riusciamo a mandarli tutti a casa !!
    • Mostra profilo
Re:Librerie Pear e Zend in joomla
« Risposta #2 il: 06 Feb 2011, 22:11:10 »
Grazie per la risposta mau_develop.

Infatti, specialmente per quanto riguarda JSON mi sembra strano anche a me. Ho cercato sulle api di joomla e su google ma senza risultati. Poco tempo fa ho provato anche a fare qualche ricerca per "stringa" tramite eclipse su un intero sito prova in locale senza però trovare nulla (o almeno a mio giudizio non ho trovato nulla di simile).

Ad ogni modo, il fatto che si possano comunque integrare librerire atte allo scopo è una buona notizia.

Inoltre, Vtiger ha anche una ulteriore interessante funzionalità che si chiama workflow http://wiki.vtiger.com/index.php/vtiger510:Module_Workflow(ma a questo punto, non vorrei uscire dall' argomento di questo post). Comunque sia, con i workflow si possono far eseguire a vtiger determinate azioni standard al verificarsi di determinati eventi (salvataggio, modifica, etc. di quasi tutti gli oggetti che gestisce il crm) ma anche azioni stabilite tramite uno script php. Non ho fatto prove (che farò sicuramente a breve tempo) ma, sicuramente, l' inserimento di un prodotto su vtiger può far scatenare uno script che esegue una "copia" del prodotto che ne so, sulla tabella vm_product di virtuemart.

Insomma, se non mi sbaglio, in linea di massima ci sarebbero gli strumenti per una comunicazione bidirezionale tra vtiger e joomla. Poi , chiaramente, manca il 98% di tutto il resto (anzi, forse il 99.9%  ;D).

Adesso mi fermo perchè so di essere uscito "un pò" dall' oggetto di questo post.

Grazie ancora per la tua risposta mau_develop.
Non è la specie più intelligente a sopravvivere e nemmeno quella piu' forte. E' quella più predisposta al cambiamento. Charles Darwin

Blog Personale

 



Web Design Bolzano Kreatif