Exemplo n.º 1
0
 /**
  * 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;
 }
Exemplo n.º 2
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 /**
  * 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);
 }
Exemplo n.º 5
0
 /**
  * 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);
 }