updated ctools, needed by panles

This commit is contained in:
Bachir Soussi Chiadmi
2016-10-25 17:47:45 +02:00
parent f6f7fd575f
commit b11abbed59
59 changed files with 779 additions and 297 deletions

View File

@@ -0,0 +1,44 @@
<?php
/**
* @file
* Plugin for controlling access based on the existence of a query string.
*/
$plugin = array(
'title' => t('Query string exists'),
'description' => t('Control access by whether or not a query string exists.'),
'callback' => 'ctools_query_string_exists_ctools_access_check',
'settings form' => 'ctools_query_string_exists_ctools_access_settings',
'summary' => 'ctools_query_string_exists_ctools_access_summary',
'defaults' => array('key' => ''),
);
/**
* Settings form.
*/
function ctools_query_string_exists_ctools_access_settings($form, &$form_state, $config) {
$form['settings']['key'] = array(
'#title' => t('Query string key'),
'#description' => t('Enter the key of the query string.'),
'#type' => 'textfield',
'#required' => TRUE,
'#default_value' => $config['key']
);
return $form;
}
/**
* Check for access.
*/
function ctools_query_string_exists_ctools_access_check($config, $context) {
return isset($_GET[$config['key']]);
}
/**
* Provide a summary description.
*/
function ctools_query_string_exists_ctools_access_summary($config, $context) {
return t('@identifier exists', array('@identifier' => $config['key']));
}

View File

@@ -18,6 +18,7 @@ $plugin = array(
'context' => 'ctools_term_context',
'default' => array('input_form' => 'tid', 'breadcrumb' => TRUE, 'transform' => FALSE),
'settings form' => 'ctools_term_settings_form',
'settings form validate' => 'ctools_term_settings_form_validate',
'placeholder form' => 'ctools_term_ctools_argument_placeholder',
'breadcrumb' => 'ctools_term_breadcrumb',
);
@@ -31,6 +32,16 @@ function ctools_term_context($arg = NULL, $conf = NULL, $empty = FALSE) {
return ctools_context_create_empty('entity:taxonomy_term');
}
if (isset($conf['vocabularies'])) {
$vocabularies = $conf['vocabularies'];
}
else {
$vids = isset($conf['vids']) ? $conf['vids'] : array();
// Convert legacy use of vids to machine names.
$vocabularies = _ctools_term_vocabulary_machine_name_convert($vids);
}
if (is_object($arg)) {
$term = $arg;
}
@@ -50,12 +61,11 @@ function ctools_term_context($arg = NULL, $conf = NULL, $empty = FALSE) {
}
$terms = taxonomy_get_term_by_name($arg);
$conf['vids'] = is_array($conf['vids']) ? array_filter($conf['vids']) : NULL;
if ((count($terms) > 1) && isset($conf['vids'])) {
// If only one term is found, fall through to vocabulary check below.
if ((count($terms) > 1) && $vocabularies) {
foreach ($terms as $potential) {
foreach ($conf['vids'] as $vid => $active) {
if ($active && $potential->vid == $vid) {
foreach ($vocabularies as $machine_name) {
if ($potential->vocabulary_machine_name == $machine_name) {
$term = $potential;
// break out of the foreaches AND the case
break 3;
@@ -72,7 +82,7 @@ function ctools_term_context($arg = NULL, $conf = NULL, $empty = FALSE) {
}
}
if (!empty($conf['vids']) && array_filter($conf['vids']) && empty($conf['vids'][$term->vid])) {
if ($vocabularies && !isset($vocabularies[$term->vocabulary_machine_name])) {
return NULL;
}
@@ -98,13 +108,20 @@ function ctools_term_settings_form(&$form, &$form_state, $conf) {
$vocabularies = taxonomy_get_vocabularies();
$options = array();
foreach ($vocabularies as $vid => $vocab) {
$options[$vid] = $vocab->name;
$options[$vocab->machine_name] = $vocab->name;
}
$form['settings']['vids'] = array(
// Fallback on legacy 'vids', when no vocabularies are available.
if (empty($conf['vocabularies']) && !empty($conf['vids'])) {
$conf['vocabularies'] = _ctools_term_vocabulary_machine_name_convert(array_filter($conf['vids']));
unset($conf['vids']);
}
$form['settings']['vocabularies'] = array(
'#title' => t('Limit to these vocabularies'),
'#type' => 'checkboxes',
'#options' => $options,
'#default_value' => !empty($conf['vids']) ? $conf['vids'] : array(),
'#default_value' => !empty($conf['vocabularies']) ? $conf['vocabularies'] : array(),
'#description' => t('If no vocabularies are checked, terms from all vocabularies will be accepted.'),
);
@@ -123,6 +140,12 @@ function ctools_term_settings_form(&$form, &$form_state, $conf) {
// return $form;
}
function ctools_term_settings_form_validate (&$form, &$form_state) {
// Filter the selected vocabularies to avoid storing redundant data.
$vocabularies = array_filter($form_state['values']['settings']['vocabularies']);
form_set_value($form['settings']['vocabularies'], $vocabularies, $form_state);
}
/**
* Form fragment to get an argument to convert a placeholder for preview.
*/
@@ -161,3 +184,20 @@ function ctools_term_breadcrumb($conf, $context) {
$breadcrumb = array_merge(drupal_get_breadcrumb(), array_reverse($breadcrumb));
drupal_set_breadcrumb($breadcrumb);
}
/**
* Helper function to convert convert legacy vocabulary ids into machine names.
*
* @param array $vids
* Array of either vids.
* @return array
* A keyed array of machine names.
*/
function _ctools_term_vocabulary_machine_name_convert($vids) {
$vocabularies = taxonomy_vocabulary_load_multiple($vids);
$return = array();
foreach($vocabularies as $vocabulary) {
$return[$vocabulary->machine_name] = $vocabulary->machine_name;
}
return $return;
}

View File

@@ -26,7 +26,7 @@ function ctools_comment_links_content_type_render($subtype, $conf, $panel_args,
return;
}
$comment = isset($context->data) ? clone($context->data) : NULL;
$comment = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'comment';
$block->delta = $comment->cid;

View File

@@ -25,7 +25,7 @@ if (module_exists('comment')) {
function ctools_comment_reply_form_content_type_render($subtype, $conf, $panel_args, $context) {
$comment = ($context[1]->identifier == t('No context')) ? NULL : clone($context[1]->data);
$comment = ($context[1]->identifier == t('No context')) ? NULL : clone $context[1]->data;
$block = new stdClass();
$block->module = 'comments';
if ($comment) $block->delta = $comment->cid;

View File

@@ -16,7 +16,7 @@
$plugin = array(
'title' => t('Custom content'),
'no title override' => TRUE,
'defaults' => array('admin_title' => '', 'title' => '', 'body' => '', 'format' => filter_default_format(), 'substitute' => TRUE),
'defaults' => array('admin_title' => '', 'title' => '', 'title_heading' => 'h2', 'body' => '', 'format' => filter_default_format(), 'substitute' => TRUE),
'js' => array('misc/autocomplete.js', 'misc/textarea.js', 'misc/collapse.js'),
// Make sure the edit form is only used for some subtypes.
'edit form' => '',
@@ -135,6 +135,7 @@ function ctools_custom_content_type_get_conf($subtype, $conf) {
$settings = array(
'admin_title' => t('Missing/deleted content'),
'title' => '',
'title_heading' => '',
'body' => '',
'format' => filter_default_format(),
'substitute' => TRUE,
@@ -180,6 +181,8 @@ function ctools_custom_content_type_render($subtype, $conf, $args, $contexts) {
$block = new stdClass();
$block->subtype = ++$delta;
$block->title = filter_xss_admin($settings['title']);
$block->title_heading = isset($settings['title_heading']) ? $settings['title_heading'] : 'h2';
// Add keyword substitutions if we were configured to do so.
$content = $settings['body'];
@@ -277,10 +280,36 @@ function ctools_custom_content_type_edit_form($form, &$form_state) {
'#description' => t('This title will be used administratively to identify this pane. If blank, the regular title will be used.'),
);
// Copy over the title override settings for a title heading.
$form['aligner_start'] = array(
'#markup' => '<div class="option-text-aligner clearfix">',
);
$form['title'] = array(
'#type' => 'textfield',
'#default_value' => $settings['title'],
'#title' => t('Title'),
'#id' => 'override-title-textfield',
);
$form['title_heading'] = array(
'#type' => 'select',
'#default_value' => isset($settings['title_heading']) ? $settings['title_heading'] : 'h2',
'#options' => array(
'h1' => t('h1'),
'h2' => t('h2'),
'h3' => t('h3'),
'h4' => t('h4'),
'h5' => t('h5'),
'h6' => t('h6'),
'div' => t('div'),
'span' => t('span'),
),
'#id' => 'override-title-heading',
);
$form['aligner_stop'] = array(
'#markup' => '</div>',
);
$form['body'] = array(

View File

@@ -137,25 +137,24 @@ function ctools_entity_field_content_type_render($subtype, $conf, $panel_args, $
$field_settings['settings'] = $conf['formatter_settings'];
}
$all_values = field_get_items($entity_type, $entity, $field_name, $language);
if (!is_array($all_values)) {
// Do not render if the field is empty.
return;
}
// Reverse values.
if (isset($conf['delta_reversed']) && $conf['delta_reversed']) {
$all_values = array_reverse($all_values, TRUE);
}
if (isset($conf['delta_limit'])) {
$offset = intval($conf['delta_offset']);
$limit = !empty($conf['delta_limit']) ? $conf['delta_limit'] : NULL;
$all_values = array_slice($all_values, $offset, $limit, TRUE);
}
$clone = clone $entity;
$clone->{$field_name}[$language] = $all_values;
$all_values = field_get_items($entity_type, $entity, $field_name, $language);
if (is_array($all_values)) {
// Reverse values.
if (isset($conf['delta_reversed']) && $conf['delta_reversed']) {
$all_values = array_reverse($all_values, TRUE);
}
if (isset($conf['delta_limit'])) {
$offset = intval($conf['delta_offset']);
$limit = !empty($conf['delta_limit']) ? $conf['delta_limit'] : NULL;
$all_values = array_slice($all_values, $offset, $limit, TRUE);
}
$clone->{$field_name}[$language] = $all_values;
}
$field_output = field_view_field($entity_type, $clone, $field_name, $field_settings, $language);
if (!empty($field_output) && !empty($conf['override_title'])) {
@@ -270,10 +269,7 @@ function ctools_entity_field_content_type_admin_title($subtype, $conf, $context)
$identifier = $context->identifier;
}
else {
$type = 'ctools_entity_field_content_type_admin_title';
$message = t('Context is missing for field: @name', array('@name' => $subtype));
$variables = array($subtype, $conf, $context);
watchdog($type, $message, $variables, $severity = WATCHDOG_NOTICE);
watchdog('ctools_entity_field_content_type_admin_title', 'Context is missing for field: @name', array('@name' => $subtype), WATCHDOG_NOTICE);
$identifier = t('Unknown');
}

View File

@@ -66,7 +66,7 @@ function ctools_node_content_type_render($subtype, $conf, $panel_args) {
// Don't store viewed node data on the node, this can mess up other
// views of the node.
$node = clone($node);
$node = clone $node;
$block->module = 'node';
$block->delta = $node->nid;

View File

@@ -14,7 +14,7 @@ $plugin = array(
);
function ctools_node_attachments_content_type_render($subtype, $conf, $panel_args, $context) {
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'attachments';

View File

@@ -16,7 +16,7 @@ if (module_exists('book')) {
}
function ctools_node_book_children_content_type_render($subtype, $conf, $panel_args, $context) {
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'book_children';

View File

@@ -16,7 +16,7 @@ if (module_exists('book')) {
}
function ctools_node_book_nav_content_type_render($subtype, $conf, $panel_args, $context) {
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'book_nav';

View File

@@ -17,7 +17,7 @@ if (module_exists('comment')) {
}
function ctools_node_comment_form_content_type_render($subtype, $conf, $panel_args, $context) {
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'comments';
$block->delta = $node->nid;

View File

@@ -23,7 +23,7 @@ if (module_exists('comment')) {
* Render the node comments.
*/
function ctools_node_comment_wrapper_content_type_render($subtype, $conf, $panel_args, $context) {
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'comments';
$block->delta = $node->nid;
@@ -77,7 +77,7 @@ function ctools_node_comment_wrapper_content_type_render($subtype, $conf, $panel
/**
* Returns an edit form for the comment wrapper.
*/
*/
function ctools_node_comment_wrapper_content_type_edit_form($form, &$form_state) {
$conf = $form_state['conf'];
$form['mode'] = array(

View File

@@ -20,7 +20,7 @@ if (module_exists('comment')) {
}
function ctools_node_comments_content_type_render($subtype, $conf, $panel_args, $context) {
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'comments';
$block->delta = $node->nid;

View File

@@ -31,7 +31,7 @@ function ctools_node_content_content_type_render($subtype, $conf, $panel_args, $
return;
}
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'node';
$block->delta = $node->nid;

View File

@@ -29,7 +29,7 @@ function ctools_node_links_content_type_render($subtype, $conf, $panel_args, $co
return;
}
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'node';
$block->delta = $node->nid;

View File

@@ -18,7 +18,7 @@ $plugin = array(
* based on the module and delta supplied in the configuration.
*/
function ctools_node_type_desc_content_type_render($subtype, $conf, $panel_args, $context) {
$node = isset($context->data) ? clone($context->data) : NULL;
$node = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'node_type';

View File

@@ -14,7 +14,7 @@ $plugin = array(
);
function ctools_term_description_content_type_render($subtype, $conf, $panel_args, $context) {
$term = isset($context->data) ? clone($context->data) : NULL;
$term = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'node_type';

View File

@@ -21,7 +21,7 @@ $plugin = array(
);
function ctools_term_list_content_type_render($subtype, $conf, $panel_args, $context) {
$term = isset($context->data) ? clone($context->data) : NULL;
$term = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'term-list';
$path = empty($conf['path']) ? 'taxonomy/term/%tid' : $conf['path'];

View File

@@ -21,7 +21,7 @@ if (module_exists('profile') && !(defined('MAINTENANCE_MODE') && MAINTENANCE_MOD
* 'Render' callback for the 'profile fields' content type.
*/
function ctools_profile_fields_content_type_render($subtype, $conf, $panel_args, $context) {
$account = isset($context->data) ? clone($context->data) : NULL;
$account = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'profile fields';

View File

@@ -20,7 +20,7 @@ $plugin = array(
* Render the user profile content type.
*/
function ctools_user_profile_content_type_render($subtype, $conf, $panel_args, $context) {
$account = isset($context->data) ? clone($context->data) : NULL;
$account = isset($context->data) ? clone $context->data : NULL;
if (!$account) {
return NULL;
}

View File

@@ -13,7 +13,7 @@ $plugin = array(
);
function ctools_user_signature_content_type_render($subtype, $conf, $panel_args, $context) {
$account = isset($context->data) ? clone($context->data) : NULL;
$account = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'user-signature';

View File

@@ -21,7 +21,7 @@ if (module_exists('taxonomy')) {
* list of terms for the input vocabulary.
*/
function ctools_vocabulary_terms_content_type_render($subtype, $conf, $panel_args, $context) {
$vocab = isset($context->data) ? clone($context->data) : NULL;
$vocab = isset($context->data) ? clone $context->data : NULL;
$max_depth = (!empty($conf['max_depth']) ? (int)$conf['max_depth'] : NULL);
if ($conf['tree'] == FALSE) {
$terms = taxonomy_get_tree($vocab->vid, 0, $max_depth);

View File

@@ -0,0 +1,89 @@
<?php
/**
* @file query_string.inc
* Context plugin that can extract arbitrary values from the query string.
*/
/**
* $plugin array which will be used by the system that includes this file.
*/
$plugin = array(
'title' => t('Query string value'),
'description' => t('A context that extracts a value from the query string.'),
'context' => 'ctools_context_query_string_create_query_string',
'context name' => 'query_string',
'keyword' => 'query_string',
'edit form' => 'ctools_context_query_string_settings_form',
'convert list' => array(
'raw' => t('Raw string'),
'html_safe' => t('HTML-safe string'),
),
'convert' => 'ctools_context_query_string_convert',
);
/**
* Create a context from manual configuration.
*/
function ctools_context_query_string_create_query_string($empty, $data = NULL, $conf = FALSE) {
$context = new ctools_context('query_string');
$context->plugin = 'query_string';
if ($empty) {
return $context;
}
if ($conf) {
if (!empty($_GET[$data['key']])) {
$context->data = $_GET[$data['key']];
}
else {
$context->data = $data['fallback_value'];
}
}
return $context;
}
/**
* Form builder; settings for the context.
*/
function ctools_context_query_string_settings_form($form, &$form_state) {
$form['key'] = array(
'#title' => t('Query string key'),
'#description' => t('Enter the key of the value that must be returned from the query string.'),
'#type' => 'textfield',
'#required' => TRUE
);
if (isset($form_state['conf']['key'])) {
$form['key']['#default_value'] = $form_state['conf']['key'];
}
$form['fallback_value'] = array(
'#title' => t('Fallback value'),
'#description' => t('Enter a value that must be returned if the above specified key does not exist in the query string.'),
'#type' => 'textfield',
);
if (!empty($form_state['conf']['fallback_value'])) {
$form['fallback_value']['#default_value'] = $form_state['conf']['fallback_value'];
}
return $form;
}
/**
* Submit handler; settings form for the context.
*/
function ctools_context_query_string_settings_form_submit($form, &$form_state) {
$form_state['conf']['key'] = $form_state['values']['key'];
$form_state['conf']['fallback_value'] = $form_state['values']['fallback_value'];
}
/**
* Convert a context into a string.
*/
function ctools_context_query_string_convert($context, $type) {
switch ($type) {
case 'raw':
return $context->data;
case 'html_safe':
return check_plain($context->data);
}
}

View File

@@ -185,7 +185,7 @@ function ctools_entity_from_field_context($context, $conf) {
$loaded_to_entity = array_shift($loaded_to_entity);
// Pass current user account and entity type to access callback.
if (isset($to_entity_info['access callback']) && function_exists($to_entity_info['access callback']) && !call_user_func($to_entity_info['access callback'], 'view', $loaded_to_entity)) {
if (isset($to_entity_info['access callback']) && function_exists($to_entity_info['access callback']) && !call_user_func($to_entity_info['access callback'], 'view', $loaded_to_entity, $account, $to_entity)) {
return ctools_context_create_empty('entity:' . $to_entity, NULL);
}
else {

View File

@@ -0,0 +1,70 @@
<?php
/**
* @file
* Plugin to provide an relationship handler for entities from query string.
*/
/**
* Plugins are described by creating a $plugin array which will be used
* by the system that includes this file.
*/
$plugin = array(
'title' => t('Entity from query string'),
'keyword' => 'query_string_entity',
'description' => t('Entity from query string.'),
'required context' => new ctools_context_required(t('Query string'), 'query_string'),
'context' => 'ctools_entity_from_query_string_context',
'edit form' => 'ctools_entity_from_query_string_settings_form',
);
/**
* Return a new context based on an existing context.
*/
function ctools_entity_from_query_string_context($context, $conf) {
$entity_type = $conf['entity_type'];
// If unset it wants a generic, unfilled context, which is just NULL.
if (empty($context->data) || !isset($context->data) || !is_numeric($context->data)) {
return ctools_context_create_empty('entity:' . $entity_type, NULL);
}
if (!empty($context->data) && is_numeric($context->data)) {
// Load the entity from the query string value.
$entity_id = $context->data;
$entity = entity_load_single($entity_type, $entity_id);
// Send it to ctools.
return ctools_context_create('entity:' . $entity_type, $entity);
}
}
/**
* Settings form for the relationship.
*/
function ctools_entity_from_query_string_settings_form($form, &$form_state) {
//Get all avalible enity types
foreach (entity_get_info() as $key => $value) {
$entity_types[$key] = $value['label'];
}
$form['entity_type'] = array(
'#title' => t('Entity type'),
'#description' => t('Choose entity type to load from query value'),
'#type' => 'select',
'#options' => $entity_types,
);
if (isset($form_state['conf']['entity_type'])) {
$form['entity_type']['#default_value'] = $form_state['conf']['entity_type'];
}
return $form;
}
/**
* Submit handler; settings form for the context.
*/
function ctools_entity_from_query_string_settings_form_submit($form, &$form_state) {
$form_state['conf']['entity_type'] = $form_state['values']['entity_type'];
}

View File

@@ -15,6 +15,8 @@ $plugin = array(
'description' => t('Adds user category edit form from a user context.'),
'required context' => new ctools_context_required(t('User'), 'user'),
'context' => 'ctools_user_category_edit_form_from_user_context',
'edit form' => 'ctools_user_category_edit_form_from_user_settings_form',
'defaults' => array('category' => NULL),
);
/**
@@ -25,7 +27,35 @@ function ctools_user_category_edit_form_from_user_context($context, $conf) {
return ctools_context_create_empty('user_edit_form', NULL);
}
if(!empty($conf['category'])) {
return ctools_context_create('user_edit_form', $context->data, array('category' => $conf['category']));
}
if (isset($context->data->user_category)) {
return ctools_context_create('user_edit_form', $context->data, array('category' => $context->data->user_category));
}
return ctools_context_create('user_edit_form', $context->data);
}
/**
* Settings form for the relationship.
*/
function ctools_user_category_edit_form_from_user_settings_form($form, &$form_state) {
$conf = $form_state['conf'];
$categories = _user_categories();
$options = array();
foreach($categories as $category) {
$options[$category['name']] = $category['title'];
}
$form['category'] = array(
'#type' => 'select',
'#title' => t('Category'),
'#options' => $options,
'#default_value' => isset($conf['category']) ? $conf['category'] : NULL,
'#empty_option' => 'Default',
);
return $form;
}