- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/internals/project/provider.php
- Класс: BitrixTasksInternalsProjectProvider
- Вызов: Provider::getPrimaryProjectsQuery
public function getPrimaryProjectsQuery(array $select): Query
{
$query = WorkgroupTable::query();
$query
->setSelect($this->prepareQuerySelect($select))
->registerRuntimeField(
new Reference(
'CONTEXT_RELATION',
UserToGroupTable::getEntity(),
Join::on('this.ID', 'ref.GROUP_ID')->where('ref.USER_ID', $this->userId),
['join_type' => 'left']
)
)
->registerRuntimeField(
'PLA',
new ReferenceField(
'PLA',
ProjectLastActivityTable::getEntity(),
Join::on('this.ID', 'ref.PROJECT_ID'),
['join_type' => 'left']
)
)
->registerRuntimeField(
null,
new ExpressionField('ACTIVITY_DATE', 'IFNULL(%s, %s)', ['PLA.ACTIVITY_DATE', 'DATE_UPDATE'])
)
->registerRuntimeField(
new Reference(
'SITE',
WorkgroupSiteTable::getEntity(),
Join::on('this.ID', 'ref.GROUP_ID'),
['join_type' => 'inner']
)
)
->registerRuntimeField(
'SCRUM',
new BitrixMainORMFieldsExpressionField(
'SCRUM',
"(CASE WHEN %s = 'Y' AND %s > 0 THEN 'Y' ELSE 'N' END)",
['PROJECT', 'SCRUM_MASTER_ID']
)
)
->registerRuntimeField(
new Reference(
'FAVORITES',
WorkgroupFavoritesTable::getEntity(),
Join::on('this.ID', 'ref.GROUP_ID')->where('ref.USER_ID', $this->userId),
['join_type' => 'left']
)
)
->registerRuntimeField(
new Reference(
'PIN',
WorkgroupPinTable::getEntity(),
Join::on('this.ID', 'ref.GROUP_ID')
->where('ref.USER_ID', $this->userId)
->where('ref.CONTEXT', $this->mode)
,
['join_type' => 'left']
)
)
->registerRuntimeField(
'IS_PINNED',
new ExpressionField(
'IS_PINNED',
WorkgroupPinTable::getSelectExpression(),
['ID', 'PIN.USER_ID', 'PIN.CONTEXT']
)
)
;
$this->runtimeFieldsManager->add('CONTEXT_RELATION');
$this->runtimeFieldsManager->add('SITE');
$this->runtimeFieldsManager->add('SCRUM');
$this->runtimeFieldsManager->add('FAVORITES');
$this->runtimeFieldsManager->add('PIN');
$this->runtimeFieldsManager->add('IS_PINNED');
return $query;
}