ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilAssQuestionProcessLockerFile.php
Go to the documentation of this file.
1 <?php
2 
26 {
27  public const PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE = 'questionWorkingStateUpdate';
28 
30 
34  protected $lockFileHandles;
35 
39  public function __construct(ilAssQuestionProcessLockFileStorage $lockFileStorage)
40  {
41  $this->lockFileStorage = $lockFileStorage;
42  $this->lockFileHandles = array();
43  }
44 
49  {
50  $this->requestLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
51  }
52 
57  {
58  $this->releaseLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
59  }
60 
65  {
66  $this->requestLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
67  }
68 
72  protected function onAfterExecutingUserSolutionAdoptOperation(): void
73  {
74  $this->releaseLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
75  }
76 
80  private function requestLock($processName): void
81  {
82  $lockFilePath = $this->getLockFilePath($processName);
83  $this->lockFileHandles[$processName] = fopen($lockFilePath, 'w');
84  flock($this->lockFileHandles[$processName], LOCK_EX);
85  }
86 
91  private function getLockFilePath($processName): string
92  {
93  $path = $this->lockFileStorage->getAbsolutePath();
94  return $path . '/' . $processName . '.lock';
95  }
96 
100  private function releaseLock($processName): void
101  {
102  flock($this->lockFileHandles[$processName], LOCK_UN);
103  fclose($this->lockFileHandles[$processName]);
104  }
105 }
__construct(ilAssQuestionProcessLockFileStorage $lockFileStorage)
$path
Definition: ltiservices.php:32
ilAssQuestionProcessLockFileStorage $lockFileStorage