Exemple #1
0
 internal static string GetRelationsBetweenPages(string relationsBetweenTemplates)
 {
     using (var scope = new QPConnectionScope())
     {
         var rows = Common.GetRelationsBetweenPages(scope.DbConnection, relationsBetweenTemplates);
         return(MultistepActionHelper.GetXmlFromDataRows(rows, "page"));
     }
 }
Exemple #2
0
 internal static void CopyContentConstraints(string relationsBetweenContentsXml, out string result)
 {
     using (new QPConnectionScope())
     {
         var rows = Common.CopyContentConstraints(QPConnectionScope.Current.DbConnection, relationsBetweenContentsXml);
         result = MultistepActionHelper.GetXmlFromDataRows(rows, "constraint");
     }
 }
 internal static string GetRelationsBetweenTemplates(int sourceSiteId, int destinationSiteId, int templateIdNew)
 {
     using (var scope = new QPConnectionScope())
     {
         var rows = Common.GetRelationsBetweenTemplates(scope.DbConnection, sourceSiteId, destinationSiteId, templateIdNew);
         return(MultistepActionHelper.GetXmlFromDataRows(rows, "template"));
     }
 }
Exemple #4
0
 internal static void CopySiteTemplateObjectFormats(string relationsBetweenObjects, out string result)
 {
     using (var scope = new QPConnectionScope())
     {
         var rows = Common.CopySiteTemplateObjectFormats(scope.DbConnection, relationsBetweenObjects);
         result = MultistepActionHelper.GetXmlFromDataRows(rows, "object_format");
     }
 }
Exemple #5
0
 internal static void CopyContentLinks(int sourceSiteId, int destinationSiteId, out string result)
 {
     using (new QPConnectionScope())
     {
         var rows = Common.CopyContentLinks(QPConnectionScope.Current.DbConnection, sourceSiteId, destinationSiteId);
         result = MultistepActionHelper.GetXmlFromDataRows(rows, "oldlink", "newlink");
     }
 }
Exemple #6
0
 internal static string CopyFolders(int sourceSiteId, int destinationSiteId)
 {
     using (var scope = new QPConnectionScope())
     {
         var rows = Common.CopyFolders(sourceSiteId, destinationSiteId, scope.DbConnection);
         return(MultistepActionHelper.GetXmlFromDataRows(rows, "folder"));
     }
 }
Exemple #7
0
 internal static string GetRelationsBetweenAttributesXml(int sourceSiteId, int destinationSiteId, string contentIds, bool?forVirtualContents, bool byNewContents)
 {
     using (var scope = new QPConnectionScope())
     {
         var rows = Common.GetRelationsBetweenAttributes(scope.DbConnection, sourceSiteId, destinationSiteId, contentIds, forVirtualContents, byNewContents);
         return(MultistepActionHelper.GetXmlFromDataRows(rows, "attribute"));
     }
 }
Exemple #8
0
 internal static string GetRelationsBetweenLinks(int sourceSiteId, int destinationSiteId)
 {
     using (new QPConnectionScope())
     {
         var rows = Common.GetRelationsBetweenLinks(QPConnectionScope.Current.DbConnection, sourceSiteId, destinationSiteId);
         return(MultistepActionHelper.GetXmlFromDataRows(rows, "link"));
     }
 }
Exemple #9
0
        private string FormatFieldValue(DataRow article, string value, Field field, IReadOnlyDictionary <string, Dictionary <int, string> > valuesWithRelation)
        {
            if (value.Contains("\""))
            {
                value = value.Replace("\"", "\"\"");
            }

            if (field != null && !string.IsNullOrEmpty(value))
            {
                if (field.Type.DbType == DbType.String || field.Type.DbType == DbType.StringFixedLength)
                {
                    value = $"\"{value}\"";
                }
                else if (field.ExactType == FieldExactTypes.Boolean)
                {
                    value = MultistepActionHelper.BoolFormat(value);
                }
                else if (field.Type.DbType == DbType.Date || field.Type.DbType == DbType.DateTime || field.Type.DbType == DbType.DateTime2)
                {
                    value = MultistepActionHelper.DateCultureFormat(value, CultureInfo.CurrentCulture.Name, _settings.Culture);
                }
                else if ((field.Type.DbType == DbType.Double || field.Type.DbType == DbType.Decimal) && field.RelationType != RelationType.ManyToMany)
                {
                    value = MultistepActionHelper.NumericCultureFormat(value, CultureInfo.CurrentCulture.Name, _settings.Culture);
                    if (value.Contains(_settings.Delimiter))
                    {
                        value = $"\"{value}\"";
                    }
                }
            }

            if (field != null && (field.RelationType == RelationType.ManyToMany || field.RelationType == RelationType.ManyToOne))
            {
                value = string.Empty;
                var mapValue = field.RelationType == RelationType.ManyToMany ? field.LinkId.Value.ToString() : article["content_Item_id"] + "_" + field.Id;
                if (valuesWithRelation.TryGetValue(mapValue, out var mappings) && mappings.Any())
                {
                    var key = field.ContentId == _contentId ? IdentifierFieldName : string.Format(FieldNameHeaderTemplate, field.Content.Name, IdentifierFieldName);
                    if (int.TryParse(article[key].ToString(), out var id))
                    {
                        if (mappings.TryGetValue(id, out var items))
                        {
                            value = items.Replace(",", ";");
                        }
                    }
                }

                value = $"\"{value}\"";
            }

            if (string.IsNullOrEmpty(value) || value == "\"\"")
            {
                value = "NULL";
            }

            return(value);
        }
Exemple #10
0
        public void Process(int step, int itemsPerStep, out int processedItemsCount)
        {
            _csvLines     = _reader.Lines.Where(s => !s.Skip).Skip(step * itemsPerStep).Take(itemsPerStep);
            _titleHeaders = MultistepActionHelper.GetFileFields(_importSettings, _reader);

            InitFields();
            ConvertCsvLinesToArticles();
            WriteArticlesToDb();
            processedItemsCount = _csvLines.Count();
        }
Exemple #11
0
 public void GetStepCountTest()
 {
     Assert.AreEqual(0, MultistepActionHelper.GetStepCount(0, 20));
     Assert.AreEqual(1, MultistepActionHelper.GetStepCount(1, 20));
     Assert.AreEqual(1, MultistepActionHelper.GetStepCount(19, 20));
     Assert.AreEqual(1, MultistepActionHelper.GetStepCount(20, 20));
     Assert.AreEqual(2, MultistepActionHelper.GetStepCount(21, 20));
     Assert.AreEqual(5, MultistepActionHelper.GetStepCount(100, 20));
     Assert.AreEqual(6, MultistepActionHelper.GetStepCount(101, 20));
 }
Exemple #12
0
        public ActionResult FileFields(int parentId, int id, FormCollection collection)
        {
            var model = new ImportViewModel();

            TryUpdateModel(model);

            model.SetCorrespondingFieldName(collection);
            var settings = model.GetImportSettingsObject(parentId, id);

            return(Json(MultistepActionHelper.GetFileFields(settings, new FileReader(settings))));
        }
Exemple #13
0
        public static IEnumerable <DataRow> CopyContentsData(int sourceSiteId, int destinationSiteId, string contentsToCopy, int startFrom, int endBy)
        {
            var relBetweenContents = ContentRepository.GetRelationsBetweenContentsXml(sourceSiteId, destinationSiteId, string.Empty);
            var relBetweenStatuses = ContentRepository.GetRelationsBetweenStatuses(sourceSiteId, destinationSiteId);

            var items           = ContentRepository.CopyContentItems(sourceSiteId, destinationSiteId, contentsToCopy, startFrom, endBy, relBetweenContents, relBetweenStatuses).ToList();
            var relBetweenItems = MultistepActionHelper.GetXmlFromDataRows(items, "item");

            ContentRepository.CopyContentItemSchedule(relBetweenContents);
            WorkflowRepository.CopyArticleWorkflowBind(sourceSiteId, destinationSiteId, relBetweenItems);
            ContentRepository.CopyContentItemAccess(relBetweenItems);

            var relBetweenAttributes = FieldRepository.GetRelationsBetweenAttributesXml(sourceSiteId, destinationSiteId, string.Empty, false, true);

            ContentRepository.UpdateContentData(relBetweenAttributes, relBetweenItems);
            return(items);
        }
Exemple #14
0
        public MultistepActionSettings SetupAction(int contentId, int fieldId)
        {
            if (HasAlreadyRun())
            {
                throw new ApplicationException(MultistepActionStrings.ActionHasAlreadyRun);
            }

            var flds = GetFields(fieldId);

            if (flds.Item1.BaseImageId != null)
            {
                var articleData = RecreateDynamicImagesRepository.GetDataToProcess(flds.Item1.BaseImageId.Value);
                var dataRows    = articleData as DataRow[] ?? articleData.ToArray();
                var context     = new RecreateDynamicImagesContext
                {
                    FieldId         = fieldId,
                    ContentId       = contentId,
                    ArticleData     = dataRows.Select(r => Tuple.Create(Converter.ToInt32(r.Field <decimal>("ID")), r.Field <string>("DATA"))).ToArray(),
                    ProcessedImages = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase)
                };

                HttpContext.Current.Session[HttpContextSession.RecreateDynamicImagesServiceProcessingContext] = context;

                var itemCount = dataRows.Length;
                var stepCount = MultistepActionHelper.GetStepCount(itemCount, ItemsPerStep);
                return(new MultistepActionSettings
                {
                    Stages = new[]
                    {
                        new MultistepStageSettings
                        {
                            Name = FieldStrings.RecreateDynamicImagesStageName,
                            StepCount = stepCount,
                            ItemCount = itemCount
                        }
                    }
                });
            }

            return(null);
        }
Exemple #15
0
        public MultistepActionSettings SetupAction(int contentId, int fieldId)
        {
            var field = FieldRepository.GetById(fieldId);

            if (field == null)
            {
                throw new ApplicationException(string.Format(FieldStrings.FieldNotFound, fieldId));
            }

            var contentItemIdsToProcess = FieldDefaultValueRepository.GetItemIdsToProcess(contentId, fieldId, field.DefaultValue, field.IsBlob, field.ExactType == FieldExactTypes.M2MRelation);
            var itemIdsToProcess        = contentItemIdsToProcess as int[] ?? contentItemIdsToProcess.ToArray();
            var itemCount = itemIdsToProcess.Length;
            var stepCount = MultistepActionHelper.GetStepCount(itemCount, ItemsPerStep);
            var context   = new FieldDefaultValueContext
            {
                ProcessedContentItemIds = itemIdsToProcess.ToArray(),
                ContentId       = contentId,
                FieldId         = fieldId,
                IsBlob          = field.IsBlob,
                IsM2M           = field.ExactType == FieldExactTypes.M2MRelation,
                DefaultArticles = field.DefaultArticleIds.ToArray(),
                Symmetric       = field.ContentLink.Symmetric
            };

            HttpContext.Current.Session[HttpContextSession.FieldDefaultValueServiceProcessingContext] = context;
            return(new MultistepActionSettings
            {
                Stages = new[]
                {
                    new MultistepStageSettings
                    {
                        Name = FieldStrings.ApplyDefaultValueStageName,
                        StepCount = stepCount,
                        ItemCount = itemCount
                    }
                }
            });
        }
Exemple #16
0
        private void FormatFieldValue(Field field, string value, ref FieldValue fieldDbValue)
        {
            switch (field.ExactType)
            {
            case FieldExactTypes.Numeric:
                fieldDbValue.Value = MultistepActionHelper.NumericCultureFormat(value, _importSettings.Culture, "en-US");
                break;

            case FieldExactTypes.Date:
                fieldDbValue.Value = MultistepActionHelper.DateCultureFormat(value, _importSettings.Culture, "en-US");
                break;

            case FieldExactTypes.Time:
                fieldDbValue.Value = MultistepActionHelper.DateCultureFormat(value, _importSettings.Culture, "en-US");
                break;

            case FieldExactTypes.DateTime:
                fieldDbValue.Value = MultistepActionHelper.DateCultureFormat(value, _importSettings.Culture, "en-US");
                break;

            case FieldExactTypes.O2MRelation:
                fieldDbValue.Value = MultistepActionHelper.O2MFormat(value);
                break;

            case FieldExactTypes.M2MRelation:
                fieldDbValue.NewRelatedItems = MultistepActionHelper.M2MFormat(value).ToArray();
                fieldDbValue.Value           = field.LinkId?.ToString();
                break;

            case FieldExactTypes.M2ORelation:
                break;

            default:
                fieldDbValue.Value = value;
                break;
            }
        }
Exemple #17
0
 public MultistepStageSettings GetStageSettings() => new MultistepStageSettings
 {
     ItemCount = ItemCount,
     StepCount = MultistepActionHelper.GetStepCount(ItemCount, ItemsPerStep),
     Name      = string.Format(ContentStrings.ClearContentStageName, ContentName ?? string.Empty)
 };
Exemple #18
0
 public MultistepStageSettings GetStageSettings() => new MultistepStageSettings
 {
     ItemCount = ContentsCount,
     StepCount = MultistepActionHelper.GetStepCount(ContentsCount, ItemsPerStep),
     Name      = string.Format(SiteStrings.CopySiteContents, SiteName ?? string.Empty)
 };
Exemple #19
0
 public MultistepStageSettings GetStageSettings() => new MultistepStageSettings
 {
     ItemCount = _itemCount,
     StepCount = MultistepActionHelper.GetStepCount(_itemCount, ItemsPerStep),
     Name      = SiteOrTemplate ? string.Format(SiteStrings.AssemblePagesStageName, AssemblingEntityName ?? string.Empty) : string.Format(TemplateStrings.AssemblePagesStageName, AssemblingEntityName ?? string.Empty)
 };
 public MultistepStageSettings GetStageSettings() => new MultistepStageSettings
 {
     ItemCount = _itemCount,
     StepCount = MultistepActionHelper.GetStepCount(_itemCount, ItemsPerStep),
     Name      = string.Format(ContentStrings.RebuildUserQueryStageName, ContentName ?? string.Empty)
 };
Exemple #21
0
        private void WriteFieldValues()
        {
            var articles = GetArticlesForExport(_settings.FieldsToExpandSettings);
            var aliases  = _settings.FieldsToExpandSettings.Select(n => n.Alias).ToArray();

            var fields          = _extensionContents.SelectMany(c => c.Fields).Concat(FieldRepository.GetFullList(_contentId)).ToList();
            var ids             = articles.AsEnumerable().Select(n => (int)n.Field <decimal>("content_item_id")).ToArray();
            var extensionIdsMap = _extensionContents.ToDictionary(c => c.Id, c => articles
                                                                  .AsEnumerable()
                                                                  .Select(n => n.Field <decimal?>(string.Format(FieldNameHeaderTemplate, c.Name, IdentifierFieldName)))
                                                                  .Where(n => n.HasValue)
                                                                  .Select(n => (int)n.Value)
                                                                  .ToArray()
                                                                  );

            if (articles.Any())
            {
                var dict = fields
                           .Where(n => n.ExactType == FieldExactTypes.M2MRelation && articles[0].Table.Columns.Contains(n.ContentId == _contentId ? n.Name : string.Format(FieldNameHeaderTemplate, n.Content.Name, n.Name)))
                           .Select(n => new { LinkId = n.LinkId.Value, n.ContentId })
                           .ToDictionary(n => n.LinkId, m => ArticleRepository.GetLinkedItemsMultiple(m.LinkId, m.ContentId == _contentId ? ids : extensionIdsMap[m.ContentId]));

                foreach (var article in articles)
                {
                    _sb.AppendFormat("{0}{1}", article["content_item_id"], _settings.Delimiter);
                    foreach (DataColumn column in article.Table.Columns)
                    {
                        var value = article[column.ColumnName].ToString();
                        var field = fields.FirstOrDefault(f => f.ContentId == _contentId ? f.Name == column.ColumnName : string.Format(FieldNameHeaderTemplate, f.Content.Name, f.Name) == column.ColumnName);
                        var alias = aliases.FirstOrDefault(n => aliases.Contains(column.ColumnName));
                        if (!string.IsNullOrEmpty(alias))
                        {
                            _sb.AppendFormat("{0}{1}", FormatFieldValue(value), _settings.Delimiter);
                        }
                        else if (field != null)
                        {
                            _sb.AppendFormat("{0}{1}", FormatFieldValue(article, value, field, dict), _settings.Delimiter);
                        }
                        else if (_extensionContents.Any(c => string.Format(FieldNameHeaderTemplate, c.Name, IdentifierFieldName) == column.ColumnName))
                        {
                            _sb.AppendFormat("{0}{1}", string.IsNullOrEmpty(value) ? "NULL" : value, _settings.Delimiter);
                        }
                    }

                    if (!_settings.ExcludeSystemFields)
                    {
                        foreach (var fieldValue in new[]
                        {
                            MultistepActionHelper.DateCultureFormat(article[FieldName.Created].ToString(), CultureInfo.CurrentCulture.Name, _settings.Culture),
                            MultistepActionHelper.DateCultureFormat(article[FieldName.Modified].ToString(), CultureInfo.CurrentCulture.Name, _settings.Culture),
                            article[FieldName.UniqueId].ToString(),
                            "0"
                        })
                        {
                            _sb.Append(fieldValue);
                            _sb.Append(_settings.Delimiter);
                        }
                    }

                    _sb.Append(_settings.LineSeparator);
                }
            }

            using (var sw = new StreamWriter(_settings.UploadFilePath, true, Encoding.GetEncoding(_settings.Encoding)))
            {
                sw.Write(_sb.ToString());
            }

            _processedItemsCount = articles.Count;
        }
 public MultistepStageSettings GetStageSettings() => new MultistepStageSettings
 {
     ItemCount = SiteArticlesCount,
     StepCount = MultistepActionHelper.GetStepCount(SiteArticlesCount, ItemsPerStep),
     Name      = SiteStrings.CopySiteUpdateArticleIds
 };
 public MultistepStageSettings GetStageSettings() => new MultistepStageSettings
 {
     ItemCount = ItemCount,
     StepCount = MultistepActionHelper.GetStepCount(ItemCount, ItemsPerStep),
     Name      = MultistepActionStrings.ResourceManager.GetString(GetType().Name)
 };
 public MultistepStageSettings GetStageSettings() => new MultistepStageSettings
 {
     ItemCount = ItemCount,
     StepCount = MultistepActionHelper.GetStepCount(ItemCount, ItemsPerStep),
     Name      = ContentStrings.ImportArticles
 };
Exemple #25
0
        private void WriteFieldValues()
        {
            var articles = GetArticlesForExport(_settings.FieldsToExpandSettings);
            var aliases  = _settings.FieldsToExpandSettings.Select(n => n.Alias).ToArray();

            var fields          = _extensionContents.SelectMany(c => c.Fields).Concat(FieldRepository.GetFullList(_contentId)).ToList();
            var ids             = articles.AsEnumerable().Select(n => (int)n.Field <decimal>("content_item_id")).ToArray();
            var extensionIdsMap = _extensionContents.ToDictionary(c => c.Id, c => articles
                                                                  .AsEnumerable()
                                                                  .Select(n => n.Field <decimal?>(string.Format(FieldNameHeaderTemplate, c.Name, IdentifierFieldName)))
                                                                  .Where(n => n.HasValue)
                                                                  .Select(n => (int)n.Value)
                                                                  .ToArray()
                                                                  );

            if (articles.Any())
            {
                var dict = fields
                           .Where(n => n.ExactType == FieldExactTypes.M2MRelation && articles[0].Table.Columns.Contains(n.ContentId == _contentId ? n.Name : string.Format(FieldNameHeaderTemplate, n.Content.Name, n.Name)))
                           .Select(n => new { LinkId = n.LinkId.Value, n.ContentId })
                           .ToDictionary(n => n.LinkId.ToString(), m => ArticleRepository.GetLinkedItemsMultiple(m.LinkId, m.ContentId == _contentId ? ids : extensionIdsMap[m.ContentId], true));

                var m2oFields = fields.Where(w => w.ExactType == FieldExactTypes.M2ORelation).ToArray();
                foreach (var field in m2oFields)
                {
                    var m2ODisplayFieldName = ContentRepository.GetTitleName(field.BackRelation.ContentId);
                    var m2OValues           = ArticleRepository.GetM2OValues(articles.AsEnumerable().Select(n => (int)n.Field <decimal>("content_item_id")).ToList(),
                                                                             field.BackRelation.ContentId,
                                                                             field.Id,
                                                                             field.BackRelation.Name,
                                                                             m2ODisplayFieldName);

                    foreach (var value in m2OValues)
                    {
                        var key = value.Key.Item1 + "_" + value.Key.Item2;
                        dict.Add(key, new Dictionary <int, string>()
                        {
                            { value.Key.Item1, string.Join(",", value.Value) }
                        });
                    }
                }

                foreach (var article in articles)
                {
                    _sb.Append(_contentId);
                    _sb.Append(_settings.Delimiter);
                    _sb.AppendFormat("{0}{1}", article["content_item_id"], _settings.Delimiter);
                    foreach (DataColumn column in article.Table.Columns)
                    {
                        var value = article[column.ColumnName].ToString();
                        var field = fields.FirstOrDefault(f => f.ContentId == _contentId
                            ? string.Equals(f.Name, column.ColumnName, StringComparison.InvariantCultureIgnoreCase)
                            : string.Equals(string.Format(FieldNameHeaderTemplate, f.Content.Name, f.Name), column.ColumnName, StringComparison.InvariantCultureIgnoreCase));
                        var alias = aliases.FirstOrDefault(n => aliases.Contains(column.ColumnName, StringComparer.InvariantCultureIgnoreCase));
                        if (!string.IsNullOrEmpty(alias))
                        {
                            _sb.AppendFormat("{0}{1}", FormatFieldValue(value), _settings.Delimiter);
                        }
                        else if (field != null)
                        {
                            _sb.AppendFormat("{0}{1}", FormatFieldValue(article, value, field, dict), _settings.Delimiter);
                        }
                        else if (_extensionContents.Any(c => string.Equals(string.Format(FieldNameHeaderTemplate, c.Name, IdentifierFieldName), column.ColumnName, StringComparison.InvariantCultureIgnoreCase)))
                        {
                            _sb.AppendFormat("{0}{1}", string.IsNullOrEmpty(value) ? "NULL" : value, _settings.Delimiter);
                        }
                    }

                    if (!_settings.ExcludeSystemFields)
                    {
                        foreach (var fieldValue in new[]
                        {
                            MultistepActionHelper.DateCultureFormat(
                                article[FieldName.Created].ToString(), CultureInfo.CurrentCulture.Name, _settings.Culture),
                            MultistepActionHelper.DateCultureFormat(
                                article[FieldName.Modified].ToString(), CultureInfo.CurrentCulture.Name, _settings.Culture
                                ),
                            article[FieldName.UniqueId].ToString(),
                            "0"
                        })
                        {
                            _sb.Append(fieldValue);
                            _sb.Append(_settings.Delimiter);
                        }
                    }

                    _sb.Append(_settings.LineSeparator);
                }
            }

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            using (var sw = new StreamWriter(_settings.UploadFilePath, true, Encoding.GetEncoding(_settings.Encoding)))
            {
                sw.Write(_sb.ToString());
            }

            _processedItemsCount = articles.Count;
        }
 public MultistepStageSettings GetStageSettings() => new MultistepStageSettings
 {
     ItemCount = ItemCount,
     StepCount = MultistepActionHelper.GetStepCount(ItemCount, ITEMS_PER_STEP),
     Name      = string.Format(SiteStrings.RemoveSiteContentsStageName, SiteName ?? "")
 };