/**
  * 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];
     }
 }