first import

This commit is contained in:
Bachir Soussi Chiadmi
2015-04-08 11:40:19 +02:00
commit 1bc61b12ad
8435 changed files with 1582817 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
name = Mini panels
description = Create mini panels that can be used as blocks by Drupal and panes by other panel modules.
package = "Panels"
dependencies[] = panels
core = 7.x
files[] = plugins/export_ui/panels_mini_ui.class.php
; Information added by drupal.org packaging script on 2013-03-02
version = "7.x-3.3+39-dev"
core = "7.x"
project = "panels"
datestamp = "1362187383"

View File

@@ -0,0 +1,124 @@
<?php
/**
* Implementation of hook_schema().
*/
function panels_mini_schema() {
// This should always point to our 'current' schema. This makes it relatively easy
// to keep a record of schema as we make changes to it.
return panels_mini_schema_1();
}
/**
* Schema version 1 for Panels in D6.
*/
function panels_mini_schema_1() {
$schema = array();
$schema['panels_mini'] = array(
'export' => array(
'identifier' => 'mini',
'load callback' => 'panels_mini_load',
'load all callback' => 'panels_mini_load_all',
'save callback' => 'panels_mini_save',
'delete callback' => 'panels_mini_delete',
'export callback' => 'panels_mini_export',
'api' => array(
'owner' => 'panels_mini',
'api' => 'panels_default',
'minimum_version' => 1,
'current_version' => 1,
),
),
'fields' => array(
'pid' => array(
'type' => 'serial',
'not null' => TRUE,
'no export' => TRUE,
'description' => 'The primary key for uniqueness.',
),
'name' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'The unique name of the mini panel.',
),
'category' => array(
'type' => 'varchar',
'length' => '64',
'description' => 'The category this mini panel appears in on the add content pane.',
),
'did' => array(
'type' => 'int',
'no export' => TRUE,
'description' => 'The display ID of the panel.',
),
'admin_title' => array(
'type' => 'varchar',
'length' => '128',
'description' => 'The administrative title of the mini panel.',
),
'admin_description' => array(
'type' => 'text',
'size' => 'big',
'description' => 'Administrative title of this mini panel.',
'object default' => '',
),
'requiredcontexts' => array(
'type' => 'text',
'size' => 'big',
'serialize' => TRUE,
'object default' => array(),
'description' => 'An array of required contexts.',
),
'contexts' => array(
'type' => 'text',
'size' => 'big',
'serialize' => TRUE,
'object default' => array(),
'description' => 'An array of contexts embedded into the panel.',
),
'relationships' => array(
'type' => 'text',
'size' => 'big',
'serialize' => TRUE,
'object default' => array(),
'description' => 'An array of relationships embedded into the panel.',
),
),
'primary key' => array('pid'),
'unique keys' => array(
'name' => array('name'),
),
);
return $schema;
}
/**
* Implementation of hook_uninstall().
*/
function panels_mini_uninstall() {
$panels_exists = db_table_exists('panels_display');
$result = db_query("SELECT * FROM {panels_mini}");
$deltas = array();
foreach ($result as $panel_mini) {
// Delete all associated displays.
if (!function_exists('panels_delete_display')) {
require_once drupal_get_path('module', 'panels') .'/panels.module';
}
if ($panels_exists) {
panels_delete_display($panel_mini->did);
}
$deltas[] = $panel_mini->pid;
}
if ($deltas) {
// Delete all configured blocks.
db_delete('block')
->condition('module', 'panels_mini')
->condition('delta', $deltas)
->execute();
}
}

View File

@@ -0,0 +1,482 @@
<?php
/**
* @file panels_mini.module
*
* This module provides mini panels which are basically panels that can be
* used within blocks or other panels.
*/
/**
* Implementation of hook_permission().
*/
function panels_mini_permission() {
return array(
'create mini panels' => array(
'title' => t('Create mini panels'),
'description' => t('Create new mini panels'),
),
'administer mini panels' => array(
'title' => t('Administer mini panels'),
'description' => t('Edit and delete mini panels'),
),
);
}
/**
* Implementation of hook_menu().
*/
function panels_mini_menu() {
// Safety: go away if CTools is not at an appropriate version.
if (!defined('PANELS_REQUIRED_CTOOLS_API') || !module_invoke('ctools', 'api_version', PANELS_REQUIRED_CTOOLS_API)) {
return array();
}
$items['admin/structure/mini-panels/settings'] = array(
'title' => 'Settings',
'page callback' => 'panels_mini_settings',
'access arguments' => array('create mini panels'),
'type' => MENU_LOCAL_TASK,
);
// Also provide settings on the main panel UI
$items['admin/structure/panels/settings/panels-mini'] = array(
'title' => 'Mini panels',
'page callback' => 'panels_mini_settings',
'access arguments' => array('create mini panels'),
'type' => MENU_LOCAL_TASK,
);
return $items;
}
/**
* Settings for mini panels.
*/
function panels_mini_settings() {
ctools_include('common', 'panels');
return drupal_get_form('panels_common_settings', 'panels_mini');
}
// ---------------------------------------------------------------------------
// Allow the rest of the system access to mini panels
/**
* Implementation of hook_block_info().
*/
function panels_mini_block_info() {
// Safety: go away if CTools is not at an appropriate version.
if (!defined('PANELS_REQUIRED_CTOOLS_API') || !module_invoke('ctools', 'api_version', PANELS_REQUIRED_CTOOLS_API)) {
return array();
}
$blocks = array();
$minis = panels_mini_load_all();
foreach ($minis as $panel_mini) {
if (empty($panel_mini->disabled) && (module_exists('page_manager') || empty($panel_mini->requiredcontexts))) {
$blocks[$panel_mini->name] = array(
'info' => t('Mini panel: "@title"', array('@title' => $panel_mini->admin_title)),
'cache' => DRUPAL_NO_CACHE,
);
}
}
return $blocks;
}
/**
* Implementation of hook_block_view().
*
* @see panels_mini_panels_mini_content_type_render().
*/
function panels_mini_block_view($delta = 0) {
// static recursion protection.
static $viewing = array();
if (!empty($viewing[$delta])) {
return;
}
$viewing[$delta] = TRUE;
$panel_mini = panels_mini_load($delta);
if (empty($panel_mini)) {
// Bail out early if the specified mini panel doesn't exist.
return;
}
ctools_include('context');
$contexts = array();
if (module_exists('page_manager') && $current_page = page_manager_get_current_page()) {
if (!empty($current_page['contexts'])) {
$contexts = ctools_context_match_required_contexts($panel_mini->requiredcontexts, $current_page['contexts']);
}
}
$panel_mini->context = $panel_mini->display->context = ctools_context_load_contexts($panel_mini, FALSE, $contexts);
$panel_mini->display->css_id = panels_mini_get_id($panel_mini->name);
$block = array();
$block['content'] = panels_render_display($panel_mini->display);
$block['subject'] = $panel_mini->display->get_title();
unset($viewing[$delta]);
return $block;
}
/**
* Implementation of hook_block_configure().
*/
function panels_mini_block_configure($delta = 0) {
return array(
'admin_shortcut' => array(
'#markup' => l(t('Manage this mini-panel'), 'admin/structure/mini-panels/list/' . $delta . '/edit')
),
);
}
/**
* Implements hook_block_list_alter().
*
* Remove the block if the required contexts are not available.
*/
function panels_mini_block_list_alter(&$blocks) {
if (module_exists('page_manager')) {
$current_page = page_manager_get_current_page();
}
foreach ($blocks as $key => $block) {
if ($block->module != 'panels_mini') {
// This block was added by a contrib module, leave it in the list.
continue;
}
$panel_mini = panels_mini_load($block->delta);
if (empty($panel_mini)) {
// Bail out early if the specified mini panel doesn't exist.
unset($blocks[$key]);
continue;
}
if (!empty($panel_mini->requiredcontexts)) {
if (!$current_page || empty($current_page['contexts'])) {
unset($blocks[$key]);
continue;
}
else {
$required = array();
foreach ($panel_mini->requiredcontexts as $context) {
$info = ctools_get_context($context['name']);
$required[] = new ctools_context_required($context['identifier'], $info['context name']);
}
if (!ctools_context_match_requirements($current_page['contexts'], $required)) {
unset($blocks[$key]);
continue;
}
}
}
}
}
/**
* Statically store all used IDs to ensure all mini panels get a unique id.
*/
function panels_mini_get_id($name) {
$id_cache = &drupal_static(__FUNCTION__, array());
$id = 'mini-panel-' . $name;
if (!empty($id_cache[$name])) {
$id .= "-" . $id_cache[$name]++;
}
else {
$id_cache[$name] = 1;
}
return $id;
}
// ---------------------------------------------------------------------------
// Database functions.
/**
* Create a new page with defaults appropriately set from schema.
*/
function panels_mini_new($set_defaults = TRUE) {
ctools_include('export');
return ctools_export_new_object('panels_mini', $set_defaults);
}
/**
* Load a single mini panel.
*/
function panels_mini_load($name) {
$cache = &drupal_static('panels_mini_load_all', array());
// We use array_key_exists because failed loads will be NULL and
// isset() will try to load it again.
if (!array_key_exists($name, $cache)) {
ctools_include('export');
$result = ctools_export_load_object('panels_mini', 'names', array($name));
if (isset($result[$name])) {
if (empty($result[$name]->display)) {
$result[$name]->display = panels_load_display($result[$name]->did);
if (!empty($result[$name]->title) && empty($result[$name]->display->title)) {
$result[$name]->display->title = $result[$name]->title;
}
}
$cache[$name] = $result[$name];
if (!empty($result[$name]->title) && empty($result[$name]->admin_title)) {
$cache[$name]->admin_title = $result[$name]->title;
}
}
else {
$cache[$name] = NULL;
}
}
if (isset($cache[$name])) {
return $cache[$name];
}
}
/**
* Load all mini panels.
*/
function panels_mini_load_all($reset = FALSE) {
$cache = &drupal_static('panels_mini_load_all', array());
static $all_loaded = FALSE;
// We check our own private static because individual minis could have
// been loaded prior to load all and we need to know that.
if (!$all_loaded || $reset) {
$all_loaded = TRUE;
if ($reset) {
$cache = array();
}
ctools_include('export');
$minis = ctools_export_load_object('panels_mini');
$dids = array();
foreach ($minis as $mini) {
if (empty($cache[$mini->name])) {
if (!empty($mini->did)) {
$dids[$mini->did] = $mini->name;
}
else {
// Translate old style titles into new titles.
if (!empty($mini->title) && empty($mini->display->title)) {
$mini->display->title = $mini->title;
}
}
// Translate old style titles into new titles.
if (isset($mini->title) && empty($mini->admin_title)) {
$mini->admin_title = $mini->title;
}
$cache[$mini->name] = $mini;
}
}
$displays = panels_load_displays(array_keys($dids));
foreach ($displays as $did => $display) {
if (!empty($cache[$dids[$did]]->title) && empty($display->title)) {
$display->title = $cache[$dids[$did]]->title;
}
$cache[$dids[$did]]->display = $display;
}
}
// Strip out NULL entries that may have been added by panels_mini_load().
return array_filter($cache);
}
/**
* Write a mini panel to the database.
*/
function panels_mini_save(&$mini) {
if (!empty($mini->display)) {
$display = panels_save_display($mini->display);
$mini->did = $display->did;
}
$update = (isset($mini->pid) && $mini->pid != 'new') ? array('pid') : array();
drupal_write_record('panels_mini', $mini, $update);
return $mini;
}
/**
* Remove a mini panel.
*/
function panels_mini_delete($mini) {
db_delete('panels_mini')
->condition('name', $mini->name)
->execute();
if (db_table_exists('block') && $mini->type != t('Overridden')) {
// Also remove from block table as long as there isn't a default that may appear.
db_delete('block')
->condition('delta', $mini->name)
->condition('module', 'panels_mini')
->execute();
}
return panels_delete_display($mini->did);
}
/**
* Export a mini panel.
*/
function panels_mini_export($mini, $indent = '') {
ctools_include('export');
$output = ctools_export_object('panels_mini', $mini, $indent);
// Export the primary display
$display = !empty($mini->display) ? $mini->display : panels_load_display($mini->did);
$output .= panels_export_display($display, $indent);
$output .= $indent . '$mini->display = $display' . ";\n";
return $output;
}
/**
* Remove the block version of mini panels from being available content types.
*/
function panels_mini_ctools_block_info($module, $delta, &$info) {
$info = NULL;
}
/**
* Implementation of hook_ctools_plugin_directory() to let the system know
* we implement task and task_handler plugins.
*/
function panels_mini_ctools_plugin_directory($module, $plugin) {
if ($module == 'ctools' && ($plugin == 'content_types' || $plugin == 'export_ui')) {
return 'plugins/' . $plugin;
}
}
/**
* Get the display cache for the panels_mini plugin.
*/
function _panels_mini_panels_cache_get($key) {
ctools_include('export-ui');
$plugin = ctools_get_export_ui('panels_mini');
$handler = ctools_export_ui_get_handler($plugin);
if (!$handler) {
return;
}
$item = $handler->edit_cache_get($key);
if (!$item) {
$item = ctools_export_crud_load($handler->plugin['schema'], $key);
}
return array($handler, $item);
}
/**
* Get display edit cache for the panels mini export UI
*
* The key is the second half of the key in this form:
* panels_mini:TASK_NAME:HANDLER_NAME;
*/
function panels_mini_panels_cache_get($key) {
ctools_include('common', 'panels');
list($handler, $item) = _panels_mini_panels_cache_get($key);
if (isset($item->mini_panels_display_cache)) {
return $item->mini_panels_display_cache;
}
$cache = new stdClass();
$cache->display = $item->display;
$cache->display->context = ctools_context_load_contexts($item);
$cache->display->cache_key = 'panels_mini:' . $key;
$cache->content_types = panels_common_get_allowed_types('panels_mini', $cache->display->context);
$cache->display_title = TRUE;
// @TODO support locking
$cache->locked = FALSE;
return $cache;
}
/**
* Store a display edit in progress in the page cache.
*/
function panels_mini_panels_cache_set($key, $cache) {
list($handler, $item) = _panels_mini_panels_cache_get($key);
$item->mini_panels_display_cache = $cache;
$handler->edit_cache_set_key($item, $key);
}
/**
* Save all changes made to a display using the panels mini UI cache.
*/
function panels_mini_panels_cache_clear($key, $cache) {
list($handler, $item) = _panels_mini_panels_cache_get($key);
$handler->edit_cache_clear($item);
}
/**
* Save all changes made to a display using the panels mini UI cache.
*/
function panels_mini_panels_cache_save($key, $cache) {
list($handler, $item) = _panels_mini_panels_cache_get($key);
$item->display = $cache->display;
panels_mini_save($item);
$handler->edit_cache_clear($item);
}
/**
* Break the lock on a panels mini page.
*/
function panels_mini_panels_cache_break_lock($key, $cache) {
}
/**
* Implementation of hook_panels_dashboard_blocks().
*
* Adds mini panels information to the Panels dashboard.
*/
function panels_mini_panels_dashboard_blocks(&$vars) {
$vars['links']['panels_mini'] = array(
'title' => l(t('Mini panel'), 'admin/structure/mini-panels/add'),
'description' => t('Mini panels are small content areas exposed as blocks, for when you need to have complex block layouts or layouts within layouts.'),
'weight' => -1,
);
// Load all mini panels and their displays.
$panel_minis = panels_mini_load_all();
$count = 0;
$rows = array();
foreach ($panel_minis as $panel_mini) {
$rows[] = array(
check_plain($panel_mini->admin_title),
array(
'data' => l(t('Edit'), "admin/structure/mini-panels/list/$panel_mini->name/edit"),
'class' => 'links',
),
);
// Only show 10.
if (++$count >= 10) {
break;
}
}
if ($rows) {
$content = theme('table', array('rows' => $rows, 'attributes' => array('class' => 'panels-manage')));
}
else {
$content = '<p>' . t('There are no mini panels.') . '</p>';
}
$vars['blocks']['panels_mini'] = array(
'weight' => -100,
'title' => t('Manage mini panels'),
'link' => l(t('Go to list'), 'admin/structure/mini-panels'),
'content' => $content,
'class' => 'dashboard-mini-panels',
'section' => 'left',
);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

View File

@@ -0,0 +1,176 @@
<?php
/**
* @file
* Contains the content type plugin for a mini panel. While this does not
* need to be broken out into a .inc file, it's convenient that we do so
* that we don't load code unneccessarily. Plus it demonstrates plugins
* in modules other than Panels itself.
*
*/
/**
* Specially named hook. for .inc file. This looks a little silly due to the
* redundancy, but that's really just because the content type shares a
* name with the module.
*/
function panels_mini_panels_mini_ctools_content_types() {
return array(
'title' => t('Mini panels'),
'content type' => 'panels_mini_panels_mini_content_type_content_type',
);
}
/**
* Return each available mini panel available as a subtype.
*/
function panels_mini_panels_mini_content_type_content_type($subtype_id, $plugin) {
$mini = panels_mini_load($subtype_id);
return _panels_mini_panels_mini_content_type_content_type($mini);
}
/**
* Return each available mini panel available as a subtype.
*/
function panels_mini_panels_mini_content_type_content_types($plugin) {
$types = array();
foreach (panels_mini_load_all() as $mini) {
$type = _panels_mini_panels_mini_content_type_content_type($mini);
if ($type) {
$types[$mini->name] = $type;
}
}
return $types;
}
/**
* Return an info array describing a single mini panel.
*/
function _panels_mini_panels_mini_content_type_content_type($mini) {
if (empty($mini)) {
// The mini panel is deleted or missing.
return;
}
if (!empty($mini->disabled)) {
return;
}
$title = filter_xss_admin($mini->admin_title);
$type = array(
'title' => $title,
// For now mini panels will just use the contrib block icon.
'icon' => 'icon_mini_panel.png',
'description' => $title,
'category' => !empty($mini->category) ? $mini->category : t('Mini panel'),
);
if (!empty($mini->requiredcontexts)) {
$type['required context'] = array();
foreach ($mini->requiredcontexts as $context) {
$info = ctools_get_context($context['name']);
// TODO: allow an optional setting
$type['required context'][] = new ctools_context_required($context['identifier'], $info['context name']);
}
}
return $type;
}
/**
* Render a mini panel called from a panels display.
*/
function panels_mini_panels_mini_content_type_render($subtype, $conf, $panel_args, &$contexts) {
static $viewing = array();
$mini = panels_mini_load($subtype);
if (!$mini) {
return FALSE;
}
if (!empty($viewing[$mini->name])) {
return FALSE;
}
// Load up any contexts we might be using.
$context = ctools_context_match_required_contexts($mini->requiredcontexts, $contexts);
$mini->context = $mini->display->context = ctools_context_load_contexts($mini, FALSE, $context);
if (empty($mini) || !empty($mini->disabled)) {
return;
}
$viewing[$mini->name] = TRUE;
$mini->display->args = $panel_args;
$mini->display->css_id = panels_mini_get_id($subtype);
$mini->display->owner = $mini;
// unique ID of this mini.
$mini->display->owner->id = $mini->name;
$block = new stdClass();
$block->module = 'panels_mini';
$block->delta = $subtype;
$block->content = panels_render_display($mini->display);
$block->title = $mini->display->get_title();
if (user_access('administer mini panels')) {
$block->admin_links = array(
array(
'title' => t('Configure mini panel'),
'href' => "admin/structure/mini-panels/list/$subtype/edit/content",
'query' => drupal_get_destination(),
),
);
}
unset($viewing[$mini->name]);
return $block;
}
/**
* Edit form for the mini panel content type.
*/
function panels_mini_panels_mini_content_type_edit_form($form, &$form_state) {
// Empty form to ensure we have the override title + context gadgets.
return $form;
}
/**
* Provide the administrative title of a mini panel.
*/
function panels_mini_panels_mini_content_type_admin_title($subtype, $conf) {
$mini = panels_mini_load($subtype);
if (!$mini) {
return t('Deleted/missing mini panel @name', array('@name' => $subtype));
}
$title = filter_xss_admin($mini->admin_title);
if (empty($title)) {
$title = t('Untitled mini panel');
}
return $title;
}
/**
* Callback to provide administrative info. Provide links to edit the mini
* panel.
*/
function panels_mini_panels_mini_content_type_admin_info($subtype, $conf) {
$mini = panels_mini_load($subtype);
if (!$mini) {
return FALSE;
}
$block = new stdClass();
$block->title = $mini->admin_title;
$admin_pages = array(
t('Settings') => 'basic',
t('Context') => 'context',
t('Layout') => 'layout',
t('Content') => 'content',
);
$links = array();
foreach ($admin_pages as $title => $tail) {
$links[] = l($title, 'admin/structure/mini-panels/list/' . $subtype . '/edit/' . $tail, array('query' => drupal_get_destination()));
}
$block->content = theme('item_list', array('items' => $links));
return $block;
}

View File

@@ -0,0 +1,41 @@
<?php
$plugin = array(
'schema' => 'panels_mini',
'access' => 'administer mini panels',
'create access' => 'create mini panels',
'menu' => array(
'menu item' => 'mini-panels',
'menu title' => 'Mini panels',
'menu description' => 'Add, edit or delete mini panels, which can be used as blocks or content panes in other panels.',
),
'title singular' => t('mini panel'),
'title singular proper' => t('Mini panel'),
'title plural' => t('mini panels'),
'title plural proper' => t('Mini panels'),
'handler' => array(
'class' => 'panels_mini_ui',
'parent' => 'ctools_export_ui',
),
'use wizard' => TRUE,
'form info' => array(
'order' => array(
'basic' => t('Settings'),
'context' => t('Context'),
'layout' => t('Layout'),
'content' => t('Content'),
),
// We have to add this form specially because it's invisible.
'forms' => array(
'move' => array(
'form id' => 'ctools_export_ui_edit_item_wizard_form',
),
),
),
);

View File

@@ -0,0 +1,298 @@
<?php
class panels_mini_ui extends ctools_export_ui {
function init($plugin) {
parent::init($plugin);
ctools_include('context');
}
function list_form(&$form, &$form_state) {
ctools_include('plugins', 'panels');
$this->layouts = panels_get_layouts();
parent::list_form($form, $form_state);
$categories = $layouts = array('all' => t('- All -'));
foreach ($this->items as $item) {
$categories[$item->category] = $item->category ? $item->category : t('Mini panels');
}
$form['top row']['category'] = array(
'#type' => 'select',
'#title' => t('Category'),
'#options' => $categories,
'#default_value' => 'all',
'#weight' => -10,
);
foreach ($this->layouts as $name => $plugin) {
$layouts[$name] = $plugin['title'];
}
$form['top row']['layout'] = array(
'#type' => 'select',
'#title' => t('Layout'),
'#options' => $layouts,
'#default_value' => 'all',
'#weight' => -9,
);
}
function list_filter($form_state, $item) {
if ($form_state['values']['category'] != 'all' && $form_state['values']['category'] != $item->category) {
return TRUE;
}
if ($form_state['values']['layout'] != 'all' && $form_state['values']['layout'] != $item->display->layout) {
return TRUE;
}
return parent::list_filter($form_state, $item);
}
function list_sort_options() {
return array(
'disabled' => t('Enabled, title'),
'title' => t('Title'),
'name' => t('Name'),
'category' => t('Category'),
'storage' => t('Storage'),
'layout' => t('Layout'),
);
}
function list_build_row($item, &$form_state, $operations) {
// Set up sorting
switch ($form_state['values']['order']) {
case 'disabled':
$this->sorts[$item->name] = empty($item->disabled) . $item->admin_title;
break;
case 'title':
$this->sorts[$item->name] = $item->admin_title;
break;
case 'name':
$this->sorts[$item->name] = $item->name;
break;
case 'category':
$this->sorts[$item->name] = ($item->category ? $item->category : t('Mini panels')) . $item->admin_title;
break;
case 'layout':
$this->sorts[$item->name] = $item->display->layout . $item->admin_title;
break;
case 'storage':
$this->sorts[$item->name] = $item->type . $item->admin_title;
break;
}
$layout = !empty($this->layouts[$item->display->layout]) ? $this->layouts[$item->display->layout]['title'] : t('Missing layout');
$category = $item->category ? check_plain($item->category) : t('Mini panels');
$ops = theme('links__ctools_dropbutton', array('links' => $operations, 'attributes' => array('class' => array('links', 'inline'))));
$this->rows[$item->name] = array(
'data' => array(
array('data' => check_plain($item->admin_title), 'class' => array('ctools-export-ui-title')),
array('data' => check_plain($item->name), 'class' => array('ctools-export-ui-name')),
array('data' => $category, 'class' => array('ctools-export-ui-category')),
array('data' => $layout, 'class' => array('ctools-export-ui-layout')),
array('data' => $item->type, 'class' => array('ctools-export-ui-storage')),
array('data' => $ops, 'class' => array('ctools-export-ui-operations')),
),
'title' => !empty($item->admin_description) ? check_plain($item->admin_description) : '',
'class' => array(!empty($item->disabled) ? 'ctools-export-ui-disabled' : 'ctools-export-ui-enabled'),
);
}
function list_table_header() {
return array(
array('data' => t('Title'), 'class' => array('ctools-export-ui-title')),
array('data' => t('Name'), 'class' => array('ctools-export-ui-name')),
array('data' => t('Category'), 'class' => array('ctools-export-ui-category')),
array('data' => t('Layout'), 'class' => array('ctools-export-ui-layout')),
array('data' => t('Storage'), 'class' => array('ctools-export-ui-storage')),
array('data' => t('Operations'), 'class' => array('ctools-export-ui-operations')),
);
}
function edit_form(&$form, &$form_state) {
// Get the basic edit form
parent::edit_form($form, $form_state);
// Set the admin title machine name length.
// We need to do this because the system block name length is
// limited to 32 chars.
$form['info']['name']['#maxlength'] = 32;
$form['info']['name']['#size'] = 34;
$form['info']['name']['#description'] .= ' ' . t('The machine name length is limited to 32 characters, due to a limitation in the core block system.');
$form['category'] = array(
'#type' => 'textfield',
'#size' => 24,
'#default_value' => $form_state['item']->category,
'#title' => t('Category'),
'#description' => t("The category that this mini-panel will be grouped into on the Add Content form. Only upper and lower-case alphanumeric characters are allowed. If left blank, defaults to 'Mini panels'."),
);
$form['title']['#title'] = t('Title');
$form['title']['#description'] = t('The title for this mini panel. It can be overridden in the block configuration.');
}
/**
* Validate submission of the mini panel edit form.
*/
function edit_form_basic_validate($form, &$form_state) {
parent::edit_form_validate($form, $form_state);
if (preg_match("/[^A-Za-z0-9 ]/", $form_state['values']['category'])) {
form_error($form['category'], t('Categories may contain only alphanumerics or spaces.'));
}
}
function edit_form_submit(&$form, &$form_state) {
parent::edit_form_submit($form, $form_state);
$form_state['item']->category = $form_state['values']['category'];
}
function edit_form_context(&$form, &$form_state) {
ctools_include('context-admin');
ctools_context_admin_includes();
ctools_add_css('ruleset');
$form['right'] = array(
'#prefix' => '<div class="ctools-right-container">',
'#suffix' => '</div>',
);
$form['left'] = array(
'#prefix' => '<div class="ctools-left-container clearfix">',
'#suffix' => '</div>',
);
// Set this up and we can use CTools' Export UI's built in wizard caching,
// which already has callbacks for the context cache under this name.
$module = 'export_ui::' . $this->plugin['name'];
$name = $this->edit_cache_get_key($form_state['item'], $form_state['form type']);
ctools_context_add_context_form($module, $form, $form_state, $form['right']['contexts_table'], $form_state['item'], $name);
ctools_context_add_required_context_form($module, $form, $form_state, $form['left']['required_contexts_table'], $form_state['item'], $name);
ctools_context_add_relationship_form($module, $form, $form_state, $form['right']['relationships_table'], $form_state['item'], $name);
}
function edit_form_context_submit(&$form, &$form_state) {
// Prevent this from going to edit_form_submit();
}
function edit_form_layout(&$form, &$form_state) {
ctools_include('common', 'panels');
ctools_include('display-layout', 'panels');
ctools_include('plugins', 'panels');
// @todo -- figure out where/how to deal with this.
$form_state['allowed_layouts'] = 'panels_mini';
if ($form_state['op'] == 'add' && empty($form_state['item']->display)) {
$form_state['item']->display = panels_new_display();
}
$form_state['display'] = &$form_state['item']->display;
// Tell the Panels form not to display buttons.
$form_state['no buttons'] = TRUE;
// Change the #id of the form so the CSS applies properly.
$form['#id'] = 'panels-choose-layout';
$form = panels_choose_layout($form, $form_state);
if ($form_state['op'] == 'edit') {
$form['buttons']['next']['#value'] = t('Change');
}
}
/**
* Validate that a layout was chosen.
*/
function edit_form_layout_validate(&$form, &$form_state) {
$display = &$form_state['display'];
if (empty($form_state['values']['layout'])) {
form_error($form['layout'], t('You must select a layout.'));
}
if ($form_state['op'] == 'edit') {
if ($form_state['values']['layout'] == $display->layout) {
form_error($form['layout'], t('You must select a different layout if you wish to change layouts.'));
}
}
}
/**
* A layout has been selected, set it up.
*/
function edit_form_layout_submit(&$form, &$form_state) {
$display = &$form_state['display'];
if ($form_state['op'] == 'edit') {
if ($form_state['values']['layout'] != $display->layout) {
$form_state['item']->temp_layout = $form_state['values']['layout'];
$form_state['clicked_button']['#next'] = 'move';
}
}
else {
$form_state['item']->display->layout = $form_state['values']['layout'];
}
}
/**
* When a layout is changed, the user is given the opportunity to move content.
*/
function edit_form_move(&$form, &$form_state) {
$form_state['display'] = &$form_state['item']->display;
$form_state['layout'] = $form_state['item']->temp_layout;
ctools_include('common', 'panels');
ctools_include('display-layout', 'panels');
ctools_include('plugins', 'panels');
// Tell the Panels form not to display buttons.
$form_state['no buttons'] = TRUE;
// Change the #id of the form so the CSS applies properly.
$form = panels_change_layout($form, $form_state);
// This form is outside the normal wizard list, so we need to specify the
// previous/next forms.
$form['buttons']['previous']['#next'] = 'layout';
$form['buttons']['next']['#next'] = 'content';
}
function edit_form_move_submit(&$form, &$form_state) {
panels_change_layout_submit($form, $form_state);
}
function edit_form_content(&$form, &$form_state) {
ctools_include('ajax');
ctools_include('plugins', 'panels');
ctools_include('display-edit', 'panels');
ctools_include('context');
// If we are cloning an item, we MUST have this cached for this to work,
// so make sure:
if ($form_state['form type'] == 'clone' && empty($form_state['item']->export_ui_item_is_cached)) {
$this->edit_cache_set($form_state['item'], 'clone');
}
$cache = panels_edit_cache_get('panels_mini:' . $this->edit_cache_get_key($form_state['item'], $form_state['form type']));
$form_state['renderer'] = panels_get_renderer_handler('editor', $cache->display);
$form_state['renderer']->cache = &$cache;
$form_state['display'] = &$cache->display;
$form_state['content_types'] = $cache->content_types;
// Tell the Panels form not to display buttons.
$form_state['no buttons'] = TRUE;
$form_state['display_title'] = !empty($cache->display_title);
$form = panels_edit_display_form($form, $form_state);
}
function edit_form_content_submit(&$form, &$form_state) {
panels_edit_display_form_submit($form, $form_state);
$form_state['item']->display = $form_state['display'];
}
}