コード例 #1
0
        public void TagEditModel_commits_add_property_at_ViewModel()
        {
            // ARRANGE

            var model     = new Tag("tag", new Facet("facet", new FacetProperty("p")));
            var viewModel = new TagViewModel(model);

            Tag committed = null;
            var commitCB  = new Action <Tag>(t => committed = t);

            Tag reverted = null;
            var revertCB = new Action <Tag>(t => reverted = t);

            var editModel = new TagEditModel(viewModel, commitCB, revertCB);

            editModel.CreatePropertyCommand.Execute(null);

            // ACT

            editModel.CommitCommand.Execute(null);

            // ASSERT

            Assert.Equal(model, committed);
            Assert.Null(reverted);

            Assert.Equal(2, editModel.Properties.Count());
            Assert.Equal(2, viewModel.Properties.Count());
            Assert.Equal(2, model.Facet.Properties.Count());
            Assert.Equal("new property", editModel.Properties.ElementAt(1).Name);
            Assert.Equal("new property", viewModel.Properties.ElementAt(1).Name);
            Assert.Equal("new property", model.Facet.Properties.ElementAt(1).Name);
        }
コード例 #2
0
        public void TagEditModel_commits_remove_property_to_ViewModel()
        {
            // ARRANGE

            var model     = new Tag("tag", new Facet("facet", new FacetProperty("p")));
            var viewModel = new TagViewModel(model);

            Tag committed = null;
            var commitCB  = new Action <Tag>(t => committed = t);

            Tag reverted = null;
            var revertCB = new Action <Tag>(t => reverted = t);

            var editModel = new TagEditModel(viewModel, commitCB, revertCB);

            editModel.RemovePropertyCommand.Execute(editModel.Properties.Single());

            // ACT

            editModel.CommitCommand.Execute(null);

            // ASSERT

            Assert.Equal(model, committed);
            Assert.Null(reverted);

            Assert.Empty(editModel.Properties);
            Assert.Empty(viewModel.Properties);
            Assert.Empty(model.Facet.Properties);
        }
コード例 #3
0
ファイル: TagService.cs プロジェクト: weedkiller/GAsk
        /// <summary>
        /// 插入单个标签,如果该标签已存在,则抛出异常
        /// </summary>
        public async Task <Tag> CreateAsync(TagEditModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            if (string.IsNullOrWhiteSpace(model.Name))
            {
                throw new ModelException(nameof(model.Name), "标签名称不能为空");
            }
            model.Name = model.Name.Trim();
            using (var work = this.dbFactory.StartWork())
            {
                Tag oldTag = await work.Tag.GetByNameAsync(model.Name);

                if (oldTag != null)
                {
                    throw new ModelException(nameof(model.Name), "该标签名称已存在");
                }
                else
                {
                    Tag tag = new Tag
                    {
                        Id       = GuidHelper.CreateSequential(),
                        Name     = model.Name,
                        IsBest   = model.IsBest,
                        IsSystem = true
                    };
                    await work.Tag.InsertAsync(tag);

                    return(tag);
                }
            }
        }
コード例 #4
0
        public void TagEditModel_reverts_remove_property_at_ViewModel()
        {
            // ARRANGE

            var model     = new Tag("tag", new Facet("facet", new FacetProperty("p")));
            var viewModel = new TagViewModel(model);

            Tag reverted = null;
            var revertCB = new Action <Tag>(t => reverted = t);

            var editModel = new TagEditModel(viewModel, delegate { }, revertCB);

            editModel.CreatePropertyCommand.Execute(null);

            // ACT

            editModel.RollbackCommand.Execute(null);
            editModel.CommitCommand.Execute(null);

            // ASSERT

            Assert.Equal(model, reverted);

            Assert.Single(editModel.Properties);
            Assert.Single(viewModel.Properties);
            Assert.Single(model.Facet.Properties);
        }
コード例 #5
0
        public void TagEditModel_reverts_change_from_ViewModel()
        {
            // ARRANGE

            var p2        = new FacetProperty("p2");
            var model     = new Tag("tag", new Facet("facet", new FacetProperty("p")));
            var viewModel = new TagViewModel(model);

            Tag reverted = null;
            var revertCB = new Action <Tag>(t => reverted = t);

            var editModel = new TagEditModel(viewModel, delegate { }, revertCB);

            editModel.Name = "changed";

            // ACT

            editModel.RollbackCommand.Execute(null);
            editModel.CommitCommand.Execute(null);

            // ASSERT

            Assert.Equal(model, reverted);

            Assert.Equal("tag", editModel.Name);
            Assert.Equal("tag", viewModel.Name);
            Assert.Equal("tag", model.Name);
        }
コード例 #6
0
 public JsonResult SaveTag(TagEditModel model)
 {
     try
     {
         if (isValid(model) && ModelState.IsValid)
         {
             if (model.TagId > 0)
             {
                 Tag tag = _dataManager.Tag.GetTags().ToList().SingleOrDefault(x => x.TagId == model.TagId);
                 tag.Name        = model.Name;
                 tag.Description = model.Description;
                 tag.UrlSlug     = model.UrlSlug;
                 _dataManager.Tag.Save();
                 return(Json(tag));
             }
             else
             {
                 Tag tag = new Tag
                 {
                     Name        = model.Name,
                     Description = model.Description,
                     UrlSlug     = model.UrlSlug
                 };
                 _dataManager.Tag.InsertTag(tag);
                 _dataManager.Tag.Save();
                 return(Json(tag));
             }
         }
     }
     catch (DataException)
     {
         ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
     }
     return(Json(false));
 }
コード例 #7
0
        public async Task <ActionResult> Edit(Guid id)
        {
            Tag tag = await this.tagService.SingleByIdAsync(id);

            TagEditModel model = ObjectMapper.Map <Tag, TagEditModel>(tag);

            return(View(model));
        }
コード例 #8
0
        /// <summary>
        /// Maps a TagEditModel into a specific Tag
        /// </summary>
        /// <param name="item"></param>
        /// <param name="tag"></param>
        /// <returns></returns>
        public static Tag MapToModel(this TagEditModel item, Tag tag)
        {
            tag.Id       = item.Id;
            tag.VanityId = item.VanityId;
            tag.Name     = item.Name;
            tag.Slug     = item.Slug;

            return(tag);
        }
コード例 #9
0
 public IHttpActionResult Edit(TagEditModel model)
 {
     return(Command <EditTagCommand>(
                cmd =>
     {
         cmd.Model = model;
     },
                cmd => Ok(cmd.Model.Id)));
 }
コード例 #10
0
        public void Edit(TagEditModel model)
        {
            var entity = tagRepository.Get(model.Id);

            entity.Name    = model.Name;
            entity.IsValid = model.IsValid;

            tagRepository.Update(entity);
        }
コード例 #11
0
        public static IEnumerable <object[]> GetTestedInstances()
        {
            var tag = new TagEditModel(
                new TagViewModel(new Tag("tag", new Facet("facet", new FacetProperty("p")))), delegate { });

            yield return(new object[] { (Action <string>)(s => tag.Name = s), tag });

            yield return(new object[] { (Action <string>)(s => tag.Properties.Single().Name = s), tag.Properties.Single() });
        }
コード例 #12
0
        public async Task <IActionResult> CreateAsync(TagEditModel tagEditModel)
        {
            if (!ModelState.IsValid)
            {
                SetupMessages("Tags", PageType.Create, panelTitle: "Create a new tag");
                return(View("CreateEdit", tagEditModel));
            }

            return(await SaveAsync(tagEditModel, nameof(TagController.Create)));
        }
コード例 #13
0
 /// <summary>
 /// Maps a TagEditModel into a Tag
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 public static Tag MapToModel(this TagEditModel item)
 {
     return(new Tag
     {
         Id = item.Id,
         VanityId = item.VanityId,
         Name = item.Name,
         Slug = item.Slug,
     });
 }
コード例 #14
0
        public void Create(TagEditModel model)
        {
            var entity = Mapper.Map <Tag>(model);

            entity.CreatedByUserId = UserHelper.GetCurrentUserId();
            entity.CreatedDateTime = DateTime.Now;
            entity.IsValid         = true;

            tagRepository.Insert(entity);

            model.Id = entity.Id;
        }
コード例 #15
0
        public void TagEditModel_mirrors_ViewModel()
        {
            // ARRANGE

            var model     = new Tag("tag", new Facet("facet", new FacetProperty("p")));
            var viewModel = new TagViewModel(model);
            var editModel = new TagEditModel(viewModel, delegate { }, delegate { });

            // ASSERT

            Assert.Equal("tag", editModel.Name);
            Assert.Single(editModel.Properties);
        }
コード例 #16
0
        private async Task <IActionResult> SaveAsync(TagEditModel tagEditModel, string sender)
        {
            var returnValue = await _tagService.Save(tagEditModel);

            if (!returnValue.IsError)
            {
                TempData[MessageConstants.SuccessMessage] = returnValue.Message;
                return(RedirectToAction(nameof(TagController.Index)));
            }
            else
            {
                TempData[MessageConstants.DangerMessage] = returnValue.Message;
                return(RedirectToAction(sender));
            }
        }
コード例 #17
0
 public ActionResult EditTags(TagEditModel model)
 {
     if (ModelState.IsValid)
     {
         if (tagServices.EditTag(model))
         {
             return(RedirectToAction("Tags"));
         }
         return(HttpNotFound());
     }
     else
     {
         return(View(model));
     }
 }
コード例 #18
0
 public bool EditTag(TagEditModel model)
 {
     try
     {
         var entity = unitOfWork.TagRepo.Get(x => x.Id.Equals(model.TagId)).FirstOrDefault();
         entity.TagName  = model.TagName;
         entity.TagType  = model.TagType;
         entity.IsActive = model.IsActive;
         unitOfWork.TagRepo.Update(entity);
         return(unitOfWork.Save() > 0);
     }
     catch (Exception)
     {
         throw;
     }
 }
コード例 #19
0
 private bool isValid(TagEditModel tag)
 {
     if (tag.Name == null || (tag.Name.Length < 4 && tag.Name.Length > 15))
     {
         return(false);
     }
     if (tag.Description == null || (tag.Description.Length < 5 && tag.Description.Length > 40))
     {
         return(false);
     }
     if (tag.UrlSlug == null)
     {
         return(false);
     }
     return(true);
 }
コード例 #20
0
        public async Task <IActionResult> EditAsync(TagEditModel tagEditModel)
        {
            if (!ModelState.IsValid)
            {
                SetupMessages("Tags", PageType.Edit, panelTitle: "Edit an existing tag");
                return(View("CreateEdit", tagEditModel));
            }

            var tagToUpdate = await _tagService.SetupEditModel(tagEditModel.VanityId);

            if (await TryUpdateModelAsync(tagToUpdate))
            {
                return(await SaveAsync(tagEditModel, nameof(TagController.EditAsync)));
            }
            TempData[MessageConstants.WarningMessage] = "The model could not be updated.";
            return(RedirectToAction(nameof(TagController.EditAsync), tagEditModel));
        }
コード例 #21
0
        public void TagEditModel_delays_remove_property_at_ViewModel()
        {
            // ARRANGE

            var model     = new Tag("tag", new Facet("facet", new FacetProperty("p")));
            var viewModel = new TagViewModel(model);
            var editModel = new TagEditModel(viewModel, delegate { }, delegate { });

            // ACT

            editModel.RemovePropertyCommand.Execute(editModel.Properties.Single());

            // ASSERT

            Assert.Empty(editModel.Properties);
            Assert.Single(viewModel.Properties);
            Assert.Single(model.Facet.Properties);
        }
コード例 #22
0
        public void TagEditModel_delays_change_at_ViewModel()
        {
            // ARRANGE

            var p2        = new FacetProperty("p2");
            var model     = new Tag("tag", new Facet("facet", new FacetProperty("p")));
            var viewModel = new TagViewModel(model);
            var editModel = new TagEditModel(viewModel, delegate { }, delegate { });

            // ACT

            editModel.Name = "changed";

            // ASSERT

            Assert.Equal("changed", editModel.Name);
            Assert.Equal("tag", viewModel.Name);
            Assert.Equal("tag", model.Name);
        }
コード例 #23
0
        public void TagEditModel_delays_add_property_at_ViewModel()
        {
            // ARRANGE

            var model     = new Tag("tag", new Facet("facet", new FacetProperty("p")));
            var viewModel = new TagViewModel(model);
            var editModel = new TagEditModel(viewModel, delegate { }, delegate { });

            // ACT

            editModel.CreatePropertyCommand.Execute(null);

            // ASSERT

            Assert.Equal(2, editModel.Properties.Count());
            Assert.Equal("new property", editModel.Properties.ElementAt(1).Name);
            Assert.Single(viewModel.Properties);
            Assert.Single(model.Facet.Properties);
        }
コード例 #24
0
        public ActionResult EditTopic(long topicId = 0)
        {
            TagEditModel tagEditModel = null;

            //创建
            if (topicId == 0)
            {
                tagEditModel = new TagEditModel();

                //标签分组下拉框
                SelectList topicGroups = GetTagGroupSelectList(0, TenantTypeIds.Instance().Microblog());
                ViewData["topicGroups"] = topicGroups;

                ViewData["editTopicTitle"] = "创建话题";

                pageResourceManager.InsertTitlePart("创建话题");
            }//编辑
            else
            {
                Tag tag = tagService.Get(topicId);
                tagEditModel = tag.AsTagEditModel();

                //话题分组下拉框
                SelectList topicGroups = GetTagGroupSelectList(tagEditModel.TopicGroupId, tagEditModel.TenantTypeId);
                ViewData["topicGroups"] = topicGroups;

                //取相关微博
                string users = tagEditModel.RelatedObjectIds.TrimStart(',').TrimEnd(',');
                if (!string.IsNullOrEmpty(users))
                {
                    IEnumerable <long> seletedUserIds = tagEditModel.RelatedObjectIds.TrimStart(',').TrimEnd(',').Split(',').Select(t => Convert.ToInt64(t));
                    ViewData["seletedUserIds"] = seletedUserIds;
                }

                ViewData["editTopicTitle"] = "编辑话题";

                pageResourceManager.InsertTitlePart("编辑话题");
            }

            return(View(tagEditModel));
        }
コード例 #25
0
ファイル: TagService.cs プロジェクト: weedkiller/GAsk
        /// <summary>
        /// 修改标签
        /// </summary>
        public async Task <Tag> ModifyAsync(TagEditModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            if (string.IsNullOrWhiteSpace(model.Name))
            {
                throw new ModelException(nameof(model.Name), "标签名称不能为空");
            }
            if (model.Id == null)
            {
                throw new Exception("标签ID不能为空");
            }
            model.Name = model.Name.Trim();
            using (var work = this.dbFactory.StartWork())
            {
                Tag dbTag = await work.Tag.SingleByIdAsync(model.Id.Value);

                if (dbTag == null)
                {
                    throw new ModelException(nameof(model.Name), "该标签不存在,或已被删除");
                }
                if (dbTag.Id != model.Id)
                {
                    throw new ModelException(nameof(model.Name), "该标签名称已被占用");
                }
                else
                {
                    dbTag.IsBest = model.IsBest;
                    dbTag.Name   = model.Name;
                    await work.Tag.UpdateAsync(dbTag);

                    return(dbTag);
                }
            }
        }
コード例 #26
0
        public async Task <ReturnValue> Save(TagEditModel tagEditModel)
        {
            logger.LogDebug("CmsService > Save(TagEditModel: {0})", tagEditModel.ToString());

            var returnValue = new ReturnValue($"Tag '{tagEditModel.Name}' saved.");

            try
            {
                if (tagEditModel.IsNew)
                {
                    logger.LogDebug("New tag");
                    var tag = tagEditModel.MapToModel();
                    tag.WebsiteId = Instance.Id;

                    await unitOfWork.Tags.Insert(tag);
                }
                else
                {
                    logger.LogDebug("Update tag");
                    var tag = tagEditModel.MapToModel(await unitOfWork.Tags.GetByIdAsync(tagEditModel.VanityId));
                    tag.WebsiteId = Instance.Id;

                    _unitOfWork.Tags.Update(tag);
                }

                await _unitOfWork.Save();

                logger.LogDebug("Tag saved");
            }
            catch (Exception ex)
            {
                logger.LogError(ex, ex.Message);
                returnValue.SetErrorMessage("An error has occurred while saving the tag");
            }

            return(returnValue);
        }
コード例 #27
0
        public async Task <ActionResult> Create(TagEditModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    Tag tag = await tagService.CreateAsync(model);

                    return(this.Json(AjaxResult.CreateByContext(tag)));
                }
                catch (ModelException ex)
                {
                    return(this.Json(ex.ToAjaxResult()));
                }
                catch (Exception ex)
                {
                    return(this.Json(AjaxResult.CreateByMessage(ex.Message, false)));
                }
            }
            else
            {
                return(this.Json(ModelState.ToAjaxResult()));
            }
        }
コード例 #28
0
        public ActionResult EditTopic(TagEditModel tagEditModel)
        {
            System.IO.Stream stream = null;

            //是否创建
            bool isCreate = tagEditModel.TagId == 0;

            if (isCreate)
            {
                ViewData["editTopicTitle"] = "创建话题";
            }
            else
            {
                ViewData["editTopicTitle"] = "编辑话题";
            }

            TagService         tagService = new TagService(tagEditModel.TenantTypeId);
            IEnumerable <long> userIds    = Request.Form.Gets <long>("RelatedObjectIds");

            //是特色标签
            if (tagEditModel.IsFeatured)
            {
                HttpPostedFileBase tagLogo  = Request.Files["tagLogo"];
                string             fileName = tagLogo == null ? "" : tagLogo.FileName;
                if (string.IsNullOrEmpty(fileName) && string.IsNullOrEmpty(tagEditModel.FeaturedImage))
                {
                    //标签分组下拉框
                    SelectList topicGroups = GetTagGroupSelectList(tagEditModel.TopicGroupId, tagEditModel.TenantTypeId);
                    ViewData["topicGroups"] = topicGroups;

                    //取到用户设置的相关标签
                    ViewData["seletedUserIds"] = userIds;

                    ViewData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Error, "图片不能为空");

                    return(View(tagEditModel));
                }
                else if (!string.IsNullOrEmpty(fileName))
                {
                    //校验附件的扩展名
                    ILogoSettingsManager logoSettingsManager = DIContainer.Resolve <ILogoSettingsManager>();
                    if (!logoSettingsManager.Get().ValidateFileExtensions(fileName))
                    {
                        //标签分组下拉框
                        SelectList topicGroups = GetTagGroupSelectList(tagEditModel.TopicGroupId, tagEditModel.TenantTypeId);
                        ViewData["topicGroups"] = topicGroups;

                        //取到用户设置的相关标签
                        ViewData["seletedUserIds"] = userIds;

                        ViewData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Error, "只允许上传后缀名为 .gif .jpg .jpeg .png 的文件");

                        return(View(tagEditModel));
                    }

                    //校验附件的大小
                    TenantLogoSettings tenantLogoSettings = TenantLogoSettings.GetRegisteredSettings(TenantTypeIds.Instance().Tag());
                    if (!tenantLogoSettings.ValidateFileLength(tagLogo.ContentLength))
                    {
                        //标签分组下拉框
                        SelectList topicGroups = GetTagGroupSelectList(tagEditModel.TopicGroupId, tagEditModel.TenantTypeId);
                        ViewData["topicGroups"] = topicGroups;

                        //取到用户设置的相关标签
                        ViewData["seletedUserIds"] = userIds;

                        ViewData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Error, string.Format("文件大小不允许超过{0}KB", tenantLogoSettings.MaxLogoLength));

                        return(View(tagEditModel));
                    }

                    stream = tagLogo.InputStream;
                    tagEditModel.FeaturedImage = fileName;
                }
            }

            //获取相关微博
            IEnumerable <long> seletedUserIds = userIds;

            //创建
            if (isCreate)
            {
                Tag tag = tagEditModel.AsTag();
                tagService.Create(tag, stream);

                //添加到分组
                if (tagEditModel.TopicGroupId > 0)
                {
                    tagService.BatchAddGroupsToTag(new List <long>()
                    {
                        tagEditModel.TopicGroupId
                    }, tagEditModel.TagName);
                }
            }//更新
            else
            {
                Tag tag = tagEditModel.AsTag();
                tagService.Update(tag, stream);

                //添加到分组
                if (tagEditModel.TopicGroupId > 0)
                {
                    tagService.BatchAddGroupsToTag(new List <long>()
                    {
                        tagEditModel.TopicGroupId
                    }, tagEditModel.TagName);
                }
            }

            return(RedirectToAction("ManageMicroblogTopics"));
        }
コード例 #29
0
        public ActionResult Create()
        {
            TagEditModel model = new TagEditModel();

            return(View(model));
        }