示例#1
0
 public DataBackupJob(ISettingsManager settingsManager, IDatabaseManager databaseManager)
 {
     _settingsManager = settingsManager;
     _databaseManager = databaseManager;
     _options         = new OptionSet
     {
         {
             "d|directory=", "Backup folder name",
             v => _directory = v
         },
         {
             "includes=", "Include table names, separated by commas, default backup all tables",
             v => _includes = v == null ? null : ListUtils.GetStringList(v)
         },
         {
             "excludes=", "Exclude table names, separated by commas",
             v => _excludes = v == null ? null : ListUtils.GetStringList(v)
         },
         {
             "max-rows=", "Maximum number of rows to backup. All data is backed up by default",
             v => _maxRows = v == null ? 0 : TranslateUtils.ToInt(v)
         },
         {
             "h|help", "Display help",
             v => _isHelp = v != null
         }
     };
 }
示例#2
0
        public async Task <ActionResult <PreviewResult> > Preview([FromBody] PreviewRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId,
                                                            MenuUtils.SitePermissions.MaterialMessage))
            {
                return(Unauthorized());
            }

            var(success, token, errorMessage) = await _wxManager.GetAccessTokenAsync(request.SiteId);

            if (success)
            {
                foreach (var wxName in ListUtils.GetStringList(request.WxNames, Constants.Newline))
                {
                    var mediaId = await _wxManager.PushMaterialAsync(token, MaterialType.Message, request.MaterialId);

                    if (string.IsNullOrEmpty(mediaId))
                    {
                        return(this.Error("操作失败,素材未能上传"));
                    }
                    await _wxManager.PreviewSendAsync(token, MaterialType.Message, mediaId, wxName);
                }
            }

            return(new PreviewResult
            {
                Success = success,
                ErrorMessage = errorMessage
            });
        }
        public async Task <ActionResult <ListResult> > List([FromRoute] int siteId, [FromRoute] int formId, [FromQuery] ListRequest request)
        {
            var formInfo = await _formRepository.GetFormInfoAsync(siteId, formId);

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

            var styles = await _formManager.GetTableStylesAsync(formInfo.Id);

            var listAttributeNames = ListUtils.GetStringList(formInfo.ListAttributeNames);
            var allAttributeNames  = _formRepository.GetAllAttributeNames(styles);
            var pageSize           = _formManager.GetPageSize(formInfo);

            var(total, dataInfoList) = await _dataRepository.GetDataAsync(formInfo, formInfo.IsReply, request.Word, request.Page, pageSize);

            var items = dataInfoList;

            var columns = _formManager.GetColumns(listAttributeNames, styles, formInfo.IsReply);

            return(new ListResult
            {
                Items = items,
                Total = total,
                PageSize = pageSize,
                Styles = styles,
                AllAttributeNames = allAttributeNames,
                ListAttributeNames = listAttributeNames,
                IsReply = formInfo.IsReply,
                Columns = columns
            });
        }
示例#4
0
 private static void OrWhereNotIn(Query query, QueryInfo queryInfo)
 {
     if (!string.IsNullOrEmpty(queryInfo.Column) && !string.IsNullOrEmpty(queryInfo.Value))
     {
         if (queryInfo.DataType == Datory.DataType.VarChar)
         {
             query.OrWhereNotIn(queryInfo.Column, ListUtils.GetStringList(queryInfo.Value));
         }
         else if (queryInfo.DataType == Datory.DataType.Integer)
         {
             query.OrWhereNotIn(queryInfo.Column, ListUtils.GetIntList(queryInfo.Value));
         }
         else if (queryInfo.DataType == Datory.DataType.DateTime)
         {
             var list = ListUtils.GetStringList(queryInfo.Value)
                        .Select(TranslateUtils.ToDateTime);
             query.OrWhereNotIn(queryInfo.Column, list);
         }
         else if (queryInfo.DataType == Datory.DataType.Decimal)
         {
             var list = ListUtils.GetStringList(queryInfo.Value)
                        .Select(x => TranslateUtils.ToDecimal(x));
             query.OrWhereNotIn(queryInfo.Column, list);
         }
     }
 }
示例#5
0
        public async Task <ActionResult <GetResult> > Get([FromQuery] GetRequest request)
        {
            if (!await _authManager.HasAppPermissionsAsync(Types.AppPermissions.PluginsAdd))
            {
                return(Unauthorized());
            }

            var pluginIds      = ListUtils.GetStringList(request.PluginIds);
            var pluginPathDict = new Dictionary <string, string>();

            foreach (var pluginId in pluginIds)
            {
                var plugin = _pluginManager.GetPlugin(pluginId);
                if (plugin != null)
                {
                    var assemblyPath = plugin.GetAssemblyPath();
                    pluginPathDict[pluginId] = assemblyPath;
                }
            }

            return(new GetResult
            {
                CmsVersion = _settingsManager.Version,
                PluginPathDict = pluginPathDict
            });
        }
示例#6
0
        public async Task <ActionResult <GetResult> > Get([FromQuery] FormRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId, FormManager.PermissionsForms))
            {
                return(Unauthorized());
            }

            var formInfo = await _formRepository.GetFormInfoAsync(request.SiteId, request.FormId);

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

            var styles = await _formManager.GetTableStylesAsync(formInfo.Id);

            var attributeNames = _formRepository.GetAllAttributeNames(styles);

            attributeNames.Remove(nameof(DataInfo.IsReplied));
            attributeNames.Remove(nameof(DataInfo.ReplyDate));
            attributeNames.Remove(nameof(DataInfo.ReplyContent));
            var administratorSmsNotifyKeys = ListUtils.GetStringList(formInfo.AdministratorSmsNotifyKeys);
            var userSmsNotifyKeys          = ListUtils.GetStringList(formInfo.UserSmsNotifyKeys);

            return(new GetResult
            {
                Form = formInfo,
                Styles = styles,
                AttributeNames = attributeNames,
                AdministratorSmsNotifyKeys = administratorSmsNotifyKeys,
                UserSmsNotifyKeys = userSmsNotifyKeys
            });
        }
示例#7
0
 private static void Select(Query query, QueryInfo queryInfo)
 {
     if (!string.IsNullOrEmpty(queryInfo.Value))
     {
         query.Select(ListUtils.GetStringList(queryInfo.Value).ToArray());
     }
 }
示例#8
0
        public async Task <ActionResult <GetResult> > Get([FromQuery] CommentRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId, CommentManager.PermissionsSettings))
            {
                return(Unauthorized());
            }

            var settings = await _commentManager.GetSettingsAsync(request.SiteId);

            var administratorSmsNotifyKeys = ListUtils.GetStringList(settings.AdministratorSmsNotifyKeys);
            var userSmsNotifyKeys          = ListUtils.GetStringList(settings.UserSmsNotifyKeys);

            var isSmsEnabled = await _smsManager.IsEnabledAsync();

            var isMailEnabled = await _mailManager.IsEnabledAsync();

            return(new GetResult
            {
                Settings = settings,
                AdministratorSmsNotifyKeys = administratorSmsNotifyKeys,
                UserSmsNotifyKeys = userSmsNotifyKeys,
                IsSmsEnabled = isSmsEnabled,
                IsMailEnabled = isMailEnabled
            });
        }
        public async Task <ActionResult <StringResult> > Submit([FromBody] SubmitRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId, GatherManager.PermissionsList))
            {
                return(Unauthorized());
            }

            var rule = await _ruleRepository.GetAsync(request.RuleId);

            rule.ChannelId = request.ChannelId;
            rule.IsChecked = request.IsChecked;

            await _ruleRepository.UpdateAsync(rule);

            var urls  = ListUtils.GetStringList(request.Urls, '\n');
            var items = urls.Select(x => new Item
            {
                Url     = x,
                Content = new Content()
            }).ToList();

            var guid = _gatherManager.Single(_authManager.AdminId, request.SiteId, request.RuleId, request.ChannelId, items);

            return(new StringResult
            {
                Value = guid
            });
        }
示例#10
0
        private static async Task <bool> TestTypeUpChannelAsync(IParseManager parseManager, string testOperate, string testValue)
        {
            var databaseManager = parseManager.DatabaseManager;
            var pageInfo        = parseManager.PageInfo;
            var contextInfo     = parseManager.ContextInfo;

            var isSuccess = false;

            if (StringUtils.EqualsIgnoreCase(testOperate, OperateNotIn))
            {
                var channelIndexes = ListUtils.GetStringList(testValue);
                var isIn           = false;
                foreach (var channelIndex in channelIndexes)
                {
                    //var parentId = databaseManager.ChannelRepository.GetIdByIndexName(pageInfo.SiteId, channelIndex);
                    var parentId = await databaseManager.ChannelRepository.GetChannelIdByIndexNameAsync(pageInfo.SiteId, channelIndex);

                    if (parentId != pageInfo.PageChannelId &&
                        await databaseManager.ChannelRepository.IsAncestorOrSelfAsync(pageInfo.SiteId, parentId, pageInfo.PageChannelId))
                    {
                        isIn = true;
                        break;
                    }
                }
                if (!isIn)
                {
                    isSuccess = true;
                }
            }
            else
            {
                if (string.IsNullOrEmpty(testValue))
                {
                    if (contextInfo.ChannelId != pageInfo.PageChannelId &&
                        await databaseManager.ChannelRepository.IsAncestorOrSelfAsync(pageInfo.SiteId, contextInfo.ChannelId, pageInfo.PageChannelId))
                    {
                        isSuccess = true;
                    }
                }
                else
                {
                    var channelIndexes = ListUtils.GetStringList(testValue);
                    foreach (var channelIndex in channelIndexes)
                    {
                        //var parentId = databaseManager.ChannelRepository.GetIdByIndexName(pageInfo.SiteId, channelIndex);
                        var parentId = await databaseManager.ChannelRepository.GetChannelIdByIndexNameAsync(pageInfo.SiteId, channelIndex);

                        if (parentId != pageInfo.PageChannelId &&
                            await databaseManager.ChannelRepository.IsAncestorOrSelfAsync(pageInfo.SiteId, parentId, pageInfo.PageChannelId))
                        {
                            isSuccess = true;
                            break;
                        }
                    }
                }
            }
            return(isSuccess);
        }
示例#11
0
        public async Task <bool> IsScopeAsync(string token, string scope)
        {
            if (string.IsNullOrEmpty(token))
            {
                return(false);
            }

            var tokenInfo = await GetByTokenAsync(token);

            return(tokenInfo != null && ListUtils.ContainsIgnoreCase(ListUtils.GetStringList(tokenInfo.Scopes), scope));
        }
示例#12
0
        public async Task ImportChannelAsync(Channel channel, ScopedElementCollection additionalElements, int parentId, IList indexNameList)
        {
            channel.LoadExtend(AtomUtility.GetDcElementContent(additionalElements, "ExtendValues"));

            channel.ChannelName = AtomUtility.GetDcElementContent(additionalElements, new List <string> {
                nameof(Channel.ChannelName), "NodeName"
            });
            channel.SiteId = _site.Id;
            var contentModelPluginId = AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.ContentModelPluginId));

            if (!string.IsNullOrEmpty(contentModelPluginId))
            {
                channel.ContentModelPluginId = contentModelPluginId;
            }
            channel.ParentId = parentId;
            var indexName = AtomUtility.GetDcElementContent(additionalElements, new List <string> {
                nameof(Channel.IndexName), "NodeIndexName"
            });

            if (!string.IsNullOrEmpty(indexName) && indexNameList.IndexOf(indexName) == -1)
            {
                channel.IndexName = indexName;
                indexNameList.Add(indexName);
            }
            channel.GroupNames = ListUtils.GetStringList(AtomUtility.GetDcElementContent(additionalElements, new List <string> {
                nameof(Channel.GroupNames), "NodeGroupNameCollection"
            }));
            channel.AddDate             = DateTime.Now;
            channel.ImageUrl            = AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.ImageUrl));
            channel.Content             = AtomUtility.Decrypt(AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.Content)));
            channel.FilePath            = AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.FilePath));
            channel.ChannelFilePathRule = AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.ChannelFilePathRule));
            channel.ContentFilePathRule = AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.ContentFilePathRule));

            channel.LinkUrl  = AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.LinkUrl));
            channel.LinkType = TranslateUtils.ToEnum(AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.LinkType)), LinkType.None);

            var channelTemplateName = AtomUtility.GetDcElementContent(additionalElements, ChannelTemplateName);

            if (!string.IsNullOrEmpty(channelTemplateName))
            {
                channel.ChannelTemplateId = await _databaseManager.TemplateRepository.GetTemplateIdByTemplateNameAsync(_site.Id, TemplateType.ChannelTemplate, channelTemplateName);
            }
            var contentTemplateName = AtomUtility.GetDcElementContent(additionalElements, ContentTemplateName);

            if (!string.IsNullOrEmpty(contentTemplateName))
            {
                channel.ContentTemplateId = await _databaseManager.TemplateRepository.GetTemplateIdByTemplateNameAsync(_site.Id, TemplateType.ContentTemplate, contentTemplateName);
            }

            channel.Keywords    = AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.Keywords));
            channel.Description = AtomUtility.GetDcElementContent(additionalElements, nameof(Channel.Description));
        }
示例#13
0
 private static void OrWhereNotBetween(Query query, QueryInfo queryInfo)
 {
     if (!string.IsNullOrEmpty(queryInfo.Column) && !string.IsNullOrEmpty(queryInfo.Value))
     {
         var pair = ListUtils.GetStringList(queryInfo.Value);
         if (pair != null && pair.Count == 2)
         {
             var start = GetValue(queryInfo.DataType, pair[0]);
             var end   = GetValue(queryInfo.DataType, pair[1]);
             query.OrWhereNotBetween(queryInfo.Column, start, end);
         }
     }
 }
        public async Task <ActionResult <ConfigResult> > GetConfig([FromQuery] SiteRequest request)
        {
            var siteIds = await _authManager.GetSiteIdsAsync();

            if (!ListUtils.Contains(siteIds, request.SiteId))
            {
                return(Unauthorized());
            }

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

            return(new ConfigResult
            {
                ImageActionName = "uploadImage",
                ImageFieldName = "file",
                ImageMaxSize = site.ImageUploadTypeMaxSize * 1024,
                ImageAllowFiles = ListUtils.GetStringList(site.ImageUploadExtensions),
                ImageCompressEnable = false,
                ImageCompressBorder = 1600,
                ImageInsertAlign = "none",
                ImageUrlPrefix = "",
                ImagePathFormat = "",
                ScrawlActionName = "uploadScrawl",
                ScrawlFieldName = "file",
                ScrawlPathFormat = "",
                ScrawlMaxSize = site.ImageUploadTypeMaxSize * 1024,
                ScrawlUrlPrefix = "",
                ScrawlInsertAlign = "none",
                VideoActionName = "uploadVideo",
                VideoFieldName = "file",
                VideoUrlPrefix = "",
                VideoMaxSize = site.VideoUploadTypeMaxSize * 1024,
                VideoAllowFiles = ListUtils.GetStringList(site.VideoUploadExtensions),
                FileActionName = "uploadFile",
                FileFieldName = "file",
                FileUrlPrefix = "",
                FileMaxSize = site.FileUploadTypeMaxSize * 1024,
                FileAllowFiles = ListUtils.GetStringList($"{site.ImageUploadExtensions},{site.VideoUploadExtensions},{site.FileUploadExtensions}"),
                ImageManagerActionName = "listImage",
                ImageManagerListSize = 20,
                ImageManagerUrlPrefix = "",
                ImageManagerInsertAlign = "none",
                ImageManagerAllowFiles = ListUtils.GetStringList(site.ImageUploadExtensions),
                FileManagerActionName = "listFile",
                FileManagerListSize = 20,
                FileManagerUrlPrefix = "",
                FileManagerAllowFiles = ListUtils.GetStringList($"{site.ImageUploadExtensions},{site.VideoUploadExtensions},{site.FileUploadExtensions}")
            });
        }
示例#15
0
        public async Task <List <ContentColumn> > GetChannelListColumnsAsync(Site site)
        {
            var columns     = new List <ContentColumn>();
            var listColumns = ListUtils.GetStringList(site.ChannelListColumns);

            if (listColumns.Count == 0)
            {
                listColumns.Add(nameof(Channel.ChannelName));
                listColumns.Add(nameof(Channel.IndexName));
                listColumns.Add(nameof(Channel.GroupNames));
            }

            var styles = GetChannelListStyles(await _databaseManager.TableStyleRepository.GetChannelStylesAsync(await _databaseManager.ChannelRepository.GetAsync(site.Id)));

            foreach (var style in styles)
            {
                if (string.IsNullOrEmpty(style.DisplayName) || style.InputType == InputType.TextEditor)
                {
                    continue;
                }

                var column = new ContentColumn
                {
                    AttributeName = style.AttributeName,
                    DisplayName   = style.DisplayName,
                    InputType     = style.InputType
                };
                if (style.AttributeName == nameof(Channel.ChannelName))
                {
                    column.IsList = true;
                }
                else
                {
                    if (ListUtils.ContainsIgnoreCase(listColumns, style.AttributeName))
                    {
                        column.IsList = true;
                    }
                }

                if (!ListUtils.ContainsIgnoreCase(UnSearchableAttributes, style.AttributeName))
                {
                    column.IsSearchable = true;
                }

                columns.Add(column);
            }

            return(columns);
        }
示例#16
0
        public async Task <ActionResult <GetResult> > Get([FromQuery] SiteRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId, Types.SitePermissions.SettingsSite))
            {
                return(Unauthorized());
            }

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

            var entity = new Entity();
            var styles = await GetInputStylesAsync(request.SiteId);

            foreach (var style in styles)
            {
                if (style.InputType == InputType.Image ||
                    style.InputType == InputType.Video ||
                    style.InputType == InputType.File)
                {
                    var count = site.Get(ColumnsManager.GetCountName(style.AttributeName), 0);
                    entity.Set(ColumnsManager.GetCountName(style.AttributeName), count);
                    for (var n = 0; n <= count; n++)
                    {
                        var extendName = ColumnsManager.GetExtendName(style.AttributeName, n);
                        entity.Set(extendName, site.Get(extendName));
                    }
                }
                else if (style.InputType == InputType.CheckBox ||
                         style.InputType == InputType.SelectMultiple)
                {
                    var list = ListUtils.GetStringList(site.Get(style.AttributeName,
                                                                string.Empty));
                    entity.Set(style.AttributeName, list);
                }
                else
                {
                    entity.Set(style.AttributeName, site.Get(style.AttributeName));
                }
            }

            var siteUrl = await _pathManager.GetSiteUrlAsync(site, true);

            return(new GetResult
            {
                SiteUrl = StringUtils.TrimEndSlash(siteUrl),
                Entity = entity,
                Styles = styles
            });
        }
示例#17
0
        public DataRestoreJob(ISettingsManager settingsManager, IDataRestoreService restoreService)
        {
            _settingsManager = settingsManager;
            _restoreService  = restoreService;

            _options = new OptionSet {
                { "d|directory=", "Restore folder name",
                  v => _directory = v },
                { "includes=", "Include table names, separated by commas, default restore all tables",
                  v => _includes = v == null ? null : ListUtils.GetStringList(v) },
                { "excludes=", "Exclude table names, separated by commas",
                  v => _excludes = v == null ? null : ListUtils.GetStringList(v) },
                { "h|help", "Display help",
                  v => _isHelp = v != null }
            };
        }
示例#18
0
        public async Task <int> GetChannelIdByLevelAsync(int siteId, int channelId, int upLevel, int topLevel)
        {
            var theChannelId = channelId;
            var channel      = await _databaseManager.ChannelRepository.GetAsync(channelId);

            if (channel != null)
            {
                if (topLevel >= 0)
                {
                    if (topLevel > 0)
                    {
                        if (topLevel < channel.ParentsCount)
                        {
                            var parentIdStrList = ListUtils.GetStringList(ListUtils.ToString(channel.ParentsPath));
                            if (parentIdStrList[topLevel] != null)
                            {
                                var parentIdStr = parentIdStrList[topLevel];
                                theChannelId = TranslateUtils.ToInt(parentIdStr);
                            }
                        }
                    }
                    else
                    {
                        theChannelId = siteId;
                    }
                }
                else if (upLevel > 0)
                {
                    if (upLevel < channel.ParentsCount)
                    {
                        var parentIdStrList = ListUtils.GetStringList(ListUtils.ToString(channel.ParentsPath));
                        if (parentIdStrList[upLevel] != null)
                        {
                            var parentIdStr = parentIdStrList[channel.ParentsCount - upLevel];
                            theChannelId = TranslateUtils.ToInt(parentIdStr);
                        }
                    }
                    else
                    {
                        theChannelId = siteId;
                    }
                }
            }
            return(theChannelId);
        }
示例#19
0
        public DataSyncJob(ISettingsManager settingsManager, IDatabaseManager databaseManager,
                           IDataRestoreService restoreService)
        {
            _settingsManager = settingsManager;
            _databaseManager = databaseManager;
            _restoreService  = restoreService;

            _options = new OptionSet
            {
                {
                    "d|directory=", "Backup folder name",
                    v => _directory = v
                },
                {
                    "from=", "Specify the path or file name of sscms.json configuration file that you want to backup",
                    v => _from = v
                },
                {
                    "to=", "Specify the path or file name of sscms.json configuration file that you want to restore",
                    v => _to = v
                },
                {
                    "includes=", "Include table names, separated by commas, default backup all tables",
                    v => _includes = v == null ? null : ListUtils.GetStringList(v)
                },
                {
                    "excludes=", "Exclude table names, separated by commas",
                    v => _excludes = v == null ? null : ListUtils.GetStringList(v)
                },
                {
                    "max-rows=", "Maximum number of rows to backup, all data is backed up by default",
                    v => _maxRows = v == null ? 0 : TranslateUtils.ToInt(v)
                },
                {
                    "page-size=", "The number of rows fetch at a time, 1000 by default",
                    v => _pageSize = v == null ? CliConstants.DefaultPageSize : TranslateUtils.ToInt(v)
                },
                {
                    "h|help", "Display help",
                    v => _isHelp = v != null
                }
            };
        }
示例#20
0
        public static List <ContentSummary> ParseSummaries(string summaries)
        {
            var channelContentIds = new List <ContentSummary>();

            if (string.IsNullOrEmpty(summaries))
            {
                return(channelContentIds);
            }

            foreach (var channelContentId in ListUtils.GetStringList(summaries))
            {
                var summary = ParseSummary(channelContentId);
                if (summary != null)
                {
                    channelContentIds.Add(summary);
                }
            }

            return(channelContentIds);
        }
示例#21
0
        private static bool TestTypeValues(string testOperate, string testValue, List <string> actualValues)
        {
            var isSuccess = false;

            if (StringUtils.EqualsIgnoreCase(testOperate, OperateEquals) ||
                StringUtils.EqualsIgnoreCase(testOperate, OperateIn))
            {
                var stringList = ListUtils.GetStringList(testValue);

                foreach (var str in stringList)
                {
                    if (!actualValues.Contains(str))
                    {
                        continue;
                    }
                    isSuccess = true;
                    break;
                }
            }
            else if (StringUtils.EqualsIgnoreCase(testOperate, OperateNotEquals) ||
                     StringUtils.EqualsIgnoreCase(testOperate, OperateNotIn))
            {
                var stringList = ListUtils.GetStringList(testValue);

                var isIn = false;
                foreach (var str in stringList)
                {
                    if (!actualValues.Contains(str))
                    {
                        continue;
                    }
                    isIn = true;
                    break;
                }
                if (!isIn)
                {
                    isSuccess = true;
                }
            }
            return(isSuccess);
        }
示例#22
0
        public async Task <ActionResult <BoolResult> > Preview([FromBody] PreviewRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId,
                                                            Types.SitePermissions.WxSend))
            {
                return(Unauthorized());
            }

            var(success, token, errorMessage) = await _wxManager.GetAccessTokenAsync(request.SiteId);

            if (!success)
            {
                return(this.Error(errorMessage));
            }

            if (request.MaterialType == MaterialType.Text)
            {
                foreach (var wxName in ListUtils.GetStringList(request.WxNames, Constants.Newline))
                {
                    await _wxManager.PreviewSendAsync(token, request.MaterialType, request.Text, wxName);
                }
            }
            else
            {
                var mediaId = await _wxManager.PushMaterialAsync(token, request.MaterialType, request.MaterialId);

                if (string.IsNullOrEmpty(mediaId))
                {
                    return(this.Error("操作失败,素材未能上传"));
                }
                foreach (var wxName in ListUtils.GetStringList(request.WxNames, Constants.Newline))
                {
                    await _wxManager.PreviewSendAsync(token, request.MaterialType, mediaId, wxName);
                }
            }

            return(new BoolResult
            {
                Value = true
            });
        }
示例#23
0
        public async Task <ActionResult <GetResult> > Get([FromQuery] GetRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId, FormManager.PermissionsForms))
            {
                return(Unauthorized());
            }

            var formInfo = await _formRepository.GetFormInfoAsync(request.SiteId, request.FormId);

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

            var styles = await _formManager.GetTableStylesAsync(formInfo.Id);

            var listAttributeNames = ListUtils.GetStringList(formInfo.ListAttributeNames);
            var allAttributeNames  = _formRepository.GetAllAttributeNames(styles);
            var pageSize           = _formManager.GetPageSize(formInfo);

            var(total, dataInfoList) = await _dataRepository.GetDataAsync(formInfo, false, null, request.Page, pageSize);

            var items = dataInfoList;

            var columns = _formManager.GetColumns(listAttributeNames, styles, formInfo.IsReply);

            return(new GetResult
            {
                Items = items,
                Total = total,
                PageSize = pageSize,
                Styles = styles,
                AllAttributeNames = allAttributeNames,
                ListAttributeNames = listAttributeNames,
                IsReply = formInfo.IsReply,
                Columns = columns
            });
        }
示例#24
0
        public async Task <Site> GetSiteByDirectoryAsync(string directory)
        {
            if (string.IsNullOrEmpty(directory))
            {
                var summaries = await GetSummariesAsync();

                foreach (var summary in summaries)
                {
                    if (summary.Root)
                    {
                        return(await GetAsync(summary.Id));
                    }
                }
                return(null);
            }

            var dirs     = ListUtils.GetStringList(directory.Trim('/'), '/');
            var parentId = 0;

            Site site = null;

            foreach (var dir in dirs)
            {
                site = await GetSiteAsync(parentId, dir);

                if (site != null)
                {
                    parentId = site.Id;
                }
                else
                {
                    return(null);
                }
            }

            return(site);
        }
示例#25
0
        public DataSyncJob(ISettingsManager settingsManager, IDatabaseManager databaseManager, IDataRestoreService restoreService)
        {
            _settingsManager = settingsManager;
            _databaseManager = databaseManager;
            _restoreService  = restoreService;

            _options = new OptionSet
            {
                { "d|directory=", "指定保存备份文件的文件夹名称",
                  v => _directory = v },
                { "from=", "指定需要备份的配置文件sscms.json路径或文件名",
                  v => _from = v },
                { "to=", "指定需要恢复的配置文件sscms.json路径或文件名",
                  v => _to = v },
                { "includes=", "指定需要备份的表,多个表用英文逗号隔开,默认备份所有表",
                  v => _includes = v == null ? null : ListUtils.GetStringList(v) },
                { "excludes=", "指定需要排除的表,多个表用英文逗号隔开",
                  v => _excludes = v == null ? null : ListUtils.GetStringList(v) },
                { "max-rows=", "指定需要备份的表的最大行数",
                  v => _maxRows = v == null ? 0 : TranslateUtils.ToInt(v) },
                { "h|help", "Display help",
                  v => _isHelp = v != null }
            };
        }
示例#26
0
        public async Task <string> GetContentByTableStyleAsync(string content, string separator, Site site, TableStyle style, string formatString, NameValueCollection attributes, string innerHtml, bool isStlEntity)
        {
            var parsedContent = content;

            var inputType = style.InputType;

            if (inputType == InputType.Date)
            {
                var dateTime = TranslateUtils.ToDateTime(content);
                if (dateTime != Constants.SqlMinValue)
                {
                    if (string.IsNullOrEmpty(formatString))
                    {
                        formatString = DateUtils.FormatStringDateOnly;
                    }
                    parsedContent = DateUtils.Format(dateTime, formatString);
                }
                else
                {
                    parsedContent = string.Empty;
                }
            }
            else if (inputType == InputType.DateTime)
            {
                var dateTime = TranslateUtils.ToDateTime(content);
                if (dateTime != Constants.SqlMinValue)
                {
                    if (string.IsNullOrEmpty(formatString))
                    {
                        formatString = DateUtils.FormatStringDateTime;
                    }
                    parsedContent = DateUtils.Format(dateTime, formatString);
                }
                else
                {
                    parsedContent = string.Empty;
                }
            }
            else if (inputType == InputType.CheckBox || inputType == InputType.Radio || inputType == InputType.SelectMultiple || inputType == InputType.SelectOne)//选择类型
            {
                var selectedTexts  = new List <string>();
                var selectedValues = ListUtils.GetStringList(content);
                var styleItems     = style.Items;
                if (styleItems != null)
                {
                    foreach (var itemInfo in styleItems)
                    {
                        if (selectedValues.Contains(itemInfo.Value))
                        {
                            selectedTexts.Add(isStlEntity ? itemInfo.Value : itemInfo.Label);
                        }
                    }
                }

                parsedContent = separator == null?ListUtils.ToString(selectedTexts) : ListUtils.ToString(selectedTexts, separator);
            }
            //else if (style.InputType == InputType.TextArea)
            //{
            //    parsedContent = StringUtils.ReplaceNewlineToBR(parsedContent);
            //}
            else if (inputType == InputType.TextEditor)
            {
                parsedContent = await _pathManager.DecodeTextEditorAsync(site, parsedContent, true);
            }
            else if (inputType == InputType.Image)
            {
                parsedContent = await GetImageOrFlashHtmlAsync(site, parsedContent, attributes, isStlEntity);
            }
            else if (inputType == InputType.Video)
            {
                parsedContent = await GetVideoHtmlAsync(site, parsedContent, attributes, isStlEntity);
            }
            else if (inputType == InputType.File)
            {
                parsedContent = GetFileHtmlWithoutCount(site, parsedContent, attributes, innerHtml, isStlEntity, false, false);
            }

            return(parsedContent);
        }
        public async Task <ActionResult <BoolResult> > Submit([FromBody] SubmitRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId,
                                                            MenuUtils.SitePermissions.Contents) ||
                !await _authManager.HasContentPermissionsAsync(request.SiteId, request.ChannelId, MenuUtils.ContentPermissions.Edit))
            {
                return(Unauthorized());
            }

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

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

            var allTagNames = await _contentTagRepository.GetTagNamesAsync(request.SiteId);

            foreach (var tagName in request.TagNames)
            {
                if (!allTagNames.Contains(tagName))
                {
                    await _contentTagRepository.InsertAsync(request.SiteId, tagName);
                }
            }

            var summaries = ContentUtility.ParseSummaries(request.ChannelContentIds);

            foreach (var summary in summaries)
            {
                var channel = await _channelRepository.GetAsync(summary.ChannelId);

                var content = await _contentRepository.GetAsync(site, channel, summary.Id);

                if (content == null)
                {
                    continue;
                }

                var list = new List <string>();
                foreach (var tagName in ListUtils.GetStringList(content.TagNames))
                {
                    if (allTagNames.Contains(tagName))
                    {
                        list.Add(tagName);
                    }
                }

                foreach (var name in request.TagNames)
                {
                    if (request.IsCancel)
                    {
                        if (list.Contains(name))
                        {
                            list.Remove(name);
                        }
                    }
                    else
                    {
                        if (!list.Contains(name))
                        {
                            list.Add(name);
                        }
                    }
                }
                content.TagNames = list;

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

            await _authManager.AddSiteLogAsync(request.SiteId, request.IsCancel? "批量取消内容标签" : "批量设置内容标签");

            return(new BoolResult
            {
                Value = true
            });
        }
示例#28
0
        public static async Task <string> GetContentsItemTemplateStringAsync(string templateString, NameValueCollection selectedItems, NameValueCollection selectedValues, string containerClientId, IParseManager parseManager, ParseType contextType)
        {
            var context = parseManager.ContextInfo;

            var pageInfo      = parseManager.PageInfo;
            var itemContainer = DbItemContainer.GetItemContainer(pageInfo);
            var content       = itemContainer.ContentItem.Value;

            parseManager.ContextInfo                   = parseManager.ContextInfo.Clone();
            parseManager.ContextInfo.ContextType       = contextType;
            parseManager.ContextInfo.ItemContainer     = itemContainer;
            parseManager.ContextInfo.ContainerClientId = containerClientId;
            parseManager.ContextInfo.ChannelId         = content.ChannelId;
            parseManager.ContextInfo.ContentId         = content.Id;
            parseManager.ContextInfo.SetContent(content);

            var preSite          = pageInfo.Site;
            var prePageChannelId = pageInfo.PageChannelId;
            var prePageContentId = pageInfo.PageContentId;

            if (content.SiteId != pageInfo.SiteId)
            {
                var siteInfo = await parseManager.DatabaseManager.SiteRepository.GetAsync(content.SiteId);

                parseManager.ContextInfo.Site = siteInfo;
                pageInfo.ChangeSite(siteInfo, siteInfo.Id, 0, parseManager.ContextInfo);
            }

            var theTemplateString = string.Empty;

            if (selectedItems != null && selectedItems.Count > 0)
            {
                foreach (var itemTypes in selectedItems.AllKeys)
                {
                    var itemTypeArrayList = ListUtils.GetStringList(itemTypes);
                    var isTrue            = true;
                    foreach (var itemType in itemTypeArrayList)
                    {
                        var(success, contentTemplateString) = await IsContentTemplateStringAsync(itemType, itemTypes,
                                                                                                 selectedItems, selectedValues, parseManager);

                        if (!success)
                        {
                            isTrue = false;
                        }
                        else
                        {
                            theTemplateString = contentTemplateString;
                        }
                    }
                    if (isTrue)
                    {
                        break;
                    }
                    theTemplateString = string.Empty;
                }
            }

            if (string.IsNullOrEmpty(theTemplateString))
            {
                theTemplateString = templateString;
            }

            var innerBuilder = new StringBuilder(theTemplateString);
            await parseManager.ParseInnerContentAsync(innerBuilder);

            DbItemContainer.PopContentItem(pageInfo);

            if (content.SiteId != pageInfo.SiteId)
            {
                pageInfo.ChangeSite(preSite, prePageChannelId, prePageContentId, parseManager.ContextInfo);
            }

            parseManager.ContextInfo = context;

            return(innerBuilder.ToString());
        }
示例#29
0
        public string GetStlWhereString(int siteId, string group, string groupNot, string tags, bool isTopExists, bool isTop, string where)
        {
            var whereStringBuilder = new StringBuilder();

            if (isTopExists)
            {
                whereStringBuilder.Append($" AND IsTop = '{isTop}' ");
            }

            var databaseType = Database.DatabaseType;

            if (!string.IsNullOrEmpty(group))
            {
                group = group.Trim().Trim(',');
                var groupArr = group.Split(',');
                if (groupArr.Length > 0)
                {
                    whereStringBuilder.Append(" AND (");
                    foreach (var theGroup in groupArr)
                    {
                        var trimGroup = theGroup.Trim();

                        whereStringBuilder.Append(
                            $" ({nameof(Content.GroupNames)} = '{AttackUtils.FilterSql(trimGroup)}' OR {SqlUtils.GetInStr(databaseType, nameof(Content.GroupNames), trimGroup + ",")} OR {SqlUtils.GetInStr(databaseType, nameof(Content.GroupNames), "," + trimGroup + ",")} OR {SqlUtils.GetInStr(databaseType, nameof(Content.GroupNames), "," + trimGroup)}) OR ");
                    }
                    if (groupArr.Length > 0)
                    {
                        whereStringBuilder.Length -= 3;
                    }
                    whereStringBuilder.Append(") ");
                }
            }

            if (!string.IsNullOrEmpty(groupNot))
            {
                groupNot = groupNot.Trim().Trim(',');
                var groupNotArr = groupNot.Split(',');
                if (groupNotArr.Length > 0)
                {
                    whereStringBuilder.Append(" AND (");
                    foreach (var theGroupNot in groupNotArr)
                    {
                        //whereStringBuilder.Append(
                        //    $" ({ContentAttribute.GroupNameCollection} <> '{theGroupNot.Trim()}' AND CHARINDEX('{theGroupNot.Trim()},',{ContentAttribute.GroupNameCollection}) = 0 AND CHARINDEX(',{theGroupNot.Trim()},',{ContentAttribute.GroupNameCollection}) = 0 AND CHARINDEX(',{theGroupNot.Trim()}',{ContentAttribute.GroupNameCollection}) = 0) AND ");

                        whereStringBuilder.Append(
                            $" ({nameof(Content.GroupNames)} <> '{theGroupNot.Trim()}' AND {SqlUtils.GetNotInStr(databaseType, nameof(Content.GroupNames), theGroupNot.Trim() + ",")} AND {SqlUtils.GetNotInStr(databaseType, nameof(Content.GroupNames), "," + theGroupNot.Trim() + ",")} AND {SqlUtils.GetNotInStr(databaseType, nameof(Content.GroupNames), "," + theGroupNot.Trim())}) AND ");
                    }
                    if (groupNotArr.Length > 0)
                    {
                        whereStringBuilder.Length -= 4;
                    }
                    whereStringBuilder.Append(") ");
                }
            }

            if (!string.IsNullOrEmpty(tags))
            {
                tags = tags.Trim().Trim(',');
                var tagNames = ListUtils.GetStringList(tags);
                if (tagNames.Count > 0)
                {
                    whereStringBuilder.Append(" AND (");
                    foreach (var tagName in tagNames)
                    {
                        whereStringBuilder.Append(
                            $" ({nameof(Content.TagNames)} = '{AttackUtils.FilterSql(tagName)}' OR {SqlUtils.GetInStr(databaseType, nameof(Content.TagNames), tagName + ",")} OR {SqlUtils.GetInStr(databaseType, nameof(Content.TagNames), "," + tagName + ",")} OR {SqlUtils.GetInStr(databaseType, nameof(Content.TagNames), "," + tagName)}) OR ");
                    }
                    whereStringBuilder.Length -= 3;
                    whereStringBuilder.Append(") ");
                }
            }

            if (!string.IsNullOrEmpty(where))
            {
                whereStringBuilder.Append($" AND ({where}) ");
            }

            return(whereStringBuilder.ToString());
        }
示例#30
0
        public string GetStlWhereString(int siteId, string group, string groupNot, string tags, bool isImageExists, bool isImage, bool isVideoExists, bool isVideo, bool isFileExists, bool isFile, bool isTopExists, bool isTop, bool isRecommendExists, bool isRecommend, bool isHotExists, bool isHot, bool isColorExists, bool isColor, string where)
        {
            var whereBuilder = new StringBuilder();

            whereBuilder.Append($" AND SiteId = {siteId} ");

            if (isImageExists)
            {
                whereBuilder.Append(isImage
                    ? $" AND {nameof(Content.ImageUrl)} <> '' "
                    : $" AND {nameof(Content.ImageUrl)} = '' ");
            }

            if (isVideoExists)
            {
                whereBuilder.Append(isVideo
                    ? $" AND {nameof(Content.VideoUrl)} <> '' "
                    : $" AND {nameof(Content.VideoUrl)} = '' ");
            }

            if (isFileExists)
            {
                whereBuilder.Append(isFile
                    ? $" AND {nameof(Content.FileUrl)} <> '' "
                    : $" AND {nameof(Content.FileUrl)} = '' ");
            }

            if (isTopExists)
            {
                whereBuilder.Append($" AND {nameof(Content.Top)} = {StringUtils.ToLower(isTop.ToString())} ");
            }

            if (isRecommendExists)
            {
                whereBuilder.Append($" AND {nameof(Content.Recommend)} = {StringUtils.ToLower(isRecommend.ToString())} ");
            }

            if (isHotExists)
            {
                whereBuilder.Append($" AND {nameof(Content.Hot)} = {StringUtils.ToLower(isHot.ToString())} ");
            }

            if (isColorExists)
            {
                whereBuilder.Append($" AND {nameof(Content.Color)} = {StringUtils.ToLower(isColor.ToString())} ");
            }

            var databaseType = _settingsManager.Database.DatabaseType;

            if (!string.IsNullOrEmpty(group))
            {
                group = group.Trim().Trim(',');
                var groups = ListUtils.GetStringList(group);
                if (groups.Count > 0)
                {
                    whereBuilder.Append(" AND (");
                    foreach (var theGroup in groups)
                    {
                        var trimGroup = theGroup.Trim();

                        whereBuilder.Append(
                            $" ({nameof(Content.GroupNames)} = '{AttackUtils.FilterSql(trimGroup)}' OR {SqlUtils.GetInStr(databaseType, nameof(Content.GroupNames), trimGroup + ",")} OR {SqlUtils.GetInStr(databaseType, nameof(Content.GroupNames), "," + trimGroup + ",")} OR {SqlUtils.GetInStr(databaseType, nameof(Content.GroupNames), "," + trimGroup)}) OR ");
                    }
                    whereBuilder.Length -= 3;
                    whereBuilder.Append(") ");
                }
            }

            if (!string.IsNullOrEmpty(groupNot))
            {
                groupNot = groupNot.Trim().Trim(',');
                var groupNots = ListUtils.GetStringList(groupNot);
                if (groupNots.Count > 0)
                {
                    whereBuilder.Append(" AND (");
                    foreach (var theGroupNot in groupNots)
                    {
                        var trimGroup = theGroupNot.Trim();
                        //whereBuilder.Append(
                        //    $" ({ContentAttribute.GroupNameCollection} <> '{trimGroup}' AND CHARINDEX('{trimGroup},',{ContentAttribute.GroupNameCollection}) = 0 AND CHARINDEX(',{trimGroup},',{ContentAttribute.GroupNameCollection}) = 0 AND CHARINDEX(',{trimGroup}',{ContentAttribute.GroupNameCollection}) = 0) AND ");

                        whereBuilder.Append(
                            $" ({nameof(Content.GroupNames)} <> '{trimGroup}' AND {SqlUtils.GetNotInStr(databaseType, nameof(Content.GroupNames), trimGroup + ",")} AND {SqlUtils.GetNotInStr(databaseType, nameof(Content.GroupNames), "," + trimGroup + ",")} AND {SqlUtils.GetNotInStr(databaseType, nameof(Content.GroupNames), "," + trimGroup)}) AND ");
                    }
                    whereBuilder.Length -= 4;
                    whereBuilder.Append(") ");
                }
            }

            if (!string.IsNullOrEmpty(tags))
            {
                tags = tags.Trim().Trim(',');
                var tagNames = ListUtils.GetStringList(tags);
                if (tagNames.Count > 0)
                {
                    whereBuilder.Append(" AND (");
                    foreach (var tagName in tagNames)
                    {
                        whereBuilder.Append(
                            $" ({nameof(Content.TagNames)} = '{AttackUtils.FilterSql(tagName)}' OR {SqlUtils.GetInStr(databaseType, nameof(Content.TagNames), tagName + ",")} OR {SqlUtils.GetInStr(databaseType, nameof(Content.TagNames), "," + tagName + ",")} OR {SqlUtils.GetInStr(databaseType, nameof(Content.TagNames), "," + tagName)}) OR ");
                    }
                    whereBuilder.Length -= 3;
                    whereBuilder.Append(") ");
                }
            }

            if (!string.IsNullOrEmpty(where))
            {
                whereBuilder.Append($" AND ({where}) ");
            }

            return(whereBuilder.ToString());
        }