| 
<?php/**
 * @author   Jorge Patricio Castro Castillo <jcastro arroba eftec dot cl>
 * @link https://github.com/EFTEC/StateMachineOne
 */
 
 use eftec\statemachineone\Job;
 use eftec\statemachineone\StateMachineOne;
 use eftec\statemachineone\Transition;
 
 // we use autoload's composer, so we call it here.
 include "../vendor/autoload.php";
 
 $smachine=new StateMachineOne();
 $smachine->setDebug(true);
 
 
 
 
 
 // it is specific for this project
 define('PARKED',1);
 define('IDLING',2);
 define('DRIVING',3);
 
 $smachine->setDefaultInitState(PARKED);
 
 $smachine->setStates([
 PARKED=>'Parked',
 IDLING=>'Idling',
 DRIVING=>'Driving'
 ]);
 
 $smachine->fieldDefault=[
 'pedal'=>0
 ,'turnkey'=>0
 ,'gas'=>100
 ,'brake'=>0
 ,'speed'=>0];
 
 // database configuration
 $smachine->tableJobs="car_jobs";
 $smachine->tableJobLogs="car_logs"; // it is optional
 $smachine->setdb('mysql','localhost',"root","abc.123","statemachinedb");
 $smachine->createDbTable(false); // you don't need to create this table every time.
 
 $smachine->loadDBAllJob(); // we load all jobs, including finished ones.
 //$smachine->loadDBActiveJobs(); // use this in production, we don't need stopped job every time.
 
 
 // business rules
 $smachine->addTransition(PARKED,IDLING
 ,'when pedal = 1 and turnkey = 1 and gas > 0');
 $smachine->addTransition(IDLING,DRIVING
 ,'when gas > 0 and speed > 0');
 $smachine->addTransition(DRIVING,IDLING
 ,'when brake = 1 and speed = 0');
 $smachine->addTransition(IDLING,PARKED
 ,'when turnkey = 0 and speed = 0');
 $msg=$smachine->fetchUI(); // we show a visual id (it is optional and it's only for debug purpose)
 $smachine->checkAllJobs(); // we check every (active,pause,continue) job available.
 
 $smachine->viewUI(null,$msg); // null means it takes the current job
 
 
 
 |