. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ use Espo\Core\Container; use Espo\Entities\Role; use Espo\ORM\EntityManager; use Espo\ORM\Query\Part\Expression; use Espo\ORM\Query\UpdateBuilder; use Espo\Core\Utils\Metadata; class AfterUpgrade { public function run(Container $container): void { $this->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') { $metadata->set('entityDefs', $entityType, [ 'fields' => [ 'dateEnd' => [ 'suppressValidationList' => ['required'], ], ] ]); $metadata->save(); continue; } if ( !in_array($type, [ 'BasePlus', 'Base', 'Company', 'Person', ]) ) { continue; } $recordDefs = $metadata->getCustom('recordDefs', $entityType) ?? (object) []; $scopes = $metadata->getCustom('scopes', $entityType) ?? (object) []; $recordDefs->duplicateWhereBuilderClassName = "Espo\\Classes\\DuplicateWhereBuilders\\General"; $scopes->duplicateCheckFieldList = []; if ($type === 'Company' || $type === 'Person') { $scopes->duplicateCheckFieldList = ['name', 'emailAddress']; } $metadata->saveCustom('recordDefs', $entityType, $recordDefs); $metadata->saveCustom('scopes', $entityType, $scopes); } } }