public function taskStateChange(User $user, $taskId, $newState) { $this->task = $this->dataRepository->find($taskId); $roles = $this->dataRepository->getRolesInTask($taskId, $user->getId()); $currentState = $this->task->getState(); $model = $this->buildModel(); foreach ($roles as $role) { if (array_key_exists($role['role'], $model)) { if (array_key_exists($currentState, $model[$role['role']])) { if (in_array($newState, $model[$role['role']][$currentState])) { $this->accessOpened = true; break; } } } } if (!$this->accessHasOpened()) { return; } $this->task->setState($newState); $states = (new Dictionary())->taskStates(); switch ($newState) { case $states->RUNNING[0]: if (!$this->task->getDateAccept()) { $this->task->setDateAccept(new \DateTime()); } break; case $states->CANCELED[0]: $this->task->setDateCancel(new \DateTime()); break; case $states->COMPLETED[0]: $this->task->setDateComplete(new \DateTime()); break; default: break; } $this->wasChanged = true; }