array( 'description' => 'The main table to hold the scheduler data.', 'fields' => array( 'nid' => array( 'description' => 'The foreign key to node.nid', 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, ), 'publish_on' => array( 'description' => 'The UNIX UTC timestamp when to publish', 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, ), 'unpublish_on' => array( 'description' => 'The UNIX UTC timestamp when to unpublish', 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, ), ), 'indexes' => array( 'scheduler_publish_on' => array('publish_on'), 'scheduler_unpublish_on' => array('unpublish_on'), ), 'primary key' => array('nid'), ), ); } /** * Implements hook_uninstall(). */ function scheduler_uninstall() { // Keep variables in alphabetic order for easier maintenance and patching. $variables = array( 'scheduler_allow_date_only', 'scheduler_cache_clear_all', 'scheduler_date_format', 'scheduler_date_only_format', 'scheduler_default_time', 'scheduler_extra_info', 'scheduler_date_popup_minute_increment', 'scheduler_field_type', 'scheduler_lightweight_access_key', 'scheduler_lightweight_log', 'scheduler_time_only_format', ); $types = node_type_get_types(); foreach ($types as $type) { $type_name = $type->type; $variables[] = "scheduler_expand_fieldset_" . $type_name; $variables[] = "scheduler_publish_enable_" . $type_name; $variables[] = "scheduler_publish_touch_" . $type_name; $variables[] = "scheduler_publish_required_" . $type_name; $variables[] = "scheduler_publish_revision_" . $type_name; $variables[] = "scheduler_publish_past_date_" . $type_name; $variables[] = "scheduler_unpublish_enable_" . $type_name; $variables[] = "scheduler_unpublish_required_" . $type_name; $variables[] = "scheduler_unpublish_revision_" . $type_name; $variables[] = "scheduler_use_vertical_tabs_" . $type_name; } foreach ($variables as $variable) { variable_del($variable); } } /** * Implements hook_update_last_removed(). */ function scheduler_update_last_removed() { // The updates for Scheduler 6.x are no longer required in this file. // This function shows that the last update was scheduler_update_6101. return 6101; } /** * Update roles with new 'View Scheduled Content' permission. */ function scheduler_update_7100() { // Retrieve all roles that have both the 'administer nodes' and 'schedule // (un)publishing of nodes' permissions. // @see http://www.drupal.org/node/2355401 $query = db_select('role_permission', 'r'); $query->fields('r', array('rid')); $query->condition('r.permission', 'administer nodes', '='); $query->addJoin('INNER', 'role_permission', 'r2', 'r.rid = r2.rid'); $query->condition('r2.permission', 'schedule (un)publishing of nodes', '='); // Grant these roles the 'view scheduled content' permission. if ($roles_to_update = $query->execute()->fetchCol()) { foreach ($roles_to_update as $rid) { // Use db_merge not db_insert in case the role already has the permission. $query = db_merge('role_permission'); $query->key(array( 'rid' => $rid, 'permission' => 'view scheduled content', 'module' => 'scheduler', )); $query->fields(array( 'rid' => $rid, 'permission' => 'view scheduled content', 'module' => 'scheduler', )); $query->execute(); } } return format_plural(count($roles_to_update), '1 role updated with view scheduled content permission.', '@count roles updated with view scheduled content permission.'); } /** * Delete obsolete Scheduler rows for nodes already unpublished. */ function scheduler_update_7101() { // Retrieve all unpublished nodes which have a row in the Scheduler with an // unpublish-on date in the past and no publish-on date. // @see http://www.drupal.org/node/2355129 $query = db_select('scheduler', 's'); $query->addField('s', 'nid'); $query->addJoin('INNER', 'node', 'n', 's.nid = n.nid'); $query->condition('n.status', NODE_NOT_PUBLISHED, '='); $query->condition('s.publish_on', 0, '='); $query->condition('s.unpublish_on', 0, '>'); $query->condition('s.unpublish_on', REQUEST_TIME, '<'); // Delete these rows from the Scheduler table. if ($nids_to_delete = $query->execute()->fetchCol()) { db_delete('scheduler')->condition('nid', $nids_to_delete, 'IN')->execute(); } return format_plural(count($nids_to_delete), '1 obsolete row deleted from scheduler table.', '@count obsolete rows deleted from scheduler table.'); } /** * Function scheduler_update_7102() removed and replaced by 7103. * * @see http://www.drupal.org/node/2706119 */ /** * Update role_permission table with clean machine name. */ function scheduler_update_7103() { // Change all values of 'schedule (un)publishing of nodes' to the cleaner // 'schedule publishing of nodes'. // @see http://www.drupal.org/node/2538002 // // Updates done in two stages to avoid integrity constraint violation. First // select all role ids which already have the new permission value. $query = db_select('role_permission', 'rp') ->fields('rp', array('rid', 'permission')) ->condition('permission', 'schedule publishing of nodes'); // Delete the rows for these roles which also have the old permission value, // as these are no longer needed and should not be updated to the new value. $rows_deleted = 0; if ($rows_to_delete = $query->execute()->fetchCol()) { $rows_deleted = db_delete('role_permission') ->condition('rid', $rows_to_delete, 'IN') ->condition('permission', 'schedule (un)publishing of nodes', '=') ->execute(); } // Now update any other rows which still have the old permission value. $rows_updated = db_update('role_permission') ->fields(array('permission' => 'schedule publishing of nodes')) ->condition('permission', 'schedule (un)publishing of nodes', '=') ->execute(); return format_plural($rows_updated, '1 row updated', '@count rows updated') . ', ' . format_plural($rows_deleted, '1 row deleted', '@count rows deleted') . ' ' . t('in role_permission table'); }