Пример #1
0
        protected void btnAddMessage_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(tbxNewMessage.Text))
            {
                Guid suggestionId = GetSuggestionIdFromRequest();
                if (suggestionId != Guid.Empty)
                {
                    using (var ctx = new EF.RepositoryContext("LogoDB"))
                    {
                        var suggestion = ctx.Suggestions.Include("Messages").FirstOrDefault(s => s.Id == suggestionId);
                        if (suggestion != null)
                        {
                            suggestion.Messages.Add(new EF.Message()
                            {
                                Id         = Guid.NewGuid(),
                                Created    = DateTime.Now,
                                Suggestion = suggestion,
                                Text       = tbxNewMessage.Text.Trim()
                            });
                            ctx.ChangeTracker.DetectChanges();
                            ctx.SaveChanges();

                            tbxNewMessage.Text    = "";
                            gvMessages.DataSource = suggestion.Messages;
                            gvMessages.DataBind();
                        }
                    }
                }
            }
        }
Пример #2
0
        protected void btnApprove_Click(object sender, EventArgs e)
        {
            Guid suggestionId = GetSuggestionIdFromRequest();

            if (suggestionId != Guid.Empty)
            {
                using (var ctx = new EF.RepositoryContext("LogoDB"))
                {
                    var suggestion = ctx.Suggestions
                                     .Include("Channels")
                                     .Include("Messages")
                                     .Include("Aliases")
                                     .Include("Logos").Include("Logos.Channels").Include("Logos.Channels.Logos")
                                     .FirstOrDefault(s => s.Id == suggestionId);
                    if (suggestion != null)
                    {
                        foreach (var channel in suggestion.Channels)
                        {
                            channel.Suggestion = null;
                        }
                        if (suggestion.Logos.Any())
                        {
                            // delete the old logo (DB object and files) on the channel when suggestion was new logo
                            foreach (var logo in suggestion.Logos.First().Channels.First().Logos.Where(l => l.Suggestion == null).ToList())
                            {
                                logo.Repository = null;
                                logo.Creator    = null;
                                ctx.Logos.Remove(logo);
                                File.Delete(Thumbnailer.GetThumbFilePath(logo.Id));
                                File.Delete(Path.Combine(Server.MapPath("~/Logos"), logo.Id + ".png"));
                            }
                        }
                        foreach (var logo in suggestion.Logos)
                        {
                            logo.Suggestion = null;
                        }
                        foreach (var alias in suggestion.Aliases)
                        {
                            alias.Suggestion = null;
                        }
                        ctx.Messages.RemoveRange(suggestion.Messages);
                        ctx.Suggestions.Remove(suggestion);

                        ctx.ChangeTracker.DetectChanges();
                        ctx.SaveChanges();

                        Response.Redirect("/ListSuggestions.aspx", false);
                        HttpContext.Current.ApplicationInstance.CompleteRequest();
                        this.Visible = false;
                    }
                }
            }
        }
Пример #3
0
        protected void btnDecline_Click(object sender, EventArgs e)
        {
            Guid suggestionId = GetSuggestionIdFromRequest();

            if (suggestionId != Guid.Empty)
            {
                using (var ctx = new EF.RepositoryContext("LogoDB"))
                {
                    var suggestion = ctx.Suggestions
                                     .Include("Channels")
                                     .Include("Messages")
                                     .Include("Aliases")
                                     .Include("Logos")
                                     .FirstOrDefault(s => s.Id == suggestionId);

                    if (suggestion != null)
                    {
                        var logoFilesToDelete = suggestion.Logos.Select(l => l.Id).ToList();

                        ctx.Channels.RemoveRange(suggestion.Channels);
                        ctx.Logos.RemoveRange(suggestion.Logos);
                        ctx.Aliases.RemoveRange(suggestion.Aliases);
                        ctx.Messages.RemoveRange(suggestion.Messages);
                        ctx.Suggestions.Remove(suggestion);

                        ctx.ChangeTracker.DetectChanges();
                        ctx.SaveChanges();

                        logoFilesToDelete.ForEach(l => {
                            var logoFilePath = Path.Combine(Server.MapPath("~/Logos"), l + ".png");
                            if (File.Exists(logoFilePath))
                            {
                                File.Delete(logoFilePath);
                            }
                            var logoThumbPath = Thumbnailer.GetThumbFilePath(l);
                            if (File.Exists(logoThumbPath))
                            {
                                File.Delete(logoThumbPath);
                            }
                        });

                        Response.Redirect("/ListSuggestions.aspx", false);
                        HttpContext.Current.ApplicationInstance.CompleteRequest();
                        this.Visible = false;
                    }
                }
            }
        }
        protected void gvChannels_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "DeleteChannel")
            {
                var channelId = new Guid((string)e.CommandArgument);
                using (var ctx = new EF.RepositoryContext("LogoDB"))
                {
                    var channel = ctx.Channels
                                  .Include("Aliases").Include("Aliases.Suggestion")
                                  .Include("Logos").Include("Logos.Suggestion")
                                  .FirstOrDefault(c => c.Id == channelId);
                    if (channel != null)
                    {
                        foreach (var alias in channel.Aliases.ToList())
                        {
                            if (alias.Suggestion != null)
                            {
                                ctx.Suggestions.Remove(alias.Suggestion);
                            }
                            ctx.Aliases.Remove(alias);
                        }

                        foreach (var logo in channel.Logos.ToList())
                        {
                            if (logo.Suggestion != null)
                            {
                                ctx.Suggestions.Remove(logo.Suggestion);
                            }
                            ctx.Logos.Remove(logo);

                            File.Delete(Thumbnailer.GetThumbFilePath(logo.Id));
                            File.Delete(Path.Combine(Server.MapPath("~/Logos"), logo.Id + ".png"));
                        }

                        ctx.Channels.Remove(channel);

                        ctx.ChangeTracker.DetectChanges();
                        ctx.SaveChanges();
                    }
                }

                BindChannelsGrid();
            }
        }
Пример #5
0
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            try
            {
                using (var ctx = new EF.RepositoryContext("LogoDB"))
                {
                    var repo = ctx.Repositorys.FirstOrDefault();

                    var suggestion = ctx.Suggestions.Create();
                    suggestion.Id           = Guid.NewGuid();
                    suggestion.Created      = DateTime.Now;
                    suggestion.LastModified = DateTime.Now;

                    var membership = System.Web.Security.Membership.GetUser();
                    if (membership != null)
                    {
                        suggestion.User = ctx.Users.FirstOrDefault(u => u.Id == (Guid)membership.ProviderUserKey);
                    }

                    if (!string.IsNullOrEmpty(tbxSuggestionInfo.Text.Trim()))
                    {
                        suggestion.Messages.Add(new Message()
                        {
                            Id = Guid.NewGuid(), Created = DateTime.Now, Suggestion = suggestion, Text = tbxSuggestionInfo.Text.Trim(), User = suggestion.User
                        });
                    }
                    repo.Suggestions.Add(suggestion);

                    Channel channel = null;
                    if (TabContainer1.ActiveTab == tabPanelNewChannel)
                    {
                        string channelName = tbxChannelName.Text.Trim();
                        var    channelType = (ChannelType)byte.Parse(rblChannelType.SelectedValue);

                        if (string.IsNullOrEmpty(channelName))
                        {
                            throw new Exception("Please give the new Channel an unique name!");
                        }

                        if (ctx.Channels.Any(c => c.Name == channelName && c.Type == channelType))
                        {
                            throw new Exception(string.Format("A {0}-Channel '{1}' already exists!", channelType, channelName));
                        }

                        string channelWebsite = tbxChannelWebsite.Text.Trim();
                        if (!string.IsNullOrEmpty(channelWebsite) && !channelWebsite.Contains("://"))
                        {
                            channelWebsite = "http://" + channelWebsite;
                        }

                        channel             = ctx.Channels.Create();
                        channel.Id          = Guid.NewGuid();
                        channel.Suggestion  = suggestion;
                        channel.Name        = channelName;
                        channel.Website     = channelWebsite;
                        channel.RegionCode  = ddlChannelRegion.SelectedValue;
                        channel.Description = tbxChannelDescription.Text.Trim();
                        channel.Type        = channelType;
                        repo.Channels.Add(channel);
                    }
                    else
                    {
                        string channelName = listFoundChannels.SelectedValue;
                        if (string.IsNullOrEmpty(channelName))
                        {
                            throw new Exception("Please select an existing Channel!");
                        }
                        channel = ctx.Channels.Include("Aliases").Include("Logos").FirstOrDefault(c => c.Name == channelName);
                    }

                    foreach (ListItem newAlias in listNewAliases.Items)
                    {
                        string newAliasTrimmed = newAlias.Value.Trim();
                        if (!string.IsNullOrEmpty(newAliasTrimmed))
                        {
                            if (!channel.Aliases.Any(a => a.Name == newAliasTrimmed))
                            {
                                var alias = ctx.Aliases.Create();
                                alias.Id      = Guid.NewGuid();
                                alias.Name    = newAliasTrimmed;
                                alias.Created = DateTime.Now;
                                alias.Channel = channel;
                                channel.Aliases.Add(alias);
                                alias.Suggestion = suggestion;
                            }
                        }
                    }

                    if (channel.Aliases.Count == 0)
                    {
                        throw new Exception("A Channel must have at least one Alias!");
                    }

                    if (uploadLogoFile.HasFile)
                    {
                        // check that file is PNG
                        byte[] logoData = uploadLogoFile.FileBytes;
                        using (MemoryStream ms = new MemoryStream(logoData))
                        {
                            using (System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true, true))
                            {
                                if (image.RawFormat.Guid != System.Drawing.Imaging.ImageFormat.Png.Guid)
                                {
                                    throw new Exception("The supplied Logo file is not a valid PNG image!");
                                }
                                else
                                {
                                    var logo = ctx.Logos.Create();
                                    logo.Id   = Guid.NewGuid();
                                    logo.Name = tbxLogoName.Text.Trim();
                                    if (string.IsNullOrEmpty(logo.Name))
                                    {
                                        throw new Exception("Please give the new Logo an unique name!");
                                    }
                                    logo.Origin       = tbxLogoOrigin.Text.Trim();
                                    logo.LastModified = DateTime.Now;
                                    logo.Width        = image.Width;
                                    logo.Height       = image.Height;
                                    logo.SizeInBytes  = logoData.Length;
                                    repo.Logos.Add(logo);
                                    logo.Suggestion = suggestion;
                                    logo.Creator    = suggestion.User;
                                    logo.Channels.Add(channel);
                                    File.WriteAllBytes(Path.Combine(Server.MapPath("~/Logos"), logo.Id + ".png"), logoData);
                                    Thumbnailer.CreateLogoThumb(image, logo.Id);
                                }
                            }
                        }
                    }

                    ctx.ChangeTracker.DetectChanges();

                    if (channel.Logos.Count == 0)
                    {
                        throw new Exception("Please specify a logo for the new Channel!");
                    }

                    if (!suggestion.Channels.Any() && !suggestion.Aliases.Any() && !suggestion.Logos.Any())
                    {
                        throw new Exception("Please suggest at least a new logo or new alias!");
                    }

                    ctx.SaveChanges();

                    Response.Redirect(Request.Url.AbsoluteUri, false);
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                    this.Visible = false;
                }
            }
            catch (Exception ex)
            {
                lblReturnMessage.Visible = true;
                lblReturnMessage.Text    = ex.Message;
            }
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                using (var ctx = new EF.RepositoryContext("LogoDB"))
                {
                    var channel = GetChannel(ctx);
                    if (channel != null)
                    {
                        channel.Website     = tbxChannelWebsite.Text.Trim();
                        channel.Description = tbxChannelDescription.Text.Trim();

                        if (listNewAliases.Items.Count == 0)
                        {
                            throw new Exception("A Channel must have at least one Alias!");
                        }

                        // delete aliases that are no longer there
                        if (channel.Aliases != null)
                        {
                            foreach (var alias in channel.Aliases.ToList())
                            {
                                if (listNewAliases.Items.FindByText(alias.Name) == null)
                                {
                                    ctx.Aliases.Remove(alias);
                                }
                            }
                        }

                        // add new aliases
                        foreach (ListItem item in listNewAliases.Items)
                        {
                            string newAliasTrimmed = item.Text.Trim();
                            if (!string.IsNullOrEmpty(newAliasTrimmed))
                            {
                                if (!channel.Aliases.Any(a => a.Name == newAliasTrimmed))
                                {
                                    var alias = ctx.Aliases.Create();
                                    alias.Id      = Guid.NewGuid();
                                    alias.Name    = newAliasTrimmed;
                                    alias.Created = DateTime.Now;
                                    alias.Channel = channel;
                                    channel.Aliases.Add(alias);
                                }
                            }
                        }

                        // new logo
                        if (uploadLogoFile.HasFile)
                        {
                            var repo = ctx.Repositorys.FirstOrDefault();

                            var membership = System.Web.Security.Membership.GetUser();
                            var user       = membership != null?ctx.Users.FirstOrDefault(u => u.Id == (Guid)membership.ProviderUserKey) : null;

                            // check that file is PNG
                            byte[] logoData = uploadLogoFile.FileBytes;
                            using (MemoryStream ms = new MemoryStream(logoData))
                            {
                                using (System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true, true))
                                {
                                    if (image.RawFormat.Guid != System.Drawing.Imaging.ImageFormat.Png.Guid)
                                    {
                                        throw new Exception("The supplied Logo file is not a valid PNG image!");
                                    }

                                    if (string.IsNullOrEmpty(tbxLogoName.Text.Trim()))
                                    {
                                        throw new Exception("Please give the new Logo an unique name!");
                                    }

                                    // delete old logo
                                    var oldLogo = channel.Logos.First(l => l.Suggestion == null);
                                    ctx.Logos.Remove(oldLogo);
                                    File.Delete(Thumbnailer.GetThumbFilePath(oldLogo.Id));
                                    File.Delete(Path.Combine(Server.MapPath("~/Logos"), oldLogo.Id + ".png"));

                                    // create new logo
                                    var logo = ctx.Logos.Create();
                                    logo.Id           = Guid.NewGuid();
                                    logo.Name         = tbxLogoName.Text.Trim();
                                    logo.Origin       = tbxLogoOrigin.Text.Trim();
                                    logo.LastModified = DateTime.Now;
                                    logo.Width        = image.Width;
                                    logo.Height       = image.Height;
                                    logo.SizeInBytes  = logoData.Length;
                                    repo.Logos.Add(logo);
                                    logo.Creator = user;
                                    logo.Channels.Add(channel);
                                    File.WriteAllBytes(Path.Combine(Server.MapPath("~/Logos"), logo.Id + ".png"), logoData);
                                    Thumbnailer.CreateLogoThumb(image, logo.Id);

                                    imgChannelLogo.ImageUrl    = Thumbnailer.GetThumbFileUrl(logo.Id);
                                    imgChannelLogo.NavigateUrl = "/Logos/" + logo.Id + ".png";
                                }
                            }
                        }

                        ctx.ChangeTracker.DetectChanges();
                        ctx.SaveChanges();
                    }
                }

                lblReturnMessage.Visible   = true;
                lblReturnMessage.ForeColor = System.Drawing.Color.Green;
                lblReturnMessage.Text      = "Channel successfully saved!";
            }
            catch (Exception ex)
            {
                lblReturnMessage.Visible   = true;
                lblReturnMessage.ForeColor = System.Drawing.Color.Red;
                lblReturnMessage.Text      = ex.Message;
            }
        }
        protected void btnImport_Click(object sender, EventArgs e)
        {
            var errors = new List <string>();

            txtInfo.Text = "";

            try
            {
                if (!Uri.IsWellFormedUriString(tbxUrl.Text, UriKind.Absolute))
                {
                    errors.Add("Mapping File Url is not a valid Url!");
                }
                if (!Uri.IsWellFormedUriString(tbxRadioLogosBaseUrl.Text, UriKind.Absolute))
                {
                    errors.Add("Radio Logos Base Url is not a valid Url!");
                }
                if (!Uri.IsWellFormedUriString(tbxTVLogosBaseUrl.Text, UriKind.Absolute))
                {
                    errors.Add("TV Logos Base Url is not a valid Url!");
                }
                if (!tbxUrl.Text.ToLower().EndsWith(".xml"))
                {
                    errors.Add("Mapping File Url must point to a xml file!");
                }

                var mappings = new XmlDocument();
                mappings.Load(tbxUrl.Text);

                var xmlTvChannels    = new List <Tuple <Dictionary <string, HashSet <string> >, string, EF.Logo> >();
                var xmlRadioChannels = new List <Tuple <Dictionary <string, HashSet <string> >, string, EF.Logo> >();

                using (var ctx = new EF.RepositoryContext("LogoDB"))
                {
                    var tvChannels = mappings.SelectSingleNode("Mappings/TV");
                    foreach (XmlElement tvChannel in tvChannels.SelectNodes("Channel"))
                    {
                        var xmlTvChannel = GetChannel(tvChannel, 0, ctx, ref errors);
                        if (xmlTvChannel != null)
                        {
                            xmlTvChannels.Add(xmlTvChannel);
                        }
                    }

                    var radioChannels = mappings.SelectSingleNode("Mappings/Radio");
                    foreach (XmlElement radioChannel in radioChannels.SelectNodes("Channel"))
                    {
                        var xmlRadioChannel = GetChannel(radioChannel, 1, ctx, ref errors);
                        if (xmlRadioChannel != null)
                        {
                            xmlRadioChannels.Add(xmlRadioChannel);
                        }
                    }

                    EF.User currentUser = null;
                    var     membership  = System.Web.Security.Membership.GetUser();
                    if (membership != null)
                    {
                        currentUser = ctx.Users.FirstOrDefault(u => u.Id == (Guid)membership.ProviderUserKey);
                    }

                    var repo = ctx.Repositorys.FirstOrDefault();

                    var allProviders = ctx.Providers.ToDictionary(p => p.Name, p => p);

                    foreach (var importChannel in xmlTvChannels)
                    {
                        CreateDbChannel(importChannel, ChannelType.Tv, ctx, repo, currentUser, allProviders);
                    }
                    foreach (var importChannel in xmlRadioChannels)
                    {
                        CreateDbChannel(importChannel, ChannelType.Radio, ctx, repo, currentUser, allProviders);
                    }

                    ctx.ChangeTracker.DetectChanges();
                    ctx.SaveChanges();
                }

                txtInfo.Text = string.Format("Imported {0} TV and {1} Radio Channels.", xmlTvChannels.Count, xmlRadioChannels.Count);
            }
            catch (Exception ex)
            {
                errors.Add(ex.Message);
            }
            listErrors.DataSource = errors;
            listErrors.DataBind();
            listErrors.Visible = errors.Count > 0;
        }