public async Task <ActionResult <ItemsResult> > AddItems([FromBody] ItemsAddRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId,
                                                            Types.SitePermissions.SettingsStyleRelatedField))
            {
                return(Unauthorized());
            }

            foreach (var item in request.Items)
            {
                var itemInfo = new RelatedFieldItem
                {
                    Id             = 0,
                    SiteId         = request.SiteId,
                    RelatedFieldId = request.RelatedFieldId,
                    Label          = item.Key,
                    Value          = item.Value,
                    ParentId       = request.ParentId
                };
                await _relatedFieldItemRepository.InsertAsync(itemInfo);
            }

            await _authManager.AddAdminLogAsync("批量添加联动字段项");

            var tree = await _relatedFieldItemRepository.GetCascadesAsync(request.SiteId, request.RelatedFieldId,
                                                                          0);

            return(new ItemsResult
            {
                Tree = tree
            });
        }
Ejemplo n.º 2
0
        public async Task <int> InsertAsync(RelatedFieldItem info)
        {
            info.Taxis = await GetMaxTaxisAsync(info.SiteId, info.ParentId) + 1;

            info.Id = await _repository.InsertAsync(info, Q.CachingRemove(GetCacheKey(info.SiteId)));

            return(info.Id);
        }
Ejemplo n.º 3
0
        public async Task ImportRelatedFieldAsync(bool overwrite)
        {
            if (!DirectoryUtils.IsDirectoryExists(_directoryPath))
            {
                return;
            }
            var filePaths = DirectoryUtils.GetFilePaths(_directoryPath);

            foreach (var filePath in filePaths)
            {
                var feed = AtomFeed.Load(FileUtils.GetFileStreamReadOnly(filePath));

                var title = AtomUtility.GetDcElementContent(feed.AdditionalElements, new List <string> {
                    nameof(RelatedField.Title), "RelatedFieldName"
                });

                var relatedFieldInfo = new RelatedField
                {
                    Id     = 0,
                    Title  = title,
                    SiteId = _site.Id
                };

                var srcRelatedFieldInfo = await _databaseManager.RelatedFieldRepository.GetRelatedFieldAsync(_site.Id, title);

                if (srcRelatedFieldInfo != null)
                {
                    if (overwrite)
                    {
                        await _databaseManager.RelatedFieldRepository.DeleteAsync(srcRelatedFieldInfo.Id);
                    }
                    else
                    {
                        relatedFieldInfo.Title = await _databaseManager.RelatedFieldRepository.GetImportTitleAsync(_site.Id, relatedFieldInfo.Title);
                    }
                }

                var relatedFieldId = await _databaseManager.RelatedFieldRepository.InsertAsync(relatedFieldInfo);

                var lastInertedLevel     = 1;
                var lastInsertedParentId = 0;
                var lastInsertedId       = 0;
                foreach (AtomEntry entry in feed.Entries)
                {
                    var itemName  = AtomUtility.GetDcElementContent(entry.AdditionalElements, nameof(RelatedFieldItem.Label));
                    var itemValue = AtomUtility.GetDcElementContent(entry.AdditionalElements, nameof(RelatedFieldItem.Value));
                    var level     = TranslateUtils.ToInt(AtomUtility.GetDcElementContent(entry.AdditionalElements, "Level"));
                    var parentId  = 0;
                    if (level > 1)
                    {
                        parentId = level != lastInertedLevel ? lastInsertedId : lastInsertedParentId;
                    }

                    var relatedFieldItemInfo = new RelatedFieldItem
                    {
                        Id             = 0,
                        RelatedFieldId = relatedFieldId,
                        Label          = itemName,
                        Value          = itemValue,
                        ParentId       = parentId,
                        Taxis          = 0
                    };
                    lastInsertedId = await _databaseManager.RelatedFieldItemRepository.InsertAsync(relatedFieldItemInfo);

                    lastInsertedParentId = parentId;
                    lastInertedLevel     = level;
                }
            }
        }
Ejemplo n.º 4
0
        private static async Task AddAtomEntryAsync(IDatabaseManager databaseManager, AtomFeed feed, int siteId, RelatedFieldItem relatedFieldItem, int level)
        {
            var entry = AtomUtility.GetEmptyEntry();

            AtomUtility.AddDcElement(entry.AdditionalElements, new List <string> {
                nameof(RelatedFieldItem.Id), "ID"
            }, relatedFieldItem.Id.ToString());
            AtomUtility.AddDcElement(entry.AdditionalElements, new List <string> {
                nameof(RelatedFieldItem.RelatedFieldId), "RelatedFieldID"
            }, relatedFieldItem.RelatedFieldId.ToString());
            AtomUtility.AddDcElement(entry.AdditionalElements, nameof(RelatedFieldItem.Label), relatedFieldItem.Label);
            AtomUtility.AddDcElement(entry.AdditionalElements, nameof(RelatedFieldItem.Value), relatedFieldItem.Value);
            AtomUtility.AddDcElement(entry.AdditionalElements, new List <string> {
                nameof(RelatedFieldItem.ParentId), "ParentID"
            }, relatedFieldItem.ParentId.ToString());
            AtomUtility.AddDcElement(entry.AdditionalElements, nameof(RelatedFieldItem.Taxis), relatedFieldItem.Taxis.ToString());
            AtomUtility.AddDcElement(entry.AdditionalElements, "Level", level.ToString());

            feed.Entries.Add(entry);

            var relatedFieldItemInfoList = await databaseManager.RelatedFieldItemRepository.GetRelatedFieldItemsAsync(siteId, relatedFieldItem.RelatedFieldId, relatedFieldItem.Id);

            foreach (var itemInfo in relatedFieldItemInfoList)
            {
                await AddAtomEntryAsync(databaseManager, feed, siteId, itemInfo, level + 1);
            }
        }
Ejemplo n.º 5
0
 public async Task <bool> UpdateAsync(RelatedFieldItem info)
 {
     return(await _repository.UpdateAsync(info, Q.CachingRemove(GetCacheKey(info.SiteId))));
 }