getRootServiceURI('TEST') . '/mystore/delivery'; else $serviceURL = $dejalaConfig->getRootServiceURI('PROD') . '/mystore/delivery'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $delivery, 'POST', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $nodeList = $doc->getElementsByTagName('delivery'); if ($nodeList->length > 0) $this->getNodeValue($nodeList->item(0), $delivery); } return ($responseArray); } /** * Quick creates a store account at dejala.fr * only works on Dejala test platform * @returns the HTTP status code of the request **/ public function createInstantStore($dejalaConfig, $storeName) { $serviceURL = $dejalaConfig->getRootServiceURI('TEST') . '/instantstore'; $postargs['login']=$dejalaConfig->login; $postargs['password']=$dejalaConfig->password; $postargs['store_url']=$dejalaConfig->storeUrl; $postargs['store_name'] = $storeName; $postargs['platform'] = 'prestashop'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $postargs, 'POST', FALSE); return ($responseArray); } public static function wtf($var, $arrayOfObjectsToHide=null, $fontSize=11) { $text = print_r($var, true); if (is_array($arrayOfObjectsToHide)) foreach ($arrayOfObjectsToHide as $objectName) { $searchPattern = '#('.$objectName.' Object\n(\s+)\().*?\n\2\)\n#s'; $replace = "$1--> HIDDEN - courtesy of wtf() <--)"; $text = preg_replace($searchPattern, $replace, $text); } // color code objects $text = preg_replace('#(\w+)(\s+Object\s+\()#s', '$1$2', $text); // color code object properties $text = preg_replace('#\[(\w+)\:(public|private|protected)\]#', '[$1:$2]', $text); echo '
'.$text.'
'; } public function getStoreLocation($dejalaConfig, &$location) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore'; $postargs = array(); $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $postargs, 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $locationNodes=$doc->getElementsByTagName('location'); if ($locationNodes->length > 0) { $locationNode = $locationNodes->item(0); $nodeList = $locationNode->childNodes; foreach ($nodeList as $element) $location[$element->nodeName] = $element->textContent; } } return ($responseArray); } public function getStoreCalendar($dejalaConfig, &$calendar) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/calendar/'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, array(), 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $nodeList = $doc->getElementsByTagName('entry'); if ($nodeList->length > 0) { foreach ($nodeList as $element) { $calendarNode = $this->getNodeValue($element); $calendar['entries'][(int)($calendarNode['weekday'])] = $calendarNode; } } $nodeList = $doc->getElementsByTagName('exception'); $calendar['exceptions'] = array(); if ($nodeList->length > 0) foreach ($nodeList as $element) $calendar['exceptions'][] = $this->getNodeValue($element); } return ($responseArray); } public function getStoreContacts($dejalaConfig, &$contacts) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore'; $postargs = array(); $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $postargs, 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $contactsNodeList = $doc->getElementsByTagName('contacts'); if ($contactsNodeList->length > 0) { $contactNodes = $contactsNodeList->item(0)->childNodes; if ($contactNodes) foreach ($contactNodes as $contactNode) { $name = $contactNode->nodeName; $nodeList = $contactNode->childNodes; $currentContactNode = array(); if ($nodeList) foreach ($nodeList as $element) $currentContactNode[$element->nodeName] = $element->textContent; $contacts[$name] = $currentContactNode; } } } return ($responseArray); } public function getStoreProducts($dejalaConfig, &$products) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/products'; $postargs = array(); $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $postargs, 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $productsNodeList = $doc->getElementsByTagName('product'); foreach ($productsNodeList as $productNode) { $currentProduct = array(); $nodeList = $productNode->childNodes; foreach ($nodeList as $element) $currentProduct[$element->nodeName] = $element->textContent; if (count($currentProduct)) $products[] = $currentProduct; } } usort($products, array("DejalaUtils", "cmpProducts")); return ($responseArray); } private static function cmpProducts($a, $b) { if ($a['priority'] == $b['priority']) { if (($a['price'] == $b['price'])) return ($a['id'] < $b['id']) ? -1 : 1 ; return ($a['price'] < $b['price']) ? -1 : 1 ; } return ($a['priority'] < $b['priority']) ? -1 : 1; } public function getStoreQuotation($dejalaConfig, $quotationElements, &$products) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/quotation'; $postargs = $quotationElements; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $postargs, 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $productsNodeList = $doc->getElementsByTagName('product'); foreach ($productsNodeList as $productNode) { $currentProduct = $this->getNodeValue($productNode); unset($currentProduct['calendar']['entries']['entry']); $calendarNodeList = $doc->getElementsByTagName('entry'); foreach ($calendarNodeList as $calendarNode) { $calendarEntry = $this->getNodeValue($calendarNode); $currentProduct['calendar']['entries'][$calendarEntry['weekday']] = $calendarEntry; } $exceptionNodeList = $doc->getElementsByTagName('exception'); $currentProduct['calendar']['exceptions'] = array(); foreach ($exceptionNodeList as $exceptionNode) $currentProduct['calendar']['exceptions'][] = $this->getNodeValue($exceptionNode); /*$currentProduct = array(); $nodeList = $productNode->childNodes; foreach ($nodeList as $element) { $currentProduct[$element->nodeName] = $element->textContent; } */ if (count($currentProduct)) $products[] = $currentProduct; } } usort($products, array("DejalaUtils", "cmpProducts")); return ($responseArray); } public function getStoreAttributes($dejalaConfig, &$store) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore'; $postargs = array(); $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $postargs, 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $fatherNodeList = $doc->getElementsByTagName('store'); if ($fatherNodeList->length > 0) { $childNodes = $fatherNodeList->item(0)->childNodes; foreach ($childNodes as $childNode) $store[$childNode->nodeName] = $childNode->textContent; } $nodeList = $doc->getElementsByTagName('attributes'); $store['attributes'] = array(); if ($nodeList->length > 0) $store['attributes'] = $this->getNodeValue($nodeList->item(0)); } return ($responseArray); } public function getStoreProcesses($dejalaConfig, &$processes) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore'; $postargs = array(); $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $postargs, 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $fatherNodeList = $doc->getElementsByTagName('processes'); if ($fatherNodeList->length > 0) { $childNodes = $fatherNodeList->item(0)->childNodes; foreach ($childNodes as $childNode) $processes[$childNode->nodeName] = $childNode->textContent; } } return ($responseArray); } public function getStoreProductByID($dejalaConfig, $productID, &$product) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/products/' . $productID; $postargs = array(); $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $postargs, 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $productsNodeList = $doc->getElementsByTagName('product'); if ($productsNodeList->length > 0) { $nodeList = $productsNodeList->item(0)->childNodes; foreach ($nodeList as $element) $product[$element->nodeName] = $element->textContent; } } return ($responseArray); } public function getDelivery($dejalaConfig, &$delivery, $mode) { if ($mode !== 'PROD') $serviceURL = $dejalaConfig->getRootServiceURI('TEST') . '/mystore/delivery/' . $delivery['id']; else $serviceURL = $dejalaConfig->getRootServiceURI('PROD') . '/mystore/delivery/' . $delivery['id']; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, array(), 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $nodeList = $doc->getElementsByTagName('delivery'); if ($nodeList->length > 0) $this->getNodeValue($nodeList->item(0), $delivery); } return ($responseArray); } /** * Transforms and returns node into tree structure, use $value array if not null **/ function getNodeValue($node, &$value=NULL) { if ($node instanceof DOMElement) { $childNodes = $node->childNodes; $onlyText = TRUE; $text = ''; foreach ($childNodes as $childNode) { if ($childNode instanceof DOMElement) { $onlyText = FALSE; $value[$childNode->nodeName] = $this->getNodeValue($childNode); } } if ($onlyText) return ($value=$node->textContent); } return ($value); } public function getStoreDeliveries($dejalaConfig, &$deliveries, $args = array()) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/deliveries'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $args, 'GET', TRUE); if (!($xml = strstr($responseArray['response'], 'loadXML($xml); $childNodes = $doc->getElementsByTagName('delivery'); foreach ($childNodes as $childNode) $deliveries[] = $this->getNodeValue($childNode); } return ($responseArray); } public function setStoreContacts($dejalaConfig, &$contacts) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/contacts'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $contacts, 'PUT', TRUE); return ($responseArray); } public function setStoreLocation($dejalaConfig, &$location) { $serviceURL = $dejalaConfig->getRootServiceURI('TEST') . '/mystore/location'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $location, 'PUT', TRUE); return ($responseArray); } public function setStoreProcesses($dejalaConfig, &$processes) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/processes'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $processes, 'PUT', TRUE); return ($responseArray); } public function setStoreProducts($dejalaConfig, &$products) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/products'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $products, 'PUT', TRUE); return ($responseArray); } public function setStoreCalendar($dejalaConfig, &$calendar) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/calendar'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $calendar, 'POST', TRUE); return ($responseArray); } public function setStoreAttributes($dejalaConfig, &$attributes) { $serviceURL = $dejalaConfig->getRootServiceURI() . '/mystore/attributes'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, $attributes, 'PUT', TRUE); return ($responseArray); } /** * Ask Dejala.fr to create an account for the store on the production platform **/ public function goLive($dejalaConfig) { $serviceURL = $dejalaConfig->getRootServiceURI('TEST') . '/mystore/golive'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, array(), 'PUT', TRUE); return ($responseArray); } /** * teste la connexion sur le service Dejala dans le mode (TEST/PROD) * */ public function ping($dejalaConfig, $mode) { if ($mode !== 'PROD') $serviceURL = $dejalaConfig->getRootServiceURI('TEST') . '/ping'; else $serviceURL = $dejalaConfig->getRootServiceURI('PROD') . '/ping'; $responseArray = $this->makeRequest($dejalaConfig, $serviceURL, array(), 'GET', TRUE); return ($responseArray); } public function makeRequest($dejalaConfig, $serviceURL, $args, $method='POST', $needAuth=TRUE) { $session = curl_init($serviceURL); $requestArgs = ""; foreach ($args as $key => $value) $requestArgs = $requestArgs . '&' . $key . '=' . urlencode($value); if ($method == 'GET') { if (strlen($requestArgs) > 0) $requestArgs = '?' . $requestArgs; $session = curl_init($serviceURL . $requestArgs); } elseif ($method == 'POST') { $session = curl_init($serviceURL); curl_setopt($session, CURLOPT_POST, true); curl_setopt($session, CURLOPT_POSTFIELDS, $requestArgs); } elseif ($method == 'PUT') { curl_setopt($session, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($session, CURLOPT_POSTFIELDS, $requestArgs); } // manage authenth if ($needAuth) { curl_setopt($session, CURLOPT_USERPWD, $dejalaConfig->login.':'.$dejalaConfig->password); curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); } // SSL option if ($dejalaConfig->useSSL === 1) { curl_setopt($session, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($session, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($session, CURLOPT_PORT, 443); } curl_setopt($session, CURLOPT_HEADER, true); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Do the POST and then close the session $response = curl_exec($session); curl_close($session); // Get HTTP Status code from the response $status_code = array(); preg_match('/\d\d\d/', $response, $status_code); $responseArray['status']=$status_code[0]; $responseArray['response']=$response; return ($responseArray); } public function mylog($msg) { require_once(dirname(__FILE__) . "/MyLogUtils.php"); $myFile = dirname(__FILE__) . "/logFile.txt"; MyLogUtils::myLog($myFile, $msg); } // get a string of a value for Log purposes public function logValue($mvalue, $lvl=0) { require_once(dirname(__FILE__) . "/MyLogUtils.php"); return (MyLogUtils::logValue($mvalue, $lvl)); } }