Objekte oder Elemente locken / sperren
Über PHP locken
Oftmals dürfen bestimmte Artikel / Objekte in der Administration nicht von mehreren Benutzern 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
$lockkey = $this->getProject()->getName() . '_' .
$this->getProject()->getLang() . '_' .
$this->getId();
QUI\Lock\Locker::lock(
QUI::getPackage('quiqqer/quiqqer'),
$lockkey
);
// mit Ablaufzeit
QUI\Lock\Locker::lock(
QUI::getPackage('quiqqer/quiqqer'),
$lockkey,
$lifetime
);
unlock
Die Seite wieder für andere editierbar machen
<?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
$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
$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
Über JavaScript locken
lock
require(['utils/Lock'], function(Locker) {
Locker.lock('my_custom_key', 'package/name').then(function() {
});
});
unlock
require(['utils/Lock'], function(Locker) {
Locker.unlock('my_custom_key', 'package/name').then(function() {
});
});
isLocked
require(['utils/Lock'], function(Locker) {
Locker.isLocked('my_custom_key', 'package/name').then(function() {
});
});
get lock time
require(['utils/Lock'], function(Locker) {
Locker.getLockTime('my_custom_key', 'package/name').then(function() {
});
});