/application/models/SalesforceConnect.php

https://github.com/r1zib/salesforce · PHP · 146 lines · 85 code · 21 blank · 40 comment · 6 complexity · 04721c07a8ce47c2bcdd367bd450fabd MD5 · raw file

  1. <?php
  2. /*
  3. * Permet de se connecter à Salesforce et de faire des requetes dans la base
  4. * Pattern Singleton
  5. *
  6. */
  7. require_once ('developerforce/soapclient/SforcePartnerClient.php');
  8. require_once ('developerforce/soapclient/SforceEnterpriseClient.php');
  9. class Application_Model_SalesforceConnect {
  10. private static $_instance;
  11. private $mySforceConnection;
  12. /**
  13. * Empêche la création externe d'instances.
  14. */
  15. private function __construct () {
  16. /* On se connecte à salesforce */
  17. $this->connect();
  18. }
  19. /**
  20. * Empêche la copie externe de l'instance.
  21. */
  22. private function __clone () {}
  23. /**
  24. * Renvoi de l'instance et initialisation si nécessaire.
  25. */
  26. public static function getInstance () {
  27. if (!(self::$_instance instanceof self))
  28. self::$_instance = new self();
  29. return self::$_instance;
  30. }
  31. /**
  32. * Permet de se connecter à salesForce
  33. */
  34. private function connect () {
  35. try {
  36. /*
  37. * lecture du fichier de configs/application.ini
  38. * Si on est connecté alors on prend le paramétage du user
  39. * */
  40. $config = Azeliz_Registreconfig::getInstance()->getConfig();
  41. $user = $config->salesforce->user;
  42. $password = $config->salesforce->password;
  43. $token = $config->salesforce->token;
  44. $wsdl = $config->salesforce->wsdl;
  45. Zend_Debug::dump($token);
  46. $this->mySforceConnection = new SforceEnterpriseClient();
  47. $this->mySforceConnection->createConnection($wsdl);
  48. $this->mySforceConnection->login($user, $password.$token);
  49. } catch (Exception $e) {
  50. $msg = '<pre>Problème de connection :'."Exception ".$e->faultstring."<br/><br/>\n";
  51. $msg .= 'user = '.$user.'<br/>Password = '.$password.'<br/>token = '.$token.'<br/>';
  52. $msg .= $this->infoMsg().'</pre>';
  53. // Affichage à l'écran
  54. $log = Zend_Registry::get('log');
  55. $log->log($msg,Zend_log::ALERT);
  56. return $msg;
  57. }
  58. return true;
  59. }
  60. /**
  61. * Retourne les messages d'erreur de salesforces
  62. * @return String Info de salesforce
  63. */
  64. private function infoMsg(){
  65. $msg = "Last Request:<br/>\n";
  66. $msg .= $this->mySforceConnection->getLastRequestHeaders()."<br/>\n";
  67. $msg .= $this->mySforceConnection->getLastRequest()."<br/>\n";
  68. $msg .= "Last Response:<br/><br/>\n";
  69. $msg .= $this->mySforceConnection->getLastResponseHeaders()."<br/>\n";
  70. $msg .= $this->mySforceConnection->getLastResponse()."<br/>\n";
  71. return $msg;
  72. }
  73. /**
  74. * Recherche dans un table de salesforce
  75. * @param string table de la table de salesforce
  76. * @param string cols list des champs recherché
  77. * @param string where condition de recherche
  78. * @return un tableau de la liste des enregistrements
  79. */
  80. public function query ($table,$cols, $where="",$option="", &$erreur=null) {
  81. try {
  82. $options = new QueryOptions(2000);
  83. $this->mySforceConnection->setQueryOptions($options);
  84. $vue = array();
  85. $query = "SELECT ".$cols." from ".$table;
  86. if (!empty($where)) {
  87. $query .= " Where ".$where;
  88. }
  89. if (!empty($option)) {
  90. $query .= " ".$option;
  91. }
  92. Zend_Debug::dump($query);
  93. $response = $this->mySforceConnection->query($query);
  94. $this->infoMsg();
  95. if (!$response->done) {
  96. // la requete c'est mal passé
  97. if (isset($erreur)) {
  98. $erreur = 'PB Query <br/>';
  99. }
  100. //return 'PB Query <br/>';
  101. }
  102. if (count($response->size > 0)) {
  103. foreach ($response->records as $sObject) {
  104. $vue[] = get_object_vars($sObject);
  105. }
  106. }
  107. } catch (Exception $e) {
  108. $msg = 'Problème de Query :'."Exception ".$e->faultstring."<br/><br/>\n";
  109. $msg .= $this->infoMsg();
  110. // Affichage à l'écran
  111. $log = Zend_Registry::get('log');
  112. $log->log($msg,Zend_log::ALERT);
  113. return $msg;
  114. }
  115. return $vue;
  116. }
  117. /* retourne timestamp en microseconde
  118. * @return float
  119. */
  120. function microtime_float()
  121. {
  122. list($usec, $sec) = explode(" ", microtime());
  123. return ((float)$usec + (float)$sec);
  124. }
  125. }