예제 #1
0
        // On suppose que designerKey est toujours valide (une contrainte sur la route doit
        // assurer qu'on n'est bien dans cette situation).
        private DesignerViewItem GetDesigner_(DesignerKey designerKey, string categoryKey)
        {
            var designer   = _queries.GetDesigner(designerKey, CultureInfo.CurrentUICulture);
            var categories = _queries.ListCategories(designerKey);

            return(DesignerViewItem.Of(designer, categories, categoryKey));
        }
예제 #2
0
        public static string PatternContent(this UrlHelper @this, DesignerKey designerKey, string reference, string variant)
        {
            Require.Object(@this);

            return(@this.Content(
                       "~/" + designerKey.ToString() + "/motif-" + reference + "-" + variant + ".jpg"));
        }
예제 #3
0
        protected override IEnumerable <Pattern> Execute(SqlDataReader reader)
        {
            CheckFor.StoredProcedure.Execute(reader);

            var result = new List <Pattern>();

            while (reader.Read())
            {
                var designerKey = DesignerKey.Parse(reader.GetStringUnsafe("designer"));
                var patternId   = new PatternId(designerKey, reader.GetStringUnsafe("reference"));
                var version     = reader.GetStringUnsafe("version");
                var pattern     = new Pattern(patternId, version)
                {
                    CategoryKey      = reader.GetStringUnsafe("category"),
                    CreationTime     = reader.GetDateTimeUnsafe("creation_time"),
                    HasPreview       = reader.GetBooleanUnsafe("preview"),
                    LastModifiedTime = reader.GetDateTimeUnsafe("last_modified_time"),
                    Preferred        = true,
                    Published        = true,
                    Showcased        = true,
                };

                result.Add(pattern);
            }

            return(result);
        }
예제 #4
0
        public PreviewPagedList ListPreviews(
            DesignerKey designerKey,
            string categoryKey,
            int pageIndex,
            int pageSize)
        {
            if (pageIndex < 1)
            {
                return(null);
            }

            // On ne garde que les motifs ayant un aperçu et on ne garde que le préféré.
            var previews = _queries.ListPatterns(designerKey, categoryKey).Where(_ => _.HasPreview && _.Preferred);

            var pageCount = CountPage_(previews, pageSize);

            if (pageIndex > pageCount)
            {
                return(null);
            }

            var slice = previews
                        .OrderBy(_ => _.Reference)
                        .ThenByDescending(_ => _.LastModifiedTime)
                        .Skip((pageIndex - 1) * pageSize)
                        .Take(pageSize);

            return(new PreviewPagedList {
                PageCount = pageCount,
                PageIndex = pageIndex,
                Previews = slice
            });
        }
        public ListCategoriesQuery(string connectionString, DesignerKey designerKey)
            : base(connectionString, "usp_ListCategories")
        {
            Contract.Requires(!String.IsNullOrEmpty(connectionString));

            DesignerKey = designerKey;
        }
예제 #6
0
        protected override IEnumerable <Designer> Execute(SqlDataReader reader)
        {
            CheckFor.StoredProcedure.Execute(reader);

            var designers = new List <Designer>();

            while (reader.Read())
            {
                var designerKey = DesignerKey.Parse(reader.GetStringUnsafe("id"));

                var designer = new Designer(designerKey)
                {
                    AvatarCategory  = reader.GetStringUnsafe("avatar_category"),
                    AvatarReference = reader.GetStringUnsafe("avatar_reference"),
                    AvatarVersion   = reader.GetStringUnsafe("avatar_version"),
                    Email           = reader.GetStringUnsafe("email_address"),
                    FirstName       = reader.GetStringUnsafe("firstname"),
                    LastName        = reader.GetStringUnsafe("lastname"),
                    Nickname        = reader.MayGetStringUnsafe("nickname"),
                    Presentation    = reader.GetStringUnsafe("presentation"),
                    WebSiteUrl      = reader.MayGetStringUnsafe("website").Select(_ => new Uri(_)),
                };

                designers.Add(designer);
            }

            return(designers);
        }
예제 #7
0
        private static string PreviewContent_(UrlHelper urlHelper, DesignerKey designerKey, string reference, string variant, bool absolute)
        {
            Require.NotNull(urlHelper, "urlHelper");

            var path = "~/" + designerKey.ToString() + "/vignette-" + reference + "-" + variant + ".jpg";

            return(absolute ? urlHelper.AbsoluteContent(path) : urlHelper.Content(path));
        }
예제 #8
0
        public ListPatternsQuery(string connectionString, DesignerKey designerKey)
            : base(connectionString, "usp_ListPatterns")
        {
            Contract.Requires(connectionString != null);
            Contract.Requires(connectionString.Length != 0);

            DesignerKey = designerKey;
        }
예제 #9
0
        public IEnumerable <Pattern> ListPatterns(DesignerKey designerKey, bool published)
        {
            var q = new ListPatternsQuery(_connectionString, designerKey)
            {
                Published = published
            };

            return(q.Execute());
        }
예제 #10
0
        public IEnumerable <Pattern> ListPatterns(DesignerKey designerKey, string categoryKey)
        {
            var q = new ListPatternsQuery(_connectionString, designerKey)
            {
                CategoryKey = categoryKey
            };

            return(q.Execute());
        }
예제 #11
0
 public IEnumerable <Pattern> GetPatternViews(
     DesignerKey designerKey, string categoryKey, string reference)
 {
     return(_queries
            .ListPatterns(designerKey, categoryKey)
            .Where(_ => _.Reference == reference)
            .OrderByDescending(_ => _.Preferred)
            .ThenBy(_ => _.Variant));
 }
예제 #12
0
        private void SetOpenGraphImage_(DesignerKey designerKey, string reference, string variant)
        {
            var imageUrl = new Uri(Url.PreviewContent(designerKey, reference, variant, true /* absolute */));

            Ontology.OpenGraph.Image = new OpenGraphJpeg(imageUrl)
            {
                Height = Constants.ImageGeometry.PreviewHeight,
                Width  = Constants.ImageGeometry.PreviewWidth,
            };
        }
예제 #13
0
        public GetPatternQuery(string connectionString, DesignerKey designerKey, string reference, string variant)
            : base(connectionString, "usp_GetPattern")
        {
            Contract.Requires(!String.IsNullOrEmpty(connectionString));

            DesignerKey = designerKey;
            Reference   = reference;
            Variant     = variant;

            CommandBehavior = CommandBehavior.CloseConnection | CommandBehavior.SingleRow;
        }
예제 #14
0
        public GetDesignerQuery(string connectionString, DesignerKey designerKey, CultureInfo culture)
            : base(connectionString, "usp_GetDesigner")
        {
            Contract.Requires(connectionString != null);
            Contract.Requires(connectionString.Length != 0);

            _designerKey = designerKey;
            _culture     = culture;

            CommandBehavior = CommandBehavior.CloseConnection | CommandBehavior.SingleRow;
        }
예제 #15
0
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            Require.NotNull(controllerContext, "controllerContext");

            var value = controllerContext.RouteData.Values["designerKey"];

            if (value == null)
            {
                return(null);
            }

            return(DesignerKey.Parse((string)value));
        }
예제 #16
0
        public ActionResult Category(DesignerKey designerKey, string categoryKey, int p = 1)
        {
            // Modèle.
            var pagedList = _patternService.ListPreviews(designerKey, categoryKey, p, PreviewsPageSize_);

            if (pagedList == null)
            {
                return(new HttpNotFoundResult());
            }

            var designer = GetDesigner_(designerKey, categoryKey);
            var category = (from _ in designer.Categories where _.Key == categoryKey select _).Single();

            var model = new CategoryViewModel {
                Category    = category,
                Designer    = designer,
                IsFirstPage = pagedList.IsFirstPage,
                IsLastPage  = pagedList.IsLastPage,
                PageCount   = pagedList.PageCount,
                PageIndex   = pagedList.PageIndex,
                Previews    = from _ in pagedList.Previews select PatternViewItem.Of(_, designer.DisplayName)
            };

            // Ontologie.
            Ontology.Title = String.Format(
                CultureInfo.CurrentUICulture,
                Strings.Designer_Category_TitleFormat,
                model.Category.DisplayName,
                model.Designer.DisplayName);
            Ontology.Description = String.Format(
                CultureInfo.CurrentUICulture,
                Strings.Designer_Category_DescriptionFormat,
                model.Designer.DisplayName,
                model.Category.DisplayName);
            //Ontology.SchemaOrg.ItemType = SchemaOrgType.CollectionPage;
            Ontology.Relationships.CanonicalUrl = SiteMap.DesignerCategory(designerKey, categoryKey, p);

            var image = model.Previews.First();

            SetOpenGraphImage_(designerKey, image.Reference, image.Variant);

            // LayoutViewModel.
            LayoutViewModel.AddAlternateUrls(Environment.Language, _ => _.DesignerCategory(designerKey, categoryKey, p));
            LayoutViewModel.DesignerMenuCssClass = ViewUtility.DesignerClass(designerKey);
            LayoutViewModel.MainHeading          = category.DisplayName;

            return(View(Constants.ViewName.Designer.Category, model));
        }
예제 #17
0
        public static string Designer(this UrlHelper @this, DesignerKey designerKey, int pageIndex)
        {
            Acknowledge.Object(@this);

            object routeValues;

            if (pageIndex > 1)
            {
                routeValues = new { designerKey = designerKey.ToString(), p = pageIndex };
            }
            else
            {
                routeValues = new { designerKey = designerKey.ToString() };
            }

            return(SecureAction(@this, Constants.ActionName.Designer.Index, Constants.ControllerName.Designer, routeValues));
        }
예제 #18
0
        public static string Pattern(this UrlHelper @this, DesignerKey designerKey, string categoryKey, string reference, int pageIndex)
        {
            Acknowledge.Object(@this);

            object routeValues;

            if (pageIndex > 1)
            {
                routeValues = new { designerKey = designerKey.ToString(), categoryKey = categoryKey, reference = reference, p = pageIndex };
            }
            else
            {
                routeValues = new { designerKey = designerKey.ToString(), categoryKey = categoryKey, reference = reference };
            }

            return(SecureAction(@this, Constants.ActionName.Designer.Pattern, Constants.ControllerName.Designer, routeValues));
        }
        protected override Maybe <PatternImageQuery> BindCore(HttpRequest request)
        {
            var nvc = request.QueryString;

            return
                (from designerKey in
                 Maybe.Flatten(nvc.MayGetSingle("designerKey").Select(_ => DesignerKey.MayParse(_)))
                 from reference in nvc.MayGetSingle("reference")
                 from size in
                 (from _ in nvc.MayGetSingle("size") select ParseTo.Enum <PatternImageSize>(_))
                 let variant = nvc.MayGetSingle("variant")
                               where size.HasValue
                               select new PatternImageQuery {
                DesignerKey = designerKey,
                Reference = reference,
                Size = size.Value,
                Variant = variant.ValueOrElse(String.Empty),
            });
        }
예제 #20
0
        public ActionResult Index(DesignerKey designerKey, int p = 1)
        {
            // Modèle.
            var pagedList = _patternService.ListPreviews(designerKey, p, PreviewsPageSize_);

            if (pagedList == null)
            {
                return(new HttpNotFoundResult());
            }

            var designer = GetDesigner_(designerKey, AllCategoryKey);

            var model = new DesignerViewModel {
                Designer    = designer,
                IsFirstPage = pagedList.IsFirstPage,
                IsLastPage  = pagedList.IsLastPage,
                PageCount   = pagedList.PageCount,
                PageIndex   = pagedList.PageIndex,
                Previews    = from _ in pagedList.Previews select PatternViewItem.Of(_, designer.DisplayName)
            };

            // Ontologie.
            Ontology.Title = String.Format(
                CultureInfo.CurrentUICulture, Strings.Designer_Index_TitleFormat, model.Designer.DisplayName);
            Ontology.Description = String.Format(
                CultureInfo.CurrentUICulture, Strings.Designer_Index_DescriptionFormat, model.Designer.DisplayName);
            Ontology.Relationships.CanonicalUrl = SiteMap.Designer(designerKey, p);

            var image = model.Previews.First();

            SetOpenGraphImage_(designerKey, image.Reference, image.Variant);

            // LayoutViewModel.
            LayoutViewModel.AddAlternateUrls(Environment.Language, _ => _.Designer(designerKey, p));
            LayoutViewModel.DesignerMenuCssClass = ViewUtility.DesignerClass(designerKey);

            return(View(Constants.ViewName.Designer.Index, model));
        }
예제 #21
0
 public static string DesignerClass(DesignerKey key)
 {
     if (key == DesignerKey.ChristineLégeret)
     {
         return(Constants.CssClassName.ChristineLégeret);
     }
     else if (key == DesignerKey.EstherMarthi)
     {
         return(Constants.CssClassName.EstherMarthi);
     }
     else if (key == DesignerKey.LaureRoussel)
     {
         return(Constants.CssClassName.LaureRoussel);
     }
     else if (key == DesignerKey.VivianeDevaux)
     {
         return(Constants.CssClassName.VivianeDevaux);
     }
     else
     {
         throw new NotSupportedException();
     }
 }
        public Uri DesignerPattern(DesignerKey designerKey, string categoryKey, string reference, int pageIndex)
        {
            var uri = MakeAbsoluteUri_(designerKey.ToString() + "/" + categoryKey + "/" + reference);

            return(AddPagination_(uri, pageIndex));
        }
        public Uri DesignerCategory(DesignerKey designerKey, string categoryKey, int pageIndex)
        {
            var uri = MakeAbsoluteUri_(designerKey.ToString() + "/" + categoryKey);

            return(AddPagination_(uri, pageIndex));
        }
        public Uri Designer(DesignerKey designerKey, int pageIndex)
        {
            var uri = MakeAbsoluteUri_(designerKey.ToString());

            return(AddPagination_(uri, pageIndex));
        }
예제 #25
0
        public IEnumerable <Category> ListCategories(DesignerKey designerKey)
        {
            var q = new ListCategoriesQuery(_connectionString, designerKey);

            return(q.Execute());
        }
예제 #26
0
        public Pattern GetPattern(DesignerKey designerKey, string reference, string variant)
        {
            var q = new GetPatternQuery(_connectionString, designerKey, reference, variant);

            return(q.Execute());
        }
예제 #27
0
        public Designer GetDesigner(DesignerKey designerKey, CultureInfo culture)
        {
            var q = new GetDesignerQuery(_connectionString, designerKey, culture);

            return(q.Execute());
        }
예제 #28
0
 public IEnumerable <Pattern> ListPatterns(DesignerKey designerKey, bool published)
 {
     return(from _ in ListPatterns(designerKey) where _.Published select _);
 }
예제 #29
0
 public IEnumerable <Pattern> ListPatterns(DesignerKey designerKey, string categoryKey, bool published)
 {
     return(from _ in ListPatterns(designerKey)
            where _.CategoryKey == categoryKey && _.Published
            select _);
 }
예제 #30
0
 public IEnumerable <Pattern> ListPatterns(DesignerKey designerKey)
 {
     return(_cache.GetOrInsertPatterns(designerKey, _ => _inner.ListPatterns(_)));
 }