/** * Call Drupal for endpoint by locale * @param $endpoint * @param $paramList * @param string $locale * @return array */ public static function call($endpoint, $paramList, $locale = "en_us") { if (defined('DISABLE_DRUPAL') && DISABLE_DRUPAL === true) { return []; } // Ensure locale is valid and if not throw an exeption. $Language = ClassRegistry::init('Language'); $allLocales = $Language->find('list', array('fields' => array('Language.locale'))); $allLocales = array_map('strtolower', $allLocales); $locale = strtolower($locale); if (!in_array($locale, $allLocales)) { $locale = 'en_us'; } $log_locale = $locale; $locale = $locale == "es_mx" ? "es_us" : $locale; $locale = $locale == "en_nz" ? "en_us" : $locale; $locale = $locale == "en_au" ? "en_us" : $locale; $locale = $locale == "en_uk" ? "en_us" : $locale; $locale = $locale == "en_ca" ? "en_us" : $locale; $locale = $locale == "en_mx" ? "en_us" : $locale; $locale = $locale == "en_de" ? "en_us" : $locale; $locale = $locale == "en_fr" ? "en_us" : $locale; $locale = $locale == "fr_fr" ? "fr_fr" : $locale; $locale = $locale == "en_es" ? "en_us" : $locale; $locale = $locale == "es_es" ? "es_es" : $locale; if ($locale == "en_us") { $locale = false; } else { $loc = explode("_", $locale); $locale = implode("-", $loc); $locale = $locale == "fr-ca" ? "fr-CA" : $locale; } $uri = ""; $uri .= $locale ? $locale . "/" : "en/"; if ($endpoint == "product.json") { $uri .= "product/" . $paramList['sku'] . ".json"; } elseif ($endpoint == "email_text.json") { $uri .= "email_content/" . $paramList['tag'] . ".json"; } elseif ($endpoint == "posts.json") { $uri .= "fb_wall_post/fb_wall_post.json"; } elseif ($endpoint == "page_blocks.json") { $uri .= "page_block/" . $paramList['tag'] . ".json"; } elseif ($endpoint == 'kudos.json') { $uri .= 'kudos/kudos.json'; } $log_info = ['host' => DruniqueAPIURL, 'uri' => $uri, 'locale' => $log_locale]; $url = DruniqueAPIURL . $uri; /** * Disable drupal with "define("DISABLE_DRUPAL", true); */ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_HEADER, 1); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size); $body = substr($response, $header_size); $result = json_decode($body); curl_close($ch); $return = []; if (isset($result[0])) { foreach ($result as $a) { $obj = array(); foreach ($a as $k => $v) { if ($k == 'image') { $start = strpos($v, 'src=') + 5; $end = strpos($v, "width=") - 32; $v = substr($v, $start, $end); } if ($k == 'images') { $imageList = array(); $count = 0; $doc = new DOMDocument(); @$doc->loadHTML($v); $tags = $doc->getElementsByTagName('img'); foreach ($tags as $tag) { $imageList[$count] = ['url' => $tag->getAttribute('src'), 'title' => $tag->getAttribute('title')]; $count++; } $v = $imageList; $obj['images'] = $v; } elseif ($k == 'thumbs') { $i = explode(",", $v); $count = 0; // $tmp = array(); $IL = $obj['images']; foreach ($i as $img) { $IL[$count]['thumbURL'] = $img; $count++; } $v = $IL; $obj['images'] = $v; } else { $obj[$k] = $v; } } $return[] = $obj; } if (extension_loaded('newrelic') && $locale == false) { newrelic_set_appname('Younique Products'); foreach ($result as $record) { newrelic_record_custom_event('drupalNodeFound', ['node' => $record->nid, 'title' => $record->title]); } } if (in_array($endpoint, ['page_blocks.json', 'email_text.json', 'kudos.json'])) { $return = DruniqueAPIUtil::pageFormat($return); } $return['log_info'] = $log_info; return $return; } else { $error_msg = "JSON Data Error: Empty result.\n"; $error_msg .= " URL: {$url}\n"; $error_msg .= " Response Code: {$http_code}\n"; $error_msg .= " Header: {$header}\n"; $error_msg .= " Body: {$body}\n"; if (extension_loaded('newrelic')) { newrelic_set_appname('Younique Products'); newrelic_record_custom_event('drupalNodeNotFound', ['url' => $url, 'response_code' => $http_code, 'header' => $header, 'body' => $body]); } CakeLog::error($error_msg, 'drupalCache'); return ['log_info' => $log_info]; } }