예제 #1
0
 internal static async Task<OfficialEvent> GetEvent(string slug, SportDataContext db)
 {
     return await db.Events.OfType<OfficialEvent>()
         .Include(e => e.SubEvents)
         .Include(e => e.SubEvents.Select(s => s.Series))
         .Include(e => e.SubEvents.Select(s => s.Map))
         .Include(e => e.SubEvents.Select(s => s.Tag))
         .Include(e => e.SubEvents.Select(s => s.Groups))
         .Include("Series.Tag")
         .Include("Series.Tag.News")
         .Include("Series.Tag.News.Attachments")
         .Include("Series.Tag.Files")
         .Include("Series.Tag.Partners")
         .Include("Series.Tag.Partners.Logo")
         .Include("Series.Tag.Galleries")
         .Include("Series.Tag.Galleries.Files")
         .Include("SubEvents.Tag")
         .Include("SubEvents.Tag.News")
         .Include("SubEvents.Tag.News.Attachments")
         .Include("SubEvents.Tag.Files")
         .Include("SubEvents.Tag.Partners")
         .Include("SubEvents.Tag.Partners.Logo")
         .Include("SubEvents.Tag.Orders")
         .Include("SubEvents.Tag.Orders.Group")
         .Include("SubEvents.Tag.Orders.Car")
         .Include("SubEvents.Tag.Orders.Team")
         .Include("SubEvents.Tag.Orders.Driver")
         .Include("SubEvents.Tag.Orders.CoDriver")
         .Include("SubEvents.Tag.Accreditations")
         .Include("SubEvents.Tag.Accreditations.User")
         .Include("SubEvents.Tag.Accreditations.Media")
         .Include("SubEvents.Tag.Galleries")
         .Include("SubEvents.Tag.Galleries.Files")
             .FirstOrDefaultAsync(e => e.Slug == slug);
 }
예제 #2
0
        //
        // GET: /Partners/
        public async Task<ActionResult> Public()
        {
            List<Partner> partners;
            using (var ctx = new SportDataContext())
            {
                if (Properties.Settings.Default.DisplayMode == "Event")
                {
                    var ev = await ctx.Events
                    .OfType<OfficialEvent>()
                    .Include("Series")
                    .Include("Series.Tag")
                    .Include("Series.Tag.Partners")
                    .Include("Series.Tag.Partners.Logo")
                    .Include("SubEvents")
                    .Include("SubEvents.Tag")
                    .Include("SubEvents.Tag.Partners")
                    .Include("SubEvents.Tag.Partners.Logo")
                    .FirstOrDefaultAsync(e => e.Slug == "current");

                    partners = ev.SubEvents.SelectMany(s => s.Tag != null ? s.Tag.Partners : new List<Partner>()).ToList();
                    partners = partners.Union(ev.Series.SelectMany(s=>s.Tag!=null? s.Tag.Partners : new List<Partner>())).Distinct().ToList();
                }
                else
                {
                    partners = await ctx.Partners.Where(p => p.IsEnabled && p.Global).ToListAsync();
                }
            }

            return View(partners.Select(p=>new PartnerListViewModel(p)).ToList());
        }
예제 #3
0
 private bool SkuExists(string sku)
 {
     using (var ctx = new SportDataContext())
     {
         return ctx.Products.Any(p => p.SKU == sku && p.Enabled);
     }
 }
예제 #4
0
 internal static List<PartnerListViewModel> GetGlobal()
 {
     using (var ctx = new SportDataContext())
     {
         return ctx.Partners.Include(p=>p.Logo).Where(p => p.IsEnabled && p.Global).ToList().Select(p => new PartnerListViewModel(p)).ToList();
     }
 }
예제 #5
0
        //[OutputCache(Duration = 60 * 60 * 24, Location = System.Web.UI.OutputCacheLocation.Downstream)]
        public async Task<ActionResult> QR(string slug, int width=8)
        {
            QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.L);
            
            using (var db = new SportDataContext())
            {
                var ev = await EventService.GetEvent(slug, db);
                if (ev == null)
                    return HttpNotFound();

                var url = "http://afspb.org.ru/timeline/";
                if(ev.Season!=2014) 
                    url += ev.Season + "/";
                url += ev.Slug + "/Guide";
                var qrCode = encoder.Encode(url);

                GraphicsRenderer dRenderer = new GraphicsRenderer(
                        new FixedModuleSize(width, QuietZoneModules.Two),
                        Brushes.Black, Brushes.White);

                using(var ms = new MemoryStream())
                {
                    dRenderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms);
                    return File(ms.ToArray(), "image/png");
                }
            }

            
        }
예제 #6
0
 internal static IEnumerable<NewsListViewModel> GetSeason(int year, string domain)
 {
     using (var ctx = new SportDataContext())
     {
         return NewsQueryable(ctx, domain)
             .Where(n => n.Season == year).OrderByDescending(n => n.Date).ToList().Select(n => new NewsListViewModel(n));
     }
 }
예제 #7
0
 public ActionResult Team(string name)
 {
     using (var ctx = new SportDataContext())
     {
         var teams = SearchService.FindTeam(name, ctx);                
         return Json(new { found = teams!=null }, JsonRequestBehavior.AllowGet);
     }
 }
예제 #8
0
 internal static List<ViewModels.NewsListViewModel> GetTop3(string domain)
 {
     using (var ctx = new SportDataContext())
     {
         return
             NewsQueryable(ctx, domain).OrderByDescending(n => n.Date).Take(3).ToList().Select(n => new NewsListViewModel(n)).ToList();
     }
 }
예제 #9
0
 internal static async Task<User> FindUserName(string firstName, string lastName, SportDataContext ctx)
 {
     if (firstName == null && lastName==null) return null;
     lastName = lastName.OrDefault().ToUpper();
     var user =  await ctx.Users.Include(u => u.Licenses).FirstOrDefaultAsync(u => (u.LastName == lastName && u.FirstName==firstName));
     //if (user == null)
     //    user = await ctx.Users.Include(u => u.Licenses).FirstOrDefaultAsync(u => u.LastName + " "+ u.FirstName == lastName + " " + firstName);
     return user;
 }
예제 #10
0
 public ActionResult SKU(string[] tokens)
 {
     using (var ctx = new SportDataContext())
     {
         var product = ctx.Products.FirstOrDefault(p => p.SKU == tokens[tokens.GetUpperBound(0)]);
         if (product != null) return View(product);
         return HttpNotFound();
     }
 }
예제 #11
0
 public ActionResult ShopHome()
 {
     using (var ctx = new SportDataContext())
     {
         var items = ctx.Products.Where(p => p.Featured);
         var categories = ctx.Categories.Where(c => c.Parent == null);
     }
     return Content("HOME");
 }
예제 #12
0
 internal static NewsDetailsViewModel Get(string slug, string domain)
 {
     using (var ctx = new SportDataContext())
     {
         var item = NewsQueryable(ctx, domain).FirstOrDefault(n => n.Slug == slug);
         if (item == null) return null;
         return new NewsDetailsViewModel(item);
     }
 }
예제 #13
0
        private static IQueryable<News> NewsQueryable(SportDataContext ctx, string domain)
        {
            var newsList = ctx.News
                                .Include(n => n.Attachments)
                                .Include(n => n.Tags);

            newsList = DomainFilterService.FilterNews(ctx, domain, newsList);

            return newsList;
        }
예제 #14
0
        public ActionResult Logo(string url, string domain = "")
        {
            using (var db = new SportDataContext())
            {
                var site = db.Sites.FirstOrDefault(s => s.Domain.ToUpper() == domain.ToUpper());

                if (site == null) return Content("<a href='/'><img width='150' src='" + url + "' alt=''></a>");
                else return Content("<a href='http://" + Properties.Settings.Default.BaseDomain + "'><img width='150' src='" + url + "' alt=''></a>");
            }
        }
예제 #15
0
        public async Task<ActionResult> Gallery(string slug)
        {
            using (var ctx = new SportDataContext())
            {
                var gallery = await ctx.Galleries.Include(g=>g.Files).FirstOrDefaultAsync(g => g.Slug == slug && g.IsPublic);
                if (gallery == null) return HttpNotFound();

                return View(new GalleryViewModel(gallery));
            }            
        }
예제 #16
0
        private async Task<ActionResult> Item(string slug)
        {
            using (var ctx = new SportDataContext())
            {
                var ev = await ctx.SubEvents.Include(e=>e.Map).FirstOrDefaultAsync(e => e.Tag.Id == slug);

                if (ev == null) return HttpNotFound();
                
                return View("Item", new ProgramDetailsViewModel(ev));
            }
        }
예제 #17
0
        public async Task<ActionResult> Get(string slug)
        {
            using (var db = new SportDataContext())
            {
                var ev = await EventService.GetEvent(slug, db);
                if (ev == null)
                    return HttpNotFound();

                return View(new EventViewModel(ev));
            }
        }
예제 #18
0
        internal static async Task<IEnumerable<TimelineListViewModel>> GetSeasonEvents(string domain, int activeSeason, SportDataContext ctx)
        {
            var evQuery = ctx.Events
                .Include(e => e.Series).Include(e => e.Series.Select(s => s.Discipline))
                .Where(ev => ev.Season == activeSeason);

            evQuery = await DomainFilterService.FilterEventsAsync(ctx, domain, evQuery);

            var events = evQuery.OrderBy(e => e.StartDate).ThenBy(e => e.FinishDate).ToList()
                .Select(ev => new TimelineListViewModel(ev));
            return events;
        }
예제 #19
0
 public async Task<ActionResult> Driver(string license)
 {
     using (var ctx = new SportDataContext())
     {
         var user = await SearchService.FindUser(license, ctx);
         return Json(new { 
             found = user!=null, 
             lastName = user!=null? user.LastName : "", 
             firstName = user!=null? user.FirstName:"" },
         JsonRequestBehavior.AllowGet);
     }
 }        
예제 #20
0
        public async Task<ActionResult> Index(string displayPeriod, string domain="", int season=2014)
        {
            var activeSeason = GetActiveSeason(displayPeriod, season);

            using (var ctx = new SportDataContext())
            {
                var events = await EventService.GetSeasonEvents(domain, activeSeason, ctx);

                ViewBag.Season = activeSeason;
                return View(events);
            }
        }
예제 #21
0
        internal static IQueryable<News> FilterNews(SportDataContext ctx, string domain, IQueryable<News> newsList)
        {
            domain = domain ?? "";

            var site = ctx.Sites
                            .Include(s => s.Tags)                            
                        .FirstOrDefault(s => s.Domain.ToUpper()==domain.ToUpper());
            if (site != null)
            {
                newsList = newsList.ToList().Where(n => n.Tags.Any(t => site.Tags.Contains(t))).AsQueryable();
            }
            return newsList;
        }
예제 #22
0
        internal static async Task<List<OfficialEvent>> GetUpcommingList(DateTime actualDate, SportDataContext db, string domain)
        {
            var events = db.Events.OfType<OfficialEvent>()
               .Include(e => e.SubEvents).Include("SubEvents.Groups")
               .Include(e=>e.Series)
               .Where(e => e.FinishDate > actualDate && (e.AccreditationsEnabled || e.SubEvents.Any(s => s.TimingSystemId != null || s.Groups.Any())));

            var eventsFiltered = await DomainFilterService.FilterEventsAsync(db,domain,events);

            if (eventsFiltered is IDbAsyncEnumerable)
                return await eventsFiltered.OfType<OfficialEvent>().ToListAsync();
            else
                return eventsFiltered.OfType<OfficialEvent>().ToList();
        }
예제 #23
0
        public ActionResult ShowCategory(string[] tokens)
        {
            using (var ctx = new SportDataContext())
            {
                Category category=null;

                foreach (var token in tokens)
                {
                    category = GetCategory(token, category, ctx);
                    if (category == null) return HttpNotFound();
                }
                return View(category);
            }
        }
예제 #24
0
        public async Task<ActionResult> Entries(Guid id)
        {
            using (var ctx = new SportDataContext())
            {
                var ev = await ctx.SubEvents
                    .Include("Tag")
                    .Include("Tag.Orders")
                    .Include("Tag.Orders.Driver")
                    .Include("Tag.Orders.CoDriver")
                    .FirstAsync(e => e.SecondaryId == id);

                var model = ev.Tag.Orders.Select(o => new CarResultItem(o)).ToList();
                return Json(model.ToArray(), JsonRequestBehavior.AllowGet);                
            }
        }
예제 #25
0
        public async Task<ActionResult> Index(string domain)
        {
            using (var ctx = new SportDataContext())
            {
                //var tags = ctx.Tags
                //    .Include("Galleries").Include("Galleries.Files")
                //    .Where(t => t.Galleries.Where(g => g.IsPublic && g.Files.Any()).Any());                

#warning TODO: фильтрация доменов!
                //var galleries = await tags.SelectMany(t=>t.Galleries).Where(g => g.IsPublic).OrderByDescending(g=>g.PublicationTime).ToListAsync();

                var galleries = await ctx.Galleries.Include(g => g.Files)
                                    .Where(g => g.IsPublic && (g.Files.Any()|| (g.Code!=null && g.Code!=""))).OrderByDescending(g => g.PublicationTime).ToListAsync();

                return View(galleries.Select(g => new GalleryViewModel(g)).ToList());
            }            
        }
예제 #26
0
 //
 // GET: /Documents/
 public ActionResult Index(int season = 2014, string domain="")
 {
     using (var ctx = new SportDataContext())
     {
         var tags = ctx.Tags
             .Include(c => c.Files)
             .OfType<DocumentGroup>().Where(t => t.Season == season)
             .OrderBy(g=>g.Id).ToList()
             .Select(t=> new DocumentsTagViewModel(t)).AsEnumerable();
         ViewBag.Season = season;
         if (!tags.Any())
         {
             return View("NoDocuments");
         }
         return View(tags);
     }
 }
예제 #27
0
        public async Task<ActionResult> Public(string domain="")
        {
                var model = new DashboardViewModel();
                model.Top3News = NewsProvider.GetTop3(domain);
                model.GlobalPartners = PartnerProvider.GetGlobal();
                model.Domain = domain;

                var actualDate = DateTime.Today.AddDays(-5);
                using (var db = new SportDataContext())
                {
                    model.UpcommingEvents  = await GetUpcommingEvents(actualDate, db, domain);

                    if (Properties.Settings.Default.ShowFeaturedOnMainPage)
                        model.FeaturedEvents = await GetFeaturedEvents(db, domain);                    
                }

                return View(model);
        }
예제 #28
0
        //
        // GET: /Event/
        public async Task<ActionResult> Index()
        {
            using (var ctx = new SportDataContext())
            {                
                var ev = await ctx.Events                    
                    .OfType<OfficialEvent>()
                    .Include(e=>e.SubEvents)
                    .Include("SubEvents.Map")
                    .Include("SubEvents.Tag")                    
                    .Include("SubEvents.Tag.Partners")
                    .Include("SubEvents.Tag.Partners.Logo")
                    .FirstOrDefaultAsync(e => e.Slug == "current");

                if (ev == null) return View("CommingSoon");

                return View(new EventDashboardViewModel(ev));
            }
            
        }
예제 #29
0
 public ActionResult Generate(int width, int height, string name)
 {
     var path = Server.MapPath(ThumbnailService.GetThumbnailPath(name, width, height));
     if (!DocumentService.IsFileExist(path))
     {
         using (var ctx = new SportDataContext())
         {
             var file = ctx.Files.FirstOrDefault(f => f.FileName == name);
             if (file == null)
             {
                 return HttpNotFound();
             }
             else
             {
                 path = ThumbnailService.GenerateThumbnail(file, width, height);
             }
         }
     }
     return File(path, "application/octet-stream");
 }
예제 #30
0
        public ActionResult Featured(bool isMenu, string domain="")
        {
            using(var db= new SportDataContext()) {
                var actualDate = DateTime.Today.AddDays(-5); //5 дней после окончания событие продолжает висеть

                var items = EventService.GetFeaturedEvents(db, domain);

                if (isMenu)
                {
                    var model = items.ToList();
                    return PartialView("_FeaturedMenu", model);
                }
                else
                {
                    var model = items.Where(e=>e.FinishDate>=actualDate).ToList();
                    return PartialView("_FeaturedBanner", model);
                }
            }
                       
        }
예제 #31
0
 public UnitOfWork()
 {
     this._context = new SportDataContext();
 }
예제 #32
0
 public ApplicationRoleStore(SportDataContext context) : base(context)
 {
 }
예제 #33
0
 public void ReloadContext()
 {
     this._context = new SportDataContext();
 }