updateRoles( $container->getByClass(EntityManager::class) ); $this->updateMetadata( $container->getByClass(Metadata::class) ); } private function updateRoles(EntityManager $entityManager): void { $query = UpdateBuilder::create() ->in(Role::ENTITY_TYPE) ->set(['messagePermission' => Expression::column('assignmentPermission')]) ->build(); $entityManager->getQueryExecutor()->execute($query); } private function updateMetadata(Metadata $metadata): void { $defs = $metadata->get(['scopes']); foreach ($defs as $entityType => $item) { $isCustom = $item['isCustom'] ?? false; $type = $item['type'] ?? false; if (!$isCustom) { continue; } if ($type === Event::TEMPLATE_TYPE) { $metadata->set('entityDefs', $entityType, [ 'fields' => [ 'dateEnd' => [ 'suppressValidationList' => ['required'], ], ] ]); $metadata->save(); continue; } if ( !in_array($type, [ BasePlus::TEMPLATE_TYPE, Base::TEMPLATE_TYPE, Company::TEMPLATE_TYPE, Person::TEMPLATE_TYPE ]) ) { continue; } $recordDefs = $metadata->getCustom('recordDefs', $entityType) ?? (object) []; $scopes = $metadata->getCustom('scopes', $entityType) ?? (object) []; $recordDefs->duplicateWhereBuilderClassName = "Espo\\Classes\\DuplicateWhereBuilders\\General"; $scopes->duplicateCheckFieldList = []; if ($type === Company::TEMPLATE_TYPE || $type === Person::TEMPLATE_TYPE) { $scopes->duplicateCheckFieldList = ['name', 'emailAddress']; } $metadata->saveCustom('recordDefs', $entityType, $recordDefs); $metadata->saveCustom('scopes', $entityType, $scopes); } } }