ref
This commit is contained in:
@@ -33,6 +33,7 @@ use Espo\Core\Exceptions\Forbidden;
|
||||
use Espo\Core\Exceptions\NotFound;
|
||||
use Espo\Core\Name\Field;
|
||||
use Espo\Core\Utils\Language\LanguageProxy;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use Espo\Repositories\UserData as UserDataRepository;
|
||||
use Espo\Entities\Portal;
|
||||
use Espo\Entities\User;
|
||||
@@ -326,7 +327,7 @@ class Authentication
|
||||
) {
|
||||
$authLogRecord = $this->entityManager
|
||||
->getRDBRepository(AuthLogRecord::ENTITY_TYPE)
|
||||
->select(['id'])
|
||||
->select([Attribute::ID])
|
||||
->where(['authTokenId' => $authToken->getId()])
|
||||
->order('requestTime', true)
|
||||
->findOne();
|
||||
@@ -504,7 +505,7 @@ class Authentication
|
||||
) {
|
||||
$concurrentAuthTokenList = $this->entityManager
|
||||
->getRDBRepository(AuthTokenEntity::ENTITY_TYPE)
|
||||
->select(['id'])
|
||||
->select([Attribute::ID])
|
||||
->where([
|
||||
'userId' => $user->getId(),
|
||||
'isActive' => true,
|
||||
@@ -740,7 +741,7 @@ class Authentication
|
||||
$user = $this->entityManager
|
||||
->getRDBRepository(User::ENTITY_TYPE)
|
||||
->select(['userName'])
|
||||
->where(['id' => $authToken->getUserId()])
|
||||
->where([Attribute::ID => $authToken->getUserId()])
|
||||
->findOne();
|
||||
|
||||
return $user?->getUserName();
|
||||
|
||||
@@ -35,6 +35,7 @@ use Espo\Core\Console\Command;
|
||||
use Espo\Core\Console\Command\Params;
|
||||
use Espo\Core\Console\IO;
|
||||
use Espo\Core\ORM\EntityManager;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
|
||||
/**
|
||||
* @noinspection PhpUnused
|
||||
@@ -70,7 +71,7 @@ class AuthTokenCheck implements Command
|
||||
|
||||
$user = $this->entityManager
|
||||
->getRDBRepository(User::ENTITY_TYPE)
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->where([
|
||||
'id' => $userId,
|
||||
'isActive' => true,
|
||||
|
||||
@@ -35,6 +35,7 @@ use Espo\Core\FieldProcessing\Loader as LoaderInterface;
|
||||
use Espo\Core\FieldProcessing\Loader\Params;
|
||||
use Espo\Core\ORM\EntityManager;
|
||||
use Espo\ORM\Defs as OrmDefs;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
|
||||
/**
|
||||
* @implements LoaderInterface<Entity>
|
||||
@@ -80,8 +81,8 @@ class NotJoinedLoader implements LoaderInterface
|
||||
|
||||
$foreignEntity = $this->entityManager
|
||||
->getRDBRepository($foreignEntityType)
|
||||
->select(['id', 'name'])
|
||||
->where(['id' => $id])
|
||||
->select([Attribute::ID, 'name'])
|
||||
->where([Attribute::ID => $id])
|
||||
->findOne();
|
||||
|
||||
if (!$foreignEntity) {
|
||||
|
||||
@@ -35,6 +35,7 @@ use Espo\Core\Formula\ArgumentList;
|
||||
use Espo\Core\Formula\Exceptions\Error as FormulaError;
|
||||
use Espo\Core\Formula\Functions\BaseFunction;
|
||||
use Espo\Core\Di;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
|
||||
class FindOneType extends BaseFunction implements
|
||||
Di\EntityManagerAware,
|
||||
@@ -100,7 +101,7 @@ class FindOneType extends BaseFunction implements
|
||||
$queryBuilder->order($orderBy, $order);
|
||||
}
|
||||
|
||||
$queryBuilder->select(['id']);
|
||||
$queryBuilder->select([Attribute::ID]);
|
||||
|
||||
$entity = $this->entityManager
|
||||
->getRDBRepository($entityType)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
namespace Espo\Core\Formula\Functions;
|
||||
|
||||
use Espo\Core\Formula\Exceptions\Error;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
|
||||
class SetAttributeType extends Base
|
||||
{
|
||||
@@ -49,7 +50,7 @@ class SetAttributeType extends Base
|
||||
throw new Error("SetAttribute: First argument is not string.");
|
||||
}
|
||||
|
||||
if ($name === 'id') {
|
||||
if ($name === Attribute::ID) {
|
||||
throw new Error("Formula set-attribute: Not allowed to set `id` attribute.");
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ use Espo\Core\ORM\Type\FieldType;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
use Espo\Entities\Attachment;
|
||||
use Espo\Entities\User;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use Espo\Repositories\Attachment as AttachmentRepository;
|
||||
use Espo\Core\Utils\Json;
|
||||
use Espo\Core\Acl;
|
||||
@@ -905,7 +906,7 @@ class Htmlizer
|
||||
}
|
||||
|
||||
if ($orderBy === null) {
|
||||
$orderBy = 'id';
|
||||
$orderBy = Attribute::ID;
|
||||
}
|
||||
|
||||
return [[$orderBy, $order]];
|
||||
|
||||
@@ -33,6 +33,7 @@ use Espo\Core\Select\AccessControl\Filter;
|
||||
use Espo\Core\Select\Helpers\RelationQueryHelper;
|
||||
use Espo\Core\Select\Helpers\FieldHelper;
|
||||
use Espo\Entities\User;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use Espo\ORM\Query\Part\Where\OrGroup;
|
||||
use Espo\ORM\Query\Part\WhereClause;
|
||||
use Espo\ORM\Query\Part\WhereItem;
|
||||
@@ -58,7 +59,7 @@ class OnlyOwn implements Filter
|
||||
}
|
||||
|
||||
if (!$ownItem) {
|
||||
$queryBuilder->where(['id' => null]);
|
||||
$queryBuilder->where([Attribute::ID => null]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ use Espo\Core\Select\AccessControl\Filter;
|
||||
use Espo\Core\Select\Helpers\FieldHelper;
|
||||
use Espo\Entities\User;
|
||||
use Espo\Modules\Crm\Entities\Contact;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use Espo\ORM\Query\Part\Condition as Cond;
|
||||
use Espo\ORM\Query\Part\Expression as Expr;
|
||||
use Espo\ORM\Query\Part\Where\OrGroup;
|
||||
@@ -98,7 +99,7 @@ class PortalOnlyContact implements Filter
|
||||
$orGroup = $orBuilder->build();
|
||||
|
||||
if ($orGroup->getItemCount() === 0) {
|
||||
$queryBuilder->where(['id' => null]);
|
||||
$queryBuilder->where([Attribute::ID => null]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -411,7 +411,7 @@ class ItemGeneralConverter implements ItemConverter
|
||||
|
||||
return [
|
||||
$key => Select::fromRaw([
|
||||
'select' => ['id'],
|
||||
'select' => [Attribute::ID],
|
||||
'from' => $this->entityType,
|
||||
'whereClause' => $whereClause,
|
||||
'leftJoins' => $rawParams['leftJoins'] ?? [],
|
||||
@@ -439,7 +439,7 @@ class ItemGeneralConverter implements ItemConverter
|
||||
|
||||
$subQueryBuilder = QueryBuilder::create()
|
||||
->from($this->entityType)
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->leftJoin($link);
|
||||
|
||||
$alias = $link;
|
||||
@@ -464,7 +464,7 @@ class ItemGeneralConverter implements ItemConverter
|
||||
}
|
||||
|
||||
return Cond::in(
|
||||
Cond::column('id'),
|
||||
Cond::column(Attribute::ID),
|
||||
$subQueryBuilder
|
||||
->where($where)
|
||||
->build()
|
||||
@@ -485,7 +485,7 @@ class ItemGeneralConverter implements ItemConverter
|
||||
|
||||
$arrayAttribute = $attribute;
|
||||
$arrayEntityType = $this->entityType;
|
||||
$idPart = 'id';
|
||||
$idPart = Attribute::ID;
|
||||
|
||||
$isForeign = str_contains($attribute, '.');
|
||||
|
||||
@@ -1359,10 +1359,10 @@ class ItemGeneralConverter implements ItemConverter
|
||||
// Trade off is that if a foreign record is deleted but the middle table
|
||||
// is not yet deleted, it will give a non-actual result.
|
||||
$subQuery = QueryBuilder::create()
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->from($this->entityType)
|
||||
->leftJoin($middleEntityType, $alias, [
|
||||
"$alias.$nearKey:" => 'id',
|
||||
"$alias.$nearKey:" => Attribute::ID,
|
||||
"$alias.deleted" => false,
|
||||
])
|
||||
->where(["$alias.$key" => null])
|
||||
@@ -1378,7 +1378,7 @@ class ItemGeneralConverter implements ItemConverter
|
||||
$relationType === Entity::HAS_CHILDREN
|
||||
) {
|
||||
$subQuery = QueryBuilder::create()
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->from($this->entityType)
|
||||
->leftJoin($link, $alias)
|
||||
->where([$alias . '.id' => null])
|
||||
@@ -1411,10 +1411,10 @@ class ItemGeneralConverter implements ItemConverter
|
||||
// Trade off is that if a foreign record is deleted but the middle table
|
||||
// is not yet deleted, it will give a non-actual result.
|
||||
$subQuery = QueryBuilder::create()
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->from($this->entityType)
|
||||
->leftJoin($middleEntityType, $alias, [
|
||||
"$alias.$nearKey:" => 'id',
|
||||
"$alias.$nearKey:" => Attribute::ID,
|
||||
"$alias.deleted" => false,
|
||||
])
|
||||
->where(["$alias.$key!=" => null])
|
||||
@@ -1430,7 +1430,7 @@ class ItemGeneralConverter implements ItemConverter
|
||||
$relationType == Entity::HAS_CHILDREN
|
||||
) {
|
||||
$subQuery = QueryBuilder::create()
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->from($this->entityType)
|
||||
->leftJoin($link, $alias)
|
||||
->where([$alias . '.id!=' => null])
|
||||
@@ -1476,16 +1476,16 @@ class ItemGeneralConverter implements ItemConverter
|
||||
// Not joining a foreign table as it affects performance in MySQL.
|
||||
// MariaDB and PostgreSQL perform fast, MySQL – slow.
|
||||
return Cond::in(
|
||||
Cond::column('id'),
|
||||
Cond::column(Attribute::ID),
|
||||
QueryBuilder::create()
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->from($this->entityType)
|
||||
->leftJoin(
|
||||
Join::create($link, $alias)
|
||||
->withConditions(
|
||||
Cond::equal(
|
||||
Cond::column("$alias.$nearKey"),
|
||||
Cond::column('id')
|
||||
Cond::column(Attribute::ID)
|
||||
)
|
||||
)
|
||||
->withOnlyMiddle()
|
||||
@@ -1572,7 +1572,7 @@ class ItemGeneralConverter implements ItemConverter
|
||||
return Cond::not(
|
||||
Cond::exists(
|
||||
QueryBuilder::create()
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->from($this->entityType, 'sq')
|
||||
->join($link, $alias)
|
||||
->where(["$alias.id" => $value])
|
||||
@@ -1625,14 +1625,14 @@ class ItemGeneralConverter implements ItemConverter
|
||||
// Only-middle join performs slower on MariaDB.
|
||||
$sq = QueryBuilder::create()
|
||||
->from($this->entityType)
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->leftJoin($link)
|
||||
->where([
|
||||
$link . 'Middle.' . $key => $targetId,
|
||||
])
|
||||
->build();
|
||||
|
||||
$whereList[] = ['id=s' => $sq];
|
||||
$whereList[] = [Attribute::ID . '=s' => $sq];
|
||||
}
|
||||
|
||||
return $whereList;
|
||||
@@ -1644,12 +1644,12 @@ class ItemGeneralConverter implements ItemConverter
|
||||
foreach ($value as $targetId) {
|
||||
$sq = QueryBuilder::create()
|
||||
->from($this->entityType)
|
||||
->select('id')
|
||||
->select(Attribute::ID)
|
||||
->leftJoin($link)
|
||||
->where([$link . '.id' => $targetId])
|
||||
->build();
|
||||
|
||||
$whereList[] = ['id=s' => $sq];
|
||||
$whereList[] = [Attribute::ID . '=s' => $sq];
|
||||
}
|
||||
|
||||
return $whereList;
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Espo\Core\Utils\Currency;
|
||||
use Espo\Entities\Currency;
|
||||
use Espo\ORM\EntityManager;
|
||||
use Espo\Core\Utils\Config;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
|
||||
/**
|
||||
* Populates currency rates into database.
|
||||
@@ -64,7 +65,7 @@ class DatabasePopulator
|
||||
|
||||
foreach ($currencyRates as $currencyName => $rate) {
|
||||
$this->entityManager->createEntity(Currency::ENTITY_TYPE, [
|
||||
'id' => $currencyName,
|
||||
Attribute::ID => $currencyName,
|
||||
'rate' => $rate,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@ use Espo\Core\Utils\Config;
|
||||
use Espo\Core\Utils\DateTime as DateTimeUtil;
|
||||
use Espo\Core\Utils\Log;
|
||||
use Espo\ORM\EntityManager;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use Espo\ORM\Query\Part\Condition as Cond;
|
||||
|
||||
use Espo\ORM\Query\SelectBuilder;
|
||||
use Exception;
|
||||
use stdClass;
|
||||
@@ -97,7 +97,7 @@ class Queue
|
||||
$webhookList = $this->entityManager
|
||||
->getRDBRepository(Webhook::ENTITY_TYPE)
|
||||
->where([
|
||||
'event' => $item->get('event'),
|
||||
'event' => $item->getEvent(),
|
||||
'isActive' => true,
|
||||
])
|
||||
->order(Field::CREATED_AT)
|
||||
@@ -106,11 +106,11 @@ class Queue
|
||||
foreach ($webhookList as $webhook) {
|
||||
$this->entityManager->createEntity(WebhookQueueItem::ENTITY_TYPE, [
|
||||
'webhookId' => $webhook->getId(),
|
||||
'event' => $item->get('event'),
|
||||
'targetId' => $item->get('targetId'),
|
||||
'targetType' => $item->get('targetType'),
|
||||
'event' => $item->getEvent(),
|
||||
'targetId' => $item->getTargetId(),
|
||||
'targetType' => $item->getTargetType(),
|
||||
'status' => WebhookQueueItem::STATUS_PENDING,
|
||||
'data' => $item->get('data'),
|
||||
'data' => $item->getData(),
|
||||
'attempts' => 0,
|
||||
]);
|
||||
}
|
||||
@@ -168,8 +168,7 @@ class Queue
|
||||
->limit(0, $batchSize)
|
||||
->find();
|
||||
|
||||
/** @var ?Webhook $webhook */
|
||||
$webhook = $this->entityManager->getEntityById(Webhook::ENTITY_TYPE, $webhookId);
|
||||
$webhook = $this->entityManager->getRDBRepositoryByClass(Webhook::class)->getById($webhookId);
|
||||
|
||||
if (!$webhook || !$webhook->isActive()) {
|
||||
foreach ($itemList as $item) {
|
||||
@@ -226,7 +225,7 @@ class Queue
|
||||
*/
|
||||
private function prepareItemData(WebhookQueueItem $item, ?User $user, array $forbiddenAttributeList): ?stdClass
|
||||
{
|
||||
$targetType = $item->get('targetType');
|
||||
$targetType = $item->getTargetType();
|
||||
$target = null;
|
||||
|
||||
if ($this->entityManager->hasRepository($targetType)) {
|
||||
@@ -238,7 +237,7 @@ class Queue
|
||||
$target = $this->entityManager
|
||||
->getRDBRepository($targetType)
|
||||
->clone($query)
|
||||
->where(['id' => $item->get('targetId')])
|
||||
->where([Attribute::ID => $item->getTargetId()])
|
||||
->findOne();
|
||||
}
|
||||
|
||||
@@ -256,7 +255,7 @@ class Queue
|
||||
}
|
||||
}
|
||||
|
||||
$data = $item->get('data') ?? (object) [];
|
||||
$data = $item->getData();
|
||||
|
||||
foreach ($forbiddenAttributeList as $attribute) {
|
||||
unset($data->$attribute);
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
namespace Espo\Entities;
|
||||
|
||||
use Espo\Core\ORM\Entity;
|
||||
use stdClass;
|
||||
|
||||
class WebhookEventQueueItem extends Entity
|
||||
{
|
||||
@@ -41,4 +42,24 @@ class WebhookEventQueueItem extends Entity
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getEvent(): string
|
||||
{
|
||||
return (string) $this->get('event');
|
||||
}
|
||||
|
||||
public function getTargetType(): ?string
|
||||
{
|
||||
return $this->get('targetType');
|
||||
}
|
||||
|
||||
public function getTargetId(): ?string
|
||||
{
|
||||
return $this->get('targetId');
|
||||
}
|
||||
|
||||
public function getData(): stdClass
|
||||
{
|
||||
return $this->get('data') ?? (object) [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ namespace Espo\Entities;
|
||||
|
||||
use Espo\Core\Field\DateTime;
|
||||
use Espo\Core\ORM\Entity;
|
||||
use stdClass;
|
||||
|
||||
class WebhookQueueItem extends Entity
|
||||
{
|
||||
@@ -84,4 +85,19 @@ class WebhookQueueItem extends Entity
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTargetType(): ?string
|
||||
{
|
||||
return $this->get('targetType');
|
||||
}
|
||||
|
||||
public function getTargetId(): ?string
|
||||
{
|
||||
return $this->get('targetId');
|
||||
}
|
||||
|
||||
public function getData(): stdClass
|
||||
{
|
||||
return $this->get('data') ?? (object) [];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user