Несколько контекстов: один ReadOnly, один FullControl - PullRequest
0 голосов
/ 30 августа 2018

Мульти-контекстный сайт имеет два (на самом деле больше) контекста. Нам нужен пользователь (группа), в котором каждый пользователь может редактировать в одном контексте и только ПРОСМОТРЕТЬ другой контекст.

Сайт спроектирован так, что в каждом контексте есть нет единственного корневого узла (из-за дружественных URL и логики, согласно которой home не является родителем любой другой страницы).

Кажется, что ресурсные группы не работают, потому что вы должны вручную добавить каждый ресурс в группу (в нем множество документов).

Есть идеи, как с этим справиться?

1 Ответ

0 голосов
/ 30 августа 2018

Для этого необходимо использовать группы ресурсов и плагин, который устанавливает группу ресурсов на основе контекста при сохранении ресурса. Существующие ресурсы могут быть установлены одноразовым фрагментом кода.

Код для плагина довольно прост, он должен запускаться в onDocFormSave:

<?php
/**
 * SetResourceGroup
 *
 * @package setresourcegroup
 */

/** @var $modx modX */
/** @var $scriptProperties array */

/* only operate on new resources */
if ($mode != modSystemEvent::MODE_NEW) { 
    $modx->log(xPDO::LOG_LEVEL_INFO, 'Old Resource ' . $resource->get('id'));
    return;
} else {
    $modx->log(xPDO::LOG_LEVEL_INFO, 'New Resource ' . $resource->get('id'));

    switch($resource->get('context_key')) {
        case 'en':
            $group = 'Translator (en)';
            if (!$resource->joinGroup($group)) {
                $modx->log(xPDO::LOG_LEVEL_ERROR, 'Can\'t add the resource ' . $resource->get('id') . 'to the Resource Group "'. $group . '"');
            }
            break;
    }

    $group = 'Administrator';
    if (!$resource->joinGroup($group)) {
        $modx->log(xPDO::LOG_LEVEL_ERROR, 'Can\'t add the resource ' . $resource->get('id') . 'to the Resource Group "'. $group . '"');
    }
}

return;
...