diff options
Diffstat (limited to 'includes/common.inc')
-rw-r--r-- | includes/common.inc | 237 |
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 * @{ */ |