public IHttpActionResult Submit()
        {
            try
            {
                var request  = Context.GetCurrentRequest();
                var formInfo = FormManager.GetFormInfoByPost(request);
                if (formInfo == null)
                {
                    return(NotFound());
                }
                if (!request.IsAdminLoggin || !request.AdminPermissions.HasSitePermissions(formInfo.SiteId, FormUtils.PluginId))
                {
                    return(Unauthorized());
                }

                var fieldId = request.GetPostInt("fieldId");
                var value   = request.GetPostString("value");

                var fieldInfo = FieldManager.GetFieldInfo(fieldId);
                fieldInfo.Validate = value;

                FieldDao.Update(fieldInfo, false);

                return(Ok(new{}));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        private bool UpdateFieldInfo(FieldInfo fieldInfo, FieldInfo body, bool isRapid, List <string> rapidValues, out string errorMessage)
        {
            errorMessage = string.Empty;

            fieldInfo.Title     = body.Title;
            fieldInfo.Taxis     = body.Taxis;
            fieldInfo.FieldType = body.FieldType;
            fieldInfo.Items     = new List <FieldItemInfo>();

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

                        var itemInfo = new FieldItemInfo
                        {
                            FieldId    = fieldInfo.Id,
                            Value      = styleItem.Value,
                            IsSelected = styleItem.IsSelected
                        };
                        fieldInfo.Items.Add(itemInfo);
                    }
                }
            }

            FieldDao.Update(fieldInfo, true);

            return(true);
        }
Exemple #3
0
        public override void Startup(IService service)
        {
            FormDao      = new FormDao(ConnectionString, DataApi);
            LogDao       = new LogDao(ConnectionString, DataApi);
            FieldDao     = new FieldDao(ConnectionString, DataApi);
            FieldItemDao = new FieldItemDao(ConnectionString, DataApi);

            service
            .AddSiteMenu(siteId =>
            {
                var formInfoList = FormDao.GetFormInfoListNotInChannel(siteId);
                var menus        = formInfoList.Select(formInfo => new Menu
                {
                    Text = $"{formInfo.Title}",
                    Href = $"{nameof(PageLogs)}.aspx?formId={formInfo.Id}"
                }).ToList();

                menus.Add(new Menu
                {
                    Text = "表单管理",
                    Href = $"{nameof(PageManagement)}.aspx"
                });

                return(new Menu
                {
                    Text = "表单",
                    IconClass = "ion-android-list",
                    Menus = menus
                });
            })
            .AddContentLink(new HyperLink
            {
                Text        = "表单管理",
                NavigateUrl = $"{nameof(PageLogs)}.aspx"
            })
            .AddDatabaseTable(FormDao.TableName, FormDao.Columns)
            .AddDatabaseTable(LogDao.TableName, LogDao.Columns)
            .AddDatabaseTable(FieldDao.TableName, FieldDao.Columns)
            .AddDatabaseTable(FieldItemDao.TableName, FieldItemDao.Columns)
            .AddStlElementParser(StlForm.ElementName, StlForm.Parse)
            ;

            service.ContentTranslateCompleted += Service_ContentTranslateCompleted;
            service.ContentDeleteCompleted    += Service_ContentDeleteCompleted;

            service.ApiPost += ServiceOnApiPost;
            service.ApiGet  += Service_ApiGet;

            Instance = this;
        }
Exemple #4
0
        public IHttpActionResult Delete()
        {
            try
            {
                var request  = Context.GetCurrentRequest();
                var formInfo = FormManager.GetFormInfoByPost(request);
                if (formInfo == null)
                {
                    return(NotFound());
                }
                if (!request.IsAdminLoggin || !request.AdminPermissions.HasSitePermissions(formInfo.SiteId, FormUtils.PluginId))
                {
                    return(Unauthorized());
                }

                var fieldId = request.GetPostInt("fieldId");
                FieldDao.Delete(fieldId);

                var list = new List <object>();
                foreach (var fieldInfo in FieldManager.GetFieldInfoList(formInfo.Id))
                {
                    list.Add(new
                    {
                        fieldInfo.Id,
                        fieldInfo.Title,
                        InputType = FormUtils.GetFieldTypeText(fieldInfo.FieldType),
                        fieldInfo.Validate,
                        fieldInfo.Taxis
                    });
                }

                return(Ok(new
                {
                    Value = list
                }));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
Exemple #5
0
            public static List <KeyValuePair <string, FieldInfo> > GetAllTableStyles()
            {
                var retval = CacheUtils.Get <List <KeyValuePair <string, FieldInfo> > >(CacheKey);

                if (retval != null)
                {
                    return(retval);
                }

                lock (LockObject)
                {
                    retval = CacheUtils.Get <List <KeyValuePair <string, FieldInfo> > >(CacheKey);
                    if (retval == null)
                    {
                        retval = FieldDao.GetAllFieldInfoList();

                        CacheUtils.InsertHours(CacheKey, retval, 12);
                    }
                }

                return(retval);
            }
        private bool InsertFieldInfo(int siteId, int formId, FieldInfo body, bool isRapid, List <string> rapidValues, out string errorMessage)
        {
            errorMessage = string.Empty;

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

            if (FieldDao.IsTitleExists(formId, body.Title))
            {
                errorMessage = $@"显示样式添加失败:字段名""{body.Title}""已存在";
                return(false);
            }

            var fieldInfo = new FieldInfo
            {
                FormId    = formId,
                Title     = body.Title,
                Taxis     = body.Taxis,
                FieldType = body.FieldType,
                Items     = new List <FieldItemInfo>()
            };

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

                        var itemInfo = new FieldItemInfo
                        {
                            Value      = styleItem.Value,
                            IsSelected = styleItem.IsSelected
                        };
                        fieldInfo.Items.Add(itemInfo);
                    }
                }
            }

            FieldDao.Insert(siteId, fieldInfo);

            return(true);
        }
Exemple #7
0
        public void Startup(IContext context, IService service)
        {
            ConnectionString = context.Environment.ConnectionString;
            DataApi          = context.DataApi;
            AdminApi         = context.AdminApi;
            FilesApi         = context.FilesApi;

            Dao          = new Dao(ConnectionString, DataApi);
            PollDao      = new PollDao(ConnectionString, DataApi);
            ItemDao      = new ItemDao(ConnectionString, DataApi);
            LogDao       = new LogDao(ConnectionString, DataApi);
            FieldDao     = new FieldDao(ConnectionString, DataApi);
            FieldItemDao = new FieldItemDao(ConnectionString, DataApi);

            service
            .AddContentLinks(new List <HyperLink>
            {
                //new PluginContentLink
                //{
                //    Text = "编辑投票",
                //    Href = "http://localhost:3000?pageType=edit_items"
                //},
                //new PluginContentLink
                //{
                //    Text = "查看投票",
                //    Href = "http://localhost:3000?pageType=view_items"
                //}
                new HyperLink
                {
                    Text        = "编辑投票",
                    NavigateUrl = "build/index.html"
                },
                new HyperLink
                {
                    Text        = "查看投票",
                    NavigateUrl = $"{nameof(PageResults)}.aspx"
                }
            })
            .AddDatabaseTable(PollDao.TableName, PollDao.Columns)
            .AddDatabaseTable(ItemDao.TableName, ItemDao.Columns)
            .AddDatabaseTable(LogDao.TableName, LogDao.Columns)
            .AddDatabaseTable(FieldDao.TableName, FieldDao.Columns)
            .AddDatabaseTable(FieldItemDao.TableName, FieldItemDao.Columns)
            .AddStlElementParser(StlPoll.ElementName, StlPoll.Parse)
            ;

            service.ContentTranslateCompleted += (sender, args) =>
            {
                var pollInfo = PollDao.GetPollInfo(args.SiteId, args.ChannelId, args.ContentId);
                if (pollInfo == null)
                {
                    return;
                }

                pollInfo.PublishmentSystemId = args.TargetSiteId;
                pollInfo.ChannelId           = args.TargetChannelId;
                pollInfo.ContentId           = args.TargetContentId;
                pollInfo.TimeToStart         = DateTime.Now;
                pollInfo.TimeToEnd           = DateTime.Now.AddYears(1);
                PollDao.Insert(pollInfo);
            };

            service.ContentDeleteCompleted += (sender, args) =>
            {
                PollDao.Delete(args.SiteId, args.ChannelId, args.ContentId);
            };

            service.ApiGet += (sender, args) =>
            {
                var request = args.Request;

                if (!string.IsNullOrEmpty(args.Name) && !string.IsNullOrEmpty(args.Id))
                {
                    if (args.Name == "code")
                    {
                        var response = new HttpResponseMessage();

                        var random       = new Random();
                        var validateCode = "";

                        char[] s = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
                        for (var i = 0; i < 4; i++)
                        {
                            validateCode += s[random.Next(0, s.Length)].ToString();
                        }

                        var validateimage = new Bitmap(75, 25, PixelFormat.Format32bppRgb);

                        var colors = Utils.Colors[random.Next(0, 5)];

                        var g = Graphics.FromImage(validateimage);
                        g.FillRectangle(new SolidBrush(Color.FromArgb(240, 243, 248)), 0, 0, 100, 100);                                                                  //矩形框
                        g.DrawString(validateCode, new Font(FontFamily.GenericSerif, 18, FontStyle.Bold | FontStyle.Italic), new SolidBrush(colors), new PointF(10, 0)); //字体/颜色

                        for (var i = 0; i < 100; i++)
                        {
                            var x = random.Next(validateimage.Width);
                            var y = random.Next(validateimage.Height);

                            validateimage.SetPixel(x, y, Color.FromArgb(random.Next()));
                        }

                        g.Save();
                        var ms = new MemoryStream();
                        validateimage.Save(ms, ImageFormat.Png);

                        request.SetCookie("ss-poll:" + args.Id, validateCode, DateTime.Now.AddDays(1));

                        response.Content = new ByteArrayContent(ms.ToArray());
                        response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
                        response.StatusCode = HttpStatusCode.OK;

                        return(response);
                    }
                    if (args.Name == "logs")
                    {
                        var limit  = request.GetQueryInt("limit");
                        var offset = request.GetQueryInt("offset");

                        var pollId = Convert.ToInt32(args.Id);

                        var totalCount = LogDao.GetCount(pollId);
                        var logs       = LogDao.GetPollLogInfoList(pollId, totalCount, limit, offset);

                        return(new
                        {
                            Logs = logs,
                            TotalCount = totalCount
                        });
                    }
                }
                if (string.IsNullOrEmpty(args.Name) && string.IsNullOrEmpty(args.Id))
                {
                    var siteId    = request.GetQueryInt("siteId");
                    var channelId = request.GetQueryInt("channelId");
                    var contentId = request.GetQueryInt("contentId");

                    var pollInfo = PollDao.GetPollInfo(siteId, channelId, contentId);
                    if (pollInfo == null)
                    {
                        pollInfo = new PollInfo
                        {
                            PublishmentSystemId = siteId,
                            ChannelId           = channelId,
                            ContentId           = contentId,
                            IsImage             = true,
                            IsUrl      = false,
                            IsTimeout  = false,
                            IsCheckbox = true
                        };
                        pollInfo.Id = PollDao.Insert(pollInfo);
                    }
                    var itemInfoList = ItemDao.GetItemInfoList(pollInfo.Id, out int totalCount);

                    return(new
                    {
                        Poll = pollInfo,
                        Items = itemInfoList,
                        TotalCount = totalCount
                    });
                }

                throw new Exception("请求的资源不在服务器上");
            };

            service.ApiDelete += (sender, args) =>
            {
                if (!string.IsNullOrEmpty(args.Name) && !string.IsNullOrEmpty(args.Id) && args.Name == "item")
                {
                    var itemId = Convert.ToInt32(args.Id);
                    ItemDao.Delete(itemId);
                    return(new {});
                }

                throw new Exception("请求的资源不在服务器上");
            };

            service.ApiPost += (sender, args) =>
            {
                var request = args.Request;

                if (!string.IsNullOrEmpty(args.Name) && !string.IsNullOrEmpty(args.Id))
                {
                    if (Utils.EqualsIgnoreCase(args.Name, nameof(StlPoll.ApiSubmit)))
                    {
                        return(StlPoll.ApiSubmit(request, args.Id));
                    }
                }
                if (!string.IsNullOrEmpty(args.Name))
                {
                    var siteId = request.GetQueryInt("siteId");

                    if (args.Name.ToLower() == "item")
                    {
                        var itemInfo = new ItemInfo
                        {
                            PollId   = request.GetPostInt("pollId"),
                            Title    = request.GetPostString("title"),
                            SubTitle = request.GetPostString("subTitle"),
                            ImageUrl = request.GetPostString("imageUrl"),
                            LinkUrl  = request.GetPostString("linkUrl"),
                            Count    = request.GetPostInt("count")
                        };

                        itemInfo.Id = ItemDao.Insert(itemInfo);

                        return(itemInfo);
                    }
                    if (args.Name.ToLower() == "image")
                    {
                        var errorMessage = string.Empty;
                        var imageUrl     = string.Empty;

                        try
                        {
                            if (request.HttpRequest.Files.Count > 0)
                            {
                                var postedFile    = request.HttpRequest.Files[0];
                                var filePath      = postedFile.FileName;
                                var fileExtName   = Path.GetExtension(filePath).ToLower();
                                var localFilePath = FilesApi.GetUploadFilePath(siteId, filePath);

                                if (fileExtName != ".jpg" && fileExtName != ".png")
                                {
                                    errorMessage = "上传图片格式不正确!";
                                }
                                else
                                {
                                    postedFile.SaveAs(localFilePath);
                                    imageUrl = FilesApi.GetSiteUrlByFilePath(localFilePath);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            errorMessage = ex.Message;
                        }

                        if (!string.IsNullOrEmpty(errorMessage))
                        {
                            throw new Exception(errorMessage);
                        }

                        return(imageUrl);
                    }
                }

                throw new Exception("请求的资源不在服务器上");
            };

            service.ApiPut += (sender, args) =>
            {
                var request = args.Request;

                if (!string.IsNullOrEmpty(args.Name) && !string.IsNullOrEmpty(args.Id))
                {
                    var pollId = Convert.ToInt32(args.Id);

                    //if (name.ToLower() == "poll")
                    //{
                    //    var pollInfo = Main.PollDao.GetPollInfo(pollId);

                    //    pollInfo.IsImage = context.GetPostBool("isImage");
                    //    pollInfo.IsUrl = context.GetPostBool("isUrl");
                    //    pollInfo.IsTimeout = context.GetPostBool("isTimeout");
                    //    pollInfo.IsCheckbox = context.GetPostBool("isCheckbox");
                    //    pollInfo.TimeToStart = Convert.ToDateTime(context.GetPostString("timeToStart"));
                    //    pollInfo.TimeToEnd = Convert.ToDateTime(context.GetPostString("timeToEnd"));
                    //    pollInfo.CheckboxMin = context.GetPostInt("checkboxMin");
                    //    pollInfo.CheckboxMax = context.GetPostInt("checkboxMax");
                    //    pollInfo.IsProfile = context.GetPostBool("isProfile");
                    //    pollInfo.IsResult = context.GetPostBool("isResult");

                    //    Main.PollDao.Update(pollInfo);

                    //    return pollInfo;
                    //}
                    if (args.Name.ToLower() == "item")
                    {
                        var itemInfo = ItemDao.GetItemInfo(pollId);

                        itemInfo.Title    = request.GetPostString("title");
                        itemInfo.SubTitle = request.GetPostString("subTitle");
                        itemInfo.ImageUrl = request.GetPostString("imageUrl");
                        itemInfo.LinkUrl  = request.GetPostString("linkUrl");
                        itemInfo.Count    = request.GetPostInt("count");

                        ItemDao.Update(itemInfo);

                        return(itemInfo);
                    }
                }

                throw new Exception("请求的资源不在服务器上");
            };
        }