PHP code example of james.rus52 / state-machine
1. Go to this page and download the library: Download james.rus52/state-machine library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
james.rus52 / state-machine example snippets
$config = [
'graph' => 'Request',
'property_path' => 'Status',
'states' => [
RequestStatus::NEW => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE,
RequestAction::DELETE
],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ],
RequestAction::DELETE => ['b_name' => 's_delete_request' ,'roles' => ['author'], 'onclick' => 'ConfirmDeleteRequest();' ]
]
],
RequestStatus::ANALYZE => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE,
RequestAction::ESCALATE,
RequestAction::DELETE,
RequestAction::SUSPEND,
RequestAction::UNSUSPEND,
],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ],
RequestAction::ESCALATE => ['b_name' => 's_escalation', 'onclick' => 'ShowModalWindow(\'owner_model_window\',\'SubmitForm\',\'owner_model_window_form\');' ],
RequestAction::DELETE => ['b_name' => 's_delete_request' ,'roles' => ['superadmin'], 'onclick' => 'ConfirmDeleteRequest();' ],
RequestAction::SUSPEND => ['b_name' => 's_suspend' ],
RequestAction::UNSUSPEND => ['b_name' => 's_unsuspend'],
],
'conditions' => [
RequestAction::SUSPEND => ['object', 'isSuspended', false ],
RequestAction::UNSUSPEND => ['object', 'isSuspended', true ],
]
],
RequestStatus::APPROVE => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE,
RequestAction::ESCALATE,
RequestAction::DELETE,
RequestAction::SUSPEND,
RequestAction::UNSUSPEND,
],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ],
RequestAction::ESCALATE => ['b_name' => 's_escalation', 'onclick' => 'ShowModalWindow(\'owner_model_window\',\'SubmitForm\',\'owner_model_window_form\');' ],
RequestAction::DELETE => ['b_name' => 's_delete_request' ,'roles' => ['superadmin'], 'onclick' => 'ConfirmDeleteRequest();' ],
RequestAction::SUSPEND => ['b_name' => 's_suspend' ],
RequestAction::UNSUSPEND => ['b_name' => 's_unsuspend'],
],
'conditions' => [
RequestAction::SUSPEND => ['object', 'isSuspended', false ],
RequestAction::UNSUSPEND => ['object', 'isSuspended', true ],
]
],
RequestStatus::APPROVED => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE,
RequestAction::ESCALATE,
RequestAction::DELETE,
RequestAction::SUSPEND,
RequestAction::UNSUSPEND,
],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ],
RequestAction::ESCALATE => ['b_name' => 's_escalation', 'onclick' => 'ShowModalWindow(\'owner_model_window\',\'SubmitForm\',\'owner_model_window_form\');' ],
RequestAction::DELETE => ['b_name' => 's_delete_request' ,'roles' => ['superadmin'], 'onclick' => 'ConfirmDeleteRequest();' ],
RequestAction::SUSPEND => ['b_name' => 's_suspend' ],
RequestAction::UNSUSPEND => ['b_name' => 's_unsuspend'],
],
'conditions' => [
RequestAction::SUSPEND => ['object', 'isSuspended', false ],
RequestAction::UNSUSPEND => ['object', 'isSuspended', true ],
]
],
RequestStatus::SENT => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ]
]
],
RequestStatus::DELIVERED => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE,
RequestAction::ESCALATE,
RequestAction::SUSPEND,
RequestAction::UNSUSPEND,
],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ],
RequestAction::ESCALATE => ['b_name' => 's_escalation', 'onclick' => 'ShowModalWindow(\'owner_model_window\',\'SubmitForm\',\'owner_model_window_form\');' ],
RequestAction::SUSPEND => ['b_name' => 's_suspend' ],
RequestAction::UNSUSPEND => ['b_name' => 's_unsuspend'],
],
'conditions' => [
RequestAction::SUSPEND => ['object', 'isSuspended', false ],
RequestAction::UNSUSPEND => ['object', 'isSuspended', true ],
]
],
RequestStatus::COMPLETED => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ]
]
],
RequestStatus::CANCELED => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ]
]
],
RequestStatus::REJECTED => [
'actions' => [
RequestAction::COMMENT,
RequestAction::CLONE],
'properties' => [
RequestAction::COMMENT => ['b_name' => 's_comment' ],
RequestAction::CLONE => ['b_name' => 's_clone_request' ]
]
],
],
'transitions' => [
RequestTransition::CANCEL => [
'from' => [RequestStatus::NEW],
'to' => RequestStatus::CANCELED,
'properties' => ['b_name' => 's_to_cancel', 'css_class' => 'btn-outline-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::TO_ANALYZE => [
'from' => [RequestStatus::NEW],
'to' => RequestStatus::ANALYZE,
'properties' => ['b_name' => 's_to_analyze', 'css_class' => 'btn-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::REJECT => [
'from' => [RequestStatus::ANALYZE],
'to' => RequestStatus::REJECTED,
'properties' => ['b_name' => 's_to_reject_admin', 'css_class' => 'btn-outline-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::BACK_TO_AUTHOR => [
'from' => [RequestStatus::ANALYZE],
'to' => RequestStatus::NEW,
'properties' => ['b_name' => 's_return_to_author', 'css_class' => 'btn-outline-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::ANALYZE => [
'from' => [RequestStatus::ANALYZE],
'to' => RequestStatus::APPROVE,
'properties' => ['b_name' => 's_aprove_my_resources', 'css_class' => 'btn-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::RETURN => [
'from' => [RequestStatus::APPROVE],
'to' => RequestStatus::ANALYZE,
'properties' => ['b_name' => 's_to_returnanalyze', 'css_class' => 'btn-outline-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::REJECT => [
'from' => [RequestStatus::APPROVE, RequestStatus::ANALYZE ],
'to' => RequestStatus::REJECTED,
'properties' => ['b_name' => 's_to_reject', 'css_class' => 'btn-outline-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::APPROVE => [
'from' => [RequestStatus::APPROVE],
'to' => RequestStatus::APPROVED,
'properties' => ['b_name' => 's_to_approve', 'css_class' => 'btn-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::SEND => [
'from' => [RequestStatus::APPROVED],
'to' => RequestStatus::SENT,
'properties' => ['b_name' => 's_to_partner', 'css_class' => 'btn-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::DELIVER => [
'from' => [RequestStatus::SENT],
'to' => RequestStatus::DELIVERED,
'properties' => ['roles' => ['system']]],
RequestTransition::RESEND => [
'from' => [RequestStatus::DELIVERED],
'to' => RequestStatus::SENT,
'properties' => ['b_name' => 's_resend', 'css_class' => 'btn-primary', 'roles' => ['executor','superadmin']]
],
RequestTransition::COMPLETE => [
'from' => [RequestStatus::DELIVERED],
'to' => RequestStatus::COMPLETED, 'properties' => ['roles' => ['system']]
],
RequestTransition::REOPEN => [
'from' => [RequestStatus::COMPLETED, RequestStatus::REJECTED, RequestStatus::CANCELED],
'to' => RequestStatus::SENT,
'properties' => ['b_name' => 's_reopen', 'css_class' => 'btn-primary', 'roles' => ['author', 'executor','superadmin']]
],
],
'callbacks' => [
'lock' => [
[
'do' => ['object','getLock'],
],
],
'unlock' => [
[
'do' => ['object','releaseLock'],
],
],
'before' => [
[
'on' => RequestTransition::BACK_TO_AUTHOR,
'do' => ['object','BackToAuthor'],
'args' => [$this->params]
],
[
'on' => RequestTransition::CANCEL,
'do' => ['object','Cancel'],
'args' => [$this->params]
],
[
'on' => RequestTransition::TO_ANALYZE,
'do' => ['object','ToAnalyze'],
'args' => [$this->params]
],
[
'on' => RequestTransition::ANALYZE,
'do' => ['object','ToApprove'],
'args' => [$this->params]
],
[
'on' => RequestTransition::RETURN,
'do' => ['object','BackToAnalyze'],
'args' => [$this->params]
],
[
'on' => RequestTransition::REJECT,
'from' => RequestStatus::ANALYZE,
'do' => ['object','ToRejectByAdmin'],
'args' => [$this->params]
],
[
'on' => RequestTransition::REJECT,
'from' => RequestStatus::APPROVE,
'do' => ['object','ToReject'],
'args' => [$this->params]
],
[
'on' => RequestTransition::APPROVE,
'do' => ['object','ToComplete'],
'args' => [$this->params]
],
[
'on' => RequestTransition::SEND,
'do' => ['object','ToSendPartner'],
'args' => [$this->params]
],
[
'on' => RequestTransition::RESEND,
'do' => ['object','ToSendPartner'],
'args' => [$this->params]
],
[
'on' => RequestTransition::REOPEN,
'do' => ['object','Reopen'],
'args' => [$this->params]
],
],
'action' => [
[
'action' => RequestAction::COMMENT,
'do' => ['object','AddComment'],
'args' => [$this->params['ta_comment'] ?? null]
],
[
'action' => RequestAction::CLONE,
'do' => ['object','CloneRequest'],
],
[
'action' => RequestAction::ESCALATE,
'on' => [RequestStatus::ANALYZE, RequestStatus::APPROVE, RequestStatus::APPROVED, RequestStatus::DELIVERED],
'do' => ['object','Escalate'],
'args' => [$this->params['s_escalation_owner'] ?? null]
],
[
'action' => RequestAction::DELETE,
'on' => [RequestStatus::NEW, RequestStatus::ANALYZE, RequestStatus::APPROVE, RequestStatus::APPROVED],
'do' => ['object','DeleteRequest'],
],
[
'action' => RequestAction::SUSPEND,
'do' => ['object','Suspend'],
'args' => [$this->params['ta_comment'] ?? null]
],
[
'action' => RequestAction::UNSUSPEND,
'do' => ['object','Unsuspend'],
'args' => [$this->params['ta_comment'] ?? null]
],
],
'guard' => [
[
'on' => RequestTransition::RESEND,
'do' => ['object','hasResourcesError'],
]
]
]
];