heimrichhannot/contao-entity_lock

Contao中存储任意实体锁的通用辅助模块。

1.1.3 2017-06-06 09:34 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:31:13 UTC


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,因为它已经为您这样做)

  1. 将必要的字段添加到tl_module中,并在Contao的模块配置中检查addEntityLock
$GLOBALS['TL_DCA']['tl_module']['palettes']['my_module'] .= \HeimrichHannot\EntityLock\EntityLock::DEFAULT_PALETTE;
  1. 检查是否存在现有锁,并在必要时创建一个

    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);
    }
    
  2. 在编辑表单提交后和删除实体时删除与特定实体相关联的所有锁

    EntityLockModel::deleteLocks('tl_calendar_events', $objEvent->id);
    
  3. 如果前端用户应该能够接管其他用户的记录(即删除一个锁),您可以在模块中按照以下方式检查

    $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;
    }
    

钩子