123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?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;
- }
- }
|