- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/internals/object.php
- Класс: BitrixDiskInternalsObjectTable
- Вызов: ObjectTable::move
static function move($primary, $newParentId)
{
$newParentId = (int)$newParentId;
// check primary
static::normalizePrimary($primary);
static::validatePrimary($primary);
$data = array(
'PARENT_ID' => $newParentId,
);
$entity = static::getEntity();
$result = new UpdateResult();
$event = new EntityEvent($entity, self::EVENT_ON_BEFORE_MOVE, array("id"=>$primary, "fields"=>$data));
$event->send();
$event->getErrors($result);
$data = $event->mergeFields($data);
// check data
// static::checkFields($result, $primary, $data);
if(!$result->isSuccess(true))
{
return $result;
}
$event = new EntityEvent($entity, self::EVENT_ON_MOVE, array("id"=>$primary, "fields"=>$data));
$event->send();
ObjectPathTable::moveTo($primary['ID'], $newParentId);
// save data
$connection = MainApplication::getConnection();
$helper = $connection->getSqlHelper();
$tableName = static::getEntity()->getDBTableName();
$update = $helper->prepareUpdate($tableName, array('PARENT_ID' => $newParentId));
$id = array();
foreach ($primary as $k => $v)
{
$id[] = $helper->prepareAssignment($tableName, $k, $v);
}
$where = implode(' AND ', $id);
$sql = "UPDATE ".$tableName." SET ".$update[0]." WHERE ".$where;
$connection->queryExecute($sql, $update[1]);
$result = new UpdateResult();
$result->setAffectedRowsCount($connection);
$result->setData(array('PARENT_ID' => $newParentId));
$event = new EntityEvent($entity, self::EVENT_ON_AFTER_MOVE, array("id"=>$primary, "fields"=>$data));
$event->send();
return $result;
}