Skip to content
Snippets Groups Projects
Commit fbeabb59 authored by Earl Miles's avatar Earl Miles
Browse files

Add access control for current site language.

parent 60044db6
No related branches found
No related tags found
No related merge requests found
......@@ -452,7 +452,9 @@ function ctools_access_ajax_edit_item_submit(&$form, &$form_state) {
}
$form_state['test']['settings'] = $form_state['values']['settings'];
$form_state['test']['context'] = $form_state['values']['context'];
if (isset($form_state['values']['context'])) {
$form_state['test']['context'] = $form_state['values']['context'];
}
}
/**
......
......@@ -933,7 +933,9 @@ function ctools_access_summary($plugin, $contexts, $test) {
$description = '';
if ($function = ctools_plugin_get_function($plugin, 'summary')) {
$description = $function($test['settings'], ctools_context_select($contexts, $plugin['required context'], $test['context']));
$required_context = isset($plugin['required context']) ? $plugin['required context'] : array();
$context = isset($test['context']) ? $test['context'] : array();
$description = $function($test['settings'], ctools_context_select($contexts, $required_context, $context));
}
return $description;
}
......@@ -969,7 +971,9 @@ function ctools_access($settings, $contexts = array()) {
$pass = FALSE;
$plugin = ctools_get_access_plugin($test['name']);
if ($plugin && $function = ctools_plugin_get_function($plugin, 'callback')) {
$pass = $function($test['settings'], ctools_context_select($contexts, $plugin['required context'], $test['context']));
$required_context = isset($plugin['required context']) ? $plugin['required context'] : array();
$context = isset($test['context']) ? $test['context'] : array();
$pass = $function($test['settings'], ctools_context_select($contexts, $required_context, $context));
}
if ($pass && $settings['logic'] == 'or') {
......
......@@ -33,10 +33,11 @@ function ctools_node_language_ctools_access_settings(&$form, &$form_state, $conf
$options = array(
'current' => t('Current site language'),
'default' => t('Default site language'),
'no_language' => t('No language'),
);
$options = array_merge($options, locale_language_list());
$form['settings']['language'] = array(
'#title' => t('Access type'),
'#title' => t('Language'),
'#type' => 'checkboxes',
'#options' => $options,
'#description' => t('Pass only if the node is in one of the selected languages.'),
......@@ -56,6 +57,14 @@ function ctools_node_language_ctools_access_check($conf, $context) {
global $language;
// Specialcase: if 'no language' is checked, return TRUE if the language field is
// empty.
if (!empty($conf['language']['no_language'])) {
if (empty($context->data->language)) {
return TRUE;
}
}
// Specialcase: if 'current' is checked, return TRUE if the current site language
// matches the node language.
if (!empty($conf['language']['current'])) {
......@@ -86,6 +95,7 @@ function ctools_node_language_ctools_acesss_summary($conf, $context) {
$languages = array(
'current' => t('Current site language'),
'default' => t('Default site language'),
'no_language' => t('No language'),
);
$languages = array_merge($languages, locale_language_list());
......
<?php
// $Id$
/**
* @file
* Plugin to provide access control based upon node type.
*/
/**
* Implementation of specially named hook_ctools_arguments().
*/
function ctools_site_language_ctools_access() {
if (module_exists('locale')) {
$args['site_language'] = array(
'title' => t("Access by site language"),
'description' => t('Control access by the language the site currently uses.'),
'callback' => 'ctools_site_language_ctools_access_check',
'default' => array('language' => array()),
'settings form' => 'ctools_site_language_ctools_access_settings',
'settings form submit' => 'ctools_site_language_ctools_access_settings_submit',
'summary' => 'ctools_site_language_ctools_acesss_summary',
// 'required context' => new ctools_context_required(t('Node'), 'node'),
);
}
return $args;
}
/**
* Settings form for the 'by site_language' access plugin
*/
function ctools_site_language_ctools_access_settings(&$form, &$form_state, $conf) {
$options = array(
'default' => t('Default site language'),
);
$options = array_merge($options, locale_language_list());
$form['settings']['language'] = array(
'#title' => t('Language'),
'#type' => 'checkboxes',
'#options' => $options,
'#description' => t('Pass only if the current site language is one of the selected languages.'),
'#default_value' => $conf['language'],
);
}
/**
* Check for access.
*/
function ctools_site_language_ctools_access_check($conf, $context) {
global $language;
// Specialcase: If 'default' is checked, return TRUE if the default site language
// matches the node language.
if (!empty($conf['language']['default'])) {
if ($language->language == language_default('language')) {
return TRUE;
}
}
if (array_filter($conf['language']) && empty($conf['language'][$language->language])) {
return FALSE;
}
return TRUE;
}
/**
* Provide a summary description based upon the checked site_languages.
*/
function ctools_site_language_ctools_acesss_summary($conf, $context) {
$languages = array(
'default' => t('Default site language'),
);
$languages = array_merge($languages, locale_language_list());
if (!isset($conf['language'])) {
$conf['language'] = array();
}
$names = array();
foreach (array_filter($conf['language']) as $language) {
$names[] = $languages[$language];
}
if (empty($names)) {
return t('Site language can be in any language');
}
return format_plural(count($names), 'Site language can be languages "@languages"', 'Site language can be language "@languages"', array('@languages' => implode(', ', $names)));
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment