ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilAssQuestionProcessLockerFile.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionProcessLocker.php';
5 
13 {
14  const PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE = 'questionWorkingStateUpdate';
15 
19  protected $lockFileStorage;
20 
24  protected $lockFileHandles;
25 
30  {
31  $this->lockFileStorage = $lockFileStorage;
32  $this->lockFileHandles = array();
33  }
34 
36  {
37  $this->requestLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
38  }
39 
41  {
42  $this->releaseLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
43  }
44 
45  public function requestUserSolutionAdoptLock()
46  {
47  $this->requestLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
48  }
49 
50  public function releaseUserSolutionAdoptLock()
51  {
52  $this->releaseLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
53  }
54 
55  private function requestLock($processName)
56  {
57  $lockFilePath = $this->getLockFilePath($processName);
58  $this->lockFileHandles[$processName] = fopen($lockFilePath, 'w');
59  flock($this->lockFileHandles[$processName], LOCK_EX);
60  }
61 
62  private function getLockFilePath($processName)
63  {
64  $path = $this->lockFileStorage->getPath();
65  return $path.'/'.$processName.'.lock';
66  }
67 
68  private function releaseLock($processName)
69  {
70  flock($this->lockFileHandles[$processName], LOCK_UN);
71  fclose($this->lockFileHandles[$processName]);
72  }
73 }
__construct(ilAssQuestionProcessLockFileStorage $lockFileStorage)
$path
Definition: index.php:22