View source
<?php
function block_machine_name_form_alter(&$form, $form_state, $form_id) {
$default_values = array();
$module = empty($form['module']['#value']) ? '' : $form['module']['#value'];
switch ($form_id) {
case 'menu_block_delete_form':
$form['module'] = array(
'#type' => 'value',
'#value' => 'menu_block',
);
$form['#submit'][] = 'block_machine_name_delete';
return;
break;
case 'block_custom_block_delete':
$form['delta'] = array(
'#type' => 'value',
'#value' => $form['bid']['#value'],
);
$form['module'] = array(
'#type' => 'value',
'#value' => 'block',
);
$form['#submit'][] = 'block_machine_name_delete';
return;
break;
case 'imageblock_custom_block_delete':
$form['delta'] = array(
'#type' => 'value',
'#value' => $form['bid']['#value'],
);
$form['module'] = array(
'#type' => 'value',
'#value' => 'imageblock',
);
$form['#submit'][] = 'block_machine_name_delete';
return;
break;
}
if (!in_array($module, array(
'block',
'menu_block',
'imageblock',
))) {
return;
}
if ($form_id == $module . '_add_block_form') {
$default_values['machine_name'] = '';
}
elseif ($form_id == 'block_admin_configure') {
$machine_name = block_machine_name_get_machine_name($form['delta']['#value'], $module);
$default_values['machine_name'] = empty($machine_name) ? '' : $machine_name;
}
if (!empty($default_values)) {
$form['settings']['machine_name'] = array(
'#type' => 'textfield',
'#title' => t('Machine name'),
'#default_value' => $default_values['machine_name'],
'#maxlength' => 32,
'#description' => t('Give the block a machine name a unique identifier for CSS, template files, etc. Lowercase letters, numbers, and underscores only.'),
'#weight' => -50,
);
$form['module'] = array(
'#type' => 'value',
'#value' => $module,
);
$form['#validate'][] = 'block_machine_name_validate';
$form['#submit'][] = 'block_machine_name_submit';
}
}
function block_machine_name_validate($form, &$form_state) {
if (empty($form_state['values']['machine_name'])) {
return;
}
if (empty($form_state['values']['module'])) {
drupal_set_message('Block machine name could not find all required information in the form, your machine name will not be saved.', 'warning');
return;
}
$delta = $form_state['values']['delta'];
$module = $form_state['values']['module'];
$machine_name = $form_state['values']['machine_name'];
if (!preg_match('!^[a-z0-9_]+$!', $machine_name)) {
form_set_error('machine_name', t('The machine-readable name must contain only lowercase letters, numbers, and underscores.'));
return;
}
$table = 'block_machine_name_boxes';
$query = db_select($table)
->condition('machine_name', $machine_name, '=');
if (!empty($delta)) {
$query
->condition('delta', $delta, '<>')
->condition('module', $module, '<>');
}
$count = $query
->countQuery()
->execute()
->fetchField();
if ($count > 0) {
form_set_error('machine_name', t('The machine-readable name has been taken. Please pick another one.'));
}
}
function block_machine_name_submit($form, &$form_state) {
if (empty($form_state['values']['machine_name'])) {
return;
}
$delta = $form_state['values']['delta'];
$module = $form_state['values']['module'];
$machine_name = $form_state['values']['machine_name'];
$record = array(
'delta' => $delta,
'machine_name' => $machine_name,
'module' => $module,
);
$table = 'block_machine_name_boxes';
db_delete($table)
->condition('delta', $delta)
->condition('module', $module)
->execute();
drupal_write_record($table, $record);
}
function block_machine_name_delete($form, &$form_state) {
$table = 'block_machine_name_boxes';
db_delete($table)
->condition('delta', $form_state['values']['delta'])
->condition('module', $form_state['values']['module'])
->execute();
}
function block_machine_name_block_list_alter(&$blocks) {
$schema_version = db_query("SELECT schema_version FROM {system} WHERE name = 'block_machine_name'")
->fetchField();
if ($schema_version < 7100) {
drupal_set_message('Block Machine Name requires system updates to function. Please run update.php', 'warning');
return;
}
$query = db_select('block_machine_name_boxes', 'bmachine');
$query
->join('block', 'b', 'bmachine.delta = b.delta AND bmachine.module = b.module');
$query
->fields('bmachine')
->fields('b');
$result = $query
->execute();
foreach ($result as $k => $block) {
foreach ($blocks as $system_block) {
if ($system_block->module == $block->module && $system_block->delta == $block->delta) {
$system_block->machine_name = $block->machine_name;
}
}
}
}
function block_machine_name_get_machine_name($delta, $module) {
$machine_names =& drupal_static(__FUNCTION__);
$key = $module . '_' . $delta;
if (!isset($machine_names[$key])) {
$result = db_select('block_machine_name_boxes')
->fields('block_machine_name_boxes', array(
'machine_name',
))
->condition('delta', $delta)
->condition('module', $module)
->execute()
->fetch();
if (empty($result)) {
return FALSE;
}
$machine_names[$key] = $result->machine_name;
}
return $machine_names[$key];
}
function block_machine_name_preprocess_block(&$vars) {
$block = $vars['block'];
if (isset($block->machine_name)) {
$vars['classes_array'][] = 'block-' . str_replace('_', '-', $block->machine_name);
$vars['theme_hook_suggestions'][] = 'block__' . $block->machine_name;
}
}