views_handler_sort_node_language.inc

Contains .

File

modules/locale/views_handler_sort_node_language.inc

View source
<?php


/**
 * @file
 * Contains .
 */

/**
 * Sort handler that allows sorting on a specific language.
 *
 * @ingroup views_sort_handlers
 */
class views_handler_sort_node_language extends views_handler_sort {
    
    /**
     * {@inheritdoc}
     */
    public function can_expose() {
        return FALSE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function query() {
        if (isset($this->options['language'])) {
            $langcode = $this->get_system_langcode($this->options['language']);
            // Validate the langcode.
            if (preg_match('/^[a-z0-9\\-]+$/i', $langcode)) {
                $this->ensure_my_table();
                // See https://stackoverflow.com/questions/14104055/ordering-by-specific-field-value-first
                $formula = "{$this->table_alias}_language = '{$langcode}'";
                $this->query
                    ->add_orderby($this->table_alias, NULL, $this->options['order'], $formula);
            }
        }
    }
    
    /**
     * Converts a views language code into a Drupal language code.
     */
    public function get_system_langcode($langcode) {
        global $language_content;
        $default_language = language_default('language');
        $system_langcode = str_replace(array(
            '***CURRENT_LANGUAGE***',
            '***DEFAULT_LANGUAGE***',
        ), array(
            $language_content->language,
            $default_language,
        ), $langcode);
        return $system_langcode;
    }
    
    /**
     * {@inheritdoc}
     */
    public function option_definition() {
        $options = parent::option_definition();
        $options['language'] = array(
            'default' => '***CURRENT_LANGUAGE***',
        );
        return $options;
    }
    
    /**
     * {@inheritdoc}
     */
    public function admin_summary() {
        $summary = parent::admin_summary();
        if ($this->options['language']) {
            $language_options = $this->get_language_options();
            $summary = t('@order, @language', array(
                '@order' => $summary,
                '@language' => $language_options[$this->options['language']],
            ));
        }
        return $summary;
    }
    
    /**
     * Returns languages to sort by.
     *
     * @return array
     *   All the languages.
     */
    public function get_language_options() {
        $languages = array(
            '***CURRENT_LANGUAGE***' => t("Current user's language"),
            '***DEFAULT_LANGUAGE***' => t("Default site language"),
            LANGUAGE_NONE => t('No language'),
        );
        $languages = array_merge($languages, views_language_list());
        return $languages;
    }
    
    /**
     * {@inheritdoc}
     */
    public function show_sort_form(&$form, &$form_state) {
        parent::show_sort_form($form, $form_state);
        $form['language'] = array(
            '#type' => 'radios',
            '#title' => t("Specific language"),
            '#description' => t("Choose which specific language to sort by. Not to be confused with the 'Language' sort handler, which sorts by language."),
            '#options' => $this->get_language_options(),
            '#default_value' => $this->options['language'],
        );
    }

}

Classes

Title Deprecated Summary
views_handler_sort_node_language Sort handler that allows sorting on a specific language.