Пример #1
0
        public static void AddTags(StringCollection tags, int siteId, int contentId)
        {
            if (tags == null || tags.Count == 0)
            {
                return;
            }

            foreach (var tagName in tags)
            {
                var tagInfo = DataProvider.TagDao.GetTagInfo(siteId, AttackUtils.FilterXss(tagName));
                if (tagInfo != null)
                {
                    var contentIdList = TranslateUtils.StringCollectionToIntList(tagInfo.ContentIdCollection);
                    if (!contentIdList.Contains(contentId))
                    {
                        contentIdList.Add(contentId);
                        tagInfo.ContentIdCollection = TranslateUtils.ObjectCollectionToString(contentIdList);
                        tagInfo.UseNum = contentIdList.Count;
                        DataProvider.TagDao.Update(tagInfo);
                    }
                }
                else
                {
                    tagInfo = new TagInfo(0, siteId, contentId.ToString(), tagName, contentId > 0 ? 1 : 0);
                    DataProvider.TagDao.Insert(tagInfo);
                }
            }
        }
Пример #2
0
        public void Update(AdministratorInfo info)
        {
            info.DisplayName = AttackUtils.FilterXss(info.DisplayName);
            info.Email       = AttackUtils.FilterXss(info.Email);
            info.Mobile      = AttackUtils.FilterXss(info.Mobile);

            IDataParameter[] parms =
            {
                GetParameter(ParmLastActivityDate,   DataType.DateTime, info.LastActivityDate),
                GetParameter(ParmCountOfLogin,       DataType.Integer,  info.CountOfLogin),
                GetParameter(ParmCountOfFailedLogin, DataType.Integer,  info.CountOfFailedLogin),
                GetParameter(ParmIsLockedOut,        DataType.VarChar,                        18,info.IsLockedOut.ToString()),
                GetParameter(ParmSiteIdCollection,   DataType.VarChar,                        50,info.SiteIdCollection),
                GetParameter(ParmSiteId,             DataType.Integer,  info.SiteId),
                GetParameter(ParmDepartmentId,       DataType.Integer,  info.DepartmentId),
                GetParameter(ParmAreaId,             DataType.Integer,  info.AreaId),
                GetParameter(ParmDisplayname,        DataType.VarChar,                       255,info.DisplayName),
                GetParameter(ParmEmail,              DataType.VarChar,                       255,info.Email),
                GetParameter(ParmMobile,             DataType.VarChar,                        20,info.Mobile),
                GetParameter(ParmUsername,           DataType.VarChar,                       255,info.UserName)
            };

            ExecuteNonQuery(SqlUpdateUser, parms);

            DataProvider.DepartmentDao.UpdateCountOfAdmin();
            DataProvider.AreaDao.UpdateCountOfAdmin();

            AdminManager.UpdateCache(info);
        }
Пример #3
0
        public bool Insert(AdministratorInfo adminInfo, out string errorMessage)
        {
            if (!InsertValidate(adminInfo.UserName, adminInfo.Password, adminInfo.Email, adminInfo.Mobile, out errorMessage))
            {
                return(false);
            }

            try
            {
                adminInfo.LastActivityDate = DateUtils.SqlMinValue;
                adminInfo.CreationDate     = DateTime.Now;
                adminInfo.PasswordFormat   = EPasswordFormatUtils.GetValue(EPasswordFormat.Encrypted);
                adminInfo.Password         = EncodePassword(adminInfo.Password, EPasswordFormatUtils.GetEnumType(adminInfo.PasswordFormat), out var passwordSalt);
                adminInfo.PasswordSalt     = passwordSalt;

                adminInfo.DisplayName = AttackUtils.FilterXss(adminInfo.DisplayName);
                adminInfo.Email       = AttackUtils.FilterXss(adminInfo.Email);
                adminInfo.Mobile      = AttackUtils.FilterXss(adminInfo.Mobile);

                IDataParameter[] parameters =
                {
                    GetParameter(ParmUsername,           DataType.VarChar,                            255, adminInfo.UserName),
                    GetParameter(ParmPassword,           DataType.VarChar,                            255, adminInfo.Password),
                    GetParameter(ParmPasswordFormat,     DataType.VarChar,                             50, adminInfo.PasswordFormat),
                    GetParameter(ParmPasswordSalt,       DataType.VarChar,                            128, adminInfo.PasswordSalt),
                    GetParameter(ParmCreationDate,       DataType.DateTime, adminInfo.CreationDate),
                    GetParameter(ParmLastActivityDate,   DataType.DateTime, adminInfo.LastActivityDate),
                    GetParameter(ParmCountOfLogin,       DataType.Integer,  adminInfo.CountOfLogin),
                    GetParameter(ParmCountOfFailedLogin, DataType.Integer,  adminInfo.CountOfFailedLogin),
                    GetParameter(ParmCreatorUsername,    DataType.VarChar,                            255, adminInfo.CreatorUserName),
                    GetParameter(ParmIsLockedOut,        DataType.VarChar,                             18, adminInfo.IsLockedOut.ToString()),
                    GetParameter(ParmSiteIdCollection,   DataType.VarChar,                             50, adminInfo.SiteIdCollection),
                    GetParameter(ParmSiteId,             DataType.Integer,  adminInfo.SiteId),
                    GetParameter(ParmDepartmentId,       DataType.Integer,  adminInfo.DepartmentId),
                    GetParameter(ParmAreaId,             DataType.Integer,  adminInfo.AreaId),
                    GetParameter(ParmDisplayname,        DataType.VarChar,                            255, adminInfo.DisplayName),
                    GetParameter(ParmMobile,             DataType.VarChar,                             20, adminInfo.Mobile),
                    GetParameter(ParmEmail,              DataType.VarChar,                            255, adminInfo.Email),
                    GetParameter(ParmAvatarUrl,          DataType.VarChar,                            200, adminInfo.AvatarUrl)
                };

                ExecuteNonQuery(SqlInsertUser, parameters);

                DataProvider.DepartmentDao.UpdateCountOfAdmin();
                DataProvider.AreaDao.UpdateCountOfAdmin();

                var roles = new[] { EPredefinedRoleUtils.GetValue(EPredefinedRole.Administrator) };
                DataProvider.AdministratorsInRolesDao.AddUserToRoles(adminInfo.UserName, roles);

                return(true);
            }
            catch (Exception ex)
            {
                errorMessage = ex.Message;
                return(false);
            }
        }
Пример #4
0
        public override void Submit_OnClick(object sender, EventArgs e)
        {
            var isChanged = false;

            var contentGroupInfo = new ContentGroupInfo
            {
                GroupName   = AttackUtils.FilterXss(TbContentGroupName.Text),
                SiteId      = SiteId,
                Description = TbDescription.Text
            };

            if (AuthRequest.IsQueryExists("GroupName"))
            {
                try
                {
                    DataProvider.ContentGroupDao.Update(contentGroupInfo);
                    AuthRequest.AddSiteLog(SiteId, "修改内容组", $"内容组:{contentGroupInfo.GroupName}");
                    isChanged = true;
                }
                catch (Exception ex)
                {
                    FailMessage(ex, "内容组修改失败!");
                }
            }
            else
            {
                var contentGroupNameList = DataProvider.ContentGroupDao.GetGroupNameList(SiteId);
                if (contentGroupNameList.IndexOf(TbContentGroupName.Text) != -1)
                {
                    FailMessage("内容组添加失败,内容组名称已存在!");
                }
                else
                {
                    try
                    {
                        DataProvider.ContentGroupDao.Insert(contentGroupInfo);
                        AuthRequest.AddSiteLog(SiteId, "添加内容组",
                                               $"内容组:{contentGroupInfo.GroupName}");
                        isChanged = true;
                    }
                    catch (Exception ex)
                    {
                        FailMessage(ex, "内容组添加失败!");
                    }
                }
            }

            if (isChanged)
            {
                LayerUtils.Close(Page);
            }
        }
        public static Dictionary <string, object> SaveAttributes(SiteInfo siteInfo, List <TableStyleInfo> styleInfoList, NameValueCollection formCollection, List <string> dontAddAttributes)
        {
            var dict = new Dictionary <string, object>();

            if (dontAddAttributes == null)
            {
                dontAddAttributes = new List <string>();
            }

            foreach (var styleInfo in styleInfoList)
            {
                if (StringUtils.ContainsIgnoreCase(dontAddAttributes, styleInfo.AttributeName))
                {
                    continue;
                }
                //var theValue = GetValueByForm(styleInfo, siteInfo, formCollection);

                var theValue  = formCollection[styleInfo.AttributeName] ?? string.Empty;
                var inputType = styleInfo.InputType;
                if (inputType == InputType.TextEditor)
                {
                    theValue = ContentUtility.TextEditorContentEncode(siteInfo, theValue);
                    theValue = UEditorUtils.TranslateToStlElement(theValue);
                }

                if (inputType != InputType.TextEditor && inputType != InputType.Image && inputType != InputType.File && inputType != InputType.Video && styleInfo.AttributeName != ContentAttribute.LinkUrl)
                {
                    theValue = AttackUtils.FilterXss(theValue);
                }

                dict[styleInfo.AttributeName] = theValue;

                if (styleInfo.Additional.IsFormatString)
                {
                    var formatString    = TranslateUtils.ToBool(formCollection[styleInfo.AttributeName + "_formatStrong"]);
                    var formatEm        = TranslateUtils.ToBool(formCollection[styleInfo.AttributeName + "_formatEM"]);
                    var formatU         = TranslateUtils.ToBool(formCollection[styleInfo.AttributeName + "_formatU"]);
                    var formatColor     = formCollection[styleInfo.AttributeName + "_formatColor"];
                    var theFormatString = ContentUtility.GetTitleFormatString(formatString, formatEm, formatU, formatColor);

                    dict[ContentAttribute.GetFormatStringAttributeName(styleInfo.AttributeName)] = theFormatString;
                }

                if (inputType == InputType.Image || inputType == InputType.File || inputType == InputType.Video)
                {
                    var attributeName = ContentAttribute.GetExtendAttributeName(styleInfo.AttributeName);
                    dict[attributeName] = formCollection[attributeName];
                }
            }

            return(dict);
        }
Пример #6
0
        public void Update(UserInfo userInfo)
        {
            if (userInfo == null)
            {
                return;
            }

            userInfo.DisplayName = AttackUtils.FilterXss(userInfo.DisplayName);
            userInfo.Email       = AttackUtils.FilterXss(userInfo.Email);
            userInfo.Mobile      = AttackUtils.FilterXss(userInfo.Mobile);
            userInfo.AvatarUrl   = AttackUtils.FilterXss(userInfo.AvatarUrl);
            userInfo.Gender      = AttackUtils.FilterXss(userInfo.Gender);
            userInfo.Birthday    = AttackUtils.FilterXss(userInfo.Birthday);
            userInfo.WeiXin      = AttackUtils.FilterXss(userInfo.WeiXin);
            userInfo.Qq          = AttackUtils.FilterXss(userInfo.Qq);
            userInfo.WeiBo       = AttackUtils.FilterXss(userInfo.WeiBo);
            userInfo.Bio         = AttackUtils.FilterXss(userInfo.Bio);

            var sqlString = $"UPDATE {TableName} SET UserName = @UserName, CreateDate = @CreateDate, LastResetPasswordDate = @LastResetPasswordDate, LastActivityDate = @LastActivityDate, CountOfLogin = @CountOfLogin, CountOfFailedLogin = @CountOfFailedLogin, GroupId = @GroupId, IsChecked = @IsChecked, IsLockedOut = @IsLockedOut, DisplayName = @DisplayName, Email = @Email, Mobile = @Mobile, AvatarUrl = @AvatarUrl, Gender = @Gender, Birthday = @Birthday, WeiXin = @WeiXin, QQ = @QQ, WeiBo = @WeiBo, Bio = @Bio, SettingsXml = @SettingsXml WHERE Id = @Id";

            var updateParms = new IDataParameter[]
            {
                GetParameter(ParmUserName, DataType.VarChar, 255, userInfo.UserName),
                GetParameter(ParmCreateDate, DataType.DateTime, userInfo.CreateDate),
                GetParameter(ParmLastResetPasswordDate, DataType.DateTime, userInfo.LastResetPasswordDate),
                GetParameter(ParmLastActivityDate, DataType.DateTime, userInfo.LastActivityDate),
                GetParameter(ParmCountOfLogin, DataType.Integer, userInfo.CountOfLogin),
                GetParameter(ParmCountOfFailedLogin, DataType.Integer, userInfo.CountOfFailedLogin),
                GetParameter(ParmGroupId, DataType.Integer, userInfo.GroupId),
                GetParameter(ParmIsChecked, DataType.VarChar, 18, userInfo.IsChecked.ToString()),
                GetParameter(ParmIsLockedOut, DataType.VarChar, 18, userInfo.IsLockedOut.ToString()),
                GetParameter(ParmDisplayname, DataType.VarChar, 255, userInfo.DisplayName),
                GetParameter(ParmEmail, DataType.VarChar, 255, userInfo.Email),
                GetParameter(ParmMobile, DataType.VarChar, 20, userInfo.Mobile),
                GetParameter(ParmAvatarUrl, DataType.VarChar, 200, userInfo.AvatarUrl),
                GetParameter(ParmGender, DataType.VarChar, 255, userInfo.Gender),
                GetParameter(ParmBirthday, DataType.VarChar, 50, userInfo.Birthday),
                GetParameter(ParmWeixin, DataType.VarChar, 255, userInfo.WeiXin),
                GetParameter(ParmQq, DataType.VarChar, 255, userInfo.Qq),
                GetParameter(ParmWeibo, DataType.VarChar, 255, userInfo.WeiBo),
                GetParameter(ParmBio, DataType.Text, userInfo.Bio),
                GetParameter(ParmSettingsXml, DataType.Text, userInfo.ToString(UserAttribute.AllAttributes.Value)),
                GetParameter(ParmId, DataType.Integer, userInfo.Id)
            };

            ExecuteNonQuery(sqlString, updateParms);

            UserManager.UpdateCache(userInfo);
        }
Пример #7
0
        private int InsertWithoutValidation(UserInfo userInfo, string password, EPasswordFormat passwordFormat, string passwordSalt)
        {
            var sqlString = $"INSERT INTO {TableName} (UserName, Password, PasswordFormat, PasswordSalt, CreateDate, LastResetPasswordDate, LastActivityDate, CountOfLogin, CountOfFailedLogin, GroupId, IsChecked, IsLockedOut, DisplayName, Email, Mobile, AvatarUrl, Gender, Birthday, WeiXin, QQ, WeiBo, Bio, SettingsXml) VALUES (@UserName, @Password, @PasswordFormat, @PasswordSalt, @CreateDate, @LastResetPasswordDate, @LastActivityDate, @CountOfLogin, @CountOfFailedLogin, @GroupId, @IsChecked, @IsLockedOut, @DisplayName, @Email, @Mobile, @AvatarUrl, @Gender, @Birthday, @WeiXin, @QQ, @WeiBo, @Bio, @SettingsXml)";

            userInfo.CreateDate            = DateTime.Now;
            userInfo.LastActivityDate      = DateTime.Now;
            userInfo.LastResetPasswordDate = DateTime.Now;

            userInfo.DisplayName = AttackUtils.FilterXss(userInfo.DisplayName);
            userInfo.Email       = AttackUtils.FilterXss(userInfo.Email);
            userInfo.Mobile      = AttackUtils.FilterXss(userInfo.Mobile);
            userInfo.AvatarUrl   = AttackUtils.FilterXss(userInfo.AvatarUrl);
            userInfo.Gender      = AttackUtils.FilterXss(userInfo.Gender);
            userInfo.Birthday    = AttackUtils.FilterXss(userInfo.Birthday);
            userInfo.WeiXin      = AttackUtils.FilterXss(userInfo.WeiXin);
            userInfo.Qq          = AttackUtils.FilterXss(userInfo.Qq);
            userInfo.WeiBo       = AttackUtils.FilterXss(userInfo.WeiBo);
            userInfo.Bio         = AttackUtils.FilterXss(userInfo.Bio);
            var settingsXml = userInfo.ToString(UserAttribute.AllAttributes.Value);

            var parameters = new IDataParameter[]
            {
                GetParameter(ParmUserName, DataType.VarChar, 255, userInfo.UserName),
                GetParameter(ParmPassword, DataType.VarChar, 255, password),
                GetParameter(ParmPasswordFormat, DataType.VarChar, 50, EPasswordFormatUtils.GetValue(passwordFormat)),
                GetParameter(ParmPasswordSalt, DataType.VarChar, 128, passwordSalt),
                GetParameter(ParmCreateDate, DataType.DateTime, userInfo.CreateDate),
                GetParameter(ParmLastResetPasswordDate, DataType.DateTime, userInfo.LastResetPasswordDate),
                GetParameter(ParmLastActivityDate, DataType.DateTime, userInfo.LastActivityDate),
                GetParameter(ParmCountOfLogin, DataType.Integer, userInfo.CountOfLogin),
                GetParameter(ParmCountOfFailedLogin, DataType.Integer, userInfo.CountOfFailedLogin),
                GetParameter(ParmGroupId, DataType.Integer, userInfo.GroupId),
                GetParameter(ParmIsChecked, DataType.VarChar, 18, userInfo.IsChecked.ToString()),
                GetParameter(ParmIsLockedOut, DataType.VarChar, 18, userInfo.IsLockedOut.ToString()),
                GetParameter(ParmDisplayname, DataType.VarChar, 255, userInfo.DisplayName),
                GetParameter(ParmEmail, DataType.VarChar, 255, userInfo.Email),
                GetParameter(ParmMobile, DataType.VarChar, 20, userInfo.Mobile),
                GetParameter(ParmAvatarUrl, DataType.VarChar, 200, userInfo.AvatarUrl),
                GetParameter(ParmGender, DataType.VarChar, 255, userInfo.Gender),
                GetParameter(ParmBirthday, DataType.VarChar, 50, userInfo.Birthday),
                GetParameter(ParmWeixin, DataType.VarChar, 255, userInfo.WeiXin),
                GetParameter(ParmQq, DataType.VarChar, 255, userInfo.Qq),
                GetParameter(ParmWeibo, DataType.VarChar, 255, userInfo.WeiBo),
                GetParameter(ParmBio, DataType.Text, userInfo.Bio),
                GetParameter(ParmSettingsXml, DataType.Text, settingsXml)
            };

            return(ExecuteNonQueryAndReturnId(TableName, UserAttribute.Id, sqlString, parameters));
        }
        private bool UpdateTableStyleInfo(TableStyleInfo styleInfo, TableStyleInfo body, bool isRapid, List <string> rapidValues, out string errorMessage)
        {
            errorMessage = string.Empty;

            styleInfo.AttributeName = body.AttributeName;
            styleInfo.DisplayName   = AttackUtils.FilterXss(body.DisplayName);
            styleInfo.HelpText      = body.HelpText;
            styleInfo.Taxis         = body.Taxis;
            styleInfo.InputType     = body.InputType;
            styleInfo.DefaultValue  = body.DefaultValue;
            styleInfo.IsHorizontal  = body.IsHorizontal;
            styleInfo.ExtendValues  = body.Additional.ToString();
            styleInfo.StyleItems    = new List <TableStyleItemInfo>();

            if (body.InputType == InputType.CheckBox || body.InputType == InputType.Radio || body.InputType == InputType.SelectMultiple || body.InputType == InputType.SelectOne)
            {
                if (isRapid)
                {
                    foreach (var rapidValue in rapidValues)
                    {
                        var itemInfo = new TableStyleItemInfo(0, styleInfo.Id, rapidValue, rapidValue, false);
                        styleInfo.StyleItems.Add(itemInfo);
                    }
                }
                else
                {
                    var isHasSelected = false;
                    foreach (var styleItem in body.StyleItems)
                    {
                        if (body.InputType != InputType.SelectMultiple && body.InputType != InputType.CheckBox && isHasSelected && styleItem.IsSelected)
                        {
                            errorMessage = "操作失败,只能有一个初始化时选定项!";
                            return(false);
                        }
                        if (styleItem.IsSelected)
                        {
                            isHasSelected = true;
                        }

                        var itemInfo = new TableStyleItemInfo(0, styleInfo.Id, styleItem.ItemTitle, styleItem.ItemValue, styleItem.IsSelected);
                        styleInfo.StyleItems.Add(itemInfo);
                    }
                }
            }

            DataProvider.TableStyleDao.Update(styleInfo);

            return(true);
        }
Пример #9
0
        public IHttpActionResult Submit()
        {
            try
            {
                var request = new AuthenticatedRequest();
                if (!request.IsAdminLoggin ||
                    !request.AdminPermissionsImpl.HasSystemPermissions(ConfigManager.SettingsPermissions.SiteAdd))
                {
                    return(Unauthorized());
                }

                var createType          = request.GetPostString("createType");
                var createTemplateId    = request.GetPostString("createTemplateId");
                var siteName            = request.GetPostString("siteName");
                var isRoot              = request.GetPostBool("isRoot");
                var parentId            = request.GetPostInt("parentId");
                var siteDir             = request.GetPostString("siteDir");
                var domainName          = request.GetPostString("domainName");
                var tableRule           = ETableRuleUtils.GetEnumType(request.GetPostString("tableRule"));
                var tableChoose         = request.GetPostString("tableChoose");
                var tableHandWrite      = request.GetPostString("tableHandWrite");
                var isImportContents    = request.GetPostBool("isImportContents");
                var isImportTableStyles = request.GetPostBool("isImportTableStyles");

                if (!isRoot)
                {
                    if (DirectoryUtils.IsSystemDirectory(siteDir))
                    {
                        return(BadRequest("文件夹名称不能为系统文件夹名称,请更改文件夹名称!"));
                    }
                    if (!DirectoryUtils.IsDirectoryNameCompliant(siteDir))
                    {
                        return(BadRequest("文件夹名称不符合系统要求,请更改文件夹名称!"));
                    }
                    var list = DataProvider.SiteDao.GetLowerSiteDirList(parentId);
                    if (list.IndexOf(siteDir.ToLower()) != -1)
                    {
                        return(BadRequest("已存在相同的发布路径,请更改文件夹名称!"));
                    }
                }

                var channelInfo = new ChannelInfo();

                channelInfo.ChannelName          = channelInfo.IndexName = "首页";
                channelInfo.ParentId             = 0;
                channelInfo.ContentModelPluginId = string.Empty;

                var tableName = string.Empty;
                if (tableRule == ETableRule.Choose)
                {
                    tableName = tableChoose;
                }
                else if (tableRule == ETableRule.HandWrite)
                {
                    tableName = tableHandWrite;
                    if (!DataProvider.DatabaseDao.IsTableExists(tableName))
                    {
                        DataProvider.ContentDao.CreateContentTable(tableName, DataProvider.ContentDao.TableColumnsDefault);
                    }
                    else
                    {
                        DataProvider.DatabaseDao.AlterSystemTable(tableName, DataProvider.ContentDao.TableColumnsDefault);
                    }
                }

                var siteInfo = new SiteInfo
                {
                    SiteName   = AttackUtils.FilterXss(siteName),
                    SiteDir    = siteDir,
                    DomainName = domainName,
                    TableName  = tableName,
                    ParentId   = parentId,
                    IsRoot     = isRoot
                };

                siteInfo.Additional.IsCheckContentLevel = false;
                siteInfo.Additional.Charset             = ECharsetUtils.GetValue(ECharset.utf_8);

                var siteId = DataProvider.ChannelDao.InsertSiteInfo(channelInfo, siteInfo, request.AdminName);

                if (string.IsNullOrEmpty(tableName))
                {
                    tableName = ContentDao.GetContentTableName(siteId);
                    DataProvider.ContentDao.CreateContentTable(tableName, DataProvider.ContentDao.TableColumnsDefault);
                    DataProvider.SiteDao.UpdateTableName(siteId, tableName);
                }

                if (request.AdminPermissionsImpl.IsSystemAdministrator && !request.AdminPermissionsImpl.IsConsoleAdministrator)
                {
                    var siteIdList = request.AdminPermissionsImpl.GetSiteIdList() ?? new List <int>();
                    siteIdList.Add(siteId);
                    var adminInfo = AdminManager.GetAdminInfoByUserId(request.AdminId);
                    DataProvider.AdministratorDao.UpdateSiteIdCollection(adminInfo, TranslateUtils.ObjectCollectionToString(siteIdList));
                }

                var siteTemplateDir    = string.Empty;
                var onlineTemplateName = string.Empty;
                if (StringUtils.EqualsIgnoreCase(createType, "local"))
                {
                    siteTemplateDir = createTemplateId;
                }
                else if (StringUtils.EqualsIgnoreCase(createType, "cloud"))
                {
                    onlineTemplateName = createTemplateId;
                }

                var redirectUrl = PageProgressBar.GetCreateSiteUrl(siteId,
                                                                   isImportContents, isImportTableStyles, siteTemplateDir, onlineTemplateName, StringUtils.Guid());
                SystemManager.UpdateSites();
                return(Ok(new
                {
                    Value = redirectUrl
                }));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
Пример #10
0
        private int Validate_SiteInfo(out string errorMessage)
        {
            try
            {
                var isHq         = TranslateUtils.ToBool(RblIsRoot.SelectedValue); // 是否主站
                var parentSiteId = 0;
                var siteDir      = string.Empty;

                if (isHq == false)
                {
                    if (DirectoryUtils.IsSystemDirectory(TbSiteDir.Text))
                    {
                        errorMessage = "文件夹名称不能为系统文件夹名称!";
                        return(0);
                    }

                    parentSiteId = TranslateUtils.ToInt(DdlParentId.SelectedValue);
                    siteDir      = TbSiteDir.Text;

                    var list = DataProvider.SiteDao.GetLowerSiteDirList(parentSiteId);
                    if (list.IndexOf(siteDir.ToLower()) != -1)
                    {
                        errorMessage = "已存在相同的发布路径!";
                        return(0);
                    }

                    if (!DirectoryUtils.IsDirectoryNameCompliant(siteDir))
                    {
                        errorMessage = "文件夹名称不符合系统要求!";
                        return(0);
                    }
                }

                var nodeInfo = new ChannelInfo();

                nodeInfo.ChannelName          = nodeInfo.IndexName = "首页";
                nodeInfo.ParentId             = 0;
                nodeInfo.ContentModelPluginId = string.Empty;

                var psInfo = new SiteInfo
                {
                    SiteName  = AttackUtils.FilterXss(TbSiteName.Text),
                    SiteDir   = siteDir,
                    TableName = DdlTableName.SelectedValue,
                    ParentId  = parentSiteId,
                    IsRoot    = isHq
                };

                psInfo.Additional.IsCheckContentLevel = TranslateUtils.ToBool(RblIsCheckContentUseLevel.SelectedValue);

                if (psInfo.Additional.IsCheckContentLevel)
                {
                    psInfo.Additional.CheckContentLevel = TranslateUtils.ToInt(DdlCheckContentLevel.SelectedValue);
                }
                psInfo.Additional.Charset = DdlCharset.SelectedValue;

                var theSiteId = DataProvider.ChannelDao.InsertSiteInfo(nodeInfo, psInfo, AuthRequest.AdminName);

                if (AuthRequest.AdminPermissions.IsSystemAdministrator && !AuthRequest.AdminPermissions.IsConsoleAdministrator)
                {
                    var siteIdList = AuthRequest.AdminPermissions.SiteIdList ?? new List <int>();
                    siteIdList.Add(theSiteId);
                    DataProvider.AdministratorDao.UpdateSiteIdCollection(AuthRequest.AdminName, TranslateUtils.ObjectCollectionToString(siteIdList));
                }

                AuthRequest.AddAdminLog("创建新站点", $"站点名称:{AttackUtils.FilterXss(TbSiteName.Text)}");

                errorMessage = string.Empty;
                return(theSiteId);
            }
            catch (Exception e)
            {
                errorMessage = e.Message;
                return(0);
            }
        }
Пример #11
0
        private bool UpdateTableStyleInfo(InputType inputType)
        {
            var isChanged = false;

            _styleInfo.AttributeName = TbAttributeName.Text;
            _styleInfo.DisplayName   = AttackUtils.FilterXss(TbDisplayName.Text);
            _styleInfo.HelpText      = TbHelpText.Text;
            _styleInfo.Taxis         = TranslateUtils.ToInt(TbTaxis.Text);
            _styleInfo.InputType     = inputType;
            _styleInfo.DefaultValue  = TbDefaultValue.Text;
            _styleInfo.IsHorizontal  = TranslateUtils.ToBool(DdlIsHorizontal.SelectedValue);

            _styleInfo.Additional.Columns           = TranslateUtils.ToInt(TbColumns.Text);
            _styleInfo.Additional.Height            = TranslateUtils.ToInt(TbHeight.Text);
            _styleInfo.Additional.Width             = TbWidth.Text;
            _styleInfo.Additional.IsFormatString    = TranslateUtils.ToBool(DdlIsFormatString.SelectedValue);
            _styleInfo.Additional.RelatedFieldId    = TranslateUtils.ToInt(DdlRelatedFieldId.SelectedValue);
            _styleInfo.Additional.RelatedFieldStyle = DdlRelatedFieldStyle.SelectedValue;
            _styleInfo.Additional.CustomizeLeft     = TbCustomizeLeft.Text;
            _styleInfo.Additional.CustomizeRight    = TbCustomizeRight.Text;

            List <TableStyleItemInfo> styleItems = null;

            if (inputType == InputType.CheckBox || inputType == InputType.Radio || inputType == InputType.SelectMultiple || inputType == InputType.SelectOne)
            {
                styleItems = new List <TableStyleItemInfo>();

                var isRapid = TranslateUtils.ToBool(DdlIsRapid.SelectedValue);
                if (isRapid)
                {
                    var rapidValues = TranslateUtils.StringCollectionToStringList(TbRapidValues.Text);
                    foreach (var rapidValue in rapidValues)
                    {
                        var itemInfo = new TableStyleItemInfo(0, _styleInfo.Id, rapidValue, rapidValue, false);
                        styleItems.Add(itemInfo);
                    }
                }
                else
                {
                    var isHasSelected = false;
                    foreach (RepeaterItem item in RptItems.Items)
                    {
                        var tbTitle      = (TextBox)item.FindControl("tbTitle");
                        var tbValue      = (TextBox)item.FindControl("tbValue");
                        var cbIsSelected = (CheckBox)item.FindControl("cbIsSelected");

                        if (inputType != InputType.SelectMultiple && inputType != InputType.CheckBox && isHasSelected && cbIsSelected.Checked)
                        {
                            FailMessage("操作失败,只能有一个初始化时选定项!");
                            return(false);
                        }
                        if (cbIsSelected.Checked)
                        {
                            isHasSelected = true;
                        }

                        var itemInfo = new TableStyleItemInfo(0, _styleInfo.Id, tbTitle.Text, tbValue.Text, cbIsSelected.Checked);
                        styleItems.Add(itemInfo);
                    }
                }
            }

            try
            {
                TableStyleManager.Update(_styleInfo);
                TableStyleManager.DeleteAndInsertStyleItems(_styleInfo.Id, styleItems);

                if (SiteId > 0)
                {
                    AuthRequest.AddSiteLog(SiteId, "修改表单显示样式", $"字段名:{_styleInfo.AttributeName}");
                }
                else
                {
                    AuthRequest.AddAdminLog("修改表单显示样式", $"字段名:{_styleInfo.AttributeName}");
                }
                isChanged = true;
            }
            catch (Exception ex)
            {
                FailMessage(ex, "显示样式修改失败:" + ex.Message);
            }
            return(isChanged);
        }
        private bool InsertTableStyleInfo(string tableName, List <int> relatedIdentities, TableStyleInfo body, bool isRapid, List <string> rapidValues, out string errorMessage)
        {
            errorMessage = string.Empty;

            var relatedIdentity = relatedIdentities[0];

            if (string.IsNullOrEmpty(body.AttributeName))
            {
                errorMessage = "操作失败,字段名不能为空!";
                return(false);
            }

            if (TableStyleManager.IsExists(relatedIdentity, tableName, body.AttributeName))
            {
                errorMessage = $@"显示样式添加失败:字段名""{body.AttributeName}""已存在";
                return(false);
            }

            var styleInfo = TableColumnManager.IsAttributeNameExists(tableName, body.AttributeName) ? TableStyleManager.GetTableStyleInfo(tableName, body.AttributeName, relatedIdentities) : new TableStyleInfo();

            styleInfo.RelatedIdentity = relatedIdentity;
            styleInfo.TableName       = tableName;
            styleInfo.AttributeName   = body.AttributeName;
            styleInfo.DisplayName     = AttackUtils.FilterXss(body.DisplayName);
            styleInfo.HelpText        = body.HelpText;
            styleInfo.Taxis           = body.Taxis;
            styleInfo.InputType       = body.InputType;
            styleInfo.DefaultValue    = body.DefaultValue;
            styleInfo.IsHorizontal    = body.IsHorizontal;
            styleInfo.ExtendValues    = body.Additional.ToString();
            styleInfo.StyleItems      = new List <TableStyleItemInfo>();

            if (body.InputType == InputType.CheckBox || body.InputType == InputType.Radio || body.InputType == InputType.SelectMultiple || body.InputType == InputType.SelectOne)
            {
                if (isRapid)
                {
                    foreach (var rapidValue in rapidValues)
                    {
                        var itemInfo = new TableStyleItemInfo(0, 0, rapidValue, rapidValue, false);
                        styleInfo.StyleItems.Add(itemInfo);
                    }
                }
                else
                {
                    var isHasSelected = false;
                    foreach (var styleItem in body.StyleItems)
                    {
                        if (body.InputType != InputType.SelectMultiple && body.InputType != InputType.CheckBox && isHasSelected && styleItem.IsSelected)
                        {
                            errorMessage = "操作失败,只能有一个初始化时选定项!";
                            return(false);
                        }
                        if (styleItem.IsSelected)
                        {
                            isHasSelected = true;
                        }

                        var itemInfo = new TableStyleItemInfo(0, 0, styleItem.ItemTitle, styleItem.ItemValue, styleItem.IsSelected);
                        styleInfo.StyleItems.Add(itemInfo);
                    }
                }
            }

            DataProvider.TableStyleDao.Insert(styleInfo);

            return(true);
        }
Пример #13
0
        private bool InsertTableStyleInfo(InputType inputType)
        {
            var isChanged = false;

            var relatedIdentity = _relatedIdentities[0];

            if (string.IsNullOrEmpty(TbAttributeName.Text))
            {
                FailMessage("操作失败,字段名不能为空!");
                return(false);
            }

            if (TableStyleManager.IsExists(relatedIdentity, _tableName, TbAttributeName.Text))
            {
                FailMessage($@"显示样式添加失败:字段名""{TbAttributeName.Text}""已存在");
                return(false);
            }

            _styleInfo = DataProvider.TableMetadataDao.IsExists(_tableName, TbAttributeName.Text) ? TableStyleManager.GetTableStyleInfo(_tableName, TbAttributeName.Text, _relatedIdentities) : new TableStyleInfo();

            _styleInfo.RelatedIdentity = relatedIdentity;
            _styleInfo.TableName       = _tableName;
            _styleInfo.AttributeName   = TbAttributeName.Text;
            _styleInfo.DisplayName     = AttackUtils.FilterXss(TbDisplayName.Text);
            _styleInfo.HelpText        = TbHelpText.Text;
            _styleInfo.Taxis           = TranslateUtils.ToInt(TbTaxis.Text);
            _styleInfo.InputType       = inputType;
            _styleInfo.DefaultValue    = TbDefaultValue.Text;
            _styleInfo.IsHorizontal    = TranslateUtils.ToBool(DdlIsHorizontal.SelectedValue);

            _styleInfo.Additional.Columns           = TranslateUtils.ToInt(TbColumns.Text);
            _styleInfo.Additional.Height            = TranslateUtils.ToInt(TbHeight.Text);
            _styleInfo.Additional.Width             = TbWidth.Text;
            _styleInfo.Additional.IsFormatString    = TranslateUtils.ToBool(DdlIsFormatString.SelectedValue);
            _styleInfo.Additional.RelatedFieldId    = TranslateUtils.ToInt(DdlRelatedFieldId.SelectedValue);
            _styleInfo.Additional.RelatedFieldStyle = DdlRelatedFieldStyle.SelectedValue;
            _styleInfo.Additional.CustomizeLeft     = TbCustomizeLeft.Text;
            _styleInfo.Additional.CustomizeRight    = TbCustomizeRight.Text;

            if (inputType == InputType.CheckBox || inputType == InputType.Radio || inputType == InputType.SelectMultiple || inputType == InputType.SelectOne)
            {
                _styleInfo.StyleItems = new List <TableStyleItemInfo>();

                var isRapid = TranslateUtils.ToBool(DdlIsRapid.SelectedValue);
                if (isRapid)
                {
                    var rapidValues = TranslateUtils.StringCollectionToStringList(TbRapidValues.Text);
                    foreach (var rapidValue in rapidValues)
                    {
                        var itemInfo = new TableStyleItemInfo(0, _styleInfo.Id, rapidValue, rapidValue, false);
                        _styleInfo.StyleItems.Add(itemInfo);
                    }
                }
                else
                {
                    var isHasSelected = false;
                    foreach (RepeaterItem item in RptItems.Items)
                    {
                        var tbTitle      = (TextBox)item.FindControl("tbTitle");
                        var tbValue      = (TextBox)item.FindControl("tbValue");
                        var cbIsSelected = (CheckBox)item.FindControl("cbIsSelected");

                        if (inputType != InputType.SelectMultiple && inputType != InputType.CheckBox && isHasSelected && cbIsSelected.Checked)
                        {
                            FailMessage("操作失败,只能有一个初始化时选定项!");
                            return(false);
                        }
                        if (cbIsSelected.Checked)
                        {
                            isHasSelected = true;
                        }

                        var itemInfo = new TableStyleItemInfo(0, 0, tbTitle.Text, tbValue.Text, cbIsSelected.Checked);
                        _styleInfo.StyleItems.Add(itemInfo);
                    }
                }
            }

            try
            {
                TableStyleManager.Insert(_styleInfo);

                if (SiteId > 0)
                {
                    AuthRequest.AddSiteLog(SiteId, "添加表单显示样式", $"字段名:{_styleInfo.AttributeName}");
                }
                else
                {
                    AuthRequest.AddAdminLog("添加表单显示样式", $"字段名:{_styleInfo.AttributeName}");
                }

                isChanged = true;
            }
            catch (Exception ex)
            {
                FailMessage(ex, "显示样式添加失败:" + ex.Message);
            }
            return(isChanged);
        }
Пример #14
0
 public string FilterXss(string html)
 {
     return(AttackUtils.FilterXss(html));
 }
Пример #15
0
        private int Validate_SiteInfo(out string errorMessage)
        {
            try
            {
                var isRoot       = TranslateUtils.ToBool(RblIsRoot.SelectedValue); // 是否主站
                var parentSiteId = 0;
                var siteDir      = string.Empty;
                var domainName   = string.Empty;
                if (DirectoryUtils.IsSystemDirectory(TbSiteDir.Text) || DirectoryUtils.IsWebSiteDirectory(TbSiteDir.Text))
                {
                    errorMessage = "文件夹名称不能为系统文件夹名称!";
                    return(0);
                }

                parentSiteId = TranslateUtils.ToInt(DdlParentId.SelectedValue);
                siteDir      = TbSiteDir.Text;

                var list = DataProvider.SiteDao.GetLowerSiteDirList(parentSiteId);
                if (list.IndexOf(siteDir.ToLower()) != -1)
                {
                    errorMessage = "已存在相同的发布路径!";
                    return(0);
                }

                if (!DirectoryUtils.IsDirectoryNameCompliant(siteDir))
                {
                    errorMessage = "文件夹名称不符合系统要求!";
                    return(0);
                }
                if (isRoot == false)//如果不是主站
                {
                    if (String.IsNullOrWhiteSpace(TbDomainName.Text))
                    {
                        errorMessage = "网站域名不能为空!";
                        return(0);
                    }
                    else
                    {
                        String[] domainNames = TbDomainName.Text.Split(';');
                        foreach (String domain in domainNames)
                        {
                            if (SystemManager.SiteList.ContainsKey(domain))
                            {
                                errorMessage = "域名“" + domain + "”已被其他网站占用,请选择其他域名!";
                                return(0);
                            }
                            else if (domainName.Length > 0)
                            {
                                domainName += ";" + domain;
                            }
                            else
                            {
                                domainName += ";" + domain;
                            }
                        }
                    }
                    if (domainName.Split(';').Length > 3)
                    {
                        errorMessage = "一个网站最多只能绑定3个域名,而您绑定了" + domainName.Split(';').Length + "个,请删除多余的域名!";
                        return(0);
                    }
                }
                var nodeInfo = new ChannelInfo();

                nodeInfo.ChannelName          = nodeInfo.IndexName = "首页";
                nodeInfo.ParentId             = 0;
                nodeInfo.ContentModelPluginId = string.Empty;

                var tableName = string.Empty;
                var tableRule = ETableRuleUtils.GetEnumType(RblTableRule.SelectedValue);
                if (tableRule == ETableRule.Choose)
                {
                    tableName = DdlTableChoose.SelectedValue;
                }
                else if (tableRule == ETableRule.HandWrite)
                {
                    tableName = TbTableHandWrite.Text;
                    if (!DataProvider.DatabaseDao.IsTableExists(tableName))
                    {
                        DataProvider.ContentDao.CreateContentTable(tableName, DataProvider.ContentDao.TableColumnsDefault);
                    }
                    else
                    {
                        DataProvider.DatabaseDao.AlterSystemTable(tableName, DataProvider.ContentDao.TableColumnsDefault);
                    }
                }

                var siteInfo = new SiteInfo
                {
                    SiteName   = AttackUtils.FilterXss(TbSiteName.Text),
                    DomainName = domainName,
                    SiteDir    = siteDir,
                    TableName  = tableName,
                    ParentId   = parentSiteId,
                    IsRoot     = isRoot
                };

                siteInfo.Additional.IsCheckContentLevel = TranslateUtils.ToBool(RblIsCheckContentUseLevel.SelectedValue);

                if (siteInfo.Additional.IsCheckContentLevel)
                {
                    siteInfo.Additional.CheckContentLevel = TranslateUtils.ToInt(DdlCheckContentLevel.SelectedValue);
                }
                siteInfo.Additional.Charset = DdlCharset.SelectedValue;

                var siteId = DataProvider.ChannelDao.InsertSiteInfo(nodeInfo, siteInfo, AuthRequest.AdminName);

                if (string.IsNullOrEmpty(tableName))
                {
                    tableName = ContentDao.GetContentTableName(siteId);
                    DataProvider.ContentDao.CreateContentTable(tableName, DataProvider.ContentDao.TableColumnsDefault);
                    DataProvider.SiteDao.UpdateTableName(siteId, tableName);
                }

                if (AuthRequest.AdminPermissionsImpl.IsSystemAdministrator && !AuthRequest.AdminPermissionsImpl.IsConsoleAdministrator)
                {
                    var siteIdList = AuthRequest.AdminPermissionsImpl.GetSiteIdList() ?? new List <int>();
                    siteIdList.Add(siteId);
                    var adminInfo = AdminManager.GetAdminInfoByUserId(AuthRequest.AdminId);
                    DataProvider.AdministratorDao.UpdateSiteIdCollection(adminInfo, TranslateUtils.ObjectCollectionToString(siteIdList));
                }

                AuthRequest.AddAdminLog("创建新站点", $"站点名称:{AttackUtils.FilterXss(TbSiteName.Text)}");

                errorMessage = string.Empty;
                return(siteId);
            }
            catch (Exception e)
            {
                errorMessage = e.Message;
                return(0);
            }
        }
        public IHttpActionResult Submit()
        {
            try
            {
                var request = new RequestImpl();

                var siteId        = request.GetPostInt("siteId");
                var channelId     = request.GetPostInt("channelId");
                var contentIdList = TranslateUtils.StringCollectionToIntList(request.GetPostString("contentIds"));
                var pageType      = request.GetPostString("pageType");
                var groupNames    = TranslateUtils.StringCollectionToStringList(request.GetPostString("groupNames"));
                var groupName     = request.GetPostString("groupName");
                var description   = request.GetPostString("description");

                if (!request.IsUserLoggin ||
                    !request.UserPermissionsImpl.HasChannelPermissions(siteId, channelId,
                                                                       ConfigManager.ChannelPermissions.ContentEdit))
                {
                    return(Unauthorized());
                }

                var siteInfo = SiteManager.GetSiteInfo(siteId);
                if (siteInfo == null)
                {
                    return(BadRequest("无法确定内容对应的站点"));
                }

                var channelInfo = ChannelManager.GetChannelInfo(siteId, channelId);
                if (channelInfo == null)
                {
                    return(BadRequest("无法确定内容对应的栏目"));
                }

                if (pageType == "setGroup")
                {
                    foreach (var contentId in contentIdList)
                    {
                        var contentInfo = ContentManager.GetContentInfo(siteInfo, channelInfo, contentId);
                        if (contentInfo == null)
                        {
                            continue;
                        }

                        var list = TranslateUtils.StringCollectionToStringList(contentInfo.GroupNameCollection);
                        foreach (var name in groupNames)
                        {
                            if (!list.Contains(name))
                            {
                                list.Add(name);
                            }
                        }
                        contentInfo.GroupNameCollection = TranslateUtils.ObjectCollectionToString(list);

                        DataProvider.ContentDao.Update(siteInfo, channelInfo, contentInfo);
                    }

                    request.AddSiteLog(siteId, "批量设置内容组", $"内容组:{TranslateUtils.ObjectCollectionToString(groupNames)}");
                }
                else if (pageType == "cancelGroup")
                {
                    foreach (var contentId in contentIdList)
                    {
                        var contentInfo = ContentManager.GetContentInfo(siteInfo, channelInfo, contentId);
                        if (contentInfo == null)
                        {
                            continue;
                        }

                        var list = TranslateUtils.StringCollectionToStringList(contentInfo.GroupNameCollection);
                        foreach (var name in groupNames)
                        {
                            if (list.Contains(name))
                            {
                                list.Remove(name);
                            }
                        }
                        contentInfo.GroupNameCollection = TranslateUtils.ObjectCollectionToString(list);

                        DataProvider.ContentDao.Update(siteInfo, channelInfo, contentInfo);
                    }

                    request.AddSiteLog(siteId, "批量取消内容组", $"内容组:{TranslateUtils.ObjectCollectionToString(groupNames)}");
                }
                else if (pageType == "addGroup")
                {
                    var groupInfo = new ContentGroupInfo
                    {
                        GroupName   = AttackUtils.FilterXss(groupName),
                        SiteId      = siteId,
                        Description = AttackUtils.FilterXss(description)
                    };

                    if (ContentGroupManager.IsExists(siteId, groupInfo.GroupName))
                    {
                        DataProvider.ContentGroupDao.Update(groupInfo);
                        request.AddSiteLog(siteId, "修改内容组", $"内容组:{groupInfo.GroupName}");
                    }
                    else
                    {
                        DataProvider.ContentGroupDao.Insert(groupInfo);
                        request.AddSiteLog(siteId, "添加内容组", $"内容组:{groupInfo.GroupName}");
                    }

                    foreach (var contentId in contentIdList)
                    {
                        var contentInfo = ContentManager.GetContentInfo(siteInfo, channelInfo, contentId);
                        if (contentInfo == null)
                        {
                            continue;
                        }

                        var list = TranslateUtils.StringCollectionToStringList(contentInfo.GroupNameCollection);
                        if (!list.Contains(groupInfo.GroupName))
                        {
                            list.Add(groupInfo.GroupName);
                        }
                        contentInfo.GroupNameCollection = TranslateUtils.ObjectCollectionToString(list);

                        DataProvider.ContentDao.Update(siteInfo, channelInfo, contentInfo);
                    }

                    request.AddSiteLog(siteId, "批量设置内容组", $"内容组:{groupInfo.GroupName}");
                }

                return(Ok(new
                {
                    Value = contentIdList
                }));
            }
            catch (Exception ex)
            {
                LogUtils.AddErrorLog(ex);
                return(InternalServerError(ex));
            }
        }
        public async Task <ActionResult <BoolResult> > Submit([FromBody] SubmitRequest request)
        {
            if (!await _authManager.HasContentPermissionsAsync(request.SiteId, request.ChannelId, Types.ContentPermissions.Edit))
            {
                return(Unauthorized());
            }

            var site = await _siteRepository.GetAsync(request.SiteId);

            if (site == null)
            {
                return(NotFound());
            }

            var channel = await _channelRepository.GetAsync(request.ChannelId);

            if (channel == null)
            {
                return(NotFound());
            }

            if (request.PageType == "setGroup")
            {
                foreach (var contentId in request.ContentIds)
                {
                    var contentInfo = await _contentRepository.GetAsync(site, channel, contentId);

                    if (contentInfo == null)
                    {
                        continue;
                    }

                    var list = contentInfo.GroupNames;
                    foreach (var name in request.GroupNames)
                    {
                        if (!list.Contains(name))
                        {
                            list.Add(name);
                        }
                    }
                    contentInfo.GroupNames = list;

                    await _contentRepository.UpdateAsync(site, channel, contentInfo);
                }

                await _authManager.AddSiteLogAsync(request.SiteId, "批量设置内容组", $"内容组:{ListUtils.ToString(request.GroupNames)}");
            }
            else if (request.PageType == "cancelGroup")
            {
                foreach (var contentId in request.ContentIds)
                {
                    var contentInfo = await _contentRepository.GetAsync(site, channel, contentId);

                    if (contentInfo == null)
                    {
                        continue;
                    }

                    var list = contentInfo.GroupNames;
                    foreach (var name in request.GroupNames)
                    {
                        if (list.Contains(name))
                        {
                            list.Remove(name);
                        }
                    }
                    contentInfo.GroupNames = list;

                    await _contentRepository.UpdateAsync(site, channel, contentInfo);
                }

                await _authManager.AddSiteLogAsync(request.SiteId, "批量取消内容组", $"内容组:{ListUtils.ToString(request.GroupNames)}");
            }
            else if (request.PageType == "addGroup")
            {
                var groupInfo = new ContentGroup
                {
                    GroupName   = AttackUtils.FilterXss(request.GroupName),
                    SiteId      = request.SiteId,
                    Description = AttackUtils.FilterXss(request.Description)
                };

                if (await _contentGroupRepository.IsExistsAsync(request.SiteId, groupInfo.GroupName))
                {
                    await _contentGroupRepository.UpdateAsync(groupInfo);

                    await _authManager.AddSiteLogAsync(request.SiteId, "修改内容组", $"内容组:{groupInfo.GroupName}");
                }
                else
                {
                    await _contentGroupRepository.InsertAsync(groupInfo);

                    await _authManager.AddSiteLogAsync(request.SiteId, "添加内容组", $"内容组:{groupInfo.GroupName}");
                }

                foreach (var contentId in request.ContentIds)
                {
                    var contentInfo = await _contentRepository.GetAsync(site, channel, contentId);

                    if (contentInfo == null)
                    {
                        continue;
                    }

                    var list = contentInfo.GroupNames;
                    if (!list.Contains(groupInfo.GroupName))
                    {
                        list.Add(groupInfo.GroupName);
                    }
                    contentInfo.GroupNames = list;

                    await _contentRepository.UpdateAsync(site, channel, contentInfo);
                }

                await _authManager.AddSiteLogAsync(request.SiteId, "批量设置内容组", $"内容组:{groupInfo.GroupName}");
            }

            return(new BoolResult
            {
                Value = true
            });
        }