### Eclipse Workspace Patch 1.0 #P Drupal HEAD #2 Index: modules/block/block.module =================================================================== RCS file: /cvs/drupal/drupal/modules/block/block.module,v retrieving revision 1.234 diff -u -r1.234 block.module --- modules/block/block.module 8 Nov 2006 19:49:13 -0000 1.234 +++ modules/block/block.module 8 Nov 2006 20:28:46 -0000 @@ -78,7 +78,7 @@ $items[] = array('path' => 'admin/build/block/configure', 'title' => t('Configure block'), 'access' => user_access('administer blocks'), 'callback' => 'drupal_get_form', - 'callback arguments' => array('block_admin_configure'), + 'callback arguments' => array('block_admin_configure', 'configure'), 'type' => MENU_CALLBACK); $items[] = array('path' => 'admin/build/block/delete', 'title' => t('Delete block'), 'access' => user_access('administer blocks'), @@ -88,7 +88,7 @@ $items[] = array('path' => 'admin/build/block/add', 'title' => t('Add block'), 'access' => user_access('administer blocks'), 'callback' => 'drupal_get_form', - 'callback arguments' => array('block_box_form'), + 'callback arguments' => array('block_admin_configure', 'add'), 'type' => MENU_LOCAL_TASK); $default = variable_get('theme_default', 'garland'); foreach (list_themes() as $key => $theme) { @@ -138,7 +138,7 @@ break; case 'save': - block_box_save($edit, $delta); + return block_box_save($edit, $delta); break; case 'view': @@ -373,13 +373,29 @@ /** * Menu callback; displays the block configuration form. */ -function block_admin_configure($module = NULL, $delta = 0) { +function block_admin_configure($type, $module = NULL, $delta = 0) { + if ($type == 'configure') { + if (!($edit = db_fetch_array(db_query("SELECT pages, visibility, custom, title FROM {blocks} WHERE module = '%s' AND delta = '%s'", $module, $delta)))) { + drupal_not_found(); + return; + } + + // Get the block subject for the page title. + $info = module_invoke($module, 'block', 'list'); + drupal_set_title(t("'%name' block", array('%name' => $info[$delta]['info']))); + } + else { + // Otherwise, this is an 'add' form and we are adding a new block. + if (!isset($module)) { + $module = 'block'; + } + $delta = NULL; + $edit = array('pages' => '', 'visibility' => '', 'custom' => '', 'title' => ''); + } $form['module'] = array('#type' => 'value', '#value' => $module); $form['delta'] = array('#type' => 'value', '#value' => $delta); - $edit = db_fetch_array(db_query("SELECT pages, visibility, custom, title FROM {blocks} WHERE module = '%s' AND delta = '%s'", $module, $delta)); - $form['block_settings'] = array( '#type' => 'fieldset', '#title' => t('Block specific settings'), @@ -402,10 +418,6 @@ } } - // Get the block subject for the page title. - $info = module_invoke($module, 'block', 'list'); - drupal_set_title(t("'%name' block", array('%name' => $info[$delta]['info']))); - // Standard block configurations. $form['user_vis_settings'] = array( '#type' => 'fieldset', @@ -492,7 +504,7 @@ function block_admin_configure_validate($form_id, $form_values) { if ($form_values['module'] == 'block') { - if (empty($form_values['info']) || db_num_rows(db_query("SELECT bid FROM {boxes} WHERE bid != %d AND info = '%s'", $form_values['delta'], $form_values['info']))) { + if (empty($form_values['info']) || ((isset($form_values['delta']) && db_num_rows(db_query("SELECT bid FROM {boxes} WHERE bid != %d AND info = '%s'", $form_values['delta'], $form_values['info']))) || (!isset($form_values['delta']) && db_num_rows(db_query("SELECT info FROM {boxes} WHERE info = '%s'", $form_values['info']))))) { form_set_error('info', t('Please ensure that each block description is unique.')); } } @@ -500,33 +512,26 @@ function block_admin_configure_submit($form_id, $form_values) { if (!form_get_errors()) { + // The hook will return a new delta when adding a new block. + $possible_new_delta = module_invoke($form_values['module'], 'block', 'save', $form_values['delta'], $form_values); + if (!isset($form_values['delta'])) { + $form_values['delta'] = $possible_new_delta; + } + + // Update blocks so any manually added blocks can be 'updated' as well. + _block_rehash(); db_query("UPDATE {blocks} SET visibility = %d, pages = '%s', custom = %d, title = '%s' WHERE module = '%s' AND delta = '%s'", $form_values['visibility'], trim($form_values['pages']), $form_values['custom'], $form_values['title'], $form_values['module'], $form_values['delta']); db_query("DELETE FROM {blocks_roles} WHERE module = '%s' AND delta = '%s'", $form_values['module'], $form_values['delta']); foreach (array_filter($form_values['roles']) as $rid) { db_query("INSERT INTO {blocks_roles} (rid, module, delta) VALUES (%d, '%s', '%s')", $rid, $form_values['module'], $form_values['delta']); } - module_invoke($form_values['module'], 'block', 'save', $form_values['delta'], $form_values); + drupal_set_message(t('The block configuration has been saved.')); cache_clear_all(); return 'admin/build/block'; } } -function block_box_form_validate($form_id, $form_values) { - if (empty($form_values['info']) || db_num_rows(db_query("SELECT info FROM {boxes} WHERE info = '%s'", $form_values['info']))) { - form_set_error('info', t('Please ensure that each block description is unique.')); - } -} - -function block_box_form_submit($form_id, $form_values) { - if (!form_get_errors()) { - if (block_box_save($form_values)) { - drupal_set_message(t('The block has been created.')); - return 'admin/build/block'; - } - } -} - /** * Menu callback; confirm deletion of custom blocks. */ @@ -549,6 +554,9 @@ return 'admin/build/block'; }; +/** + * Helper function to return form additions for 'block' type blocks. + */ function block_box_form($edit = array()) { $form['info'] = array( '#type' => 'textfield', @@ -572,7 +580,6 @@ $edit['format'] = FILTER_FORMAT_DEFAULT; } $form['body_filter']['format'] = filter_form($edit['format'], -16); - $form['submit'] = array('#type' => 'submit', '#value' => t('Save block')); return $form; } @@ -584,11 +591,13 @@ if (isset($delta)) { db_query("UPDATE {boxes} SET body = '%s', info = '%s', format = %d WHERE bid = %d", $edit['body'], $edit['info'], $edit['format'], $delta); + return TRUE; } else { - db_query("INSERT INTO {boxes} (body, info, format) VALUES ('%s', '%s', %d)", $edit['body'], $edit['info'], $edit['format']); + $delta = db_next_id('{boxes}_bid'); + db_query("INSERT INTO {boxes} (bid, body, info, format) VALUES (%d, '%s', '%s', %d)", $delta, $edit['body'], $edit['info'], $edit['format']); + return $delta; } - return TRUE; } /** Index: modules/system/system.install =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.install,v retrieving revision 1.40 diff -u -r1.40 system.install --- modules/system/system.install 8 Nov 2006 19:24:11 -0000 1.40 +++ modules/system/system.install 8 Nov 2006 20:28:49 -0000 @@ -153,7 +153,7 @@ ) /*!40100 DEFAULT CHARACTER SET UTF8 */ "); db_query("CREATE TABLE {boxes} ( - bid tinyint NOT NULL auto_increment, + bid tinyint NOT NULL, body longtext, info varchar(128) NOT NULL default '', format int NOT NULL default '0', @@ -615,7 +615,7 @@ )"); db_query("CREATE TABLE {boxes} ( - bid serial, + bid int NOT NULL, title varchar(64) NOT NULL default '', body text, info varchar(128) NOT NULL default '', @@ -3375,6 +3375,21 @@ return array(); } +function system_update_1015() { + $ret = array(); + switch ($GLOBALS['db_type']) { + case 'mysql': + case 'mysqli': + $ret[] = update_sql('ALTER TABLE {boxes} CHANGE COLUMN bid bid tinyint NOT NULL'); + break; + case 'pgsql': + $ret[] = update_sql('ALTER TABLE {boxes} ALTER COLUMN bid TYPE int'); + $ret[] = update_sql('ALTER TABLE {boxes} ALTER COLUMN bid SET NOT NULL'); + break; + } + return $ret; +} + /** * @} End of "defgroup updates-4.7-to-x.x" * The next series of updates should start at 2000.