Rollback the accidentally committed #194310
parent
e6a88be5d1
commit
22a4c039da
|
@ -244,6 +244,207 @@ function book_update_6000() {
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Drupal 5.x to 6.x update.
|
||||||
|
*
|
||||||
|
* This function moves any existing book hierarchy into the new structure used
|
||||||
|
* in the 6.x module. Rather than storing the hierarchy in the {book} table,
|
||||||
|
* the menu API is used to store the hierarchy in the {menu_links} table and the
|
||||||
|
* {book} table serves to uniquely connect a node to a menu link.
|
||||||
|
*
|
||||||
|
* In order to accomplish this, the current hierarchy is processed using a stack.
|
||||||
|
* The stack insures that each parent is processed before any of its children
|
||||||
|
* in the book hierarchy, and is compatible with batched update processing.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function book_update_6000() {
|
||||||
|
$ret = array();
|
||||||
|
|
||||||
|
// Set up for a multi-part update.
|
||||||
|
if (!isset($_SESSION['book_update_6000'])) {
|
||||||
|
|
||||||
|
$schema['book'] = array(
|
||||||
|
'fields' => array(
|
||||||
|
'mlid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
|
||||||
|
'nid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
|
||||||
|
'bid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
|
||||||
|
),
|
||||||
|
'indexes' => array(
|
||||||
|
'nid' => array('nid'),
|
||||||
|
'bid' => array('bid')
|
||||||
|
),
|
||||||
|
'primary key' => array('mlid'),
|
||||||
|
);
|
||||||
|
// Add the node type.
|
||||||
|
_book_install_type_create();
|
||||||
|
|
||||||
|
// Fix role permissions to account for the changed names
|
||||||
|
// Setup the array holding strings to match and the corresponding
|
||||||
|
// strings to replace them with.
|
||||||
|
$replace = array(
|
||||||
|
'outline posts in books' => 'administer book outlines',
|
||||||
|
'create book pages' => 'create book content',
|
||||||
|
'edit book pages' => 'edit book content',
|
||||||
|
'edit own book pages' => 'edit own book content',
|
||||||
|
'see printer-friendly version' => 'access printer-friendly version',
|
||||||
|
);
|
||||||
|
|
||||||
|
// Loop over all the roles, and do the necessary transformations.
|
||||||
|
$query = db_query("SELECT rid, perm FROM {permission} ORDER BY rid");
|
||||||
|
while ($role = db_fetch_object($query)) {
|
||||||
|
// Replace all the old permissions with the corresponding new permissions.
|
||||||
|
$fixed_perm = strtr($role->perm, $replace);
|
||||||
|
// If the user could previously create book pages, they should get the new
|
||||||
|
// 'add content to books' permission.
|
||||||
|
if (strpos($role->perm, 'create book pages') !== FALSE) {
|
||||||
|
$fixed_perm .= ', add content to books';
|
||||||
|
}
|
||||||
|
// Only save if the permissions have changed.
|
||||||
|
if ($fixed_perm != $role->perm) {
|
||||||
|
$ret[] = update_sql("UPDATE {permission} SET perm = '$fixed_perm' WHERE rid = $role->rid");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine whether there are any existing nodes in the book hierarchy.
|
||||||
|
if (db_result(db_query("SELECT COUNT(*) FROM {book}"))) {
|
||||||
|
// Temporary table for the old book hierarchy; we'll discard revision info.
|
||||||
|
$schema['book_temp'] = array(
|
||||||
|
'fields' => array(
|
||||||
|
'nid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
|
||||||
|
'parent' => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
|
||||||
|
'weight' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'tiny')
|
||||||
|
),
|
||||||
|
'indexes' => array(
|
||||||
|
'parent' => array('parent')
|
||||||
|
),
|
||||||
|
'primary key' => array('nid'),
|
||||||
|
);
|
||||||
|
|
||||||
|
db_create_table($ret, 'book_temp', $schema['book_temp']);
|
||||||
|
|
||||||
|
// Insert each node in the old table into the temporary table.
|
||||||
|
$ret[] = update_sql("INSERT INTO {book_temp} (nid, parent, weight) SELECT b.nid, b.parent, b.weight FROM {book} b INNER JOIN {node} n on b.vid = n.vid");
|
||||||
|
$ret[] = update_sql("DROP TABLE {book}");
|
||||||
|
|
||||||
|
db_create_table($ret, 'book', $schema['book']);
|
||||||
|
|
||||||
|
$_SESSION['book_update_6000_orphans']['from'] = 0;
|
||||||
|
$_SESSION['book_update_6000'] = array();
|
||||||
|
$result = db_query("SELECT * from {book_temp} WHERE parent = 0");
|
||||||
|
|
||||||
|
// Collect all books - top-level nodes.
|
||||||
|
while ($a = db_fetch_array($result)) {
|
||||||
|
$_SESSION['book_update_6000'][] = $a;
|
||||||
|
}
|
||||||
|
$ret['#finished'] = FALSE;
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// No exising nodes in the hierarchy, so drop the table and re-create it.
|
||||||
|
$ret[] = update_sql("DROP TABLE {book}");
|
||||||
|
db_create_table($ret, 'book', $schema['book']);
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif ($_SESSION['book_update_6000_orphans']) {
|
||||||
|
// Do the first batched part of the update - collect orphans.
|
||||||
|
$update_count = 400; // Update this many at a time
|
||||||
|
|
||||||
|
$result = db_query_range("SELECT * FROM {book_temp}", $_SESSION['book_update_6000_orphans']['from'], $update_count);
|
||||||
|
$has_rows = FALSE;
|
||||||
|
// Go through the next $update_count book pages and locate the orphans.
|
||||||
|
while ($book = db_fetch_array($result)) {
|
||||||
|
$has_rows = TRUE;
|
||||||
|
// Orphans are defined as nodes whose parent does not exist in the table.
|
||||||
|
if ($book['parent'] && !db_result(db_query("SELECT COUNT(*) FROM {book_temp} WHERE nid = %d", $book['parent']))) {
|
||||||
|
if (empty($_SESSION['book_update_6000_orphans']['book'])) {
|
||||||
|
// The first orphan becomes the parent for all other orphans.
|
||||||
|
$book['parent'] = 0;
|
||||||
|
$_SESSION['book_update_6000_orphans']['book'] = $book;
|
||||||
|
$ret[] = array('success' => TRUE, 'query' => t('Relocated orphan book pages.'));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Re-assign the parent value of the book, and add it to the stack.
|
||||||
|
$book['parent'] = $_SESSION['book_update_6000_orphans']['book']['nid'];
|
||||||
|
$_SESSION['book_update_6000'][] = $book;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($has_rows) {
|
||||||
|
$_SESSION['book_update_6000_orphans']['from'] += $update_count;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Done with this part
|
||||||
|
if (!empty($_SESSION['book_update_6000_orphans']['book'])) {
|
||||||
|
// The orphans' parent is added last, so it will be processed first.
|
||||||
|
$_SESSION['book_update_6000'][] = $_SESSION['book_update_6000_orphans']['book'];
|
||||||
|
}
|
||||||
|
$_SESSION['book_update_6000_orphans'] = FALSE;
|
||||||
|
}
|
||||||
|
$ret['#finished'] = FALSE;
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Do the next batched part of the update
|
||||||
|
$update_count = 100; // Update this many at a time
|
||||||
|
|
||||||
|
while ($update_count && $_SESSION['book_update_6000']) {
|
||||||
|
// Get the last node off the stack.
|
||||||
|
$book = array_pop($_SESSION['book_update_6000']);
|
||||||
|
|
||||||
|
// Add all of this node's children to the stack
|
||||||
|
$result = db_query("SELECT * FROM {book_temp} WHERE parent = %d", $book['nid']);
|
||||||
|
while ($a = db_fetch_array($result)) {
|
||||||
|
$_SESSION['book_update_6000'][] = $a;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($book['parent']) {
|
||||||
|
// If its not a top level page, get its parent's mlid.
|
||||||
|
$parent = db_fetch_array(db_query("SELECT b.mlid AS plid, b.bid FROM {book} b WHERE b.nid = %d", $book['parent']));
|
||||||
|
$book = array_merge($book, $parent);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// There is not a parent - this is a new book.
|
||||||
|
$book['plid'] = 0;
|
||||||
|
$book['bid'] = $book['nid'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$book += array(
|
||||||
|
'module' => 'book',
|
||||||
|
'link_path' => 'node/'. $book['nid'],
|
||||||
|
'router_path' => 'node/%',
|
||||||
|
'menu_name' => book_menu_name($book['bid']),
|
||||||
|
);
|
||||||
|
$book = array_merge($book, db_fetch_array(db_query("SELECT title AS link_title FROM {node} WHERE nid = %d", $book['nid'])));
|
||||||
|
|
||||||
|
// Items with depth > MENU_MAX_DEPTH cannot be saved.
|
||||||
|
if (menu_link_save($book)) {
|
||||||
|
db_query("INSERT INTO {book} (mlid, nid, bid) VALUES (%d, %d, %d)", $book['mlid'], $book['nid'], $book['bid']);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// The depth was greater then MENU_MAX_DEPTH, so attach it to the
|
||||||
|
// closest valid parent.
|
||||||
|
$book['plid'] = db_result(db_query("SELECT plid FROM {menu_links} WHERE mlid = %d", $book['plid']));
|
||||||
|
if (menu_link_save($book)) {
|
||||||
|
db_query("INSERT INTO {book} (mlid, nid, bid) VALUES (%d, %d, %d)", $book['mlid'], $book['nid'], $book['bid']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$update_count--;
|
||||||
|
}
|
||||||
|
$ret['#finished'] = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($_SESSION['book_update_6000'])) {
|
||||||
|
$ret['#finished'] = TRUE;
|
||||||
|
$ret[] = array('success' => TRUE, 'query' => t('Relocated existing book pages.'));
|
||||||
|
$ret[] = update_sql("DROP TABLE {book_temp}");
|
||||||
|
unset($_SESSION['book_update_6000']);
|
||||||
|
unset($_SESSION['book_update_6000_orphans']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of hook_schema().
|
* Implementation of hook_schema().
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -24,6 +24,38 @@ function comment_update_1() {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function comment_update_6001() {
|
||||||
|
$ret[] = update_sql("ALTER TABLE {comments} DROP score");
|
||||||
|
$ret[] = update_sql("ALTER TABLE {comments} DROP users");
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changed comment settings from global to per-node -- copy global
|
||||||
|
* settings to all node types.
|
||||||
|
*/
|
||||||
|
function comment_update_6002() {
|
||||||
|
$settings = array(
|
||||||
|
'comment_default_mode' => COMMENT_MODE_THREADED_EXPANDED,
|
||||||
|
'comment_default_order' => COMMENT_ORDER_NEWEST_FIRST,
|
||||||
|
'comment_default_per_page' => 50,
|
||||||
|
'comment_controls' => COMMENT_CONTROLS_HIDDEN,
|
||||||
|
'comment_anonymous' => COMMENT_ANONYMOUS_MAYNOT_CONTACT,
|
||||||
|
'comment_subject_field' => 1,
|
||||||
|
'comment_preview' => COMMENT_PREVIEW_REQUIRED,
|
||||||
|
'comment_form_location' => COMMENT_FORM_SEPARATE_PAGE,
|
||||||
|
);
|
||||||
|
$types = node_get_types();
|
||||||
|
foreach ($settings as $setting => $default) {
|
||||||
|
$value = variable_get($setting, $default);
|
||||||
|
foreach ($types as $type => $object) {
|
||||||
|
variable_set($setting .'_'. $type, $value);
|
||||||
|
}
|
||||||
|
variable_del($setting);
|
||||||
|
}
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of hook_schema().
|
* Implementation of hook_schema().
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -15,6 +15,126 @@ function locale_install() {
|
||||||
db_query("INSERT INTO {languages} (language, name, native, direction, enabled, weight, javascript) VALUES ('en', 'English', 'English', '0', '1', '0', '')");
|
db_query("INSERT INTO {languages} (language, name, native, direction, enabled, weight, javascript) VALUES ('en', 'English', 'English', '0', '1', '0', '')");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup updates-5.x-to-6.x Locale updates from 5.x to 6.x
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {locales_meta} table became {languages}.
|
||||||
|
*/
|
||||||
|
function locale_update_6001() {
|
||||||
|
$ret = array();
|
||||||
|
switch ($GLOBALS['db_type']) {
|
||||||
|
case 'mysql':
|
||||||
|
case 'mysqli':
|
||||||
|
$ret[] = update_sql("CREATE TABLE {languages} (
|
||||||
|
language varchar(12) NOT NULL default '',
|
||||||
|
name varchar(64) NOT NULL default '',
|
||||||
|
native varchar(64) NOT NULL default '',
|
||||||
|
direction int NOT NULL default '0',
|
||||||
|
enabled int NOT NULL default '0',
|
||||||
|
plurals int NOT NULL default '0',
|
||||||
|
formula varchar(128) NOT NULL default '',
|
||||||
|
domain varchar(128) NOT NULL default '',
|
||||||
|
prefix varchar(128) NOT NULL default '',
|
||||||
|
weight int NOT NULL default '0',
|
||||||
|
PRIMARY KEY (language)
|
||||||
|
) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
|
||||||
|
break;
|
||||||
|
case 'pgsql':
|
||||||
|
$ret[] = update_sql("CREATE TABLE {languages} (
|
||||||
|
language varchar(12) NOT NULL default '',
|
||||||
|
name varchar(64) NOT NULL default '',
|
||||||
|
native varchar(64) NOT NULL default '',
|
||||||
|
direction int NOT NULL default '0',
|
||||||
|
enabled int NOT NULL default '0',
|
||||||
|
plurals int NOT NULL default '0',
|
||||||
|
formula varchar(128) NOT NULL default '',
|
||||||
|
domain varchar(128) NOT NULL default '',
|
||||||
|
prefix varchar(128) NOT NULL default '',
|
||||||
|
weight int NOT NULL default '0',
|
||||||
|
PRIMARY KEY (language)
|
||||||
|
)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save the languages
|
||||||
|
$ret[] = update_sql("INSERT INTO {languages} (language, name, native, direction, enabled, plurals, formula, domain, prefix, weight) SELECT locale, name, name, 0, enabled, plurals, formula, '', locale, 0 FROM {locales_meta}");
|
||||||
|
|
||||||
|
// Save the language count in the variable table
|
||||||
|
$count = db_result(db_query('SELECT COUNT(*) FROM {languages} WHERE enabled = 1'));
|
||||||
|
variable_set('language_count', $count);
|
||||||
|
|
||||||
|
// Save the default language in the variable table
|
||||||
|
$default = db_fetch_object(db_query('SELECT * FROM {locales_meta} WHERE isdefault = 1'));
|
||||||
|
variable_set('language_default', (object) array('language' => $default->locale, 'name' => $default->name, 'native' => '', 'direction' => 0, 'enabled' => 1, 'plurals' => $default->plurals, 'formula' => $default->formula, 'domain' => '', 'prefix' => $default->locale, 'weight' => 0));
|
||||||
|
|
||||||
|
$ret[] = update_sql("DROP TABLE {locales_meta}");
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change locale column to language. The language column is added by
|
||||||
|
* update_fix_d6_requirements() in update.php to avoid a large number
|
||||||
|
* of error messages from update.php. All we need to do here is copy
|
||||||
|
* locale to language and then drop locale.
|
||||||
|
*/
|
||||||
|
function locale_update_6002() {
|
||||||
|
$ret = array();
|
||||||
|
$ret[] = update_sql('UPDATE {locales_target} SET language = locale');
|
||||||
|
db_drop_field($ret, 'locales_target', 'locale');
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a column to store the filename of the JavaScript translation file.
|
||||||
|
*/
|
||||||
|
function locale_update_6003() {
|
||||||
|
$ret = array();
|
||||||
|
db_add_field($ret, 'languages', 'javascript', array('type' => 'varchar', 'length' => 32, 'not null' => TRUE, 'default' => ''));
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove empty translations, we don't need these anymore.
|
||||||
|
*/
|
||||||
|
function locale_update_6004() {
|
||||||
|
$ret = array();
|
||||||
|
$ret[] = update_sql("DELETE FROM {locales_target} WHERE translation = ''");
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prune strings with no translations (will be automatically re-registered if still in use)
|
||||||
|
*/
|
||||||
|
function locale_update_6005() {
|
||||||
|
$ret = array();
|
||||||
|
$ret[] = update_sql("DELETE FROM {locales_source} WHERE lid NOT IN (SELECT lid FROM {locales_target})");
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix remaining inconsistent indexes.
|
||||||
|
*/
|
||||||
|
function locale_update_6006() {
|
||||||
|
$ret = array();
|
||||||
|
db_add_index($ret, 'locales_target', 'language', array('language'));
|
||||||
|
|
||||||
|
switch ($GLOBALS['db_type']) {
|
||||||
|
case 'pgsql':
|
||||||
|
db_drop_index($ret, 'locales_source', 'source');
|
||||||
|
db_add_index($ret, 'locales_source', 'source', array(array('source', 30)));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @} End of "defgroup updates-5.x-to-6.x"
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of hook_uninstall().
|
* Implementation of hook_uninstall().
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2735,387 +2735,6 @@ function system_update_6039() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove unused fields from comment tables
|
|
||||||
*/
|
|
||||||
function system_update_6038() {
|
|
||||||
$ret = array();
|
|
||||||
if (db_table_exists('comments')) {
|
|
||||||
$ret[] = update_sql("ALTER TABLE {comments} DROP score");
|
|
||||||
$ret[] = update_sql("ALTER TABLE {comments} DROP users");
|
|
||||||
}
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Changed comment settings from global to per-node -- copy global
|
|
||||||
* settings to all node types.
|
|
||||||
*/
|
|
||||||
function system_update_6039() {
|
|
||||||
$ret = array();
|
|
||||||
$settings = array(
|
|
||||||
'comment_default_mode' => COMMENT_MODE_THREADED_EXPANDED,
|
|
||||||
'comment_default_order' => COMMENT_ORDER_NEWEST_FIRST,
|
|
||||||
'comment_default_per_page' => 50,
|
|
||||||
'comment_controls' => COMMENT_CONTROLS_HIDDEN,
|
|
||||||
'comment_anonymous' => COMMENT_ANONYMOUS_MAYNOT_CONTACT,
|
|
||||||
'comment_subject_field' => 1,
|
|
||||||
'comment_preview' => COMMENT_PREVIEW_REQUIRED,
|
|
||||||
'comment_form_location' => COMMENT_FORM_SEPARATE_PAGE,
|
|
||||||
);
|
|
||||||
$types = node_get_types();
|
|
||||||
foreach ($settings as $setting => $default) {
|
|
||||||
$value = variable_get($setting, $default);
|
|
||||||
foreach ($types as $type => $object) {
|
|
||||||
variable_set($setting .'_'. $type, $value);
|
|
||||||
}
|
|
||||||
variable_del($setting);
|
|
||||||
}
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function moves any existing book hierarchy into the new structure used
|
|
||||||
* in the 6.x module. Rather than storing the hierarchy in the {book} table,
|
|
||||||
* the menu API is used to store the hierarchy in the {menu_links} table and the
|
|
||||||
* {book} table serves to uniquely connect a node to a menu link.
|
|
||||||
*
|
|
||||||
* In order to accomplish this, the current hierarchy is processed using a stack.
|
|
||||||
* The stack insures that each parent is processed before any of its children
|
|
||||||
* in the book hierarchy, and is compatible with batched update processing.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function system_update_6040() {
|
|
||||||
$ret = array();
|
|
||||||
|
|
||||||
if (!db_table_exists('book')) {
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set up for a multi-part update.
|
|
||||||
if (!isset($_SESSION['system_update_6040'])) {
|
|
||||||
|
|
||||||
$schema['book'] = array(
|
|
||||||
'fields' => array(
|
|
||||||
'mlid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
|
|
||||||
'nid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
|
|
||||||
'bid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
|
|
||||||
),
|
|
||||||
'indexes' => array(
|
|
||||||
'nid' => array('nid'),
|
|
||||||
'bid' => array('bid')
|
|
||||||
),
|
|
||||||
'primary key' => array('mlid'),
|
|
||||||
);
|
|
||||||
// Add the node type.
|
|
||||||
_book_install_type_create();
|
|
||||||
|
|
||||||
// Fix role permissions to account for the changed names
|
|
||||||
// Setup the array holding strings to match and the corresponding
|
|
||||||
// strings to replace them with.
|
|
||||||
$replace = array(
|
|
||||||
'outline posts in books' => 'administer book outlines',
|
|
||||||
'create book pages' => 'create book content',
|
|
||||||
'edit book pages' => 'edit book content',
|
|
||||||
'edit own book pages' => 'edit own book content',
|
|
||||||
'see printer-friendly version' => 'access printer-friendly version',
|
|
||||||
);
|
|
||||||
|
|
||||||
// Loop over all the roles, and do the necessary transformations.
|
|
||||||
$query = db_query("SELECT rid, perm FROM {permission} ORDER BY rid");
|
|
||||||
while ($role = db_fetch_object($query)) {
|
|
||||||
// Replace all the old permissions with the corresponding new permissions.
|
|
||||||
$fixed_perm = strtr($role->perm, $replace);
|
|
||||||
// If the user could previously create book pages, they should get the new
|
|
||||||
// 'add content to books' permission.
|
|
||||||
if (strpos($role->perm, 'create book pages') !== FALSE) {
|
|
||||||
$fixed_perm .= ', add content to books';
|
|
||||||
}
|
|
||||||
// Only save if the permissions have changed.
|
|
||||||
if ($fixed_perm != $role->perm) {
|
|
||||||
$ret[] = update_sql("UPDATE {permission} SET perm = '$fixed_perm' WHERE rid = $role->rid");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine whether there are any existing nodes in the book hierarchy.
|
|
||||||
if (db_result(db_query("SELECT COUNT(*) FROM {book}"))) {
|
|
||||||
// Temporary table for the old book hierarchy; we'll discard revision info.
|
|
||||||
$schema['book_temp'] = array(
|
|
||||||
'fields' => array(
|
|
||||||
'nid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
|
|
||||||
'parent' => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
|
|
||||||
'weight' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'tiny')
|
|
||||||
),
|
|
||||||
'indexes' => array(
|
|
||||||
'parent' => array('parent')
|
|
||||||
),
|
|
||||||
'primary key' => array('nid'),
|
|
||||||
);
|
|
||||||
|
|
||||||
db_create_table($ret, 'book_temp', $schema['book_temp']);
|
|
||||||
|
|
||||||
// Insert each node in the old table into the temporary table.
|
|
||||||
$ret[] = update_sql("INSERT INTO {book_temp} (nid, parent, weight) SELECT b.nid, b.parent, b.weight FROM {book} b INNER JOIN {node} n on b.vid = n.vid");
|
|
||||||
$ret[] = update_sql("DROP TABLE {book}");
|
|
||||||
|
|
||||||
db_create_table($ret, 'book', $schema['book']);
|
|
||||||
|
|
||||||
$_SESSION['system_update_6040_orphans']['from'] = 0;
|
|
||||||
$_SESSION['system_update_6040'] = array();
|
|
||||||
$result = db_query("SELECT * from {book_temp} WHERE parent = 0");
|
|
||||||
|
|
||||||
// Collect all books - top-level nodes.
|
|
||||||
while ($a = db_fetch_array($result)) {
|
|
||||||
$_SESSION['book_update_6000'][] = $a;
|
|
||||||
}
|
|
||||||
$ret['#finished'] = 0;
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// No exising nodes in the hierarchy, so drop the table and re-create it.
|
|
||||||
$ret[] = update_sql("DROP TABLE {book}");
|
|
||||||
db_create_table($ret, 'book', $schema['book']);
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
elseif ($_SESSION['system_update_6040_orphans']) {
|
|
||||||
// Do the first batched part of the update - collect orphans.
|
|
||||||
$update_count = 400; // Update this many at a time
|
|
||||||
|
|
||||||
$result = db_query_range("SELECT * FROM {book_temp}", $_SESSION['system_update_6040_orphans']['from'], $update_count);
|
|
||||||
$has_rows = FALSE;
|
|
||||||
// Go through the next $update_count book pages and locate the orphans.
|
|
||||||
while ($book = db_fetch_array($result)) {
|
|
||||||
$has_rows = TRUE;
|
|
||||||
// Orphans are defined as nodes whose parent does not exist in the table.
|
|
||||||
if ($book['parent'] && !db_result(db_query("SELECT COUNT(*) FROM {book_temp} WHERE nid = %d", $book['parent']))) {
|
|
||||||
if (empty($_SESSION['system_update_6040_orphans']['book'])) {
|
|
||||||
// The first orphan becomes the parent for all other orphans.
|
|
||||||
$book['parent'] = 0;
|
|
||||||
$_SESSION['system_update_6040_orphans']['book'] = $book;
|
|
||||||
$ret[] = array('success' => TRUE, 'query' => t('Relocated orphan book pages.'));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Re-assign the parent value of the book, and add it to the stack.
|
|
||||||
$book['parent'] = $_SESSION['system_update_6040_orphans']['book']['nid'];
|
|
||||||
$_SESSION['system_update_6040'][] = $book;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($has_rows) {
|
|
||||||
$_SESSION['system_update_6040_orphans']['from'] += $update_count;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Done with this part
|
|
||||||
if (!empty($_SESSION['system_update_6040_orphans']['book'])) {
|
|
||||||
// The orphans' parent is added last, so it will be processed first.
|
|
||||||
$_SESSION['system_update_6040'][] = $_SESSION['book_update_6000_orphans']['book'];
|
|
||||||
}
|
|
||||||
$_SESSION['system_update_6040_orphans'] = FALSE;
|
|
||||||
}
|
|
||||||
$ret['#finished'] = 0;
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Do the next batched part of the update
|
|
||||||
$update_count = 100; // Update this many at a time
|
|
||||||
|
|
||||||
while ($update_count && $_SESSION['system_update_6040']) {
|
|
||||||
// Get the last node off the stack.
|
|
||||||
$book = array_pop($_SESSION['system_update_6040']);
|
|
||||||
|
|
||||||
// Add all of this node's children to the stack
|
|
||||||
$result = db_query("SELECT * FROM {book_temp} WHERE parent = %d", $book['nid']);
|
|
||||||
while ($a = db_fetch_array($result)) {
|
|
||||||
$_SESSION['system_update_6040'][] = $a;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($book['parent']) {
|
|
||||||
// If its not a top level page, get its parent's mlid.
|
|
||||||
$parent = db_fetch_array(db_query("SELECT b.mlid AS plid, b.bid FROM {book} b WHERE b.nid = %d", $book['parent']));
|
|
||||||
$book = array_merge($book, $parent);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// There is not a parent - this is a new book.
|
|
||||||
$book['plid'] = 0;
|
|
||||||
$book['bid'] = $book['nid'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$book += array(
|
|
||||||
'module' => 'book',
|
|
||||||
'link_path' => 'node/'. $book['nid'],
|
|
||||||
'router_path' => 'node/%',
|
|
||||||
'menu_name' => book_menu_name($book['bid']),
|
|
||||||
);
|
|
||||||
$book = array_merge($book, db_fetch_array(db_query("SELECT title AS link_title FROM {node} WHERE nid = %d", $book['nid'])));
|
|
||||||
|
|
||||||
// Items with depth > MENU_MAX_DEPTH cannot be saved.
|
|
||||||
if (menu_link_save($book)) {
|
|
||||||
db_query("INSERT INTO {book} (mlid, nid, bid) VALUES (%d, %d, %d)", $book['mlid'], $book['nid'], $book['bid']);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// The depth was greater then MENU_MAX_DEPTH, so attach it to the
|
|
||||||
// closest valid parent.
|
|
||||||
$book['plid'] = db_result(db_query("SELECT plid FROM {menu_links} WHERE mlid = %d", $book['plid']));
|
|
||||||
if (menu_link_save($book)) {
|
|
||||||
db_query("INSERT INTO {book} (mlid, nid, bid) VALUES (%d, %d, %d)", $book['mlid'], $book['nid'], $book['bid']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$update_count--;
|
|
||||||
}
|
|
||||||
$ret['#finished'] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($_SESSION['system_update_6040'])) {
|
|
||||||
$ret['#finished'] = 1;
|
|
||||||
$ret[] = array('success' => TRUE, 'query' => t('Relocated existing book pages.'));
|
|
||||||
$ret[] = update_sql("DROP TABLE {book_temp}");
|
|
||||||
unset($_SESSION['system_update_6040']);
|
|
||||||
unset($_SESSION['system_update_6040_orphans']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {locales_meta} table became {languages}.
|
|
||||||
*/
|
|
||||||
function system_update_6041() {
|
|
||||||
$ret = array();
|
|
||||||
|
|
||||||
if (!db_table_exists('locales_meta')) {
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
$schema['languages'] = array(
|
|
||||||
'fields' => array(
|
|
||||||
'language' => array(
|
|
||||||
'type' => 'varchar',
|
|
||||||
'length' => 12,
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => '',
|
|
||||||
),
|
|
||||||
'name' => array(
|
|
||||||
'type' => 'varchar',
|
|
||||||
'length' => 64,
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => '',
|
|
||||||
),
|
|
||||||
'native' => array(
|
|
||||||
'type' => 'varchar',
|
|
||||||
'length' => 64,
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => '',
|
|
||||||
),
|
|
||||||
'direction' => array(
|
|
||||||
'type' => 'int',
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => 0,
|
|
||||||
),
|
|
||||||
'enabled' => array(
|
|
||||||
'type' => 'int',
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => 0,
|
|
||||||
),
|
|
||||||
'plurals' => array(
|
|
||||||
'type' => 'int',
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => 0,
|
|
||||||
),
|
|
||||||
'formula' => array(
|
|
||||||
'type' => 'varchar',
|
|
||||||
'length' => 128,
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => '',
|
|
||||||
),
|
|
||||||
'domain' => array(
|
|
||||||
'type' => 'varchar',
|
|
||||||
'length' => 128,
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => '',
|
|
||||||
),
|
|
||||||
'prefix' => array(
|
|
||||||
'type' => 'varchar',
|
|
||||||
'length' => 128,
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => '',
|
|
||||||
),
|
|
||||||
'weight' => array(
|
|
||||||
'type' => 'int',
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => 0,
|
|
||||||
),
|
|
||||||
'javascript' => array( //Adds a column to store the filename of the JavaScript translation file.
|
|
||||||
'type' => 'varchar',
|
|
||||||
'length' => 32,
|
|
||||||
'not null' => TRUE,
|
|
||||||
'default' => '',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'primary key' => array('language'),
|
|
||||||
);
|
|
||||||
|
|
||||||
db_create_table($ret, 'languages', $schema['languages']);
|
|
||||||
|
|
||||||
// Save the languages
|
|
||||||
$ret[] = update_sql("INSERT INTO {languages} (language, name, native, direction, enabled, plurals, formula, domain, prefix, weight) SELECT locale, name, name, 0, enabled, plurals, formula, '', locale, 0 FROM {locales_meta}");
|
|
||||||
|
|
||||||
// Save the language count in the variable table
|
|
||||||
$count = db_result(db_query('SELECT COUNT(*) FROM {languages} WHERE enabled = 1'));
|
|
||||||
variable_set('language_count', $count);
|
|
||||||
|
|
||||||
// Save the default language in the variable table
|
|
||||||
$default = db_fetch_object(db_query('SELECT * FROM {locales_meta} WHERE isdefault = 1'));
|
|
||||||
variable_set('language_default', (object) array('language' => $default->locale, 'name' => $default->name, 'native' => '', 'direction' => 0, 'enabled' => 1, 'plurals' => $default->plurals, 'formula' => $default->formula, 'domain' => '', 'prefix' => $default->locale, 'weight' => 0));
|
|
||||||
|
|
||||||
$ret[] = update_sql("DROP TABLE {locales_meta}");
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Change locale column to language. The language column is added by
|
|
||||||
* update_fix_d6_requirements() in update.php to avoid a large number
|
|
||||||
* of error messages from update.php. All we need to do here is copy
|
|
||||||
* locale to language and then drop locale.
|
|
||||||
*/
|
|
||||||
function system_update_6042() {
|
|
||||||
$ret = array();
|
|
||||||
if (db_table_exists('locales_target')) {
|
|
||||||
$ret[] = update_sql('UPDATE {locales_target} SET language = locale');
|
|
||||||
db_drop_field($ret, 'locales_target', 'locale');
|
|
||||||
// Remove empty translations, we don't need these anymore.
|
|
||||||
$ret[] = update_sql("DELETE FROM {locales_target} WHERE translation = ''");
|
|
||||||
}
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prune strings with no translations (will be automatically re-registered if still in use)
|
|
||||||
*/
|
|
||||||
function system_update_6043() {
|
|
||||||
$ret = array();
|
|
||||||
if (db_table_exists('locales_source')) {
|
|
||||||
$ret[] = update_sql("DELETE FROM {locales_source} WHERE lid NOT IN (SELECT lid FROM {locales_target})");
|
|
||||||
}
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fix remaining inconsistent indexes.
|
|
||||||
*/
|
|
||||||
function system_update_6044() {
|
|
||||||
$ret = array();
|
|
||||||
if (db_table_exists('locales_target')) {
|
|
||||||
db_add_index($ret, 'locales_target', 'language', array('language'));
|
|
||||||
}
|
|
||||||
if (db_table_exists('locales_source')) {
|
|
||||||
db_drop_index($ret, 'locales_source', 'source');
|
|
||||||
db_add_index($ret, 'locales_source', 'source', array(array('source', 30)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @} End of "defgroup updates-5.x-to-6.x"
|
* @} End of "defgroup updates-5.x-to-6.x"
|
||||||
* The next series of updates should start at 7000.
|
* The next series of updates should start at 7000.
|
||||||
|
|
Loading…
Reference in New Issue