• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/volume/contact.php
  • Класс: Bitrix\Crm\Volume\Contact
  • Вызов: Contact::clearActivity
public function clearActivity()
{
	if (!$this->canClearActivity())
	{
		return -1;
	}

	$userPermissions = \CCrmPerms::GetUserPermissions($this->getOwner());

	$activityVolume = new Volume\Activity();
	$activityVolume->setFilter($this->getFilter());

	$query = $activityVolume->prepareQuery(static::className());

	$dropped = -1;

	if ($activityVolume->prepareFilter($query))
	{
		$query
			->setSelect(array(
				'ID' => 'ID',
				'CONTACT_ID' => 'BINDINGS.OWNER_ID',
			))
			->where('BINDINGS.OWNER_TYPE_ID', '=', \CCrmOwnerType::Contact)
			->setLimit(self::MAX_ENTITY_PER_INTERACTION)
			->setOrder(array('ID' => 'ASC'));

		if ($this->getProcessOffset() > 0)
		{
			$query->where('ID', '>', $this->getProcessOffset());
		}

		$res = $query->exec();

		$dropped = 0;
		while ($activity = $res->fetch())
		{
			$this->setProcessOffset($activity['ID']);

			$activity['OWNER_TYPE_ID'] = \CCrmOwnerType::Contact;
			$activity['OWNER_ID'] = $activity['CONTACT_ID'];

			if (\CCrmActivity::CheckItemDeletePermission($activity, $userPermissions))
			{
				\CCrmActivity::DeleteByOwner(\CCrmOwnerType::Contact, $activity['CONTACT_ID']);

				//todo: fail count here

				$this->incrementDroppedActivityCount();
				$dropped ++;
			}
			else
			{
				$this->collectError(new Main\Error('Access denied to activity #'.$activity['ID'], self::ERROR_PERMISSION_DENIED));
				$this->incrementFailCount();
			}

			if ($this->hasTimeLimitReached())
			{
				break;
			}
		}
	}
	else
	{
		$this->collectError(new Main\Error('Filter error', self::ERROR_DELETION_FAILED));
	}

	return $dropped;
}