示例#1
0
 protected function processActionMoveTo()
 {
     if (!$this->checkRequiredPostParams(array('objectId', 'targetObjectId'))) {
         $this->sendJsonErrorResponse();
     }
     /** @var \Bitrix\Disk\File|\Bitrix\Disk\Folder $object */
     $object = BaseObject::loadById((int) $this->request->getPost('objectId'), array('STORAGE'));
     if (!$object) {
         $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_BREADCRUMBS_TREE_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT));
         $this->sendJsonErrorResponse();
     }
     $securityContext = $object->getStorage()->getCurrentUserSecurityContext();
     if (!$object->canRead($securityContext)) {
         $this->sendJsonAccessDeniedResponse();
     }
     /** @var \Bitrix\Disk\Folder $targetObject */
     $targetObject = Folder::loadById((int) $this->request->getPost('targetObjectId'), array('STORAGE'));
     if (!$targetObject) {
         $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_BREADCRUMBS_TREE_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT));
         $this->sendJsonErrorResponse();
     }
     if (!$object->canMove($securityContext, $targetObject)) {
         $this->sendJsonAccessDeniedResponse();
     }
     if (!$object->moveTo($targetObject, $this->getUser()->getId(), true)) {
         $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_BREADCRUMBS_TREE_ERROR_COULD_NOT_MOVE_OBJECT'), self::ERROR_COULD_NOT_MOVE_OBJECT));
         $this->sendJsonErrorResponse();
     }
     $this->sendJsonSuccessResponse(array('id' => $object->getId(), 'name' => $object->getName()));
 }
示例#2
0
 /**
  * @return BaseObject
  */
 public function getObject()
 {
     if (!$this->objectId) {
         return null;
     }
     if (isset($this->object) && $this->objectId == $this->object->getId()) {
         return $this->object;
     }
     $this->object = BaseObject::loadById($this->objectId);
     return $this->object;
 }
示例#3
0
 protected function processActionShowObjectInGrid()
 {
     if (!$this->checkRequiredGetParams(array('objectId'))) {
         $this->sendJsonErrorResponse();
     }
     /** @var Folder|File $object */
     $object = BaseObject::loadById((int) $this->request->getQuery('objectId'), array('STORAGE'));
     if (!$object) {
         $this->errorCollection->addOne(new Error('Could not find file or folder', self::ERROR_COULD_NOT_FIND_FILE));
         $this->sendJsonErrorResponse();
     }
     $storage = $object->getStorage();
     $securityContext = $storage->getCurrentUserSecurityContext();
     if (!$object->canRead($securityContext)) {
         $this->errorCollection->addOne(new Error('Could not find file or folder', self::ERROR_COULD_NOT_READ_FILE));
         $this->sendJsonErrorResponse();
     }
     $gridOptions = new Internals\Grid\FolderListOptions($storage);
     $pageSize = $gridOptions->getPageSize();
     $parameters = array('select' => array('ID'), 'filter' => array('PARENT_ID' => $object->getParentId(), 'DELETED_TYPE' => ObjectTable::DELETED_TYPE_NONE), 'order' => $gridOptions->getOrderForOrm(), 'limit' => $pageSize);
     $countQuery = new Query(ObjectTable::getEntity());
     $countQuery->addSelect(new ExpressionField('CNT', 'COUNT(1)'));
     $countQuery->setFilter($parameters['filter']);
     $totalCount = $countQuery->setLimit(null)->setOffset(null)->exec()->fetch();
     $totalCount = $totalCount['CNT'];
     $pageCount = ceil($totalCount / $pageSize);
     $driver = Driver::getInstance();
     $finalPage = null;
     for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) {
         $fullParameters = $driver->getRightsManager()->addRightsCheck($securityContext, $parameters, array('ID', 'CREATED_BY'));
         $fullParameters['offset'] = $pageSize * ($pageNumber - 1);
         $query = ObjectTable::getList($fullParameters);
         while ($row = $query->fetch()) {
             if ($row['ID'] == $object->getId()) {
                 $finalPage = $pageNumber;
                 break;
             }
         }
         if ($finalPage !== null) {
             break;
         }
     }
     $finalPage = $finalPage ?: 1;
     $command = $this->request->getQuery('cmd') ?: '';
     if ($command) {
         $command = '!' . $command;
     }
     LocalRedirect($driver->getUrlManager()->getPathInListing($object) . "?&pageNumber={$finalPage}#hl-" . $object->getId() . $command);
 }
示例#4
0
 private function processGridActions($gridId)
 {
     $postAction = 'action_button_' . $gridId;
     if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST[$postAction]) && check_bitrix_sessid()) {
         $userId = $this->getUser()->getID();
         if ($_POST[$postAction] == 'restore') {
             if (empty($_POST['ID'])) {
                 return;
             }
             foreach ($_POST['ID'] as $targetId) {
                 /** @var Folder|File $object */
                 $object = BaseObject::loadById($targetId);
                 if (!$object) {
                     continue;
                 }
                 if (!$object->canRestore($object->getStorage()->getCurrentUserSecurityContext())) {
                     continue;
                 }
                 $object->restore($userId);
             }
         } elseif ($_POST[$postAction] == 'delete' || $_POST[$postAction] == 'destroy') {
             if (empty($_POST['ID'])) {
                 return;
             }
             foreach ($_POST['ID'] as $targetId) {
                 /** @var Folder|File $object */
                 $object = BaseObject::loadById($targetId);
                 if (!$object) {
                     continue;
                 }
                 if (!$object->canDelete($object->getStorage()->getCurrentUserSecurityContext())) {
                     continue;
                 }
                 if ($object instanceof Folder) {
                     $object->deleteTree($userId);
                 } else {
                     $object->delete($userId);
                 }
             }
         }
     }
 }
示例#5
0
 private function processGridActions($gridId)
 {
     $postAction = 'action_button_' . $gridId;
     if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST[$postAction]) && check_bitrix_sessid()) {
         $userId = $this->getUser()->getID();
         if ($_POST[$postAction] == 'edit') {
             if (empty($_POST['FIELDS'])) {
                 return;
             }
             foreach ($_POST['FIELDS'] as $id => $sourceData) {
                 if (empty($sourceData['NAME'])) {
                     //inline edit for name only
                     continue;
                 }
                 /** @var Folder|File $object */
                 $object = BaseObject::loadById($id);
                 if (!$object) {
                     continue;
                 }
                 if (!$object->canRename($object->getStorage()->getCurrentUserSecurityContext())) {
                     continue;
                 }
                 if (!$object->rename($sourceData['NAME'])) {
                     $this->errorCollection->add($object->getErrors());
                 }
             }
             unset($id, $sourceData);
         } elseif ($_POST[$postAction] == 'delete') {
             if (empty($_POST['ID'])) {
                 return;
             }
             foreach ($_POST['ID'] as $targetId) {
                 /** @var Folder|File $object */
                 $object = BaseObject::loadById($targetId);
                 if (!$object) {
                     continue;
                 }
                 if (!$object->canMarkDeleted($object->getStorage()->getCurrentUserSecurityContext())) {
                     continue;
                 }
                 $object->markDeleted($userId);
             }
         } elseif ($_POST[$postAction] == 'move' && !empty($_POST['grid_group_action_target_object'])) {
             /** @var Folder $targetFolder */
             $targetFolder = Folder::loadById((int) $_POST['grid_group_action_target_object'], array('STORAGE'));
             if (!$targetFolder) {
                 return;
             }
             if (empty($_POST['ID'])) {
                 return;
             }
             $ids = array();
             foreach ($_POST['ID'] as $targetId) {
                 /** @var Folder|File $object */
                 $object = BaseObject::loadById((int) $targetId);
                 if (!$object) {
                     continue;
                 }
                 $securityContext = $object->getStorage()->getCurrentUserSecurityContext();
                 if (!$object->canMove($securityContext, $targetFolder)) {
                     continue;
                 }
                 if ($object->moveTo($targetFolder, $userId, true)) {
                     $ids[] = 'hl-' . $object->getId();
                 }
             }
             $targetName = '';
             if ($targetFolder->getId() != $targetFolder->getStorage()->getRootObjectId()) {
                 $targetName = $targetFolder->getName();
             }
             LocalRedirect(Driver::getInstance()->getUrlManager()->getPathInListing($targetFolder) . $targetName . '#' . implode(',', $ids));
         } elseif ($_POST[$postAction] == 'copy' && !empty($_POST['grid_group_action_target_object'])) {
             /** @var Folder $targetFolder */
             $targetFolder = Folder::loadById((int) $_POST['grid_group_action_target_object'], array('STORAGE'));
             if (!$targetFolder) {
                 return;
             }
             if (empty($_POST['ID'])) {
                 return;
             }
             $ids = array();
             foreach ($_POST['ID'] as $targetId) {
                 /** @var Folder|File $object */
                 $object = BaseObject::loadById((int) $targetId, array('STORAGE'));
                 if (!$object) {
                     continue;
                 }
                 if (!$object->canRead($object->getStorage()->getCurrentUserSecurityContext())) {
                     continue;
                 }
                 if (!$targetFolder->canAdd($targetFolder->getStorage()->getCurrentUserSecurityContext())) {
                     continue;
                 }
                 $newObject = $object->copyTo($targetFolder, $userId, true);
                 if ($newObject) {
                     $ids[] = 'hl-' . $newObject->getId();
                 }
             }
             $targetName = '';
             if ($targetFolder->getId() != $targetFolder->getStorage()->getRootObjectId()) {
                 $targetName = $targetFolder->getName();
             }
             LocalRedirect(Driver::getInstance()->getUrlManager()->getPathInListing($targetFolder) . $targetName . '#' . implode(',', $ids));
         }
     }
 }
示例#6
0
 /**
  * Event listener which return url for resource by fields.
  * @param array $fields Fields from search module.
  * @return string
  */
 public static function onSearchGetUrl($fields)
 {
     if (!is_array($fields)) {
         return '';
     }
     if ($fields["MODULE_ID"] !== "disk" || substr($fields["URL"], 0, 1) !== "=") {
         return $fields["URL"];
     }
     parse_str(ltrim($fields["URL"], "="), $data);
     if (empty($data['ID'])) {
         return '';
     }
     $object = BaseObject::loadById($data['ID']);
     if (!$object) {
         return '';
     }
     $pathFileDetail = self::getDetailUrl($object);
     \CSearch::update($fields['ID'], array('URL' => $pathFileDetail));
     return $pathFileDetail;
 }
示例#7
0
 protected function processActionDelete()
 {
     $this->checkRequiredPostParams(array('objectId'));
     if ($this->errorCollection->hasErrors()) {
         $this->sendJsonErrorResponse();
     }
     /** @var Folder|File $object */
     $object = BaseObject::loadById((int) $this->request->getPost('objectId'), array('STORAGE'));
     if (!$object) {
         $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_FOLDER_LIST_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT)));
         $this->sendJsonErrorResponse();
     }
     if (!$object->canDelete($object->getStorage()->getCurrentUserSecurityContext())) {
         $this->sendJsonAccessDeniedResponse();
     }
     if ($object instanceof Folder) {
         if (!$object->deleteTree($this->getUser()->getId())) {
             $this->errorCollection->add($object->getErrors());
             $this->sendJsonErrorResponse();
         }
         $this->sendJsonSuccessResponse(array('message' => Loc::getMessage('DISK_FOLDER_ACTION_MESSAGE_FOLDER_DELETED')));
     }
     if (!$object->delete($this->getUser()->getId())) {
         $this->errorCollection->add($object->getErrors());
         $this->sendJsonErrorResponse();
     }
     $this->sendJsonSuccessResponse(array('message' => Loc::getMessage('DISK_FOLDER_ACTION_MESSAGE_FILE_DELETED')));
 }
示例#8
0
 /**
  * Returns real object of object.
  *
  * For example if object is link (@see FolderLink, @see FileLink), then method returns original object.
  * @return BaseObject|Folder|File
  */
 public function getRealObject()
 {
     if (!$this->isLink()) {
         return $this;
     }
     if (isset($this->realObject) && $this->realObjectId === $this->realObject->getId()) {
         return $this->realObject;
     }
     $this->realObject = BaseObject::loadById($this->realObjectId);
     return $this->realObject;
 }
示例#9
0
 protected function COPY($dest, $httpDestination, $overwrite, $delete = false)
 {
     /** @var CDavRequest $request */
     $request = $this->request;
     $v = $request->GetParameter('CONTENT_LENGTH');
     if (!empty($v)) {
         return "415 Unsupported media type";
     }
     //if (isset($httpDestination))
     //{
     //	return "502 bad gateway";
     //}
     $requestDocument = $request->GetXmlDocument();
     //todo откуда мы узнаем хранилище относительно которого вести поиск?
     /** @var Storage $storage */
     list($storage, $path) = $this->parsePath($request->getPath());
     $objectId = Driver::getInstance()->getUrlManager()->resolveObjectIdFromPath($storage, $path);
     if (!$objectId) {
         return '404 Not Found';
     }
     /** @var File|Folder $object */
     $object = BaseObject::loadById($objectId);
     if (!$object) {
         return '404 Not Found';
     }
     $securityContext = $object->getStorage()->getCurrentUserSecurityContext();
     if (!$object->canRead($securityContext)) {
         return '403 Forbidden';
     }
     list($destStorage, $poludest) = $this->parsePath($dest);
     if (!$destStorage) {
         return '404 Not Found';
     }
     $srcPath = GetDirPath(rtrim($path, '/'));
     $destPath = GetDirPath($poludest);
     if ($srcPath == $destPath) {
         if (!$object->canRename($securityContext)) {
             return '403 Forbidden';
         }
         if (!$object->rename(GetFileName($poludest))) {
             return '400 Bad Request';
         }
         return "201 Created";
     }
     //		$ret = $this->createFolderPath($destStorage, $poludest);
     //		if ($ret !== true)
     //			return $ret;
     $poludestExploded = explode('/', $poludest);
     $poludestFolderName = array_pop($poludestExploded);
     $targetObjectId = Driver::getInstance()->getUrlManager()->resolveObjectIdFromPath($destStorage, implode('/', $poludestExploded));
     if (!$targetObjectId) {
         return '404 Not Found';
     }
     /** @var File|Folder $folder */
     $folder = Folder::loadById($targetObjectId);
     if (!$targetObjectId) {
         return '404 Not Found';
     }
     if ($delete) {
         if (!$object->canMove($securityContext, $folder)) {
             return '403 Forbidden';
         }
     } else {
         if (!$folder->canAdd($folder->getStorage()->getCurrentUserSecurityContext())) {
             return '403 Forbidden';
         }
     }
     $opponent = false;
     if ($overwrite) {
         $opponent = BaseObject::getList(array('select' => array('ID'), 'filter' => array('NAME' => GetFileName($poludest), 'PARENT_ID' => $folder->getRealObjectId()), 'limit' => 1))->fetch();
         if ($opponent) {
             /** @var File|Folder $opponentObject */
             $opponentObject = BaseObject::loadById($opponent['ID']);
             if (!$opponentObject->canMarkDeleted($opponentObject->getStorage()->getCurrentUserSecurityContext())) {
                 return '403 Forbidden';
             }
             if (!$opponentObject->markDeleted($this->getUser()->getId())) {
                 return '400 Bad Request';
             }
         }
     }
     if ($delete) {
         if (!$object->moveTo($folder, $this->getUser()->getId(), true)) {
             return '400 Bad Request';
         }
     } else {
         if (!$object->copyTo($folder, $this->getUser()->getId(), true)) {
             return '400 Bad Request';
         }
     }
     if (GetFileName($poludest) != $object->getName()) {
         $object->rename(GetFileName($poludest));
     }
     return $opponent ? "201 Created" : "204 No Content";
 }