Как обнаружить изменение группы участников в SilverStripe 4

#silverstripe-4

#silverstripe-4

Вопрос:

У меня есть DataExtension для участника, MyMemberExtension .

Я пытаюсь обнаружить пользователя, перемещаемого из pending-users группы в public-users группу, используя onBeforeWrite и onAfterWrite MyMemberExtension . Однако изменение группы, похоже, происходит до того, как onBeforeWrite здесь .

В MyMemberExtension я добавил $IsPending члена класса.

 public function onBeforeWrite()
{
    if ($this->owner->inGroup('pending-users'))
    {
        self::$isPending = true;
    }
}
 

и

 public function onAfterWrite()
{
    if ($this->owner->inGroup('public-users') and self::$isPending)
    {
        # Moved from the pending to public - send email
    }
}
 

Я также пытался использовать $this->owner->getChangedFields(); , но Groups не является частью массива.

Как я могу обнаружить пользователя, переходящего с pending-users на public-users ?

Комментарии:

1. Модуль silverstripe-auditor отслеживает подобные изменения, это может быть полезно: github.com/silverstripe/silverstripe-auditor/blob/2/code /…

2. @RobbieAverill спасибо, я проверю это. Это то, что я описал, ожидаемое поведение?

3. Устанавливаемое вами статическое свойство не будет сбрасываться между участниками, поскольку расширения по умолчанию загружаются как отдельные элементы. Это может способствовать вашей проблеме. Ознакомьтесь с документами для изменения этого здесь: docs.silverstripe.org/en/4/changelogs/4.0.0 /…