public override bool IsUserInRole(string username, string roleName)
 {
     if (roleName == Roles.admin.ToString())
     {
         using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
         {
             if (!dc.DatabaseExists()) { dc.CreateDatabase(); dc.SubmitChanges(); }
             return dc.User.Any(u => u.Email == username && u.IsAdmin);
         }
     }
     return false;
 }
 protected void btnFilterReported_Click(object sender, EventArgs e)
 {
     CurrentSiteStateFilter = SiteState.Reported;
     btnFilterNone.Font.Bold = false; txtNumSitesTotal.Font.Bold = false;
     btnFilterReported.Font.Bold = true; txtNumReportedSites.Font.Bold = true;
     btnFilterBroken.Font.Bold = false; txtNumBrokenSites.Font.Bold = false;
     using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
     {
         if (dc.DatabaseExists())
         {
             BindGrid(dc);
         }
     }
 }
 protected void btnDeleteSite_Click(object sender, EventArgs e)
 {
     using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
     {
         dc.Report.DeleteAllOnSubmit(dc.Report.Where(r => r.Site_FK == this.Request.Params["site"]));
         dc.Site.DeleteOnSubmit(dc.Site.FirstOrDefault(s => s.Name == this.Request.Params["site"]));
         dc.SubmitChanges();
         try {
             System.IO.File.Delete(Server.MapPath("~/Icons/") + this.Request.Params["site"] + ".png");
         } catch { }
         try {
             System.IO.File.Delete(Server.MapPath("~/Banners/") + this.Request.Params["site"] + ".png");
         } catch { }
         Response.Redirect(ResolveUrl("~/SiteOverview.aspx"));
     }
 }
 public override bool ValidateUser(string username, string password)
 {
     using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
     {
         if (!dc.DatabaseExists()) { dc.CreateDatabase(); dc.SubmitChanges(); }
         var result = dc.User.Any(u => u.Email == username && u.Password == password);
         return result;
     }
 }
 public override string GetPassword(string username, string answer)
 {
     using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
     {
         if (!dc.DatabaseExists()) { dc.CreateDatabase(); dc.SubmitChanges(); }
         return (from u in dc.User where u.Email == username select u.Password).First();
     }
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
                {
                    if (dc.DatabaseExists())
                    {
                        txtNumSitesTotal.Text = dc.Site.Count().ToString();
                        txtNumReportedSites.Text = dc.Site.Count(s => s.State == SiteState.Reported).ToString();
                        txtNumBrokenSites.Text = dc.Site.Count(s => s.State == SiteState.Broken).ToString();

                        BindGrid(dc);
                    }
                }
            }
        }
 void BindGrid(OnlineVideosDataContext dc)
 {
     var query = from a in dc.Site select new { Description = a.Description, Language = a.Language, IsAdult = a.IsAdult, LastUpdated = a.LastUpdated, Name = a.Name, State = a.State, Owner_FK = a.Owner_FK, RequiredDll = a.RequiredDll, ReportCount = (uint)dc.Report.Count(r => r.Site_FK == a.Name) };
     switch (CurrentSortingProperty)
     {
         case "Name": query = query.OrderBy(s => s.Name); break;
         case "Owner_FK": query = query.OrderBy(s => s.Owner_FK); break;
         case "Language": query = query.OrderBy(s => s.Language); break;
         case "LastUpdated": query = query.OrderByDescending(s => s.LastUpdated); break;
     }
     if (CurrentSiteStateFilter != null)
     {
         switch (CurrentSiteStateFilter)
         {
             case SiteState.Reported: query = query.Where(s => s.State == SiteState.Reported); break;
             case SiteState.Broken: query = query.Where(s => s.State == SiteState.Broken); break;
         }
     }
     siteOverview.DataSource = (List<Site>)query.ToList().ToNonAnonymousList(typeof(Site));
     siteOverview.DataBind();
 }
 protected void siteOverview_Sorting(object sender, GridViewSortEventArgs e)
 {
     CurrentSortingProperty = e.SortExpression;
     using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
     {
         if (dc.DatabaseExists())
         {
             BindGrid(dc);
         }
     }
 }
        protected void reports_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            var row = (GridViewRow)((Control)e.CommandSource).Parent.Parent;
            string sitename = Request.Params["site"];

            if (e.CommandName == "DeleteReport")
            {
                ReportType type = (ReportType)Enum.Parse(typeof(ReportType), (row.Cells[0].Controls[1] as Label).Text);
                DateTime date = DateTime.ParseExact((row.Cells[1].Controls[1] as Label).Text, "g", System.Threading.Thread.CurrentThread.CurrentCulture);
                string message = HttpUtility.HtmlDecode((row.Cells[2].Controls[1] as Label).Text);

                using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
                {
                    var rep = dc.Report.FirstOrDefault(r => r.Message == message && (r.Date - date).Minutes <= 1 && r.Type == type && r.Site_FK == sitename);
                    if (rep != null)
                    {
                        dc.Report.DeleteOnSubmit(rep);
                        dc.SubmitChanges();

                        // now get last report for this site and check with last update to set the new site state
                        Site site = dc.Site.First(s => s.Name == sitename);
                        var latestReport = dc.Report.Where(r => r.Site_FK == sitename).OrderByDescending(r => r.Date).FirstOrDefault();
                        if (latestReport == null)
                        {
                            site.State = SiteState.Working;
                        }
                        else
                        {
                            if (site.LastUpdated > latestReport.Date)
                            {
                                site.State = SiteState.Working;
                            }
                            else
                            {
                                if (latestReport.Type == ReportType.Broken && site.State == SiteState.Working) site.State = SiteState.Reported;
                                else if (latestReport.Type == ReportType.ConfirmedBroken) site.State = SiteState.Broken;
                                else if (latestReport.Type == ReportType.RejectedBroken || latestReport.Type == ReportType.Fixed || latestReport.Type == ReportType.Suggestion) site.State = SiteState.Working;
                            }
                        }
                        dc.SubmitChanges();

                        BindGrid();
                    }
                }
            }
            else if (e.CommandName == "AddReport")
            {
                ReportType type = (ReportType)Enum.Parse(typeof(ReportType), (row.FindControl("ddType") as DropDownList).SelectedValue);
                string message = (row.FindControl("tbxNewMessage") as TextBox).Text;
                if (!string.IsNullOrEmpty(message))
                {
                    using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
                    {
                        Report report = new Report()
                        {
                            Date = DateTime.Now,
                            Message = message,
                            Type = type,
                            Site_FK = sitename
                        };
                        dc.Report.InsertOnSubmit(report);

                        // set new site state
                        Site site = dc.Site.First(s => s.Name == sitename);
                        switch (type)
                        {
                            case ReportType.Broken:
                                if (site.State == SiteState.Working) site.State = SiteState.Reported;
                                break;
                            case ReportType.ConfirmedBroken:
                                site.State = SiteState.Broken;
                                break;
                            case ReportType.RejectedBroken:
                            case ReportType.Fixed:
                                site.State = SiteState.Working;
                                break;
                        }

                        dc.SubmitChanges();

                        BindGrid();
                    }
                }
            }
        }
        private void BindGrid()
        {
            using (OnlineVideosDataContext dc = new OnlineVideosDataContext())
            {
                if (dc.DatabaseExists())
                {
                    var site = dc.Site.FirstOrDefault(s => s.Name == this.Request.Params["site"]);
                    if (site != null)
                    {
                        btnDeleteSite.Visible =
                            (User.Identity.Name == site.Owner_FK &&
                            site.State == SiteState.Broken &&
                            (DateTime.Now - dc.Report.Where(r => r.Site_FK == this.Request.Params["site"] && r.Type == ReportType.ConfirmedBroken).OrderByDescending(r => r.Date).Select(r => r.Date).FirstOrDefault()).TotalDays > 10)
                            || User.IsInRole("admin");
                        reports.ShowFooter = User.Identity.Name == site.Owner_FK || User.IsInRole("admin");

                        reports.Columns[reports.Columns.Count - 1].Visible = User.Identity.Name == site.Owner_FK || User.IsInRole("admin");
                        var reportsQuery = from a in dc.Report where a.Site_FK == this.Request.Params["site"] select new { Message = a.Message, Type = a.Type, Date = a.Date, };
                        reportsQuery = reportsQuery.OrderByDescending(s => s.Date);
                        var result = (List<Report>)reportsQuery.ToList().ToNonAnonymousList(typeof(Report));
                        if (result.Count == 0) result.Add(null); // hack to make ASP.NET < 4 show header and footer when empty data
                        reports.DataSource = result;
                        reports.DataBind();
                    }
                }
            }
        }