/** * @param string $key * @param DateTime $date */ public function restoreByDeletingNewerVersions($key, DateTime $date) { $versions = $this->getVersions($key); $versionsToDelete = Functional\select($versions, function (CMService_AwsS3Versioning_Response_Version $version) use($key, $date) { $isExactKeyMatch = $key === $version->getKey(); $isModifiedAfter = $date < $version->getLastModified(); return $isExactKeyMatch && $isModifiedAfter; }); $this->_streamOutput->writeln('Restoring `' . $key . '` - deleting ' . count($versionsToDelete) . ' versions...'); if (count($versionsToDelete) > 0) { $objectsData = Functional\map($versionsToDelete, function (CMService_AwsS3Versioning_Response_Version $version) { return array('Key' => $version->getKey(), 'VersionId' => $version->getId()); }); $this->_client->deleteObjects(array('Bucket' => $this->_bucket, 'Objects' => $objectsData)); } }
/** * @param string $namespace */ private function _dbToFileMongo($namespace) { $mongo = CM_Service_Manager::getInstance()->getMongoDb(); $collectionList = \Functional\select($mongo->listCollectionNames(), function ($collection) use($namespace) { return preg_match('/^' . strtolower($namespace) . '_/', $collection); }); sort($collectionList); $optionsValid = ['unique', 'name', 'dropDups', 'sparse', 'expireAfterSeconds']; $indexes = []; foreach ($collectionList as $collection) { $indexList = $mongo->getIndexInfo($collection); foreach ($indexList as $indexInfo) { $key = $indexInfo['key']; $options = array_intersect_key($indexInfo, array_flip($optionsValid)); $indexes[$collection][] = ['key' => $key, 'options' => $options]; } } $dump = CM_Params::jsonEncode($indexes, true); $dirPath = CM_Util::getModulePath($namespace) . '/resources/mongo/'; CM_File::getFilesystemDefault()->ensureDirectory($dirPath); CM_File::create($dirPath . 'collections.json', $dump); }