function testUnder() { $transition = new Transition('A', 'B'); $transition->setStates(array('A', 'C', 'D', 'F')); $transition->addGuard('atMost', 4, array('C', 'D', 'E', 'F', 'G')); $this->assertEquals(array(), $transition->explain()); }
function testImpossibleCondition() { $transition = new Transition('A', 'B'); $transition->setStates(array('A', 'C', 'D', 'F')); $transition->addGuard('atLeast', 4, array('C', 'D', 'E')); $this->assertEquals(array(array('class' => 'invalid', 'count' => 4, 'set' => array('C', 'D', 'E'))), $transition->explain()); }
function triggerTransition( $transitionId, $object, $type = null ) { // Make sure the transition exists if ( ! $transition = $this->getTransition($transitionId) ) { return false; } // Make sure the user can use it $perms = Perms::get(array('type' => 'transition', 'object' => $transitionId)); if ( ! $perms->trigger_transition ) { return false; } // Verify that the states are consistent $states = $this->getCurrentStates($object, $type); $tr = new Transition($transition['from'], $transition['to']); $tr->setStates($states); foreach ( $transition['guards'] as $guard ) { call_user_func_array(array($tr, 'addGuard'), $guard); } if ( ! $tr->isReady() ) { return false; } $this->addState($transition['to'], $object, $type); if ( ! $transition['preserve'] ) { $this->removeState($transition['from'], $object, $type); } return true; }