|
|
Objekte oder Elemente locken / sperren
|
|
|
======
|
|
|
|
|
|
Oftmals dürfen bestimmte Artikel / Objekte in der Administration nicht von mehreren Benutzer editiert werden, da es sonst zu Datenüberschreibungen kommen kann. Für dieses Problem gibt es Serverseitig den ```QUI\Lock\Locker```. Dieser hilft dabei ein Lockstatus zu implementieren.
|
|
|
|
|
|
Als Beispiel gehen wir von einer Projektseite aus, diese darf nur immer von __einem__ Benutzer bearbeitet werden.
|
|
|
|
|
|
lock
|
|
|
------
|
|
|
|
|
|
Die Seite wird für andere Benutzer folgendermaßen gelockt:
|
|
|
|
|
|
```php
|
|
|
<?php
|
|
|
|
|
|
$lockkey = $this->getProject()->getName() . '_' .
|
|
|
$this->getProject()->getLang() . '_' .
|
|
|
$this->getId();
|
|
|
|
|
|
QUI\Lock\Locker::lock(
|
|
|
QUI::getPackage('quiqqer/quiqqer'),
|
|
|
$lockkey
|
|
|
);
|
|
|
|
|
|
```
|
|
|
|
|
|
unlock
|
|
|
------
|
|
|
|
|
|
Die Seite wieder für andere editierbar machen
|
|
|
|
|
|
```php
|
|
|
<?php
|
|
|
|
|
|
$lockkey = $this->getProject()->getName() . '_' .
|
|
|
$this->getProject()->getLang() . '_' .
|
|
|
$this->getId();
|
|
|
|
|
|
QUI\Lock\Locker::unlock(
|
|
|
QUI::getPackage('quiqqer/quiqqer'),
|
|
|
$lockkey
|
|
|
);
|
|
|
|
|
|
```
|
|
|
|
|
|
isLocked
|
|
|
------
|
|
|
|
|
|
Prüfen ob die Seite von jemand anderem gelockt wurde
|
|
|
|
|
|
```php
|
|
|
<?php
|
|
|
|
|
|
$lockkey = $this->getProject()->getName() . '_' .
|
|
|
$this->getProject()->getLang() . '_' .
|
|
|
$this->getId();
|
|
|
|
|
|
// wirft kein Exception,
|
|
|
$isLocked = Locker::isLocked(
|
|
|
QUI::getPackage('quiqqer/quiqqer'),
|
|
|
$lockkey
|
|
|
);
|
|
|
|
|
|
if ($isLocked) {
|
|
|
// seite ist gelockt
|
|
|
}
|
|
|
|
|
|
// Wirft Exception wenn gelockt
|
|
|
Locker::checkLocked(
|
|
|
QUI::getPackage('quiqqer/quiqqer'),
|
|
|
$lockkey
|
|
|
);
|
|
|
|
|
|
```
|
|
|
|
|
|
Mit der lock Zeit arbeiten
|
|
|
------
|
|
|
|
|
|
Es ist möglich auch mit der letzten lock Zeit zu arbeiten.
|
|
|
|
|
|
```php
|
|
|
<?php
|
|
|
|
|
|
$lockkey = $this->getProject()->getName() . '_' .
|
|
|
$this->getProject()->getLang() . '_' .
|
|
|
$this->getId();
|
|
|
|
|
|
// wirft kein Exception,
|
|
|
$lastLock = Locker::getLockTime(
|
|
|
QUI::getPackage('quiqqer/quiqqer'),
|
|
|
$lockkey
|
|
|
);
|
|
|
|
|
|
// $lastLock besitzt die letzte Zeit in der ein lock durchgeführt wurde
|
|
|
|
|
|
``` |