123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- /**
- * Sort handler that allows sorting on a specific language.
- *
- * @ingroup views_sort_handlers
- */
- class views_handler_sort_node_language extends views_handler_sort {
- /**
- * {@inheritdoc}
- */
- function can_expose() {
- return FALSE;
- }
- /**
- * {@inheritdoc}
- */
- 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.
- */
- 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}
- */
- function option_definition() {
- $options = parent::option_definition();
- $options['language'] = array('default' => '***CURRENT_LANGUAGE***');
- return $options;
- }
- /**
- * {@inheritdoc}
- */
- 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.
- */
- 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}
- */
- 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'],
- );
- }
- }
|