示例#1
0
 protected function getSnapshotFromLinks(array $folderLinks, $version)
 {
     $response = array();
     $sc = $this->storage->getCurrentUserSecurityContext();
     foreach ($folderLinks as $link) {
         $modelLink = FolderLink::buildFromArray(array('ID' => $link['extra']['id'], 'NAME' => $link['name'], 'TYPE' => ObjectTable::TYPE_FOLDER, 'STORAGE_ID' => $link['extra']['iblockId'], 'REAL_OBJECT_ID' => $link['extra']['linkSectionId'], 'PARENT_ID' => $link['extra']['sectionId'], 'UPDATE_TIME' => DateTime::createFromTimestamp(CWebDavDiskDispatcher::convertFromExternalVersion($link['version'])), 'CREATED_BY' => $link['createdBy'], 'UPDATED_BY' => $link['updatedBy']));
         $filter = array('TYPE' => ObjectTable::TYPE_FILE);
         if ($version > 0 && self::compareVersion($link['version'], $version . '000')) {
             $filter['>=UPDATE_TIME'] = DateTime::createFromTimestamp($version);
         }
         $code = Folder::CODE_FOR_UPLOADED_FILES;
         $parameters = array('filter' => $filter);
         $parameters['runtime'] = array(new ExpressionField('NOT_UPLOADED', "CASE WHEN NOT EXISTS(SELECT 'x' FROM b_disk_object_path pp INNER JOIN b_disk_object oo ON oo.ID = pp.PARENT_ID AND oo.CODE = '{$code}' WHERE pp.OBJECT_ID = %1\$s AND pp.PARENT_ID = oo.ID AND oo.STORAGE_ID = %2\$s) THEN 1 ELSE 0 END", array('PARENT_ID', 'STORAGE_ID')));
         $parameters['filter']['NOT_UPLOADED'] = true;
         foreach ($modelLink->getDescendants($sc, $parameters) as $item) {
             /** @var File $item */
             $format = $this->formatFileToResponse($item);
             if ($format) {
                 $response[] = $format;
             }
         }
         unset($item);
     }
     return $response;
 }
示例#2
0
 public function getSnapshot($version = 0)
 {
     CTimeZone::Disable();
     /** @var \CWebDavIblock $webdav */
     $webdav = $this->init()->getWebDav();
     $webdav->disableUFSymlinkMode();
     $sections = $webdav->getSectionsTree(array('path' => '/', 'NON_DROPPED_SECTION' => true, 'SET_IS_SHARED' => true));
     $webdav->enableUFSymlinkMode();
     $realSections = $this->formatSectionsToResponse($sections, false);
     $elements = $this->getSymlinkSnapshot($version, $realSections);
     $elements = array_merge($elements, $this->filterSectionByVersion($realSections, $version));
     $webdav->disableUFSymlinkMode();
     $files = $this->searchFilesByPropFind(CWebDavDiskDispatcher::convertFromExternalVersion($version), '/', array('underSymlink' => false));
     $webdav->enableUFSymlinkMode();
     CTimeZone::Enable();
     return array_merge($elements, $files, $this->getDeletedElements($version));
 }