class DrupalAltStreamWrapper in Alternative Stream Wrappers 7
Drupal alternative stream wrapper class.
Provides support for alternative file storage locations.
This is a generic class which should work for all of the one or more Alternative Stream Wrappers provided by this module.
Extends DrupalLocalStreamWrapper.
Hierarchy
- class \DrupalLocalStreamWrapper implements DrupalStreamWrapperInterface
- class \DrupalAltStreamWrapper
Expanded class hierarchy of DrupalAltStreamWrapper
1 string reference to 'DrupalAltStreamWrapper'
- alt_stream_wrappers_stream_wrappers in ./
alt_stream_wrappers.module - Implements hook_stream_wrappers().
File
- ./
alt_stream_wrappers.module, line 55 - Provides one or more configurable alternative stream wrappers for file storage.
View source
class DrupalAltStreamWrapper extends DrupalLocalStreamWrapper {
/**
* Overrides getLocalPath().
*/
protected function getLocalPath($uri = NULL) {
if (empty($this->uri) && !empty($uri)) {
// sometimes necessary for the file_uri_scheme and variable_get
// in DrupalAltStreamWrapper's getDirectoryPath method to work
// when called from parent::getLocalPath
$this->uri = $uri;
}
return parent::getLocalPath($uri);
}
/**
* Implements abstract public function getDirectoryPath()
*/
public function getDirectoryPath() {
$scheme = file_uri_scheme($this->uri);
// todo: is temp a sensible default here or should it just be FALSE?
return variable_get('alt_stream_wrappers_' . $scheme . '_path', file_directory_temp());
}
/**
* Overrides getExternalUrl().
*/
public function getExternalUrl() {
$scheme = file_uri_scheme($this->uri);
// What kind of wrapper is this?
$wrappers = file_get_stream_wrappers();
$wrapper = isset($wrappers[$scheme]) ? $wrappers[$scheme] : FALSE;
if ($wrapper) {
if ($wrapper['type'] & STREAM_WRAPPERS_LOCAL_NORMAL) {
// Same as public:// stream wrapper
$path = str_replace('\\', '/', $this
->getTarget());
return $GLOBALS['base_url'] . '/' . self::getDirectoryPath() . '/' . drupal_encode_path($path);
}
else {
// Go through the system module like temporary:// and private://
// In order for this file to be downloadable, a module will have to
// implement hook_file_download() and return headers for this scheme.
$path = str_replace('\\', '/', $this
->getTarget());
return url('system/' . $scheme . '/' . $path, array(
'absolute' => TRUE,
));
}
}
}
}