Example #1
0
 /**
  * @param  ConfigurationInterface $config
  * @param  array                  $args
  * @param  string                 $name
  * @return string
  */
 protected function buildUrl($config, $args, $name)
 {
     $missing = array();
     $query = array();
     $replace = array();
     $type = $config->getResourceType();
     $aliases = $config->getArgumentAliases();
     $required = $config->getRequiredArguments();
     $optional = $config->getOptionalArguments();
     $closures = $config->getManipulableArguments();
     $secure = $this->connection->doSecureRequest();
     $url = $secure === true ? 'https://' : 'http://';
     if ($required === null && ($type === ConfigurationInterface::TYPE_DYNAMIC_URL || $type === ConfigurationInterface::TYPE_DYNAMIC_PATH)) {
         throw new Exception\InvalidArgumentException('Dynamic URLs must at least require one argument.');
     }
     if (!isset($args['region']) && $type !== ConfigurationInterface::TYPE_DYNAMIC_URL) {
         $missing[] = 'region';
     }
     if (isset($args['locale'])) {
         $query['locale'] = $args['locale'];
     }
     if (is_array($closures)) {
         foreach ($closures as $name => $closure) {
             if (isset($args[$name])) {
                 $args[$name] = $closure($args[$name]);
             }
         }
     }
     if (is_array($optional)) {
         foreach ($optional as $key) {
             if (isset($args[$key])) {
                 $query[$key] = $args[$key];
             } elseif (isset($aliases[$key])) {
                 if (is_array($aliases[$key])) {
                     foreach ($aliases[$key] as $alias) {
                         if (isset($args[$alias])) {
                             $query[$key] = $args[$alias];
                             break;
                         }
                     }
                 } elseif (is_string($aliases[$key])) {
                     if (isset($args[$aliases[$key]])) {
                         $query[$key] = $args[$aliases[$key]];
                     }
                 } else {
                     throw new Exception\InvalidArgumentException(sprintf('%s Alias for %s must be an array or string, %s given.', sprintf(self::ERROR_INVALID_CONFIG, $name), $key, gettype($aliases[$key])));
                 }
             }
         }
     }
     if (is_array($required)) {
         foreach ($required as $key) {
             if (isset($args[$key])) {
                 $replace[] = $args[$key];
             } elseif (isset($aliases[$key])) {
                 if (is_array($aliases[$key])) {
                     $found = false;
                     foreach ($aliases[$key] as $alias) {
                         if (isset($args[$alias])) {
                             $found = true;
                             $replace[] = $args[$alias];
                             break;
                         }
                     }
                     if ($found === false) {
                         $missing[] = $key;
                     }
                 } elseif (is_string($aliases[$key])) {
                     if (isset($args[$aliases[$key]])) {
                         $replace[] = $args[$aliases[$key]];
                     } else {
                         $missing[] = $key;
                     }
                 } else {
                     throw new Exception\InvalidArgumentException(sprintf('%s Alias for %s must be an array or string, %s given.', sprintf(self::ERROR_INVALID_CONFIG, $name), $key, gettype($aliases[$key])));
                 }
             } else {
                 $missing[] = $key;
             }
         }
     }
     if (!empty($missing)) {
         throw new Exception\BadMethodCallException(sprintf(self::ERROR_MSSING_ARGUMENT, implode(', ', $missing)));
     }
     $query = http_build_query($query, '', '&');
     $query = $query === '' ? $query : '?' . $query;
     if ($type !== ConfigurationInterface::TYPE_DYNAMIC_URL) {
         $url .= $this->connection->getHost($args['region']);
     }
     switch ($type) {
         case ConfigurationInterface::TYPE_DYNAMIC_URL:
         case ConfigurationInterface::TYPE_DYNAMIC_PATH:
             $url .= vsprintf($config::RESOURCE_URL, $replace);
             break;
         case ConfigurationInterface::TYPE_STATIC_PATH:
             $url .= $config::RESOURCE_URL;
             break;
     }
     $url .= $query;
     return $url;
 }