This repository has been archived on 2025-06-21. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
suitedesk/modules/storm/stormteam/stormteam.install

183 lines
4.3 KiB
Text

<?php
/**
* @file
* Install, uninstall and update functions for the SuiteDesk Team module
*/
/**
* @function
* Implementation of hook_install().
*/
function stormteam_install() {
drupal_install_schema('stormteam');
variable_set('node_options_stormteam', array('status'));
}
/**
* @function
* Implementation of hook_disable().
*/
function stormteam_disable() {
drupal_set_message(t('Nodes of type "Team" have not been deleted on disabling SuiteDesk Team. Please note that they will now have reduced functionality, and will not be protected by SuiteDesk Team access controls.'), 'warning');
}
/**
* @function
* Implementation of hook_uninstall().
*/
function stormteam_uninstall() {
drupal_uninstall_schema('stormteam');
}
/**
* @function
* Implementation of hook_schema().
*/
function stormteam_schema() {
$schema['stormteam'] = array(
'fields' => array(
'vid' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'nid' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0),
'mnid' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0
),
),
'primary key' => array(
'vid',
'nid',
'mnid',
),
'indexes' => array(
'vid' => array('vid'),
'nid' => array('nid'),
'mnid' => array('mnid'),
),
);
return $schema;
}
/**
* @function
* Implementation of hook_update_N().
* Removes 0:N from members array
*/
function stormteam_update_6101() {
$ret = array();
$sql = "SELECT ste.members, ste.vid FROM {stormteam} ste";
$results = db_query($sql);
while ($team = db_fetch_object($results)) {
$members_array = unserialize($team->members);
if (array_key_exists(0, $members_array)) {
unset($members_array[0]);
}
$team->members = serialize($members_array);
$sql = "UPDATE {stormteam} SET members='%s' WHERE vid=%d";
$result = db_query($sql, $team->members, $team->vid);
$ret[] = array('success' => $result !== FALSE, 'query' => 'Removed 0:N from vid '. $team->vid);
}
return $ret;
}
/**
* Implements hook_update_N().
*
* Migrate members serialized array to member node id
*/
function stormteam_update_6200() {
$ret = array();
$new_schema = array();
$new_schema['stormteam_6200'] = array(
'fields' => array(
'vid' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'nid' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0
),
'mnid' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0
),
),
'primary key' => array(
'vid',
'nid',
'mnid',
),
);
// Create the new table with a temporary name
db_create_table($ret, 'stormteam_6200', $new_schema['stormteam_6200']);
// Check for collisions between org names and person names
$result = db_query("SELECT * FROM {stormteam}");
$mapping = array();
while ($team = db_fetch_object($result)) {
$members = unserialize($team->members);
// Generate the mapping array and save it to the database
foreach ($members as $nid => $fullname) {
$mapping = new stdClass();
$mapping->nid = $team->nid;
$mapping->vid = $team->vid;
$mapping->mnid = $nid;
$result_insert = db_query('INSERT INTO {stormteam_6200} VALUES (%d, %d, %d)', $mapping->vid, $mapping->nid, $mapping->mnid);
if (FALSE === $result_insert) {
// Write failed, abort the update
$mapping = FALSE;
break 2;
}
}
}
if (FALSE === $mapping) {
// Abort the changes
$ret['#abort'] = array('success' => FALSE, 'query' => "Unable to map team members to nodes. Failed to write data to new table.");
// Remove the new table
db_drop_table($ret, 'stormteam_6200');
// Return the failed update
return $ret;
}
// Remove the old table
db_drop_table($ret, 'stormteam');
// Rename the table to the proper name
db_rename_table($ret, 'stormteam_6200', 'stormteam');
return $ret;
}
/**
* Improve primary keys and indexes
*/
function stormteam_update_6201() {
$return = array();
db_add_index($return, 'stormteam', 'vid', array('vid'));
db_add_index($return, 'stormteam', 'nid', array('nid'));
db_add_index($return, 'stormteam', 'mnid', array('mnid'));
return $return;
}