You are here

context_admin.module in Contextual Administration 6

Same filename and directory in other branches
  1. 7 context_admin.module

File

context_admin.module
View source
<?php

//$Id$

/**
 * Implementation of hook_views_api().
 */
function context_admin_views_api() {
  return array(
    'api' => 2,
    'path' => drupal_get_path('module', 'context_admin') . '/includes',
  );
}
function context_admin_ctools_plugin_directory($module, $plugin) {
  if ($module == 'page_manager' || $module == 'ctools' || $module == 'context_admin') {
    return 'plugins/' . $plugin;
  }
}
function context_admin_get_path($file, $base_path = FALSE, $module = 'context_admin') {
  $output = $base_path ? base_path() : '';
  return $output . drupal_get_path('module', $module) . '/' . $file;
}
function context_admin_load($name) {
  $cache = new stdClass();
  $cache->task_name = $name;
  return $cache;
}
function context_admin_get_page_cache($name) {
  ctools_include('object-cache');
  $cache = ctools_object_cache_get('context_admin', $name);
  if (!$cache) {
    $cache = context_admin_load($name);
    $cache->locked = ctools_object_cache_test('context_admin', $name);
  }
  return $cache;
}

/**
 * Store changes to a task handler in the object cache.
 */
function context_admin_set_page_cache($name, $page) {
  $page->changed = TRUE;
  ctools_include('object-cache');
  $cache = ctools_object_cache_set('context_admin', $name, $page);
}

/**
 * Remove an item from the object cache.
 */
function context_admin_clear_page_cache($name) {
  ctools_include('object-cache');
  ctools_object_cache_clear('context_admin', $name);
}
function context_admin_plugin_invoke($callback, $method, $args = array()) {
  $plugin = context_admin_get_plugins('context_admin', array(
    'id' => $callback,
  ));
  ctools_plugin_get_function($plugin, 'module');
  $module = $plugin['module'] . '_' . $callback;
  $hook = $method;
  $function = $module . '_' . $hook;
  if (module_hook($module, $hook)) {
    return call_user_func_array($function, $args);
  }
}
function context_admin_get_plugins($type, $options = array()) {
  $id = $options['id'] ? $options['id'] : NULL;
  ctools_include('plugins');
  ctools_include('context');
  if (is_null($id)) {
    $plugins = ctools_get_plugins('context_admin', $type);
  }
  else {
    $plugins = ctools_get_plugins('context_admin', $type, $id);
  }
  return $plugins;
}
function context_admin_get_contextual_plugins($contexts) {
  $all_plugins = context_admin_get_plugins('context_admin');
  $plugins = array();
  foreach ($all_plugins as $id => $plugin) {
    if (!empty($plugin['required context']) && !ctools_context_match_requirements($contexts, $plugin['required context'])) {
      continue;
    }
    $plugins[$id] = $plugin;
  }
  return $plugins;
}
function context_admin_form_alter(&$form, $form_state, $form_id) {

  // Checking to make sure that we're on a context_admin generated form
  $page = page_manager_get_current_page();
  if ($page && isset($page['handler']->conf['context_admin_options'])) {
    $callback = $page['handler']->conf['context_admin_options'];
    $plugin = context_admin_get_plugins('context_admin', array(
      'id' => $callback,
    ));
    $dir = module_invoke($plugin['module'], 'ctools_plugin_directory', 'context_admin', 'context_admin');
    ctools_include($plugin['name'], $plugin['module'], $dir);
    if (function_exists($plugin['module'] . '_' . $callback . '_form_alter')) {
      $function = $plugin['module'] . '_' . $callback . '_form_alter';
      $function($form, $form_state, $form_id);
    }
  }
}
function context_admin_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  $page = page_manager_get_current_page();
  if ($page && isset($page['handler']->conf['context_admin_options']) && $op != 'load') {
    $callback = $page['handler']->conf['context_admin_options'];
    $plugin = context_admin_get_plugins('context_admin', array(
      'id' => $callback,
    ));
    $dir = module_invoke($plugin['module'], 'ctools_plugin_directory', 'context_admin', 'context_admin');
    ctools_include($plugin['name'], $plugin['module'], $dir);
    module_invoke($plugin['module'] . '_' . $callback, 'nodeapi', $node, $op, $a3, $a4);
  }
  elseif ($page && isset($page['handler']->conf['context_admin_options']) && $op == 'load') {
    $callback = $page['handler']->conf['context_admin_options'];
    $plugin = context_admin_get_plugins('context_admin', array(
      'id' => $callback,
    ));
    $dir = module_invoke($plugin['module'], 'ctools_plugin_directory', 'context_admin', 'context_admin');
    ctools_include($plugin['name'], $plugin['module'], $dir);
    return module_invoke($plugin['module'] . '_' . $callback, 'nodeapi', $node, $op, $a3, $a4);
  }
}