Skip to content

Commit

Permalink
StateMachine update.
Browse files Browse the repository at this point in the history
  • Loading branch information
dereuromark committed Sep 28, 2023
1 parent f245bb5 commit 5015189
Show file tree
Hide file tree
Showing 10 changed files with 41 additions and 27 deletions.
2 changes: 2 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ parameters:
level: 8

checkGenericClassInNonGenericObjectType: false
treatPhpDocTypesAsCertain: false

paths:
- src/
- plugins/Sandbox/src/
- plugins/AuthSandbox/src/
- plugins/StateMachineSandbox/src/

bootstrapFiles:
- %rootDir%/../../../tests/bootstrap.php
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace StateMachineSandbox\Controller;

use App\Controller\AppController;
use Cake\Datasource\ModelAwareTrait;
use Cake\Http\Exception\NotFoundException;
use StateMachine\Business\StateMachineFacade;
use StateMachine\Dto\StateMachine\ItemDto;
Expand All @@ -14,10 +15,12 @@
*/
class RegistrationDemoController extends AppController {

use ModelAwareTrait;

/**
* @var string
*/
protected ?string $modelClass = 'StateMachineSandbox.Registrations';
protected ?string $defaultTable = 'StateMachineSandbox.Registrations';

/**
* @return \Cake\Http\Response|null|void
Expand All @@ -29,8 +32,8 @@ public function index() {
* @return \Cake\Http\Response|null|void
*/
public function register() {
$this->loadModel('Users');
$users = $this->Users->find()
$Users = $this->fetchModel('Users');
$users = $Users->find()
->select(['Users.id', 'Users.username'])
->where(['Users.username IN' => ['user', 'mod']])
->find('list')
Expand All @@ -57,7 +60,8 @@ public function register() {
* @return \Cake\Http\Response|null|void
*/
public function process() {
$registrations = $this->Registrations->find()
$Registrations = $this->fetchModel('StateMachineSandbox.Registrations');
$registrations = $Registrations->find()
->where(['session_id' => $this->request->getSession()->id()])
->contain(['Users', 'RegistrationStates'])
->all()
Expand All @@ -79,10 +83,10 @@ public function moderatorPanel($id = null) {
->all()
->toArray();

if ($this->request->isPost()) {
if ($this->request->is('post')) {
$stateMachineFacade = new StateMachineFacade();
$itemDto = new ItemDto();
$itemDto->setIdentifier($id);
$itemDto->setIdentifier((int)$id);
$registrationEntity = null;
foreach ($registrations as $registration) {
if ($registration->id === (int)$id) {
Expand All @@ -97,6 +101,7 @@ public function moderatorPanel($id = null) {

$itemDto->setStateMachineName(RegistrationStateMachineHandler::NAME);
$itemDto->setStateName(RegistrationStateMachineHandler::STATE_WAITING_FOR_APPROVAL);
assert($registrationEntity->registration_state !== null);
$itemDto->setProcessName($registrationEntity->registration_state->process);

$stateMachineFacade->triggerEvent(RegistrationStateMachineHandler::EVENT_APPROVE, $itemDto);
Expand All @@ -120,10 +125,10 @@ public function adminPanel($id = null) {
->all()
->toArray();

if ($this->request->isPost()) {
if ($this->request->is('post')) {
$stateMachineFacade = new StateMachineFacade();
$itemDto = new ItemDto();
$itemDto->setIdentifier($id);
$itemDto->setIdentifier((int)$id);
$registrationEntity = null;
foreach ($registrations as $registration) {
if ($registration->id === (int)$id) {
Expand Down Expand Up @@ -161,7 +166,7 @@ public function removeJob($id = null) {
$jobType = 'StateMachineSandbox.SimulatePaymentResult';
$queuedJobsTable = $this->getTableLocator()->get('Queue.QueuedJobs');
$queuedJob = $queuedJobsTable->get($id);
if ($queuedJob->completed || $queuedJob->job_type !== $jobType || strpos($queuedJob->reference, 'registration-') !== 0) {
if ($queuedJob->completed || $queuedJob->job_task !== $jobType || strpos((string)$queuedJob->reference, 'registration-') !== 0) {
throw new NotFoundException('Invalid queue job ID');
}
$queuedJobsTable->deleteOrFail($queuedJob);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
namespace StateMachineSandbox\Controller;

use App\Controller\AppController;
use Cake\Datasource\ModelAwareTrait;
use Cake\Http\Exception\NotFoundException;

/**
Expand All @@ -14,6 +15,8 @@
*/
class RegistrationsController extends AppController {

use ModelAwareTrait;

/**
* @return \Cake\Http\Response|null|void Renders view
*/
Expand Down Expand Up @@ -41,11 +44,14 @@ public function view($id = null) {
throw new NotFoundException();
}

$this->loadModel('StateMachine.StateMachineTransitionLogs');
$logs = $this->StateMachineTransitionLogs->getLogs($registration->registration_state->id);
/** @var \StateMachine\Model\Table\StateMachineTransitionLogsTable $StateMachineTransitionLogs */
$StateMachineTransitionLogs = $this->fetchModel('StateMachine.StateMachineTransitionLogs');
assert($registration->registration_state !== null);
$logs = $StateMachineTransitionLogs->getLogs($registration->registration_state->id);

$this->loadModel('StateMachine.StateMachineItemStateLogs');
$history = $this->StateMachineItemStateLogs->getHistory($registration->registration_state);
/** @var \StateMachine\Model\Table\StateMachineItemStateLogsTable $StateMachineItemStateLogs */
$StateMachineItemStateLogs = $this->fetchModel('StateMachine.StateMachineItemStateLogs');
$history = $StateMachineItemStateLogs->getHistory($registration->registration_state);

$this->set(compact('registration', 'logs', 'history'));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class StateMachineSandboxController extends AppController {
/**
* @var string
*/
protected ?string $modelClass = 'Users';
protected ?string $defaultTable = 'Users';

/**
* @return \Cake\Http\Response|null|void
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class Registration extends Entity {
* be mass assigned. For security purposes, it is advised to set '*' to false
* (or remove it), and explicitly make individual fields accessible as needed.
*
* @var array
* @var array<string, bool>
*/
protected array $_accessible = [
'*' => true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
* @method \StateMachineSandbox\Model\Entity\Registration newEmptyEntity()
* @method \StateMachineSandbox\Model\Entity\Registration newEntity(array $data, array $options = [])
* @method array<\StateMachineSandbox\Model\Entity\Registration> newEntities(array $data, array $options = [])
* @method \StateMachineSandbox\Model\Entity\Registration get($primaryKey, $options = [])
* @method \StateMachineSandbox\Model\Entity\Registration get(mixed $primaryKey, array|string $finder = 'all', \Psr\SimpleCache\CacheInterface|string|null $cache = null, \Closure|string|null $cacheKey = null, mixed ...$args)
* @method \StateMachineSandbox\Model\Entity\Registration findOrCreate($search, ?callable $callback = null, $options = [])
* @method \StateMachineSandbox\Model\Entity\Registration patchEntity(\Cake\Datasource\EntityInterface $entity, array $data, array $options = [])
* @method array<\StateMachineSandbox\Model\Entity\Registration> patchEntities(iterable $entities, array $data, array $options = [])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ class SimulatePaymentResultTask extends Task {
* @return void
*/
public function run(array $data, int $jobId): void {
$this->loadModel('StateMachineSandbox.Registrations');
/** @var \StateMachineSandbox\Model\Table\RegistrationsTable $Registrations */
$Registrations = $this->fetchModel('StateMachineSandbox.Registrations');
try {
$registration = $this->Registrations->get($data['id'], contain: ['RegistrationStates']);
$registration = $Registrations->get($data['id'], contain: ['RegistrationStates']);
} catch (RecordNotFoundException $e) {
// Someone already removed the registration, for demo we can ignore
return;
Expand All @@ -37,6 +38,7 @@ public function run(array $data, int $jobId): void {
$itemDto->setIdentifier($registration->id);
$itemDto->setStateMachineName(RegistrationStateMachineHandler::NAME);
$itemDto->setStateName(RegistrationStateMachineHandler::STATE_WAITING_FOR_PAYMENT);
assert($registration->registration_state !== null);
$itemDto->setProcessName($registration->registration_state->process);

$stateMachineFacade->triggerEvent(RegistrationStateMachineHandler::EVENT_CONFIRM_PAYMENT, $itemDto);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@
use StateMachine\Dependency\StateMachineCommandInterface;
use StateMachine\Dto\StateMachine\ItemDto;

/**
* @property \StateMachineSandbox\Model\Table\RegistrationsTable $Registrations
*/
class CompleteCommand implements StateMachineCommandInterface {

use ModelAwareTrait;
Expand All @@ -21,11 +18,12 @@ class CompleteCommand implements StateMachineCommandInterface {
public function run(ItemDto $itemDto): void {
$registrationId = $itemDto->getIdentifierOrFail();

$this->loadModel('StateMachineSandbox.Registrations');
$registration = $this->Registrations->get($registrationId);
/** @var \StateMachineSandbox\Model\Table\RegistrationsTable $Registrations */
$Registrations = $this->fetchModel('StateMachineSandbox.Registrations');
$registration = $Registrations->get($registrationId);
$registration->status = 'complete';

$this->Registrations->saveOrFail($registration);
$Registrations->saveOrFail($registration);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ class CheckApprovalCondition implements StateMachineConditionInterface {
public function check(ItemDto $itemDto): bool {
$registrationId = $itemDto->getIdentifierOrFail();

$this->loadModel('StateMachineSandbox.Registrations');
$registration = $this->Registrations->get($registrationId, contain: ['Users' => ['Roles']]);
/** @var \StateMachineSandbox\Model\Table\RegistrationsTable $Registrations */
$Registrations = $this->fetchModel('StateMachineSandbox.Registrations');
$registration = $Registrations->get($registrationId, contain: ['Users' => ['Roles']]);
if ($registration->user && $registration->user->role && $registration->user->role->alias === 'mod') {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<tbody>
<?php foreach ($registrations as $registration): ?>
<tr>
<td><?= h($registration->user->username) ?></td>
<td><?= $registration->user ? h($registration->user->username) : 'anonymous' ?></td>
<td><?= h($registration->status) ?></td>
<td><?= $this->Time->nice($registration->created) ?></td>
<td><?= $this->Time->nice($registration->modified) ?></td>
Expand Down

0 comments on commit 5015189

Please sign in to comment.