diff --git a/workbench_moderation.module b/workbench_moderation.module index b652b6f..959cf40 100644 --- a/workbench_moderation.module +++ b/workbench_moderation.module @@ -210,6 +210,56 @@ function workbench_moderation_menu_alter(&$items) { } /** + * Implements hook_entity_load(). + * + * Hack for working with panelizer. Replace the loaded node by it's current + * version, when on panelizer editing pages. + */ +function workbench_moderation_entity_load(&$entities, $type) { + static $me = FALSE; + if ($me || $type != 'node' || !drupal_match_path($_GET['q'], 'node/*/panelizer*')) { + return; + } + $me = TRUE; + + // Look up the latest vid for the loaded nodes. + $query = db_select('node_revision', 'r'); + $query->condition('r.nid', array_keys($entities)) + ->orderBy('r.vid', 'DESC') + ->groupBy('nid') + ->fields('r', array('nid')) + ->addExpression('MAX(vid)', 'vid'); + + $vids = $query->execute()->fetchAllKeyed(); + foreach ($entities as $entity_id => $entity) { + if (isset($vids[$entity_id]) && ($entity->vid != $vids[$entity_id])) { + // Loaded revision is not the latest. Reload the latest. + $entities[$entity_id] = node_load($entity_id, $vids[$entity_id]); + } + } + $me = FALSE; +} + +/** + * Implements hook_form_alter(). + * + * Alter the panelizer forms to create new revision as appropriate. + */ +function workbench_moderation_form_alter(&$form, $form_state, $form_id) { + if (preg_match('/^panelizer_/', $form_id) && + !empty($form['revision_information']) && + !empty($form_state['entity']) && + $form_state['entity']->panelizer->entity_type == 'node') { + $form['revision_information']['revision']['#default_value'] = FALSE; + if (isset($form_state['entity']->workbench_moderation['published'])) { + if ($form_state['entity']->workbench_moderation['published']->vid == $form_state['entity']->workbench_moderation['current']->vid) { + $form['revision_information']['revision']['#default_value'] = TRUE; + } + } + } +} + +/** * Redirects 'node/%node/revisions' to node/%node/moderation * * workbench_moderation_menu_alter() changes the page callback