language.inc

Same filename in this branch
  1. 7.x-1.x includes/language.inc

Ctools context type plugin to hold the current language context.

File

plugins/contexts/language.inc

View source
<?php


/**
 * @file
 * Ctools context type plugin to hold the current language context.
 */

/**
 * Plugins are described by creating a $plugin array which will be used
 * by the system that includes this file.
 */
$plugin = array(
    'title' => t('Language'),
    'description' => t('Language object.'),
    'context' => 'ctools_context_language_create',
    'context name' => 'language',
    'keyword' => 'language',
    // Provides a list of items which are exposed as keywords.
'convert list' => 'ctools_language_context_convert_list',
    // Convert keywords into data.
'convert' => 'ctools_language_context_convert',
    'placeholder form' => array(
        '#type' => 'textfield',
        '#description' => t('Enter a valid langcode.'),
        '#value' => $GLOBALS['language']->language,
    ),
    // Provide settings for the context.
'edit form' => 'ctools_context_language_settings_form',
    'settings' => ctools_context_language_conf_defaults(),
);

/**
 * Ensures a full populated settings array with sane defaults.
 *
 * @param mixed $conf
 *   Array with the user defined settings, or a string identifying a language.
 *
 * @return array
 *   Array with all available settings.
 */
function ctools_context_language_conf_defaults($conf = array()) {
    if (!is_array($conf)) {
        $conf = array(
            'preset_langcode' => (string) $conf,
        );
    }
    return $conf + array(
        'enable_cache_argument' => TRUE,
        'language_type' => 'language',
        'preset_langcode' => $GLOBALS['language']->language,
    );
}

/**
 * Create a context, either from manual configuration or the current language.
 */
function ctools_context_language_create($empty, $data = NULL, $conf = FALSE) {
    $context = new ctools_context('language');
    $context->plugin = 'language';
    if ($empty) {
        return $context;
    }
    $context->title = t('Language');
    $settings = ctools_context_language_conf_defaults($data);
    if ($settings['language_type'] != 'preset') {
        $language_object = $GLOBALS[$settings['language_type']];
    }
    else {
        // Fetch the enabled language objects.
        $languages = language_list('enabled');
        $languages = $languages[1];
        // Set the custom language, but fallback to the interface language.
        $language_object = $GLOBALS['language'];
        if (isset($languages[$settings['preset_langcode']])) {
            $language_object = $languages[$settings['preset_langcode']];
        }
    }
    // If enabled set the argument ot use in the cid.
    if ($settings['enable_cache_argument']) {
        $context->argument = $language_object->language;
    }
    $context->data = $language_object;
    return $context;
}

/**
 * Provide a list of sub-keywords.
 *
 * This is used to provide keywords from the context for use in a content type,
 * pane, etc.
 */
function ctools_language_context_convert_list() {
    $context = new stdClass();
    $context->data = $GLOBALS['language'];
    return array(
        'language' => t('Langcode. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'language'),
        )),
        'name' => t('Name. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'name'),
        )),
        'native' => t('Native name of the language. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'native'),
        )),
        'direction' => t('Text direction 0=LRT, 1=RTL. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'direction'),
        )),
        'enabled' => t('Status. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'enabled'),
        )),
        'plurals' => t('Number of plural forms. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'plurals'),
        )),
        'formula' => t('Plural formula. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'formula'),
        )),
        'domain' => t('Domain prefix. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'domain'),
        )),
        'prefix' => t('Url prefix . E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'prefix'),
        )),
        'weight' => t('The weight. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'weight'),
        )),
        'javascript' => t('Key of the javascript file with the translations. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'javascript'),
        )),
        'provider' => t('Negotiation method that defined the language. E.g. !example', array(
            '!example' => ctools_language_context_convert($context, 'provider'),
        )),
    );
}

/**
 * Convert a context property into a string to be used as a keyword.
 */
function ctools_language_context_convert($context, $type) {
    if (isset($context->data->{$type})) {
        return $context->data->{$type};
    }
}

/**
 * Settings form.
 */
function ctools_context_language_settings_form($form, &$form_state) {
    $conf = ctools_context_language_conf_defaults($form_state['conf']);
    $form['enable_cache_argument'] = array(
        '#title' => t('Add language to cache id'),
        '#description' => t('If enabled the langcode will be part of context aware caches.'),
        '#type' => 'checkbox',
        '#default_value' => $conf['enable_cache_argument'],
    );
    // Prepare language type options.
    $language_type_options = drupal_map_assoc(language_types());
    $language_type_options['preset'] = t('Custom');
    $form['language_type'] = array(
        '#title' => t('The language type to use'),
        '#type' => 'radios',
        '#required' => TRUE,
        '#options' => $language_type_options,
        '#default_value' => $conf['language_type'],
    );
    ctools_include('language');
    $language_options = ctools_language_list();
    $form['preset_langcode'] = array(
        '#title' => t('Language'),
        '#type' => 'select',
        '#options' => $language_options,
        '#default_value' => $conf['preset_langcode'],
        '#states' => array(
            'visible' => array(
                ':input[name="language_type"]' => array(
                    'value' => 'preset',
                ),
            ),
        ),
    );
    if (!empty($conf['preset_langcode']) && !isset($language_options[$conf['preset_langcode']])) {
        drupal_set_message(t('The currently selected language %langcode is no longer available.', array(
            '%langcode' => $conf['preset_langcode'],
        )), 'error', FALSE);
    }
    return $form;
}

Functions

Title Deprecated Summary
ctools_context_language_conf_defaults Ensures a full populated settings array with sane defaults.
ctools_context_language_create Create a context, either from manual configuration or the current language.
ctools_context_language_settings_form Settings form.
ctools_language_context_convert Convert a context property into a string to be used as a keyword.
ctools_language_context_convert_list Provide a list of sub-keywords.