예제 #1
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);
 }
예제 #2
0
 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));
 }