- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/update/workgrouptaskspinmigration.php
- Класс: BitrixSocialnetworkUpdateWorkgroupTasksPinMigration
- Вызов: WorkgroupTasksPinMigration::execute
public function execute(array &$result)
{
if (
!(
Loader::includeModule(self::$moduleId)
&& Loader::includeModule('tasks')
&& Option::get('socialnetwork', 'needWorkgroupTaskPinMigration', 'Y') === 'Y'
)
)
{
return false;
}
$return = false;
$params = Option::get('socialnetwork', 'workgrouptaskspinmigration');
$params = ($params !== '' ? @unserialize($params, [ 'allowed_classes' => false ]) : []);
$params = (is_array($params) ? $params : []);
if (empty($params))
{
$params = [
'lastId' => 0,
'number' => 0,
'count' => $this->getCount(),
];
}
if ($params['count'] > 0)
{
$result['title'] = Loc::getMessage('FUPD_WORKGROUP_TASKS_PIN_MIGRATION_TITLE');
$result['progress'] = 1;
$result['steps'] = '';
$result['count'] = $params['count'];
$res = (new BitrixMainEntityQuery(ProjectUserOptionTable::getEntity()))
->registerRuntimeField(
new ReferenceField(
'PROJECT',
WorkgroupTable::getEntity(),
[ '=this.PROJECT_ID' => 'ref.ID' ],
[ 'join_type' => 'INNER' ]
)
)
->addFilter('>ID', $params['lastId'])
->addFilter('=OPTION_CODE', UserOptionTypeDictionary::OPTION_PINNED)
->addSelect('ID')
->addSelect('PROJECT_ID')
->addSelect('USER_ID')
->addSelect('PROJECT.SCRUM_MASTER_ID')
->setOffset(0)
->setLimit(50)
->exec();
$found = false;
while ($userOptionItem = $res->fetchObject())
{
$groupId = $userOptionItem->get('PROJECT_ID');
$userId = $userOptionItem->get('USER_ID');
$projectItem = $userOptionItem->get('PROJECT');
$context = (
(int)$projectItem->get('SCRUM_MASTER_ID') > 0
? WorkgroupList::MODE_TASKS_SCRUM
: WorkgroupList::MODE_TASKS_PROJECT
);
$params['number']++;
$params['lastId'] = $userOptionItem->getId();
if (WorkgroupPinTable::getList([
'filter' => [
'=GROUP_ID' => $groupId,
'=USER_ID' => $userId,
'=CONTEXT' => $context,
],
])->fetchObject())
{
continue;
}
WorkgroupPinTable::add([
'GROUP_ID' => $groupId,
'USER_ID' => $userId,
'CONTEXT' => $context,
]);
$found = true;
}
if ($found)
{
Option::set('socialnetwork', 'workgrouptaskspinmigration', serialize($params));
$return = true;
}
$result['progress'] = (int)($params['number'] * 100 / $params['count']);
$result['steps'] = $params['number'];
if ($found === false)
{
Option::delete('socialnetwork', [ 'name' => 'workgrouptaskspinmigration' ]);
Option::set('socialnetwork', 'needWorkgroupTaskPinMigration', 'N');
}
}
return $return;
}