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

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'];
}
}