heimrichhannot / contao-entity_lock
Contao中存储任意实体锁的通用辅助模块。
1.1.3
2017-06-06 09:34 UTC
Requires
- php: ~5.4 || ~7.0
- contao-community-alliance/composer-plugin: ~2.4 || ~3.0
- contao/core-bundle: ^3.5.1 || ~4.1
- heimrichhannot/contao-be_explanation: ~1.0
- heimrichhannot/contao-haste_plus: ~1.4
- heimrichhannot/contao-submissions: ~1.0
- heimrichhannot/contao-tagsinput: ~2.0
Suggests
- heimrichhannot/contao-entity_cleaner: Could be used to remove elapsed locks. This module adds cleaner functionality for periodically removing arbitrary entities fulfilling a certain condition (using TL_CRON or your server's cron).
- heimrichhannot/contao-frontendedit: This module adds functionality editing any contao entity in the frontend. It already contains support for entity_lock out of the box.
README
Contao中存储任意实体锁的通用模块。
已知限制
- 后端用户支持尚未完成 -> 目前仅支持前端处理
功能
- 添加一个锁实体以存储当前编辑器、锁定时间、被锁定实体等
- 提供丰富的模型接口,便于轻松处理任何实体的锁的创建、更新和删除
- 阅读“使用”章节以获取更多功能细节
使用说明
该模块仅用于存储有关锁的相关信息,如编辑器、锁定时间等。
预期使用方法如下
- 某种类型的编辑表单被打开 -> 因此当前正在编辑的记录(即实体)应从其他并发编辑中锁定。
- 表单加载时创建一个锁。
- 提交表单时移除锁,并将用户重定向到其他页面,以防止表单在上一步骤中再次锁定实体。
- 当然,在删除实体的情况下,所有相关的锁也会被删除。
- 开发者可以指定锁间隔时间(在全局设置中或通过使用EntityLock::DEFAULT_PALETTE在模块配置中覆盖它)。经过锁的年龄超过此间隔后,它不再有效(超时)。
- 开发者可以在模块配置中指定任何前端用户是否可以删除活动锁(例如,如果锁更像是一个提示而不是一个硬性障碍)
使用entity_lock的模块开发者可以存储新的锁,检查适当位置的存在,并可以使用heimrichhannot/contao-entity_cleaner来删除过期的锁。
此外,您可以使用heimrichhannot/contao-frontendedit来构建您的前端模块,因为它已经支持entity_lock,即新锁会在前端自动创建。
在锁的父实体字段中定义自定义标题字段以自动完成
扩展config/config.php中定义的$GLOBALS['TL_CONFIG']['entityLockEntityTitleFields']
以定义自定义实体的映射。否则,自动完成将仅使用id字段。
技术说明
在您的客户端模块中执行以下操作(或使用heimrichhannot/contao-frontendedit,因为它已经为您这样做)
- 将必要的字段添加到tl_module中,并在Contao的模块配置中检查addEntityLock
$GLOBALS['TL_DCA']['tl_module']['palettes']['my_module'] .= \HeimrichHannot\EntityLock\EntityLock::DEFAULT_PALETTE;
-
检查是否存在现有锁,并在必要时创建一个
if ($this->addEntityLock && EntityLockModel::isLocked('tl_calendar_events', $objEvent->id, $this)) { // do something like display a message that the entity is locked (or check for lock removal being allowed -> see 4.) } else { EntityLockModel::create('tl_calendar_events', $objEvent->id, $this); }
-
在编辑表单提交后和删除实体时删除与特定实体相关联的所有锁
EntityLockModel::deleteLocks('tl_calendar_events', $objEvent->id);
-
如果前端用户应该能够接管其他用户的记录(即删除一个锁),您可以在模块中按照以下方式检查
$strMessage = EntityLock::generateErrorMessage('tl_calendar_events', $objEvent->id, $this); if ($this->allowLockDeletion) { // generateUnlockForm() also does the actual deletion of the lock and the sending of a notification to the former editor $strUnlockForm = $this->generateUnlockForm($objItem, $objLock); $strMessage .= $strUnlockForm; }