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); }
protected function processActionLoadItems() { $this->checkRequiredPostParams(array('FORM_TAB_TYPE', 'FORM_TAB_ID', 'FORM_PATH')); if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $dialogName = $this->request->getPost('FORM_NAME') ?: 'DiskFileDialog'; $typeStorage = strtolower($this->request->getPost('FORM_TAB_TYPE')); if (!in_array($typeStorage, array('user', 'common', 'group', 'cloud', 'recently_used'), true)) { $this->errorCollection->add(array(new Error("Invalid storage type {$typeStorage}"))); $this->sendJsonErrorResponse(); } $storageId = (int) $this->request->getPost('FORM_TAB_ID'); $path = $this->request->getPost('FORM_PATH'); $storage = null; if ($typeStorage === 'recently_used') { $this->sendJsonSuccessResponse(array('FORM_NAME' => $dialogName, 'FORM_ITEMS' => Driver::getInstance()->getRecentlyUsedManager()->getFileListByUser($this->getUser()->getId()), 'FORM_ITEMS_DISABLED' => array(), 'FORM_PATH' => $path, 'FORM_IBLOCK_ID' => 0)); } elseif ($typeStorage === 'cloud') { $documentHandlersManager = Driver::getInstance()->getDocumentHandlersManager(); $documentHandler = $documentHandlersManager->getHandlerByCode($this->request->getQuery('service')); if (!$documentHandler) { $this->errorCollection->add($documentHandlersManager->getErrors()); $this->sendJsonErrorResponse(); } if (!$documentHandler->checkAccessibleTokenService()) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_UF_CONTROLLER_ERROR_COULD_NOT_WORK_WITH_TOKEN_SERVICE', array('#NAME#' => $documentHandler->getName())), self::ERROR_COULD_NOT_WORK_WITH_TOKEN_SERVICE))); $this->errorCollection->add($documentHandler->getErrors()); $this->sendJsonErrorResponse(); } if (!$documentHandler->queryAccessToken()->hasAccessToken() || $documentHandler->isRequiredAuthorization()) { $this->sendNeedAuth($documentHandler->getUrlForAuthorizeInTokenService('opener')); } $itemsCloud = $this->listItemsCloud($documentHandler, $path); if ($itemsCloud === null && $documentHandler->isRequiredAuthorization()) { $this->sendNeedAuth($documentHandler->getUrlForAuthorizeInTokenService('opener')); } $this->sendJsonSuccessResponse(array('sortMode' => Internals\Grid\FolderListOptions::SORT_MODE_ORDINARY, 'FORM_NAME' => $dialogName, 'FORM_ITEMS' => $itemsCloud, 'FORM_ITEMS_DISABLED' => array(), 'FORM_PATH' => $path, 'FORM_IBLOCK_ID' => 0)); } else { $storage = $this->getStorageByType($typeStorage, $storageId); } if (!$storage) { $this->errorCollection->add(array(new Error('Could not find storage for current user'))); $this->sendJsonErrorResponse(); } $options = new Internals\Grid\FolderListOptions($storage); $this->sendJsonSuccessResponse(array('sortMode' => $options->getSortMode(), 'FORM_NAME' => $dialogName, 'FORM_ITEMS' => $this->listItems($storage, $path), 'FORM_ITEMS_DISABLED' => array(), 'FORM_PATH' => $path, 'FORM_IBLOCK_ID' => 0)); }