You are here

public function StateFlowEntity::init in State Machine 7.3

Called from StateMachine::__construct to initialize the states and events.

Define two states. First revision:

  • Expose go to draft button
  • Expose go to publish button
  • Upon publish, create new revision (handled outside of state machine)

Second revision:

  • Menu alter edit link to load most recent revision (whether published or revision from states).
  • On hook_nodeapi (op: load), force new revision checkbox on node edit form.

    • Expose go to draft button
  • Create new revision, prevent node table from updating new revision as published revision.
  • Expose go to publish button
  • Upon publish, set revision id in node table
  • Repeat as needed

Overrides StateMachine::init

1 call to StateFlowEntity::init()
StateFlowEntity::__construct in modules/state_flow_entity/plugins/state_flow_entity.inc
Create instance of StateMachine.

File

modules/state_flow_entity/plugins/state_flow_entity.inc, line 45
State Flow implementation of the State Machine class.

Class

StateFlowEntity
@file State Flow implementation of the State Machine class.

Code

public function init($workflow = array()) {

  // Initialize states.
  foreach ($workflow['states'] as $name => $options) {

    // Some methods require $this when called by State Machine e.g. on_exit().
    foreach ($options as $key => $value) {
      if ($key == 'on_exit' || $key == 'on_enter') {
        $options[$key] = array(
          $this,
          $value,
        );
      }
    }
    $this
      ->create_state($name, $options);
  }

  // Initialize events.
  foreach ($workflow['events'] as $name => $options) {
    $this
      ->create_event($name, $options);
  }
  $this->default_state = isset($workflow['default_state']) ? $workflow['default_state'] : NULL;

  // Find publishable vid.
  $this
    ->set_available_publish_revision();

  // Set latest history.
  if (!empty($this->object) && isset($this->object->vid)) {
    $this
      ->set_current_history();
  }
}