Commit a285cbee authored by Derek Wright's avatar Derek Wright
Browse files

[#1175556] by cangeceiro, dww: Delete panels from nodes when needed.

- Added hook_node_delete() to clean up when nodes are deleted.
- Added the ability to reset a node to its default panel.
parent 2ecb7674
Loading
Loading
Loading
Loading
+20 −0
Changes for includes/common.inc: 20 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
 */
function panelizer_settings_form(&$form_state) {
  $panelizer = $form_state['panelizer'];
  $node = $form_state['node'];

  $form['no_blocks'] = array(
    '#type' => 'checkbox',
@@ -68,6 +69,14 @@ function panelizer_settings_form(&$form_state) {
    '#value' => t('Save'),
  );

  if (panelizer_has_default('node', $node->type) && is_numeric($panelizer->did)) {
    $form['reset'] = array(
      '#type' => 'submit',
      '#value' => t('Reset to default'),
      '#submit' => array('panelizer_settings_form_reset'),
   );
  }

  return $form;
}

@@ -80,6 +89,17 @@ function panelizer_settings_form_submit(&$form, &$form_state) {
  $panelizer->css = $form_state['values']['css'];
  $panelizer->css_id = $form_state['values']['css_id'];
  $panelizer->pipeline = $form_state['values']['pipeline'];
  drupal_set_message(t('The settings have been updated.'));
  panelizer_save_node_panelizer($panelizer);
}

/**
 * Reset panel submit callback.
 */
function panelizer_settings_form_reset(&$form, &$form_state) {
  $panelizer = &$form_state['panelizer'];
  panelizer_delete_node_panelizer($panelizer);
  drupal_set_message(t('The node panel has been reset to the default.'));
}

/**
+11 −2
Changes for includes/node.inc: 11 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -87,6 +87,16 @@ function panelizer_save_node_panelizer($panelizer) {
  return drupal_write_record('panelizer_node', $panelizer, $update);
}

/**
 * Delete a panelizer node panel from the database.
 */
function panelizer_delete_node_panelizer($panelizer) {
  if (!empty($panelizer->did)) {
    panels_delete_display($panelizer->did);
    db_query("DELETE FROM {panelizer_node} WHERE nid = %d", $panelizer->nid);
  }
}

/**
 * Page to edit basic settings on a panelized node.
 */
@@ -112,6 +122,7 @@ function panelizer_edit_node_settings_page($node) {

  $form_state = array(
    'panelizer' => &$panelizer,
    'node' => $node,
    'no_redirect' => TRUE,
  );

@@ -119,8 +130,6 @@ function panelizer_edit_node_settings_page($node) {
  ctools_include('common', 'panelizer');
  $output = ctools_build_form($form_id, $form_state);
  if (!empty($form_state['executed'])) {
    drupal_set_message(t('The settings have been updated.'));
    panelizer_save_node_panelizer($panelizer);
    drupal_goto($_GET['q']);
  }

+21 −0
Changes for panelizer.module: 21 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -268,6 +268,27 @@ function panelizer_has_no_choice_callback($type, $key) {
// @todo -- need a nodeapi hook for insert/update so that node_save() can work
// as expected if panelizer settings are attached to the node.

/**
 * Implements hook_nodeapi().
 */
function panelizer_nodeapi(&$node, $op) {
  switch($op) {
    case 'delete':
      return panelizer_node_delete($node);

  }
}

/**
 * Implements hook_nodeapi() for delete (D7's hook_node_delete()).
 */
function panelizer_node_delete($node) {
  ctools_include('node', 'panelizer');
  $panelizer = panelizer_load_node_panelizer($node);
  panelizer_delete_node_panelizer($panelizer);
}


// ---------------------------------------------------------------------------
// Panelizer object access routines