* * @license http://opensource.org/licenses/bsd-license.php BSD * */ /** * * Load require super-class * */ Solar::loadClass('Solar_Base'); /** * * Provides an interface to Amazon's Simple Storage System (S3). * * * This provides a native Solar API to Amazon's S3 web service. You instantiate * this object using the {@link Solar::factory()}. * * Your Amazon Access Key and Secret Key must be part of your configuration or * passed in to this object on instantiation. Sample configuration as part of * your Solar.config.php: * * $config['Domain_Service_Amazon_S3'] = array( * 'access_key' => '12345', * 'secret_key' => 'super secret hash' * ); * * * For information on how to obtain keys, please visit the * {@link http://aws.amazon.com/s3 Amazon S3} webpage. * * * NOTE: This is still under development, so API documents are being kept * purposely small so they do not become obsoleted. Full documentations will be * provided in this space as soon as this object stablizes. For an example of * how this class can be used, see {@link Domain51_App_S3} * * * @package Domain51 * * @subpackage Domain51_Service * * @author Travis Swicegood * * @license http://opensource.org/licenses/bsd-license.php BSD * */ class Domain51_Service_Amazon_S3 extends Solar_Base { /** * * Provides the default values for internal configuration * * Keys are: * `access_key` : (string) * The Amazon provided S3 Access Key * * `secret_key` : (string) * The Amazon provided S3 Secret Key * * * @var array * * @access protected * */ protected $_Domain51_Service_Amazon_S3 = array( 'access_key' => '', 'secret_key' => '', 'connection_type' => 'pecl' ); private $_connection = null; /** * * Handle instantiation * * * @param array $config * */ public function __construct($config = null) { if (!extension_loaded('http')) { throw $this->_exception( 'ERR_EXTENSION_NOT_LOADED', array('missing_extension' => 'pecl/http') ); } parent::__construct($config); $authGen = Solar::factory( 'Domain51_Service_Amazon_Util_AuthorizationGenerator', $this->_config ); $headerConfig = array( 'authGen' => $authGen ); $header = Solar::factory( 'Domain51_Service_Amazon_Util_Header', $headerConfig ); $this->_connection = Solar::factory( 'Domain51_Service_Amazon_Util_Connection', array_merge($this->_config, array('header' => $header)) ); } /** * * Provide a Strategy to load various PHP objects to handle generating * requests to S3. * * Note: This is always invoked via PHP 5's magic methods, and never * directly. * * * @param string $method * * @return object * */ public function __get($method) { $method = strtolower($method); switch ($method) { case 'bucket' : case 'object' : case 'service' : $adapter = ucfirst($method); break; default: throw $this->_exception( 'ERR_UNKNOWN_PROPERTY', array('property' => $method) ); } $adapterClass = 'Domain51_Service_Amazon_S3_' . $adapter; $params = array( 'connection' => $this->_connection ); return Solar::factory($adapterClass, $params); } /** * * Creates and returns a container for various types of requests. * * Currently, this only creates an "object" type container, but will be * expanded to create "buckets" as well. * * * @param string $type Currently only "object" is a valid parameter * * @return object * $type == 'object' returns: * {@link Domain51_Service_Amazon_S3_Value_Object} * * * @todo Implement 'bucket' type */ public function create($type) { $type = strtolower($type); switch ($type) { case 'object': $adapter = ucfirst($type); break; default: throw $this->_exception( 'ERR_CONTAINER_NOT_IMPLEMENTED', array('container_type' => $type) ); } return Solar::factory('Domain51_Service_Amazon_S3_Value_' . $adapter); } } ?>