summaryrefslogtreecommitdiff
path: root/includes/common.inc
diff options
context:
space:
mode:
Diffstat (limited to 'includes/common.inc')
-rw-r--r--includes/common.inc237
1 files changed, 0 insertions, 237 deletions
diff --git a/includes/common.inc b/includes/common.inc
index 3a8d48fcd..4b41373fe 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -2803,243 +2803,6 @@ function drupal_common_themes() {
}
/**
- * Create/build/execute deletion packages.
- *
- * Note that this function should not be called directly, but through the following helper functions:
- *
- * drupal_delete_initiate()
- * drupal_delete_add_query()
- * drupal_delete_confirm()
- * drupal_delete_execute()
- * drupal_delete_add_callback()
- * drupal_delete_add_metadata()
- * drupal_delete_add_form_elements()
- *
- * @param $op
- * An operation to be performed.
- *
- * @param $id
- * A unique string identifier for the deletion being performed.
- */
-function _drupal_delete($op, $id = '') {
- static $delete_type = NULL,
- $delete_id = NULL,
- $deletion_data = array(),
- $built = NULL,
- $form = array();
-
- $confirm = NULL;
- $execute = NULL;
-
- // Process additional arguments.
- $all_args = func_get_args();
- if (count($all_args) > 2) {
- // Get any additional arguments.
- $args = array_slice($all_args, 2);
- // Shift off query string if present.
- if ($op == 'query') {
- $query = array_shift($args);
- }
- // Clean up args passed as an array.
- if (is_array($args[0])) {
- $args = $args[0];
- }
- }
- else {
- $args = array();
- }
-
- switch ($op) {
- // Query to add to a package
- case 'query':
- // Add the information for this deletion into the package array.
- $deletion_data[$delete_type][$delete_id]['queries'][] = array('query' => $query, 'args' => $args);
- break;
- // New package -- mark it as such and get the next deletion ID.
- case 'new package':
- $delete_type = $id['type'];
- $delete_id = $id['id'];
- $deletion_data[$delete_type][$delete_id] = array(
- 'metadata' => array(),
- 'callback' => array(),
- 'form' => array(),
- );
- break;
- // Confirm all packages.
- case 'confirm':
- // Set execute switch and destination if bypass is enabled.
- if (variable_get('bypass_delete_confirmation', 0)) {
- $execute = TRUE;
- $destination = isset($args['destination']) ? $args['destination'] : NULL;
- }
- else {
- $confirm = TRUE;
- }
- break;
- // Add package-specific form array pieces, callbacks, metadata.
- case 'form':
- case 'callback':
- case 'metadata':
- $deletion_data[$delete_type][$delete_id][$op] += $args;
- break;
- // Execute all packages.
- case 'execute':
- $execute = TRUE;
- $destination = $args['destination'];
- break;
- }
-
- // Allow modules to inject confirm/abort data.
- if (isset($confirm) || isset($execute)) {
- // $built is kept as a static and checked to avoid calling this code twice
- // when the package is executed.
- if (!isset($built)) {
- $built = TRUE;
-
- // Main confirm form.
- if (isset($args['form'])) {
- $form = $args['form'];
- }
- $count = 0;
- foreach ($deletion_data as $type => $deletion_info) {
- // Reset $delete_type to the type being checked.
- $delete_type = $type;
- foreach ($deletion_info as $package_id => $package_info) {
- $package_confirm_data = array();
- // Reset $delete_id to the package to be passed.
- $delete_id = $package_id;
- // Call hook_delete_pre() once for each package.
- foreach (module_implements('delete_pre') as $module) {
- $confirm_data = module_invoke($module, 'delete_pre', $type, $package_id, $package_info);
- // Check for an aborted package.
- if (isset($confirm_data['abort'])) {
- // Set abort message.
- if (isset($confirm_data['abort']['message'])) {
- drupal_set_message($confirm_data['abort']['message'], 'error');
- }
- // Set abort destination.
- if (isset($confirm_data['abort']['destination'])) {
- $abort_destination = $confirm_data['abort']['destination'];
- }
- // Remove the package.
- unset($deletion_data[$type][$package_id]);
- }
- else {
- // Add elements to confirm form data for the package.
- $package_confirm_data = array_merge_recursive($package_confirm_data, $confirm_data);
- }
- }
- // Add in package-specific confirm form elements if the package still exists.
- if (isset($deletion_data[$type][$package_id])) {
- $form = array_merge_recursive($form, $package_confirm_data);
- if (!empty($package_info['form'])) {
- $form = array_merge_recursive($form, $package_info['form']);
- }
- // If queries exist, then add to the count of executable packages.
- if (isset($package_info['queries'])) {
- $count++;
- }
- }
- }
- }
- if (isset($confirm)) {
- // Generate the confirm form if any packages remain.
- if ($count) {
- $question = isset($args['question']) ? $args['question'] : t('Delete the item?');
- $path = isset($args['path']) ? $args['path'] : 'node';
- unset($args['question'], $args['path']);
- $args['name'] = 'delete';
- // Submit handler - triggers execute operation for the API.
- $form['#submit'] = array('delete_confirm_submit');
- return confirm_form($form, $question, $path, $args);
- }
- // No packages left after aborts -- go to an abort destination if it exists.
- elseif (isset($abort_destination)) {
- drupal_goto($abort_destination);
- }
- // Fallback to cancel path.
- elseif (isset($args['path'])) {
- drupal_goto($args['path']);
- }
- // Last fallback, front page.
- else {
- drupal_goto('<front>');
- }
- }
- }
- }
-
- // Execute all constructed packages.
- if (isset($execute)) {
-
- // Explicitly reset the package information.
- $delete_type = NULL;
- $delete_id = NULL;
- $package_data = $deletion_data;
- $deletion_data = array();
- $built = NULL;
-
- // Execute the deletion of all packages.
- _drupal_delete_execute($package_data, $destination);
- }
-}
-
-/**
- * Executes all database deletions in all packages of a single page call.
- *
- * @param $package_data
- * The complete array of deletion data for all packages.
- * @param $destination
- * A destination for operations that bypass the confirm step.
- */
-function _drupal_delete_execute($package_data, $destination = NULL) {
- foreach ($package_data as $type => $package) {
- foreach ($package as $package_id => $package_info) {
- // Allow modules to perform any operations just prior to the deletion of the package.
- drupal_alter('delete', $type, $package_id, $package_info);
- // Perform the deletions.
- if (isset($package_info['queries'])) {
- foreach ($package_info['queries'] as $deletion) {
- db_query($deletion['query'], $deletion['args']);
- }
- }
- // Execute post-deletion callbacks.
- foreach ($package_info['callback'] as $function => $args) {
- if (function_exists($function)) {
- call_user_func_array($function, $args);
- }
- }
- }
- }
- // Redirect for confirmation bypass.
- drupal_redirect($destination);
-}
-
-/**
- * Generates a drupal_goto() based on the value of $goto.
- *
- * @param $goto
- * Can be any of the following values:
- * - A string representing a valid Drupal path.
- * - An array containing arguments to pass to drupal_goto().
- * - NULL to redirect to $_GET['q'].
- * - FALSE to bypass the redirection.
- */
-function drupal_redirect($goto) {
- if ($goto !== FALSE) {
- if (isset($goto)) {
- if (is_array($goto)) {
- call_user_func_array('drupal_goto', $goto);
- }
- else {
- drupal_goto($goto);
- }
- }
- drupal_goto($_GET['q']);
- }
-}
-
-/**
* @ingroup schemaapi
* @{
*/