kb active status list

This commit is contained in:
Yuri Kuznetsov
2024-05-16 14:51:55 +03:00
parent af3baef0cb
commit 7ebcc6c71a
6 changed files with 48 additions and 18 deletions
@@ -29,6 +29,7 @@
namespace Espo\Modules\Crm\Classes\AclPortal\KnowledgeBaseArticle;
use Espo\Core\Utils\Metadata;
use Espo\Entities\User;
use Espo\Modules\Crm\Entities\KnowledgeBaseArticle;
use Espo\ORM\Entity;
@@ -45,8 +46,10 @@ class AccessChecker implements AccessEntityCREDChecker
{
use DefaultAccessCheckerDependency;
public function __construct(DefaultAccessChecker $defaultAccessChecker)
{
public function __construct(
DefaultAccessChecker $defaultAccessChecker,
private Metadata $metadata
) {
$this->defaultAccessChecker = $defaultAccessChecker;
}
@@ -56,7 +59,10 @@ class AccessChecker implements AccessEntityCREDChecker
return false;
}
if ($entity->get('status') !== KnowledgeBaseArticle::STATUS_PUBLISHED) {
$statusList = $this->metadata->get("entityDefs.KnowledgeBaseArticle.fields.status.activeOptions") ??
[KnowledgeBaseArticle::STATUS_PUBLISHED];
if (!in_array($entity->getStatus(), $statusList)) {
return false;
}
@@ -30,6 +30,7 @@
namespace Espo\Modules\Crm\Classes\Select\KnowledgeBaseArticle\AccessControlFilters;
use Espo\Core\Select\AccessControl\Filter;
use Espo\Core\Utils\Metadata;
use Espo\Modules\Crm\Entities\KnowledgeBaseArticle;
use Espo\ORM\Query\SelectBuilder;
@@ -37,8 +38,10 @@ use Espo\Entities\User;
class Mandatory implements Filter
{
public function __construct(private User $user)
{}
public function __construct(
private User $user,
private Metadata $metadata
) {}
public function apply(SelectBuilder $queryBuilder): void
{
@@ -46,10 +49,11 @@ class Mandatory implements Filter
return;
}
$statusList = $this->metadata->get("entityDefs.KnowledgeBaseArticle.fields.status.activeOptions") ??
[KnowledgeBaseArticle::STATUS_PUBLISHED];
$queryBuilder
->where([
'status' => KnowledgeBaseArticle::STATUS_PUBLISHED,
])
->where(['status' => $statusList])
->distinct()
->leftJoin('portals', 'portalsAccess')
->where([
@@ -30,15 +30,21 @@
namespace Espo\Modules\Crm\Classes\Select\KnowledgeBaseArticle\PrimaryFilters;
use Espo\Core\Select\Primary\Filter;
use Espo\Core\Utils\Metadata;
use Espo\Modules\Crm\Entities\KnowledgeBaseArticle;
use Espo\ORM\Query\SelectBuilder;
class Published implements Filter
{
public function __construct(
private Metadata $metadata
) {}
public function apply(SelectBuilder $queryBuilder): void
{
$queryBuilder->where([
'status' => KnowledgeBaseArticle::STATUS_PUBLISHED,
]);
$statusList = $this->metadata->get("entityDefs.KnowledgeBaseArticle.fields.status.activeOptions") ??
[KnowledgeBaseArticle::STATUS_PUBLISHED];
$queryBuilder->where(['status' => $statusList]);
}
}
@@ -40,6 +40,11 @@ class KnowledgeBaseArticle extends Entity
public const STATUS_PUBLISHED = 'Published';
public const STATUS_ARCHIVED = 'Archived';
public function getStatus(): string
{
return (string) $this->get('status');
}
public function getOrder(): ?int
{
return $this->get('order');
@@ -30,26 +30,28 @@
namespace Espo\Modules\Crm\Jobs;
use Espo\Core\Utils\DateTime;
use Espo\Core\Utils\Metadata;
use Espo\Modules\Crm\Entities\KnowledgeBaseArticle;
use Espo\Core\Job\JobDataLess;
use Espo\Core\ORM\EntityManager;
class ControlKnowledgeBaseArticleStatus implements JobDataLess
{
private EntityManager $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function __construct(
private EntityManager $entityManager,
private Metadata $metadata
) {}
public function run(): void
{
$statusList = $this->metadata->get("entityDefs.KnowledgeBaseArticle.fields.status.activeOptions") ??
[KnowledgeBaseArticle::STATUS_PUBLISHED];
$list = $this->entityManager
->getRDBRepository(KnowledgeBaseArticle::ENTITY_TYPE)
->where([
'expirationDate<=' => date(DateTime::SYSTEM_DATE_FORMAT),
'status' => KnowledgeBaseArticle::STATUS_PUBLISHED,
'status' => $statusList,
])
->find();
@@ -20,6 +20,13 @@
},
"view": "crm:views/knowledge-base-article/fields/status",
"default": "Draft",
"fieldManagerAdditionalParamList": [
{
"name": "activeOptions",
"view": "views/admin/field-manager/fields/not-actual-options"
}
],
"activeOptions": ["Published"],
"customizationOptionsReferenceDisabled": true
},
"language": {