content_menu_language_filter.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /**
  3. * Created by dreizwo.de.
  4. * User: jakobs
  5. * Date: 16.08.2012
  6. * Time: 14:00:17
  7. * @author markus jakobs <jakobs@dreizwo.de>
  8. */
  9. require_once 'content_menu_filter.php';
  10. class content_menu_language_filter implements content_menu_filter {
  11. private $active;
  12. private $language;
  13. function __construct($menu_name) {
  14. $this->active = $this->_content_menu_multilanguage_support($menu_name);
  15. $this->language = $this->_content_menu_language();
  16. }
  17. public function addFilterWidget(&$form, &$form_state, $form_id) {
  18. if ($this->active) {
  19. $options = array(
  20. '' => t('-- Current (@lang) --', array('@lang' => t($GLOBALS['language']->name))),
  21. 'all' => t('-- All --'),
  22. );
  23. foreach (language_list() as $key => $lang) {
  24. $options[$key] = t($lang->name);
  25. }
  26. $form['langselect'] = array(
  27. '#type' => 'select',
  28. '#title' => t('Filter menu by language'),
  29. '#options' => $options,
  30. '#default_value' => $this->language,
  31. // @todo Remove ctools dependency as ajax is actually not used.
  32. // Refactor to use own form and submit handler instead.
  33. '#ajax' => array(
  34. 'callback' => '_content_menu_filter_elements_by_language',
  35. )
  36. );
  37. $form['#content_menu_filter_widget'][] = 'langselect';
  38. }
  39. }
  40. public function hideElement($el) {
  41. // If this filter is active...
  42. $lang = $this->language;
  43. if ($this->active && ($lang != 'all')) {
  44. if ($lang == '') {
  45. $lang = $GLOBALS['language']->language;
  46. }
  47. // Check every menu item with a specific language...
  48. if (isset($el['#item']['language']) && ($el['#item']['language'] != LANGUAGE_NONE)) {
  49. if ($el['#item']['language'] != $lang) {
  50. return TRUE;
  51. }
  52. }
  53. }
  54. return FALSE;
  55. }
  56. private function _content_menu_multilanguage_support($menuname) {
  57. $i18n_mode = 0;
  58. $menu = menu_load($menuname);
  59. $i18n_mode = $menu && isset($menu['i18n_mode']) ? $menu['i18n_mode'] : 0;
  60. return (drupal_multilingual() && ($i18n_mode != 0));
  61. }
  62. private function _content_menu_language() {
  63. $lang = '';
  64. if ($this->active) {
  65. if (isset($_SESSION['content_menu_lang_filter'])) {
  66. $lang = $_SESSION['content_menu_lang_filter'];
  67. }
  68. }
  69. return $lang;
  70. }
  71. }
  72. function _content_menu_filter_elements_by_language($form, &$form_state) {
  73. $lang = $form_state['values']['langselect'];
  74. ctools_include('ajax');
  75. $_SESSION['content_menu_lang_filter'] = $lang;
  76. if ($lang = '') {
  77. unset($_SESSION['content_menu_lang_filter']);
  78. }
  79. $commands[] = ctools_ajax_command_reload();
  80. print ajax_render($commands);
  81. exit;
  82. }