26 $permissions = $command->getPermissions()?->getValue() ?? [];
27 if (empty($permissions))
29 return $handlerResult;
32 $handlerResult->setGroupChanged();
34 $currentFeatures = FeatureProvider::getInstance()->getFeatures($command->getId());
35 foreach ($permissions as $featureName => $operations)
37 $featureId = $currentFeatures[$featureName]?->id ?? 0;
43 foreach ($operations as $operationName => $operationValue)
45 $operationId = CSocNetFeaturesPerms::SetPerm(
53 $handlerResult->addApplicationError();
58 return $handlerResult->merge($this->writePermissionsChangesToLog($command, $entityBefore));
67 return $handlerResult;
70 $permissions = $command->getPermissions()?->getValue() ??
null;
72 if (empty($permissions))
74 return $handlerResult;
77 $analytics = CollabAnalytics::getInstance();
80 $previousPermissions = $entityBefore->getPermissions();
82 foreach ($permissions as $featureName => $operations)
84 $previousPermission = $this->getPermissionByFeature($previousPermissions, $featureName);
86 if (!$previousPermission)
91 $previousPermission = $previousPermission->toArray();
93 foreach ($operations as $operationName => $operationValue)
95 $previousValue = $previousPermission[$featureName][$operationName] ??
null;
97 if ($previousValue === $operationValue)
102 $logEntry =
new UpdateCollabLogEntry(
103 userId: $command->getInitiatorId(),
104 collabId: $command->getId(),
107 $fieldName = UpdateCollabLogEntry::PERMISSION_FIELD_PREFIX .
'_' . $featureName .
'_' . $operationName;
110 ->setFieldName($fieldName)
111 ->setPreviousValue($previousValue)
112 ->setCurrentValue($operationValue)
115 $logEntryCollection->add($logEntry);
117 $analytics->onSettingsChanged($command->getInitiatorId(), $command->getId(), $operationName);
121 if ($logEntryCollection->isEmpty())
123 return $handlerResult;
126 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
127 $service->saveCollection($logEntryCollection);
129 return $handlerResult;
132 private function getPermissionByFeature(
array $permissions,
string $name): ?Permission
134 foreach ($permissions as $permission)