Skip to content

Instantly share code, notes, and snippets.

@ajsalminen
Created May 17, 2012 16:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ajsalminen/2719944 to your computer and use it in GitHub Desktop.
Save ajsalminen/2719944 to your computer and use it in GitHub Desktop.
Drush command for converting rules from the Drupal Menu Trails module to Menu position module
<?php
/**
* Implementation of hook_drush_command()
*
* @return array
* Command definitions array.
*
*/
function menu_position_migrate_drush_command() {
$items = array();
$items['menu-trails-to-menu-position'] = array(
'description' => "Convert menu trails rules to menu position rules.",
'arguments' => array(
'ruletype' => 'The type of rules to convert if not all',
),
'examples' => array(
'drush mt2mp turkey taxonomy_term' =>
'Convert taxonomy term based rules.',
),
'aliases' => array('mt2mp'),
'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL,
'core' => array('6'),
'drupal dependencies' => array('menu_position', 'menutrails')
);
$items['menu-position-clear'] = array(
'description' => 'Remove all menu position rules',
'examples' => array(
'drush mp-clear' => 'Clear all menu position rules',
),
'aliases' => array('mpclear'),
'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL,
'core' => array('6'),
'drupal dependencies' => array('menu_position'),
);
return $items;
}
/**
* menu_position_migrate_convert_rule
*
* Convert a content type or taxonomy rule from menutrails to menu_position.
*
*/
function menu_position_migrate_convert_rule($menu_name, $rule_type, $path, $condition) {
$rule = array();
$rule['menu_name'] = $menu_name;
$rule['plid'] = db_result(db_query("SELECT mlid FROM {menu_links} WHERE link_path = '%s'", $path));
// no matching mlid for the path
if ($rule['plid'] === FALSE) {
return FALSE;
}
if ($rule_type == 'content_type') {
$rule['conditions']['content_type']['content_type'] = array($condition => $condition);
$rule['admin_title'] = $condition;
}
elseif ($rule_type == 'taxonomy_term') {
$term = taxonomy_get_term($condition);
// did not get a valid tid
if (!is_object($term)) {
return FALSE;
}
$vocabulary = taxonomy_vocabulary_load($term->vid);
$rule['conditions']['taxonomy']['tid'] = $condition;
$rule['admin_title'] = $vocabulary->name . ': ' . $term->name;
}
$rule['conditions'] = serialize($rule['conditions']);
return $rule;
}
/**
* drush_menu_position_migrate_menu_position_clear
*
* Drush command that clears all the menu position rules in database.
*
*/
function drush_menu_position_migrate_menu_position_clear() {
// delete all existing menu_position rules
module_load_include('inc', 'menu_position', 'menu_position.admin');
$result = db_query("SELECT rid FROM {menu_position_rules}");
while ($row = db_fetch_array($result)) {
menu_position_delete_rule($row['rid']);
}
}
/**
* drush_menu_position_migrate_menu_trails_to_menu_position
*
* Drush command that converts menutrails module's rules to menu position.
*
* @param $ruletype
* What type of rules to convert, one of content_type, taxonomy_term, all.
*
*/
function drush_menu_position_migrate_menu_trails_to_menu_position($ruletype = 'all') {
module_load_include('inc', 'menu_position', 'menu_position.admin');
$menu = variable_get('menutrails_menu', 'navigation');
// simply the order these get added in determines rule precedence
if ($ruletype == 'taxonomy_term' || $ruletype == 'all') {
$types['taxonomy_term'] = variable_get('menutrails_terms', array());
}
if ($ruletype == 'content_type' || $ruletype == 'all') {
$types['content_type'] = variable_get('menutrails_node_types', array());
}
foreach ($types as $type => $rules) {
foreach ($rules as $cond => $path) {
if (empty($path)) {
continue;
}
$rule = menu_position_migrate_convert_rule($menu, $type, $path, $cond);
if ($rule !== FALSE) {
menu_position_add_rule($rule);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment