You are here

class _menu_editor_SaveEngine in Menu Editor 6.3

Hierarchy

Expanded class hierarchy of _menu_editor_SaveEngine

File

./menu_editor.admin.inc, line 492

View source
class _menu_editor_SaveEngine {
  protected $_placeholders = array();
  protected $_mlids = array();
  protected $_errors = array();
  public function __construct($menu) {
    $this->_placeholders = menu_editor_get_placeholders($menu);
  }
  public function getErrors() {
    return $this->_errors;
  }
  public function saveItem(&$item, $item_key) {
    $item['customized'] = 1;

    // check the link path
    $link_path =& $item['link_path'];

    // set the parent link id
    if ($item['plid'] && !is_numeric($item['plid'])) {
      if (isset($this->_mlids["mlid-{$item['plid']}"])) {
        $item['plid'] = $this->_mlids["mlid-{$item['plid']}"];
      }
      else {
        unset($item['plid']);
      }
    }

    // placeholders
    $link_path_placeholder = NULL;
    if (isset($this->_placeholders[$link_path])) {
      $link_path_placeholder = $this->_placeholders[$link_path];
      if (is_numeric($item['mlid'])) {

        // existing menu item
        $link_path = _menu_editor_get_path_for_placeholder($link_path_placeholder, $item);
        $link_path_placeholder = NULL;
      }
      else {

        // new menu item
        // use a dummy link path,
        // until we know the correct mlid.
        $link_path = '<front>';
      }
    }

    // clean the link path
    if (isset($link_path)) {
      $link_path = drupal_get_normal_path($link_path);
      if (!menu_path_is_external($link_path)) {
        $parsed_link = parse_url($link_path);
        if (isset($parsed_link['query'])) {
          $item['options']['query'] = $parsed_link['query'];
        }
        else {
          unset($item['options']['query']);
        }
        if (isset($parsed_link['fragment'])) {
          $item['options']['fragment'] = $parsed_link['fragment'];
        }
        else {
          unset($item['options']['fragment']);
        }
        if ($link_path != $parsed_link['path']) {
          $link_path = $parsed_link['path'];
        }
      }
      if (!trim($link_path) || !menu_valid_path($item)) {

        // invalid link path, discard this item
        continue;
      }
    }

    // update the item, or create it if
    $mlid = menu_link_save($item);
    if (is_numeric($mlid)) {

      // remember as a plid for child items
      $this->_mlids[$item_key] = $mlid;
      if (isset($link_path_placeholder)) {

        // overwrite the dummy link path
        $link_path = _menu_editor_get_path_for_placeholder($link_path_placeholder, $item);
        menu_link_save($item);
      }
      if (module_exists('i18nmenu')) {

        // See http://drupal.org/node/786230#comment-2911038
        $item['parent'] = $item['menu_name'] . ':' . $item['plid'];

        // Ensure we have a menu item to work with.
        _i18nmenu_update_item($item);
      }
      return $mlid;
    }
    else {
      $this->_errors[] = $item_key;
      return NULL;
    }
  }

}

Members