You are here

function cloud_zoom_get_settings in Cloud Zoom 6

Function to get the cloud_zoom settings Settings are cached both statically and in the cache table for performance.

12 calls to cloud_zoom_get_settings()
cloud_zoom_admin_overview in ./cloud_zoom.admin.inc
The admin overview page callback - provides a table of fields configured with the cloud_zoom display settings
cloud_zoom_admin_preset_delete_confirm_submit in ./cloud_zoom.admin.inc
Delete preset confirm form submit hanlder
cloud_zoom_admin_preset_edit_form_submit_save in ./cloud_zoom.admin.inc
Submit handler for the save button - this saves any settings which differ from the defaults. If there are no differing options, the sub-section is removed.
cloud_zoom_admin_preset_edit_form_validate in ./cloud_zoom.admin.inc
Validate handler for the above form
cloud_zoom_field_formatter_info in ./cloud_zoom.module
Implementation of hook_field_formatter().

... See full list

File

./cloud_zoom.module, line 229
This module integrates the Cloud Zoom JQuery library from: http://www.professorcloud.com/mainsite/cloud-zoom.htm

Code

function cloud_zoom_get_settings($preset_name = NULL, $reset = FALSE) {
  if (variable_get('cloud_zoom_schema_version', 0) < 6001) {
    return array();
  }

  // Static settings cache variable
  static $settings = NULL;

  // If we're resetting, clear static and cache table
  if ($reset) {
    $settings = NULL;
    cache_clear_all('cloud_zoom:presets', 'cache');
  }

  // If settings are not set, lets define them
  if (!isset($settings)) {

    // First, try to get from the cache table
    if (($cache = cache_get('cloud_zoom:presets', 'cache')) && is_array($cache->data)) {
      $settings = $cache->data;
    }
    else {

      // Initialize the settings
      $settings = array();

      // Get anything we have defined from the DB
      $result = db_query('SELECT * FROM {cloud_zoom_presets}');
      while ($preset = db_fetch_array($result)) {

        // Mark as "normal" items
        $preset['storage'] = CLOUD_ZOOM_STORAGE_NORMAL;
        $preset['settings'] = unserialize($preset['settings']);

        // Store the preset
        $settings[$preset['name']] = $preset;
      }

      // Now loop over the hook to get any module defined presets, using
      // hook_cloud_zoom_default_presets().
      $default_presets = module_invoke_all('cloud_zoom_preset_info');

      // Allow other modules to alter the module-defined presets using:
      // hook_cloud_zoom_default_presets_alter(&$default_presets)
      drupal_alter('cloud_zoom_preset_info', $default_presets);

      // Add each defined preset to our list...
      foreach ($default_presets as $preset) {

        // ... but only if a name is set!
        if (!empty($preset['name'])) {

          // If the name is already in our settings, then we have overridden a module-level item
          if (isset($settings[$preset['name']])) {

            // Set the preset as 'overridden', but do not store the module defined preset
            $settings[$preset['name']]['storage'] = CLOUD_ZOOM_STORAGE_OVERRIDE;
          }
          else {

            // Store the preset as a default store
            $preset['storage'] = CLOUD_ZOOM_STORAGE_DEFAULT;
            $settings[$preset['name']] = $preset;
          }
        }
      }

      // Cache it for later use
      cache_set('cloud_zoom:presets', $settings);
    }
  }

  // Did we ask for a SPECIFIC preset by name? If so, return it (or FALSE if
  // it is not available)
  if ($preset_name) {
    return isset($settings[$preset_name]) ? $settings[$preset_name] : FALSE;
  }

  // Otherwise, return ALL settings
  return $settings;
}