View source
<?php
DEFINE('CONTENT_MENU_ADD_ITEM_WEIGHT', 50);
function content_menu_permission() {
return array(
'administer system menus' => array(
'title' => t('Administer system menus'),
'description' => t('Administer system menus'),
),
);
}
function content_menu_menu() {
$items['menu-dummy'] = array(
'title' => 'Placeholder for menu item dummies.',
'page callback' => 'content_menu_menu_callback_menu_dummy',
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['admin/structure/menu/manage/add_existing_view'] = array(
'title' => 'Add existing view.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'content_menu_add_exiting_view',
),
'access arguments' => array(
'access content',
),
'file' => 'content_menu.menu_admin.inc',
);
return $items;
}
function content_menu_menu_callback_menu_dummy() {
return t('This is an empty placeholder page for a menu item.<br /><br />You can replace it with a valid target page URL in the <a href="@url">menu administration</a>.', array(
'@url' => url('admin/structure/menu'),
));
}
function content_menu_entity_info_alter(&$entity_info) {
$entity_info['menu']['list_controller_class'] = 'Drupal\\content_menu\\ContentMenuListController';
}
function content_menu_theme() {
return array(
'menu_overview_form_extended' => array(
'file' => 'content_menu.menu_admin.inc',
'render element' => 'form',
),
);
}
function content_menu_page_alter(&$page) {
$menu_paths = array(
'admin/structure/menu/',
'admin/structure/menu-position/',
content_menu_variable_get_add_existing_content_url(),
);
$path = current_path();
foreach ($menu_paths as $menu_path) {
if (strpos($path, $menu_path) === 0) {
content_menu_set_menu_admin_breadcrumb();
break;
}
}
if (current_path() == content_menu_variable_get_add_existing_content_url()) {
$item = content_menu_get_menu_item_from_querystring();
if (isset($item['mlid']) && $item['mlid'] != 0) {
drupal_set_message(t('You`re about to select a new content target for menu item "%title".', array(
'%title' => $item['title'],
)));
drupal_set_message(t('Now you can select an existing content item for menu item "%title".', array(
'%title' => $item['title'],
)));
}
}
}
function content_menu_set_menu_admin_breadcrumb($menu_name = NULL) {
$breadcrumb = array();
$breadcrumb[] = l(t('Home'), '<front>');
$breadcrumb[] = l(t('Administration'), 'admin');
$breadcrumb[] = l(t('Structure'), 'admin/structure');
$breadcrumb[] = l(t('Menus'), 'admin/structure/menu');
if ($menu_name == NULL) {
$menu_item = content_menu_get_menu_item_from_querystring();
if (isset($menu_item['name'])) {
$menu_name = $menu_item['name'];
}
}
if ($menu_name) {
$menus = menu_get_menus();
$menu_title = t($menus[$menu_name]);
$breadcrumb[] = l(t($menu_title), 'admin/structure/menu/manage/' . $menu_name);
drupal_set_title(t($menu_title));
}
drupal_set_breadcrumb($breadcrumb);
}
function content_menu_menu_link_insert($menu_link) {
content_menu_mark_link_updated($menu_link);
}
function content_menu_menu_link_update($menu_link) {
content_menu_mark_link_updated($menu_link);
}
function content_menu_mark_link_updated($menu_link) {
if (isset($_GET['destination']) && strpos($_GET['destination'], 'admin/structure/menu/manage/') === 0 || strpos(current_path(), 'admin/structure/menu/manage/') === 0) {
$menu_link->created = time();
$_SESSION['content_menu_inserted_links'][$menu_link
->id()] = $menu_link;
}
}
function content_menu_form_menu_link_form_alter(&$form, &$form_state) {
if (isset($_GET['menu_title'])) {
$menu_item = content_menu_get_menu_item_from_querystring();
if (!empty($menu_item['link_path'])) {
content_menu_link_save($menu_item);
drupal_goto(check_plain($_GET['destination']));
}
$form['link_title']['#default_value'] = $menu_item['title'];
$form['link_path']['#default_value'] = $menu_item['link_path'];
$form['parent']['#default_value'] = $menu_item['name'] . ':' . $menu_item['plid'];
$form['weight']['#default_value'] = $menu_item['weight'];
$form['enabled']['#default_value'] = !$menu_item['hidden'];
}
if ($form['mlid']['#value']) {
$menu = explode(':', $form['parent']['#default_value']);
content_menu_set_menu_admin_breadcrumb($menu[0]);
}
$form['advanced'] = array(
'#type' => 'details',
'#weight' => 100,
'#title' => t('Advanced menu item settings'),
);
$advanced_elements = array(
'description',
'expanded',
'parent',
'weight',
);
foreach ($advanced_elements as $el_key) {
$form['advanced'][$el_key] = $form[$el_key];
unset($form[$el_key]);
}
}
function content_menu_form_menu_item_delete_form_alter(&$form, &$form_state, $form_id) {
if ($form['#item']['mlid']['#value']) {
$menu_name = $form['#item']['menu_name'];
content_menu_set_menu_admin_breadcrumb($menu_name);
$form['question'] = array(
'#type' => 'markup',
'#markup' => '<div class="question">' . t('Are you sure you want to delete the custom menu link %item?', array(
'%item' => t($form['#item']['link_title']),
)) . '</div><p></p>',
'#weight' => -100,
);
if ($form['#item']['router_path'] == 'node/%') {
$nid = explode('/', $form['#item']['link_path']);
if (isset($nid[1]) && is_numeric($nid[1])) {
$node = node_load($nid[1]);
if (is_object($node) && node_access('delete', $node)) {
$form['delete_node'] = array(
'#type' => 'checkbox',
'#title' => t('Delete associated %type <a href="@url">%title</a> as well.', array(
'%type' => node_type_get_name($node),
'@url' => url('node/' . $node->nid),
'%title' => $node->title,
)),
'#default_value' => FALSE,
'#weight' => -50,
);
$form['delete_node_nid'] = array(
'#type' => 'value',
'#value' => $node->nid,
);
$form['#submit'] = array(
'content_menu_item_delete_form_submit',
);
}
}
}
}
}
function content_menu_item_delete_form_submit($form, &$form_state) {
menu_item_delete_form_submit($form, $form_state);
if ($form_state['input']['delete_node'] == 1) {
$nid = explode('/', $form['#item']['link_path']);
if (isset($nid[1]) && is_numeric($nid[1])) {
$node = node_load($nid[1]);
if (is_object($node) && node_access('delete', $node) && $node->nid == $form_state['values']['delete_node_nid']) {
node_delete($node->nid);
watchdog('content', '@type: deleted %title.', array(
'@type' => $node->type,
'%title' => $node->title,
));
drupal_set_message(t('@type %title has been deleted.', array(
'@type' => node_type_get_name($node),
'%title' => $node->title,
)));
}
}
}
}
function content_menu_form_menu_position_add_rule_form_alter(&$form, &$form_state, $form_id) {
if (isset($_GET['menu_title'])) {
$menu_item = content_menu_get_menu_item_from_querystring();
$form['admin_title']['#default_value'] = $menu_item['title'];
$form['plid']['#default_value'] = $menu_item['name'] . ':' . $menu_item['plid'];
}
}
function content_menu_form_menu_overview_form_alter(&$form, &$form_state) {
if (config('content_menu.settings')
->get('alter_all_menus') || content_menu_is_menu_considered($form['#menu']['menu_name'])) {
module_load_include('inc', 'content_menu', 'content_menu.menu_admin');
_content_menu_form_menu_overview_form_alter($form, $form_state, $form_id);
}
}
function content_menu_preprocess_views_view_field(&$vars) {
$view =& $vars['view'];
$field =& $vars['field'];
$selection_view = explode(':', config('content_menu.settings')
->get('add_existing_content_view'));
if ($field->field == 'nid' && $view->name == $selection_view[0] && (!isset($selection_view[1]) || $view->current_display == $selection_view[1])) {
module_load_include('inc', 'content_menu', 'content_menu.menu_admin');
$item = content_menu_get_menu_item_from_querystring();
$item['link_path'] = 'node/' . $field->original_value;
$url = 'admin/structure/menu/manage/' . $item['name'] . '/add';
$vars['output'] = l(t('select'), $url, array(
'query' => content_menu_assemble_query_string($item),
));
}
}
function content_menu_menu_item_target_types_alter(&$target_types, &$context) {
module_load_include('inc', 'content_menu', 'content_menu.menu_admin');
_content_menu_menu_item_target_types_alter($target_types, $context);
}
function content_menu_menu_item_element_alter(&$el) {
module_load_include('inc', 'content_menu', 'content_menu.menu_admin');
_content_menu_menu_item_element_alter($el);
}
function content_menu_node_insert($node) {
if (isset($_GET['menu_link_path']) && $_GET['menu_link_path'] == 'menu-dummy') {
$menu_item = content_menu_get_menu_item_from_querystring();
$menu_item['link_path'] = "node/" . $node->nid;
content_menu_link_save($menu_item);
}
}
function content_menu_form_alter(&$form, &$form_state, $form_id) {
if (isset($form['#node_edit_form'])) {
if (user_access('administer menu')) {
if ($form['#node_edit_form'] && isset($form['menu'])) {
$menu = explode(':', $form['menu']['link']['parent']['#default_value']);
$form['menu']['link']['menu_admin_link'] = array(
'#type' => 'markup',
'#markup' => l(t('Manage menu structure') . ' …', 'admin/structure/menu/manage/' . $menu[0], array(
'attributes' => array(
'target' => '_blank',
),
)),
);
}
}
if (isset($form['menu'])) {
if (isset($_GET['menu_link_path']) && $_GET['menu_link_path'] == 'menu-dummy') {
$form['menu']['enabled']['#access'] = FALSE;
$form['menu']['link']['#access'] = FALSE;
$trail = content_menu_get_menu_trail($_GET['menu_mlid']);
$form['menu']['menu_dummy_replace'] = array(
'#markup' => t('A link to this node will replace the menu dummy at <br> %trail', array(
'%trail' => implode(' » ', $trail),
)),
);
$form['title']['#default_value'] = $form['title_field']['und']['0']['value']['#default_value'] = $_GET['menu_title'];
}
else {
$form['menu']['link']['description']['#access'] = FALSE;
if (isset($_GET['menu_title'])) {
$menu_item = content_menu_get_menu_item_from_querystring();
$form['menu']['enabled']['#default_value'] = 1;
$form['menu']['link']['hidden']['#value'] = $menu_item['hidden'];
$form['menu']['link']['link_title']['#default_value'] = $menu_item['title'];
$form['menu']['link']['parent']['#default_value'] = $menu_item['name'] . ':' . $menu_item['plid'];
$form['menu']['link']['weight']['#default_value'] = $menu_item['weight'];
$form['title']['#default_value'] = $form['title_field']['und']['0']['value']['#default_value'] = $menu_item['title'];
}
}
}
}
}
function content_menu_get_menu_trail($leaf_mlid) {
$menu_link = menu_link_load($leaf_mlid);
$menu = menu_load($menu_link['menu_name']);
$trail = array();
while ($menu_link) {
array_unshift($trail, $menu_link['link_title']);
$menu_link = menu_link_load($menu_link['plid']);
}
array_unshift($trail, $menu['title']);
return $trail;
}
function content_menu_get_menu_item_from_querystring() {
$menu_item = array();
foreach ($_GET as $get_key => $get_value) {
if (substr($get_key, 0, 5) == 'menu_') {
$menu_item[check_plain(substr($get_key, 5))] = strip_tags($get_value);
}
}
return $menu_item;
}
function content_menu_is_menu_considered($menu_name) {
$exclude_menus = config('content_menu.settings')
->get('special_menus');
return !in_array($menu_name, $exclude_menus);
}
function content_menu_link_save($menu_item) {
$menu_item['menu_name'] = $menu_item['name'];
$menu_item['link_title'] = $menu_item['title'];
$menu_item['customized'] = 1;
return menu_link_save($menu_item);
}
function content_menu_variable_get_add_existing_content_url() {
$url = config('content_menu.settings')
->get('content_menu_add_existing_content_url');
if ($url == 'admin/structure/menu/manage/add_existing_content' && !module_exists('views')) {
$url = NULL;
}
return $url;
}