diff --git a/application/Espo/Classes/Cleanup/Subscribers.php b/application/Espo/Classes/Cleanup/Subscribers.php index daf9ba0634..70a573ec73 100644 --- a/application/Espo/Classes/Cleanup/Subscribers.php +++ b/application/Espo/Classes/Cleanup/Subscribers.php @@ -33,7 +33,7 @@ use Espo\Core\Cleanup\Cleanup; use Espo\Core\Field\DateTime; use Espo\Core\Utils\Config; use Espo\Core\Utils\Metadata; -use Espo\Entities\Subscription; +use Espo\Entities\StreamSubscription; use Espo\ORM\EntityManager; use Espo\ORM\Query\Part\Condition as Cond; @@ -97,7 +97,7 @@ class Subscribers implements Cleanup $query = $this->entityManager ->getQueryBuilder() ->delete() - ->from(Subscription::ENTITY_TYPE, 'subscription') + ->from(StreamSubscription::ENTITY_TYPE, 'subscription') ->join( $entityType, 'entity', diff --git a/application/Espo/Core/Select/Bool/Filters/Followed.php b/application/Espo/Core/Select/Bool/Filters/Followed.php index 683bc1b318..f599150597 100644 --- a/application/Espo/Core/Select/Bool/Filters/Followed.php +++ b/application/Espo/Core/Select/Bool/Filters/Followed.php @@ -30,7 +30,7 @@ namespace Espo\Core\Select\Bool\Filters; use Espo\Core\Select\Bool\Filter; -use Espo\Entities\Subscription; +use Espo\Entities\StreamSubscription; use Espo\Entities\User; use Espo\ORM\Query\Part\Where\OrGroupBuilder; use Espo\ORM\Query\Part\WhereClause; @@ -46,7 +46,7 @@ class Followed implements Filter $alias = 'subscriptionFollowedBoolFilter'; $queryBuilder->leftJoin( - Subscription::ENTITY_TYPE, + StreamSubscription::ENTITY_TYPE, $alias, [ $alias . '.entityType' => $this->entityType, diff --git a/application/Espo/Core/Select/Primary/Filters/Followed.php b/application/Espo/Core/Select/Primary/Filters/Followed.php index 3a29371fe9..1782adcc12 100644 --- a/application/Espo/Core/Select/Primary/Filters/Followed.php +++ b/application/Espo/Core/Select/Primary/Filters/Followed.php @@ -30,6 +30,7 @@ namespace Espo\Core\Select\Primary\Filters; use Espo\Core\Select\Primary\Filter; +use Espo\Entities\StreamSubscription; use Espo\Entities\User; use Espo\ORM\Query\SelectBuilder as QueryBuilder; @@ -43,7 +44,7 @@ class Followed implements Filter $alias = 'subscriptionFollowedPrimaryFilter'; $queryBuilder->join( - 'Subscription', + StreamSubscription::ENTITY_TYPE, $alias, [ $alias . '.entityType' => $this->entityType, diff --git a/application/Espo/Core/Select/SelectManager.php b/application/Espo/Core/Select/SelectManager.php index d0392041e4..d692a6f564 100644 --- a/application/Espo/Core/Select/SelectManager.php +++ b/application/Espo/Core/Select/SelectManager.php @@ -40,6 +40,7 @@ use Espo\Core\Utils\Config; use Espo\Core\Utils\FieldUtil; use Espo\Core\Utils\Metadata; +use Espo\Entities\StreamSubscription; use Espo\ORM\Entity; use Espo\ORM\Query\Select as SelectQuery; use Espo\ORM\QueryComposer\BaseQueryComposer as QueryComposer; @@ -2740,7 +2741,7 @@ class SelectManager protected function filterFollowed(&$result) { $this->addJoin([ - 'Subscription', + StreamSubscription::ENTITY_TYPE, 'subscription', [ 'subscription.entityType' => $this->getEntityType(), @@ -2753,7 +2754,7 @@ class SelectManager protected function boolFilterFollowed(&$result) { $this->addLeftJoin([ - 'Subscription', + StreamSubscription::ENTITY_TYPE, 'subscription', [ 'subscription.entityType' => $this->getEntityType(), diff --git a/application/Espo/Core/Upgrades/Migrations/V8_3/AfterUpgrade.php b/application/Espo/Core/Upgrades/Migrations/V8_3/AfterUpgrade.php index a531a4d56f..1529694080 100644 --- a/application/Espo/Core/Upgrades/Migrations/V8_3/AfterUpgrade.php +++ b/application/Espo/Core/Upgrades/Migrations/V8_3/AfterUpgrade.php @@ -29,9 +29,11 @@ namespace Espo\Core\Upgrades\Migrations\V8_3; +use Doctrine\DBAL\Exception as DbalException; use Espo\Core\Templates\Entities\Event; use Espo\Core\Upgrades\Migration\Script; use Espo\Core\Utils\Config; +use Espo\Core\Utils\Database\Helper; use Espo\Core\Utils\Metadata; use Espo\Entities\AuthenticationProvider; use Espo\Entities\Role; @@ -44,14 +46,19 @@ class AfterUpgrade implements Script public function __construct( private EntityManager $entityManager, private Metadata $metadata, - private Config $config + private Config $config, + private Helper $helper ) {} + /** + * @throws DbalException + */ public function run(): void { $this->updateRoles(); $this->updateMetadata(); $this->updateAuthenticationProviders(); + $this->renameSubscription(); } private function updateRoles(): void @@ -114,4 +121,28 @@ class AfterUpgrade implements Script $this->entityManager->saveEntity($entity); } } + + /** + * @throws DbalException + */ + private function renameSubscription(): void + { + $connection = $this->helper->getDbalConnection(); + $schemaManager = $connection->createSchemaManager(); + + if (!$schemaManager->tablesExist('subscription')) { + return; + } + + if ($schemaManager->tablesExist('stream_subscription')) { + try { + $schemaManager->dropTable('stream_subscription'); + } + catch (DbalException) { + $schemaManager->renameTable('stream_subscription', 'stream_subscription_waste'); + } + } + + $schemaManager->renameTable('subscription', 'stream_subscription'); + } } diff --git a/application/Espo/Entities/Subscription.php b/application/Espo/Entities/StreamSubscription.php similarity index 94% rename from application/Espo/Entities/Subscription.php rename to application/Espo/Entities/StreamSubscription.php index 345faeadc5..461f3d504e 100644 --- a/application/Espo/Entities/Subscription.php +++ b/application/Espo/Entities/StreamSubscription.php @@ -31,7 +31,7 @@ namespace Espo\Entities; use Espo\Core\ORM\Entity; -class Subscription extends Entity +class StreamSubscription extends Entity { - public const ENTITY_TYPE = 'Subscription'; + public const ENTITY_TYPE = 'StreamSubscription'; } diff --git a/application/Espo/Resources/metadata/entityDefs/Subscription.json b/application/Espo/Resources/metadata/entityDefs/StreamSubscription.json similarity index 100% rename from application/Espo/Resources/metadata/entityDefs/Subscription.json rename to application/Espo/Resources/metadata/entityDefs/StreamSubscription.json diff --git a/application/Espo/Resources/metadata/scopes/Subscription.json b/application/Espo/Resources/metadata/scopes/StreamSubscription.json similarity index 100% rename from application/Espo/Resources/metadata/scopes/Subscription.json rename to application/Espo/Resources/metadata/scopes/StreamSubscription.json diff --git a/application/Espo/Tools/Stream/Service.php b/application/Espo/Tools/Stream/Service.php index 09c3ba4fb0..d5810fab88 100644 --- a/application/Espo/Tools/Stream/Service.php +++ b/application/Espo/Tools/Stream/Service.php @@ -32,7 +32,7 @@ namespace Espo\Tools\Stream; use Espo\Core\Field\LinkParent; use Espo\Core\ORM\Repository\Option\SaveOption; use Espo\Core\ORM\Type\FieldType; -use Espo\Entities\Subscription; +use Espo\Entities\StreamSubscription; use Espo\Modules\Crm\Entities\Account; use Espo\Repositories\EmailAddress as EmailAddressRepository; @@ -165,7 +165,7 @@ class Service } return (bool) $this->entityManager - ->getRDBRepository(Subscription::ENTITY_TYPE) + ->getRDBRepository(StreamSubscription::ENTITY_TYPE) ->select(['id']) ->where([ 'userId' => $userId, @@ -240,7 +240,7 @@ class Service $delete = $this->entityManager->getQueryBuilder() ->delete() - ->from(Subscription::ENTITY_TYPE) + ->from(StreamSubscription::ENTITY_TYPE) ->where([ 'userId' => $userIdList, 'entityId' => $entity->getId(), @@ -253,7 +253,7 @@ class Service $collection = new EntityCollection(); foreach ($userIdList as $userId) { - $subscription = $this->entityManager->getNewEntity(Subscription::ENTITY_TYPE); + $subscription = $this->entityManager->getNewEntity(StreamSubscription::ENTITY_TYPE); $subscription->set([ 'userId' => $userId, @@ -305,7 +305,7 @@ class Service return true; } - $this->entityManager->createEntity(Subscription::ENTITY_TYPE, [ + $this->entityManager->createEntity(StreamSubscription::ENTITY_TYPE, [ 'entityId' => $entity->getId(), 'entityType' => $entity->getEntityType(), 'userId' => $userId, @@ -322,7 +322,7 @@ class Service $delete = $this->entityManager->getQueryBuilder() ->delete() - ->from(Subscription::ENTITY_TYPE) + ->from(StreamSubscription::ENTITY_TYPE) ->where([ 'userId' => $userId, 'entityId' => $entity->getId(), @@ -343,7 +343,7 @@ class Service $delete = $this->entityManager->getQueryBuilder() ->delete() - ->from(Subscription::ENTITY_TYPE) + ->from(StreamSubscription::ENTITY_TYPE) ->where([ 'entityId' => $entity->getId(), 'entityType' => $entity->getEntityType(), @@ -978,7 +978,7 @@ class Service ->getRDBRepository(User::ENTITY_TYPE) ->select(['id']) ->join( - Subscription::ENTITY_TYPE, + StreamSubscription::ENTITY_TYPE, 'subscription', [ 'subscription.userId=:' => 'user.id', @@ -1021,7 +1021,7 @@ class Service } $builder->join( - Subscription::ENTITY_TYPE, + StreamSubscription::ENTITY_TYPE, 'subscription', [ 'subscription.userId=:' => 'user.id', @@ -1069,7 +1069,7 @@ class Service ->getRDBRepository(User::ENTITY_TYPE) ->select(['id', 'name']) ->join( - Subscription::ENTITY_TYPE, + StreamSubscription::ENTITY_TYPE, 'subscription', [ 'subscription.userId=:' => 'user.id', @@ -1126,7 +1126,7 @@ class Service $builder = $this->entityManager ->getQueryBuilder() ->select() - ->from(Subscription::ENTITY_TYPE) + ->from(StreamSubscription::ENTITY_TYPE) ->select('userId') ->where([ 'entityId' => $parentId, diff --git a/application/Espo/Tools/Stream/UserRecordService.php b/application/Espo/Tools/Stream/UserRecordService.php index 911dbc520d..36d9b40f51 100644 --- a/application/Espo/Tools/Stream/UserRecordService.php +++ b/application/Espo/Tools/Stream/UserRecordService.php @@ -35,7 +35,7 @@ use Espo\Core\Exceptions\NotFound; use Espo\Core\Select\SearchParams; use Espo\Modules\Crm\Entities\Account; use Espo\ORM\EntityManager; -use Espo\Entities\Subscription; +use Espo\Entities\StreamSubscription; use Espo\Entities\User; use Espo\Entities\Note; use Espo\Entities\Email; @@ -317,7 +317,7 @@ class UserRecordService $builder ->join( - Subscription::ENTITY_TYPE, + StreamSubscription::ENTITY_TYPE, 'subscription', [ 'entityType:' => 'parentType', @@ -371,7 +371,7 @@ class UserRecordService $builder ->join( - Subscription::ENTITY_TYPE, + StreamSubscription::ENTITY_TYPE, 'subscription', [ // Improves performance significantly. @@ -383,7 +383,7 @@ class UserRecordService ) // NOT EXISTS sub-query would perform very slow. ->leftJoin( - Subscription::ENTITY_TYPE, + StreamSubscription::ENTITY_TYPE, 'subscriptionExclude', [ 'entityType:' => 'parentType',