materio-base-legacy/sites/all/modules/contrib/files/imagecache_actions/ImageCacheActionsModuleStreamWrapper.php
2015-04-19 16:46:59 +02:00

134 lines
3.8 KiB
PHP

<?php
/**
* @file
* Drupal module stream wrapper class (module://{module}/{resource}).
*
* Provides support for accessing files in module directories.
*/
class ImageCacheActionsModuleStreamWrapper extends DrupalLocalStreamWrapper {
/**
* Parses an uri into its separate components.
*
* Example:
* module://my_module/images/mask.png will return
* array('module', 'my_module', 'images/mask.png').
*
* @return array
* An array of strings containing the separate parts of the uri:
* - scheme (module)
* - module name
* - resource name
*/
protected function parseUri() {
$scheme = '';
$module = '';
$component = '';
if (!empty($this->uri)) {
list($scheme, $target) = explode('://', $this->uri, 2);
if (!empty($target)) {
$target = trim($target, '\/');
list($module, $resource) = explode('/', $target, 2);
}
}
return array($scheme, $module, $resource);
}
/**
* Implements abstract public function getDirectoryPath()
*/
public function getDirectoryPath() {
list($scheme, $module, $component) = $this->parseUri();
return drupal_get_path('module', $module);
}
/**
* Returns the local writable target of the resource within the stream.
*
* @see DrupalLocalStreamWrapper::getTarget()
*/
protected function getTarget($uri = NULL) {
if (!empty($uri)) {
$this->setUri($uri);
}
list($scheme, $module, $component) = $this->parseUri();
return $component;
}
/**
* Returns the canonical absolute path of the URI, if possible.
*
* @see DrupalLocalStreamWrapper::getLocalPath()
*/
protected function getLocalPath($uri = NULL) {
if (!empty($uri)) {
$this->setUri($uri);
}
return parent::getLocalPath();
}
/**
* Returns the local writable target of the resource within the stream.
*
* Overrides getExternalUrl().
*
* Return the HTML URI of a public file.
*/
function getExternalUrl() {
$path = str_replace('\\', '/', $this->getTarget());
return $GLOBALS['base_url'] . '/' . $this->getDirectoryPath() . '/' . drupal_encode_path($path);
}
/*
* Unsupported methods, modes and operations because we are read-only.
*/
function chmod($mode) {
return $this->unsupportedError('chmod', STREAM_REPORT_ERRORS);
}
public function stream_open($uri, $mode, $options, &$opened_path) {
if (!in_array($mode, array('r'))) {
return $this->unsupportedError("stream_open(mode = '$mode')", $options);
}
return parent::stream_open($uri, $mode, $options, $opened_path);
}
public function stream_lock($operation) {
if (in_array($operation, array(LOCK_EX))) {
return $this->unsupportedError('stream_lock(LOCK_EX)', $options);
}
return parent::stream_lock($operation);
}
public function stream_write($data) {
return $this->unsupportedError('stream_write', STREAM_REPORT_ERRORS);
}
public function stream_flush() {
return $this->unsupportedError('stream_flush', STREAM_REPORT_ERRORS);
}
public function unlink($uri) {
return $this->unsupportedError('unlink', STREAM_REPORT_ERRORS);
}
public function rename($from_uri, $to_uri) {
return $this->unsupportedError('rename', STREAM_REPORT_ERRORS);
}
public function mkdir($uri, $mode, $options) {
return $this->unsupportedError('mkdir', $options);
}
public function rmdir($uri, $options) {
return $this->unsupportedError('rmdir', $options);
}
public function unsupportedError($method, $options) {
if ($options & STREAM_REPORT_ERRORS) {
drupal_set_message("ImageCacheActionsModuleStreamWrapper is read-only and does not support $method", 'error');
watchdog(WATCHDOG_ERROR, "ImageCacheActionsModuleStreamWrapper is read-only and does not support $method");
}
return FALSE;
}
}