/** * Search re-index handler. * @param array $nextStepData Array with data about step. * @param null $searchObject Search object. * @param string $method Method. * @return array|bool */ public static function onSearchReindex($nextStepData = array(), $searchObject = null, $method = "") { $result = array(); $filter = array('!PARENT_ID' => null); if (isset($nextStepData['MODULE']) && $nextStepData['MODULE'] === 'disk' && !empty($nextStepData['ID'])) { $filter['>ID'] = self::getObjectIdFromItemId($nextStepData['ID']); } else { $filter['>ID'] = 0; } static $self = null; if ($self === null) { $self = Driver::getInstance()->getIndexManager(); } $query = BaseObject::getList(array('filter' => $filter, 'order' => array('ID' => 'ASC'))); while ($fileData = $query->fetch()) { /** @var BaseObject $object */ $object = BaseObject::buildFromArray($fileData); if (!$object->getStorage()) { continue; } $searchData = array('ID' => self::getItemId($object), 'LAST_MODIFIED' => $object->getUpdateTime() ?: $object->getCreateTime(), 'TITLE' => $object->getName(), 'PARAM1' => $object->getStorageId(), 'PARAM2' => $object->getParentId(), 'SITE_ID' => $object->getStorage()->getSiteId() ?: SITE_ID, 'URL' => self::getDetailUrl($object), 'PERMISSIONS' => $self->getSimpleRights($object), 'BODY' => $self->getObjectContent($object)); if ($searchObject) { $indexResult = call_user_func(array($searchObject, $method), $searchData); if (!$indexResult) { return $searchData["ID"]; } } else { $result[] = $searchData; } } if ($searchObject) { return false; } return $result; }
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"; }