diff --git a/docroot/sites/all/modules/contrib/storage_api/core_bridge/storage_core_bridge.install b/docroot/sites/all/modules/contrib/storage_api/core_bridge/storage_core_bridge.install index def10bf..57f2288 100644 --- a/docroot/sites/all/modules/contrib/storage_api/core_bridge/storage_core_bridge.install +++ b/docroot/sites/all/modules/contrib/storage_api/core_bridge/storage_core_bridge.install @@ -47,6 +47,9 @@ function storage_core_bridge_install() { } } } + + // Create selector for filesystem default scheme + storage_core_bridge_default_selector()->create(); } /** @@ -71,3 +74,11 @@ function storage_core_bridge_update_7000() { } } } + +/** + * Create file default scheme selector. + */ +function storage_core_bridge_update_7001() { + // Create file default scheme selector. + storage_core_bridge_default_selector()->create(); +} diff --git a/docroot/sites/all/modules/contrib/storage_api/core_bridge/storage_core_bridge.module b/docroot/sites/all/modules/contrib/storage_api/core_bridge/storage_core_bridge.module index 724ad12..08a0073 100644 --- a/docroot/sites/all/modules/contrib/storage_api/core_bridge/storage_core_bridge.module +++ b/docroot/sites/all/modules/contrib/storage_api/core_bridge/storage_core_bridge.module @@ -33,6 +33,10 @@ function storage_core_bridge_image_style_default_selector($isid) { return storage_selector('storage_core_bridge', 'image_style_default:' . $isid); } +function storage_core_bridge_default_selector() { + return storage_selector('storage_core_bridge', 'file_default_scheme'); +} + function storage_core_bridge_field_selector_create($field_name) { storage_core_bridge_field_selector($field_name)->create(); @@ -93,10 +97,16 @@ function storage_core_bridge_stream_wrappers() { ); } + $wrappers[storage_core_bridge_field_scheme('file_default_scheme')] = array( + 'name' => t("Storage class (default file scheme)"), + 'class' => 'DrupalStorageStreamWrapper', + 'description' => 'Storage class - default file scheme (set at /admin/config/media/file-system)', + 'type' => STREAM_WRAPPERS_WRITE_VISIBLE, + ); + return $wrappers; } - /** * Implements hook_image_style_save(). */ @@ -253,6 +263,29 @@ function storage_core_bridge_image_style_form_submit(array $form, array &$form_s } /** + * Implements hook_form_FORM_ID_alter(). + */ +function storage_core_bridge_form_system_file_system_settings_alter(array &$form, array &$form_state) { + + // Add the option to use Storage API. + $field_name = 'file_default_scheme'; + $scheme = storage_core_bridge_field_scheme($field_name); + $form[$field_name]['#options'][$scheme] = t("Storage class (select below)"); + + // Add the class selector widget. + $form[$field_name . '_storage_class'] = + storage_core_bridge_default_selector()->formItem(); + + $form['#submit'][] = 'storage_core_bridge_system_file_system_settings_submit'; +} + +function storage_core_bridge_system_file_system_settings_submit(array $form, array &$form_state) { + + storage_core_bridge_default_selector() + ->submit($form_state['values']['file_default_scheme_storage_class']); +} + +/** * Loads a storage from its URI. * * @param $uri @@ -350,8 +383,13 @@ function storage_core_bridge_styled_image_create($uri) { } } else { - $field_name = storage_core_bridge_uri_field_name($uri); - $selector = storage_core_bridge_field_selector($field_name); + $field_name = storage_core_bridge_uri_field_name($uri); + if ($field_name == 'file_default_scheme') { + $selector = storage_core_bridge_default_selector(); + } + else { + $selector = storage_core_bridge_field_selector($field_name); + } } // Create the storage. @@ -389,7 +427,17 @@ function storage_core_bridge_storage_access(Storage $storage) { return; } - $node = node_load($file_usage['id']); + $query = db_select('node'); + $result = $query->fields('node', array('uid', 'status', 'type')) + ->condition('nid', $file_usage['id']) + ->execute() + ->fetchAssoc(); + $node = new stdClass(); + $node->nid = $file_usage['id']; + $node->uid = $result['uid']; + $node->status = $result['status']; + $node->type = $result['type']; + return node_access('view', $node); } @@ -509,7 +557,12 @@ class DrupalStorageStreamWrapper implements DrupalStreamWrapperInterface { $field_name = storage_core_bridge_uri_field_name($this->uri); try { - $storage = storage_core_bridge_field_selector($field_name)->storageAdd($options); + if ($field_name == 'file_default_scheme') { + $storage = storage_core_bridge_default_selector()->storageAdd($options); + } + else { + $storage = storage_core_bridge_field_selector($field_name)->storageAdd($options); + } db_insert('storage_core_bridge') ->fields(array( @@ -521,7 +574,7 @@ class DrupalStorageStreamWrapper implements DrupalStreamWrapperInterface { catch (StorageException $e) {} } } - + public function stream_read($count) { return fread($this->fp, $count); } @@ -678,3 +731,17 @@ class DrupalStorageStreamWrapper implements DrupalStreamWrapperInterface { public function dir_closedir() {} public function realpath() {} } + +/** + * Implements hook_query_media_browser_alter(). + */ +function storage_core_bridge_query_media_browser_alter($query) { + $conditions =& $query->conditions(); + foreach ($conditions as $key => $condition) { + if (isset($condition['field']) && gettype($condition['field']) == 'string' + && substr($condition['field'], -4) == '.uri' && $condition['operator'] == 'NOT LIKE' + && substr($condition['value'], 0, 8) == 'storage-') { + unset($conditions[$key]); + } + } +}