'Stores breadcrumb rules for nodes.',
'fields' => array(
'rid' => array(
'description' => 'The primary identifier for a rule.',
'type' => 'serial',
'not null' => TRUE,
),
'admin_title' => array(
'description' => 'The administrative title of this rule.',
'type' => 'varchar',
'length' => 255,
'default' => NULL,
),
'enabled' => array(
'description' => 'Whether the rule is enabled or not.',
'type' => 'int',
'size' => 'tiny',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 1,
),
'conditions' => array(
'description' => 'The serialized conditions for this rule.',
'type' => 'text',
'serialize' => TRUE,
),
'menu_name' => array(
'description' => 'The menu of the menu link for this rule.',
'type' => 'varchar',
'length' => '32',
'not null' => TRUE,
'default' => '',
),
'plid' => array(
'description' => 'The parent menu link id for this rule.',
'type' => 'int',
'default' => NULL,
),
'mlid' => array(
'description' => 'The menu link id for this rule.',
'type' => 'int',
'default' => NULL,
),
'weight' => array(
'description' => 'The weight of this rule.',
'type' => 'int',
'size' => 'tiny',
'not null' => FALSE,
'default' => 0,
),
'machine_name' => array(
'description' => 'The machine name.',
'type' => 'varchar',
'length' => 255,
'default' => NULL,
),
),
'indexes' => array(
'rule_enabled' => array('enabled', 'weight', 'rid'),
'rule_weight' => array('weight', 'rid'),
),
'primary key' => array('rid'),
'unique keys' => array(
'machine_name' => array('machine_name'),
),
);
return $schema;
}
/**
* Set the initial database schema ID.
*/
function menu_position_update_7100() {
// No-op.
}
/**
* Fix all menu position rules.
*/
function menu_position_update_7102() {
// Issue #1298832 did not include a proper upgrade path for existing rules'
// menu links which broke all the rules. So we first delete all the menu links.
db_query('DELETE FROM {menu_links} WHERE module = :module', array(':module' => 'menu_position'));
// And then let menu_position_enable_helper() fix all the rules.
$rules = db_query('SELECT rid, plid, admin_title FROM {menu_position_rules} WHERE enabled = :enabled', array(':enabled' => 1));
foreach ($rules as $rule) {
// If we were to attempt menu_position_add_menu_link() here it would fail
// because the module's new router item isn't in the system yet. Instead we
// flag the rule with a zero-value mlid and fix it in
// menu_position_rules_form_callback().
db_update('menu_position_rules')
->fields(array('mlid' => 0))
->condition('rid', $rule->rid)
->execute();
}
if ($rules->rowCount()) {
return t('Due to a bug in Menu position 7.x-1.0-beta3, all menu position rules need to be fixed. All rules will be disabled until you visit the menu position rules admin page.', array('!url' => url('admin/structure/menu-position')));
}
}
/**
* Adding the machine_name field.
*/
function menu_position_update_7103() {
db_add_field(
'menu_position_rules',
'machine_name',
array(
'description' => 'The machine name.',
'type' => 'varchar',
'length' => 255,
'default' => NULL,
)
);
$result = db_query('SELECT admin_title, rid FROM {menu_position_rules}')->fetchAll();
foreach ($result as $rule) {
$rule->machine_name = substr(preg_replace('/[^a-z0-9_]+/', '_', drupal_strtolower($rule->admin_title)), 0, 255);
db_update('menu_position_rules')
->fields(array('machine_name' => $rule->machine_name))
->condition('rid', $rule->rid)
->execute();
}
db_add_unique_key(
'menu_position_rules',
'machine_name',
array('machine_name')
);
}
/**
* Implements hook_enable().
*
* When the module is disabled, the menu links it owns are deleted. When
* re-enabling this module, we need to ensure that any menu links are re-created
* and to re-configure any old rules existing in the database.
*/
function menu_position_enable() {
$rules = db_query('SELECT rid, plid, admin_title FROM {menu_position_rules} WHERE enabled = :enabled', array(':enabled' => 1));
if ($rules->rowCount()) {
drupal_set_message(t('Existing menu position rules were discovered. They will be disabled until you visit the menu position rules admin page.', array('!url' => url('admin/structure/menu-position'))), 'error');
}
foreach ($rules as $rule) {
// If we were to attempt menu_position_add_menu_link() here it would fail
// because the module's router item isn't in the system yet. Instead we flag
// the rule with a zero-value mlid and fix it in
// menu_position_rules_form_callback().
db_update('menu_position_rules')
->fields(array('mlid' => 0))
->condition('rid', $rule->rid)
->execute();
}
}
/**
* Implements hook_uninstall().
*/
function menu_position_uninstall() {
variable_del('menu_position_active_link_display');
}