/** * Connect object $data['REAL_OBJECT'] (or $data['REAL_OBJECT_ID']) to user storage * $data['SELF_CONNECT'] - don't ask about connecting object, * @param $userId * @param array $data * @param ErrorCollection $errorCollection * @return Sharing|null * @throws \Bitrix\Main\NotImplementedException * @throws \Bitrix\Main\SystemException */ public static function connectToUserStorage($userId, array $data, ErrorCollection $errorCollection) { $storage = Driver::getInstance()->getStorageByUserId($userId); if (!$storage) { $storage = Driver::getInstance()->addUserStorage($userId); } if (!$storage) { $errorCollection->add(array(new Error(Loc::getMessage('DISK_SHARING_MODEL_ERROR_COULD_NOT_FIND_USER_STORAGE', array('#USER_ID#' => $userId)), self::ERROR_COULD_NOT_FIND_USER_STORAGE))); return null; } $selfConnect = !empty($data['SELF_CONNECT']); $linkName = !empty($data['LINK_NAME']) ? $data['LINK_NAME'] : null; unset($data['SELF_CONNECT'], $data['LINK_NAME']); $data['TYPE'] = SharingTable::TYPE_TO_USER; $data['FROM_ENTITY'] = self::CODE_USER . (int) $userId; $data['TO_ENTITY'] = self::CODE_USER . (int) $userId; $data['TASK_NAME'] = RightsManager::TASK_READ; if (isset($data['REAL_OBJECT']) && $data['REAL_OBJECT'] instanceof BaseObject) { /** @noinspection PhpUndefinedMethodInspection */ $data['REAL_OBJECT_ID'] = $data['REAL_OBJECT']->getId(); } elseif (isset($data['REAL_OBJECT_ID'])) { $data['REAL_OBJECT'] = BaseObject::loadById($data['REAL_OBJECT_ID']); } else { $errorCollection->add(array(new Error(Loc::getMessage('DISK_SHARING_MODEL_ERROR_EMPTY_REAL_OBJECT'), self::ERROR_EMPTY_REAL_OBJECT))); return null; } /** @var \Bitrix\Disk\BaseObject $objectToSharing */ $objectToSharing = $data['REAL_OBJECT']; //resolve to last real object. In table we write only real (not link) id. $objectToSharing = $objectToSharing->getRealObject(); $data['REAL_OBJECT_ID'] = $objectToSharing->getId(); $data['REAL_STORAGE_ID'] = $objectToSharing->getStorageId(); $dataToInsert = $data; unset($dataToInsert['REAL_OBJECT']); $sharingModel = parent::add($dataToInsert, $errorCollection); if (!$sharingModel) { return null; } $sharingModel->setAttributes(array('REAL_OBJECT' => $objectToSharing)); if (!$selfConnect) { self::processConnectAndNotify(array($sharingModel), $objectToSharing); } else { if (!$sharingModel->approve(array('LINK_NAME' => $linkName))) { $errorCollection->add($sharingModel->getErrors()); $sharingModel->delete($userId); return null; } } return $sharingModel; }
/** * Adds row to entity table, fills error collection and builds model. * @param array $data Data. * @param ErrorCollection $errorCollection Error collection. * @return \Bitrix\Disk\Internals\Model|static|null * @throws \Bitrix\Main\NotImplementedException * @internal */ public static function add(array $data, ErrorCollection $errorCollection) { static::checkRequiredInputParams($data, array('OBJECT_ID', 'ENTITY_ID', 'ENTITY_TYPE', 'MODULE_ID')); $model = parent::add($data, $errorCollection); if ($model && $model->getCreatedBy()) { $driver = Driver::getInstance(); $driver->getRecentlyUsedManager()->push($model->getCreatedBy(), $model->getObjectId()); } return $model; }
public static function add(array $data, ErrorCollection $errorCollection) { if (!is_subclass_of($data['ENTITY_TYPE'], ProxyType\Base::className())) { throw new SystemException('Invalid class for ProxyType. Must be subclass of ProxyType\\Base'); } $rootObjectData = array(); if (!empty($data['ROOT_OBJECT'])) { $rootObjectData = $data['ROOT_OBJECT']; unset($data['ROOT_OBJECT']); } $storage = parent::add($data, $errorCollection); if (!$storage) { return null; } $folderData = array_merge(array_intersect_key($rootObjectData, array('CREATE_TIME' => true, 'UPDATE_TIME' => true, 'XML_ID' => true)), array('NAME' => Ui\Text::correctFilename($storage->getName()), 'STORAGE_ID' => $storage->getId())); $folder = Folder::add($folderData, $errorCollection); if (!$folder) { return null; } $success = $storage->update(array('ROOT_OBJECT_ID' => $folder->getId())); if (!$success) { return null; } $storage->rootObject = $folder; $event = new Event(Driver::INTERNAL_MODULE_ID, "onAfterAddStorage", array($storage)); $event->send(); $storage->clearByTagCommonStorages(); return $storage; }
/** * Adds row to entity table, fills error collection and builds model. * @param array $data Data. * @param ErrorCollection $errorCollection Error collection. * @return \Bitrix\Disk\Internals\Model|static|null * @throws \Bitrix\Main\NotImplementedException * @internal */ public static function add(array $data, ErrorCollection $errorCollection) { static::checkRequiredInputParams($data, array('OBJECT_ID', 'ENTITY_ID', 'ENTITY_TYPE', 'MODULE_ID')); return parent::add($data, $errorCollection); }
/** * Adds row to entity table, fills error collection and build model. * @param array $data Data. * @param ErrorCollection $errorCollection Error collection. * @return \Bitrix\Disk\Internals\Model|static|null * @throws \Bitrix\Main\NotImplementedException * @internal */ public static function add(array $data, ErrorCollection $errorCollection) { static::checkRequiredInputParams($data, array('OBJECT_ID')); if (!empty($data['PASSWORD'])) { list($data['PASSWORD'], $data['SALT']) = ExternalLink::generatePasswordAndSalt($data['PASSWORD']); } $data['HASH'] = md5(uniqid($data['OBJECT_ID'], true) . \CMain::getServerUniqID()); return parent::add($data, $errorCollection); }