You are here

function mmenu_list in Mobile sliding menu 8

Same name and namespace in other branches
  1. 7.3 mmenu.module \mmenu_list()
  2. 7 mmenu.module \mmenu_list()
  3. 7.2 mmenu.module \mmenu_list()

Gets a list of available mmenus.

Parameters

string $mmenu_name: A mmenu name if you just want to get a particular mmenu. Leaves empty if you want to get all available mmenus.

Return value

array Particular mmenu if the 'mmenu_name' is given. All available mmenus otherwise.

2 calls to mmenu_list()
MmenuSettingsForm::buildForm in src/Form/MmenuSettingsForm.php
Form constructor.
mmenu_page_bottom in ./mmenu.module
Implements hook_page_bottom().

File

./mmenu.module, line 394
Primarily Drupal hooks and global API functions to manipulate mmenus.

Code

function mmenu_list($mmenu_name = '') {
  $cid = 'mmenus:cache';

  // Gets mmenus from cache if available.
  if ($cached = \Drupal::cache()
    ->get($cid)) {
    $mmenus = $cached->data;

    // Invoke hook_mmenu_alter().
    // To allow all modules to alter the mmenus.
    // Don't save the altered values into cache.
    \Drupal::moduleHandler()
      ->alter('mmenu', $mmenus);
    if (empty($mmenu_name)) {
      return $mmenus;
    }
    elseif (isset($mmenus[$mmenu_name])) {
      return $mmenus[$mmenu_name];
    }
    else {
      return array();
    }
  }

  // Gets mmenus from hook defined.
  $mmenus = \Drupal::moduleHandler()
    ->invokeAll('mmenu');

  // Gets the default options and configurations.
  $default_options = mmenu_get_default_options();
  $default_configurations = mmenu_get_default_configurations();
  $default_mmenu = array(
    'enabled' => FALSE,
    'name' => '',
    'blocks' => array(),
    'options' => '',
    'configurations' => '',
    'custom' => array(),
  );
  foreach ($mmenus as $mmenu_key => $mmenu) {
    $mmenu += $default_mmenu;

    // Merges with the default values.
    $mmenu['options'] += $default_options;

    // Merges with the default values.
    $mmenu['configurations'] += $default_configurations;

    // Takes mmenu settings from user self defined if available.
    $configurable_mmenu = \Drupal::config('mmenu.settings')
      ->get('mmenu_item_' . $mmenu['name']);
    if (!empty($configurable_mmenu)) {
      if (!isset($configurable_mmenu['options'])) {
        $configurable_mmenu['options'] = array();
      }
      if (!isset($configurable_mmenu['configurations'])) {
        $configurable_mmenu['configurations'] = array();
      }
      if (!isset($configurable_mmenu['custom'])) {
        $configurable_mmenu['custom'] = array();
      }
      $mmenu = $configurable_mmenu + $mmenu;
      $mmenu['options'] = $configurable_mmenu['options'] + $mmenu['options'];
      $mmenu['configurations'] = $configurable_mmenu['configurations'] + $mmenu['configurations'];
      $mmenu['custom'] = $configurable_mmenu['custom'] + $mmenu['custom'];
    }
    $mmenus[$mmenu_key] = $mmenu;

    // Resets blocks values.
    foreach ($mmenu['blocks'] as $block_key => $block) {
      $mmenus[$mmenu_key]['blocks'][$block_key]['collapsed'] = isset($block['collapsed']) ? $block['collapsed'] : TRUE;
      $mmenus[$mmenu_key]['blocks'][$block_key]['wrap'] = isset($block['wrap']) ? $block['wrap'] : FALSE;
    }
  }

  // Caches the mmenus.
  // @TODO: remove comment.
  // \Drupal::cache()->set($cid, $mmenus);
  // Invoke hook_mmenu_alter().
  // To allow all modules to alter the mmenus.
  // Don't save the altered values into cache.
  \Drupal::moduleHandler()
    ->alter('mmenu', $mmenus);
  if (!empty($mmenu_name)) {
    if (isset($mmenus[$mmenu_name])) {
      return $mmenus[$mmenu_name];
    }
    else {
      return array();
    }
  }
  return $mmenus;
}