コード例 #1
0
        public CultureGroupDetailsViewModel GetModules(string culture)
        {
            var model = new CultureGroupDetailsViewModel {
                Culture = culture
            };
            var session = _sessionLocator.For(typeof(LocalizableStringRecord));
            var paths   = session.CreateSQLQuery(
                string.Format(@"  SELECT Localizable.Path,
                    COUNT(Localizable.Id) AS TotalCount,
                    COUNT(Translation.Id) AS TranslatedCount
                FROM {0}Q42_DbTranslations_LocalizableStringRecord AS Localizable
                LEFT OUTER JOIN {0}Q42_DbTranslations_TranslationRecord AS Translation
                    ON Localizable.Id = Translation.LocalizableStringRecord_id
                    AND Translation.Culture = :culture
                GROUP BY Localizable.Path
                ORDER BY Localizable.Path", DataTablePrefix()))
                          .AddScalar("Path", NHibernateUtil.String)
                          .AddScalar("TotalCount", NHibernateUtil.Int32)
                          .AddScalar("TranslatedCount", NHibernateUtil.Int32)
                          .SetParameter("culture", culture);

            model.Groups = paths.List <object[]>()
                           .Select(t => new CultureGroupDetailsViewModel.TranslationGroup
            {
                Path             = (string)t[0],
                TotalCount       = (int)t[1],
                TranslationCount = (int)t[2],
            }).ToList();
            return(model);
        }
コード例 #2
0
        private IQuery GetDeletedVersionsQuery(IEnumerable <int> contentItemIds = null)
        {
            var session = _sessionLocator.For(typeof(ContentItemVersionRecord));

            // Select only the highest versions where both Published and Latest are false.
            var select =
                "select max(ContentItemVersionRecord.Id), ContentItemVersionRecord.ContentItemRecord.Id, max(ContentItemVersionRecord.Number) " +
                "from Orchard.ContentManagement.Records.ContentItemVersionRecord ContentItemVersionRecord ";

            var filter = contentItemIds != null ? "where ContentItemVersionRecord.ContentItemRecord.Id in (:ids) " : default(String);

            var group =
                "group by ContentItemVersionRecord.ContentItemRecord.Id " +
                "having max(cast(Latest as Int32)) = 0 and max(cast(Published as Int32)) = 0 ";

            var hql   = String.Concat(select, filter, group);
            var query = session.CreateQuery(hql);

            if (contentItemIds != null)
            {
                query.SetParameterList("ids", contentItemIds.ToArray());
            }

            return(query);
        }
コード例 #3
0
        public void Empty()
        {
            _sessionLocator.For(typeof(CombinedFileRecord)).CreateQuery("DELETE FROM " + typeof(CombinedFileRecord).FullName).ExecuteUpdate();

            if (_storageProvider.FolderExists(RootPath))
            {
                _storageProvider.DeleteFolder(RootPath);
            }

            _combinatorEventHandler.CacheEmptied();
        }
コード例 #4
0
        public CultureDetailsViewModel GetCultureDetailsViewModel(string culture)
        {
            var model = new CultureDetailsViewModel {
                Culture = culture
            };
            var session     = _sessionLocator.For(typeof(LocalizableStringRecord));
            var query       = session.CreateQuery(string.Format(@"
                    select s
                    from {0}Q42.DbTranslations.Models.LocalizableStringRecord as s fetch all properties
                    order by s.Path", DataTablePrefix()));
            var currentPath = "";
            var group       = default(CultureDetailsViewModel.TranslationGroupViewModel);

            foreach (LocalizableStringRecord s in query.Enumerable())
            {
                if (s.Path != currentPath)
                {
                    group = new CultureDetailsViewModel.TranslationGroupViewModel {
                        Path = String.Format(s.Path, culture)
                    };
                    if (!group.Path.Contains(culture))
                    {
                        throw new Exception("Something went wrong: the culture is not included in the path.");
                    }
                    model.Groups.Add(group);
                    currentPath = s.Path;
                }
                if (group != null)
                {
                    var translation = s.Translations.Where(t => t.Culture == culture).FirstOrDefault();
                    group.Translations.Add(new CultureDetailsViewModel.TranslationViewModel {
                        Context        = s.Context,
                        Key            = s.StringKey,
                        OriginalString = s.OriginalLanguageString,
                        LocalString    = translation != null ? translation.Value : null
                    });
                }
            }

            return(model);
        }
コード例 #5
0
        public DefaultDataMigrationInterpreter(
            ShellSettings shellSettings,
            ILogger logger,
            ISessionLocator sessionLocator,
            ISessionFactoryHolder sessionFactoryHolder)
        {
            _shellSettings        = shellSettings;
            _commandInterpreters  = new List <ICommandInterpreter>();
            _session              = sessionLocator.For(typeof(DefaultDataMigrationInterpreter));
            _sqlStatements        = new List <string>();
            _sessionFactoryHolder = sessionFactoryHolder;

            Logger = logger;
            var configuration = _sessionFactoryHolder.GetConfiguration();

            _dialect = Dialect.GetDialect(configuration.Properties);
        }
コード例 #6
0
        private void RunPendingStatements()
        {
            var session    = _sessionLocator.For(typeof(ContentItemRecord));
            var connection = session.Connection;

            foreach (var sqlStatement in _sqlStatements)
            {
                Logger.Debug(sqlStatement);
                using (var command = connection.CreateCommand()) {
                    command.CommandText = sqlStatement;
                    command.ExecuteNonQuery();
                }

                _reportsCoordinator.Information("Data Migration", String.Format("Executing SQL Query: {0}", sqlStatement));
            }

            _sqlStatements.Clear();
        }
コード例 #7
0
        private void RunPendingStatements()
        {
            var session = _sessionLocator.For(typeof(DataMigrationRecord));

            try
            {
                foreach (var sqlStatement in _sqlStatements)
                {
                    //Logger.Debug(sqlStatement);


                    using (var command = session.Connection.CreateCommand())
                    {
                        command.CommandText = sqlStatement;
                        session.Transaction.Enlist(command);
                        command.ExecuteNonQuery();
                    }
                }
            }
            finally
            {
                _sqlStatements.Clear();
            }
        }
コード例 #8
0
        private void RunPendingStatements()
        {
            var session = _sessionLocator.For(typeof(IUser));

            try {
                foreach (var sqlStatement in _sqlStatements)
                {
                    Logger.Debug(sqlStatement);

                    using (var command = session.Connection.CreateCommand())
                    {
                        command.CommandText = sqlStatement;
                        session.Transaction.Enlist(command);
                        command.ExecuteNonQuery();
                    }

                    _reportsCoordinator.Information("Data Migration", String.Format("Executing SQL Query: {0}", sqlStatement));
                }
            }
            finally
            {
                _sqlStatements.Clear();
            }
        }
コード例 #9
0
        public void Process(int commentsPartId)
        {
            var commentsPart = _contentManager.Get <CommentsPart>(commentsPartId);

            if (commentsPart == null)
            {
                return;
            }

            var common = commentsPart.As <CommonPart>();

            if (common == null)
            {
                return;
            }

            var container = common.Container;

            if (container == null)
            {
                return;
            }

            var containerComments = container.As <ContainerCommentsCountPart>();

            if (containerComments == null)
            {
                return;
            }

            var session = _sessionLocator.For(typeof(object));

            var q = session.CreateQuery(
                "select SUM(comments.CommentsCount) " +
                "from Orchard.ContentManagement.Records.ContentItemVersionRecord civ " +
                "join civ.ContentItemRecord ci " +
                "join ci.CommonPartRecord common " +
                "join ci.CommentsPartRecord comments " +
                "where common.Container = :containerid"
                );

            q.SetParameter("containerid", container.Id);
            var list  = q.List();
            var count = (long)list[0];

            containerComments.Count = Convert.ToInt32(count);

            var pendingQuery = session.CreateQuery(@"select count(comment.Id)
                from Orchard.ContentManagement.Records.ContentItemVersionRecord civ
                join civ.ContentItemRecord ci 
                join ci.CommentPartRecord comment
                join comment.CommentsPartRecord comments
                join comments.ContentItemRecord cicomment
                join cicomment.CommonPartRecord common 
                where comment.Status = 'Pending' and common.Container = :containerid"
                                                   );

            pendingQuery.SetParameter("containerid", container.Id);
            var pendingList  = pendingQuery.List();
            var pendingCount = (long)pendingList[0];

            containerComments.PendingCount = Convert.ToInt32(pendingCount);
        }
コード例 #10
0
ファイル: QueryService.cs プロジェクト: showmap/smartwalk
        // ReSharper disable CoVariantArrayConversion
        private object[] ExecuteSelectQuery(
            RequestSelect select,
            string[] storages,
            IDictionary <string, object[]> results)
        {
            if (select.From == null)
            {
                throw new InvalidExpressionException(Localization.SelectFromCantBeNull);
            }

            if (select.From.EqualsIgnoreCase(RequestSelectFromTables.EventMetadata))
            {
                var queryable = GenericQueryFactory.CreateQuery(_eventMetadataRepository.Table, select, results);
                var records   = queryable
                                .Where(r => !r.IsDeleted && r.Status == (byte)EventStatus.Public)
                                .OrderBy(select)
                                .Take(DefaultEventsLimit)
                                .ToArray();
                var dataContracts = records
                                    .Select(rec => DataContractsFactory.CreateDataContract(rec, select.Fields, storages,
                                                                                           _storageProvider, select.PictureSize, _imageProfileManager))
                                    .ToArray();

                return(dataContracts);
            }

            if (select.From.EqualsIgnoreCase(RequestSelectFromTables.GroupedEventMetadata))
            {
                var session  = _sessionLocator.For(typeof(EventMetadataRecord));
                var sqlQuery = GroupedEventsQueryFactory.CreateQuery(
                    session,
                    select.AppendDefaultWhere(),
                    results);
                var records       = sqlQuery.List <EventMetadataRecord>();
                var dataContracts = records
                                    .Select(rec => DataContractsFactory.CreateDataContract(rec, select.Fields, storages,
                                                                                           _storageProvider, select.PictureSize, _imageProfileManager))
                                    .ToArray();
                return(dataContracts);
            }

            if (select.From.EqualsIgnoreCase(RequestSelectFromTables.Entity))
            {
                var queryable = GenericQueryFactory.CreateQuery(_entityRepository.Table, select, results);
                var records   = queryable
                                .Where(r => !r.IsDeleted)
                                .OrderBy(select)
                                .Take(DefaultEntitiesLimit)
                                .ToArray();
                var dataContracts = records
                                    .Select(rec => DataContractsFactory.CreateDataContract(rec, select.Fields,
                                                                                           _storageProvider, select.PictureSize, _imageProfileManager))
                                    .ToArray();
                return(dataContracts);
            }

            if (select.From.EqualsIgnoreCase(RequestSelectFromTables.EventVenueDetail))
            {
                var queryable = GenericQueryFactory.CreateQuery(_eventEntityDetailRepository.Table, select, results);
                var records   = queryable
                                .Where(r => !r.IsDeleted)
                                .OrderBy(select)
                                .Take(DefaultEntitiesLimit)
                                .ToArray();
                var dataContracts = records
                                    .Select(rec => DataContractsFactory.CreateDataContract(rec, select.Fields, storages))
                                    .ToArray();
                return(dataContracts);
            }

            if (select.From.EqualsIgnoreCase(RequestSelectFromTables.Show))
            {
                var queryable = GenericQueryFactory.CreateQuery(_showRepository.Table, select, results);
                var records   = queryable
                                .Where(r => !r.IsDeleted)
                                .OrderBy(select)
                                .Take(DefaultShowsLimit)
                                .ToArray();
                var dataContracts = records
                                    .Select(rec => DataContractsFactory.CreateDataContract(rec, select.Fields, storages,
                                                                                           _storageProvider, select.PictureSize, _imageProfileManager))
                                    .ToArray();
                return(dataContracts);
            }

            throw new InvalidExpressionException(string.Format(Localization.CantFindTable, select.From));
        }
コード例 #11
0
        private ActionResult IndexImplementation(string q, string resultType, int page)
        {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to list queries")))
            {
                return(new HttpUnauthorizedResult());
            }

            dynamic pagerShape  = null;
            long    countResult = -1;
            IEnumerable <IContent> contentResults = null;
            IEnumerable <object[]> recordResults  = null;

            try {
                var pager = new Pager(_siteService.GetSiteSettings(), new PagerParameters {
                    Page = page
                });

                if (!String.IsNullOrWhiteSpace(q))
                {
                    var query = _sessionLocator.For(typeof(object))
                                .CreateQuery(q);

                    var queryResults = _sessionLocator.For(typeof(object))
                                       .CreateQuery(q)
                                       .SetFirstResult((pager.Page - 1) * pager.PageSize)
                                       .SetMaxResults(pager.PageSize)
                                       .List();

                    if (queryResults.Any())
                    {
                        switch (resultType)
                        {
                        case "scalar":
                            countResult = (long)queryResults[0];
                            break;

                        case "records":
                            recordResults = queryResults.Cast <object[]>();
                            break;

                        default:
                            var ids = queryResults[0] is int
                                      ?queryResults.Cast <int>()
                                          : queryResults.Cast <object[]>().Select(r => (int)r[0]);

                            contentResults = _contentManager
                                             .GetMany <IContent>(ids, VersionOptions.Published, QueryHints.Empty);
                            break;
                        }
                    }
                    pagerShape = Shape.Pager(pager).TotalItemCount(query.List().Count);
                }
            }
            catch (QueryException qex) {
                NotifyOfException(qex);
            }
            catch (GenericADOException adoex) {
                NotifyOfException(adoex);
            }

            var viewModel = Shape.HqlPlayGroundIndexViewModel(
                Query: q,
                ResultType: String.IsNullOrWhiteSpace(resultType) ? "content" : resultType,
                Pager: pagerShape,
                CountResult: countResult,
                ContentResults: contentResults,
                RecordResults: recordResults
                );

            return(View("Index", viewModel));
        }
コード例 #12
0
ファイル: AssetUploader.cs プロジェクト: vard0/orchard.tan
        void IBackgroundTask.Sweep()
        {
            if (Monitor.TryEnter(_sweepLock))
            {
                try {
                    Logger.Debug("Beginning sweep.");

                    if (!_orchardServices.WorkContext.CurrentSite.As <CloudMediaSettingsPart>().IsValid())
                    {
                        Logger.Debug("Settings are invalid; going back to sleep.");
                        return;
                    }
                    var pendingAssetsQuery =
                        from asset in _assetManager.LoadPendingAssets()
                        where _fileManager.FileExists(asset.LocalTempFileName)
                        select asset;

                    var pendingAssets = pendingAssetsQuery.ToArray();

                    if (!pendingAssets.Any())
                    {
                        Logger.Debug("No pending assets with temp files on local machine were found; going back to sleep.");
                        return;
                    }

                    Logger.Information("Beginning processing of {0} pending assets.", pendingAssets.Length);

                    var uploadTasks                   = new List <Task>();
                    var progressInfoQueue             = new BlockingCollection <WamsUploadProgressInfo>();
                    var assetProgressMonikers         = new Dictionary <Guid, Asset>();
                    var assetCancellationTokenSources = new Dictionary <Guid, CancellationTokenSource>();

                    foreach (var pendingAsset in pendingAssets)
                    {
                        Logger.Information("Uploading asset of type {0} with name '{1}'...", pendingAsset.Record.Type, pendingAsset.Name);

                        var cloudVideoPart = _contentManager.Get <CloudVideoPart>(pendingAsset.Record.VideoContentItemId, VersionOptions.Latest);

                        pendingAsset.UploadState.Status        = AssetUploadStatus.Uploading;
                        pendingAsset.UploadState.StartedUtc    = _clock.UtcNow;
                        pendingAsset.UploadState.BytesComplete = 0;
                        pendingAsset.UploadState.CompletedUtc  = null;
                        _transactionManager.RequireNew();

                        var assetProgressMoniker         = Guid.NewGuid();
                        var assetCancellationTokenSource = new CancellationTokenSource();
                        assetProgressMonikers.Add(assetProgressMoniker, pendingAsset);
                        assetCancellationTokenSources.Add(assetProgressMoniker, assetCancellationTokenSource);

                        var localPendingAsset = pendingAsset;
                        var uploadTask        =
                            _wamsClient.UploadAssetAsync(_fileManager.GetPhysicalFilePath(pendingAsset.LocalTempFileName), progressInfoQueue.Add, assetProgressMoniker, assetCancellationTokenSource.Token)
                            .ContinueWith((previousTask) => {
                            if (!previousTask.IsCanceled)
                            {
                                try {
                                    var wamsAsset    = previousTask.Result;  // Throws if previous task was faulted.
                                    var wamsLocators = _wamsClient.CreateLocatorsAsync(wamsAsset, WamsLocatorCategory.Private).Result;

                                    localPendingAsset.WamsPrivateLocatorId      = wamsLocators.SasLocator.Id;
                                    localPendingAsset.WamsPrivateLocatorUrl     = wamsLocators.SasLocator.Url;
                                    localPendingAsset.WamsAssetId               = wamsAsset.Id;
                                    localPendingAsset.UploadState.Status        = AssetUploadStatus.Uploaded;
                                    localPendingAsset.UploadState.BytesComplete = localPendingAsset.LocalTempFileSize;
                                    localPendingAsset.UploadState.CompletedUtc  = _clock.UtcNow;
                                }
                                catch (Exception ex) {
                                    Logger.Error(ex, "Error while uploading asset of type {0} with name '{1}'. Resetting asset upload status to {2}.", localPendingAsset.Record.Type, localPendingAsset.Name, AssetUploadStatus.Pending);

                                    // Reset asset to pending status so it will be retried later.
                                    localPendingAsset.UploadState.CompletedUtc  = null;
                                    localPendingAsset.UploadState.BytesComplete = 0;
                                    localPendingAsset.UploadState.StartedUtc    = null;
                                    localPendingAsset.UploadState.Status        = AssetUploadStatus.Pending;

                                    return;
                                }
                            }

                            _fileManager.DeleteFile(localPendingAsset.LocalTempFileName);
                            localPendingAsset.LocalTempFileName = null;
                            localPendingAsset.LocalTempFileSize = null;
                            Logger.Information("Deleted temp file '{0}' for asset of type {1} with name '{2}'.", localPendingAsset.LocalTempFileName, localPendingAsset.Record.Type, localPendingAsset.Name);

                            if (previousTask.IsCanceled)
                            {
                                Logger.Information("Upload of asset of type {0} with name '{1}' was canceled.", localPendingAsset.Record.Type, localPendingAsset.Name);
                            }
                            else
                            {
                                try {
                                    if (cloudVideoPart.PublishOnUpload)
                                    {
                                        var remainingPendingAssetsQuery =
                                            from asset in cloudVideoPart.Assets
                                            where asset.UploadState.Status.IsAny(AssetUploadStatus.Pending, AssetUploadStatus.Uploading)
                                            select asset;

                                        if (!remainingPendingAssetsQuery.Any())
                                        {
                                            Logger.Information("No more remaining assets on cloud video item with ID {0}; publishing the item.", cloudVideoPart.Id);
                                            _contentManager.Publish(cloudVideoPart.ContentItem);
                                            cloudVideoPart.PublishOnUpload = false;
                                            Logger.Information("Published cloud video item with ID {0}.", cloudVideoPart.Id);
                                        }
                                    }
                                    else if (cloudVideoPart.ContentItem.IsPublished())
                                    {
                                        // Publish the asset.
                                        _assetManager.PublishAssetsFor(cloudVideoPart);
                                    }
                                }
                                catch (Exception ex) {
                                    Logger.Warning(ex, "Upload of asset of type {0} with name '{1}' was completed but an error occurred while publishing the cloud video item with ID {2} after upload.", localPendingAsset.Record.Type, localPendingAsset.Name, cloudVideoPart.Id);
                                }

                                Logger.Information("Upload of asset of type {0} with name '{1}' was successfully completed.", localPendingAsset.Record.Type, localPendingAsset.Name);
                            }
                        }, assetCancellationTokenSource.Token);

                        uploadTask.ConfigureAwait(continueOnCapturedContext: false);
                        uploadTasks.Add(uploadTask);
                    }

                    Task.WhenAll(uploadTasks).ContinueWith((previousTask) => progressInfoQueue.CompleteAdding());

                    var lastUpdateUtc = _clock.UtcNow;
                    foreach (var progressInfo in progressInfoQueue.GetConsumingEnumerable())
                    {
                        var progressAsset           = assetProgressMonikers[progressInfo.AssetMoniker];
                        var cancellationTokenSource = assetCancellationTokenSources[progressInfo.AssetMoniker];

                        // Check for cancellation (asset upload status was set to Canceled).
                        if (!cancellationTokenSource.IsCancellationRequested)
                        {
                            var session = _sessionLocator.For(typeof(AssetRecord));
                            session.Refresh(progressAsset.Record, LockMode.None);

                            if (progressAsset.UploadState.Status == AssetUploadStatus.Canceled)
                            {
                                Logger.Information("Cancellation request was detected for asset of type {0} with name '{1}'; cancelling upload...", progressAsset.Record.Type, progressAsset.Name);
                                cancellationTokenSource.Cancel();
                            }
                        }

                        // Don't flood the database with progress updates; limit it to every 5 seconds.
                        if ((_clock.UtcNow - lastUpdateUtc).Seconds >= 5)
                        {
                            progressAsset.UploadState.BytesComplete = progressInfo.Data.BytesTransferred;
                            _transactionManager.RequireNew();
                            lastUpdateUtc = _clock.UtcNow;
                        }

                        Logger.Debug("Uploading asset of type {0} with name '{1}'; {2}/{3} KB uploaded ({4}%) at {5} KB/sec.", progressAsset.Record.Type, progressAsset.Name, Convert.ToInt64(progressInfo.Data.BytesTransferred / 1024), Convert.ToInt64(progressInfo.Data.TotalBytesToTransfer / 1024), progressInfo.Data.ProgressPercentage, Convert.ToInt32(progressInfo.Data.TransferRateBytesPerSecond / 1024));
                    }
                }
                finally {
                    Logger.Debug("Ending sweep.");
                    Monitor.Exit(_sweepLock);
                }
            }
        }