Esempio n. 1
0
        async Task <User> BuildUserAsync(IEntity entity)
        {
            var user = await _platoUserStore.GetByIdAsync(entity.CreatedUserId);

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

            // Ensure we check against the IP address being used at the time of the post
            user.IpV4Address = entity.IpV4Address;
            user.IpV6Address = entity.IpV6Address;
            return(user);
        }
Esempio n. 2
0
        public override async Task <IViewProviderResult> BuildDisplayAsync(UserIndex userIndex, IViewProviderContext context)
        {
            // Get user
            var user = await _platoUserStore.GetByIdAsync(userIndex.Id);

            if (user == null)
            {
                return(await BuildIndexAsync(userIndex, context));
            }


            // Get index view model from context
            var indexViewModel = context.Controller.HttpContext.Items[typeof(EntityIndexViewModel <Question>)] as EntityIndexViewModel <Question>;

            if (indexViewModel == null)
            {
                throw new Exception($"A view model of type {typeof(EntityIndexViewModel<Question>).ToString()} has not been registered on the HttpContext!");
            }

            // Build feature entities model
            var featureEntityMetrics = new FeatureEntityCounts()
            {
                Features = await _featureEntityCountService
                           .ConfigureQuery(q =>
                {
                    q.CreatedUserId.Equals(user.Id);
                    q.HideSpam.True();
                    q.HideHidden.True();
                    q.HideDeleted.True();
                    q.HidePrivate.True();
                })
                           .GetResultsAsync()
            };

            // Build view model
            var userDisplayViewModel = new UserDisplayViewModel <Question>()
            {
                User           = user,
                IndexViewModel = indexViewModel,
                Counts         = featureEntityMetrics
            };

            // Build view
            return(Views(
                       View <UserDisplayViewModel>("User.Index.Header", model => userDisplayViewModel).Zone("header"),
                       View <UserDisplayViewModel <Question> >("User.Index.Content", model => userDisplayViewModel).Zone("content"),
                       View <UserDisplayViewModel>("User.Entities.Display.Sidebar", model => userDisplayViewModel).Zone("content-right")
                       ));
        }
Esempio n. 3
0
        public override async Task <IViewProviderResult> BuildDisplayAsync(ProfilePage profile, IViewProviderContext context)
        {
            var user = await _platoUserStore.GetByIdAsync(profile.Id);

            if (user == null)
            {
                return(await BuildIndexAsync(profile, context));
            }

            return(Views(
                       View <User>("Home.Display.Header", model => user).Zone("header"),
                       View <User>("Home.Display.Tools", model => user).Zone("tools"),
                       View <User>("Home.Display.Content", model => user).Zone("content").Order(int.MinValue + 100),
                       View <User>("Home.Display.Sidebar", model => user).Zone("sidebar")
                       ));
        }
Esempio n. 4
0
        public override async Task <IViewProviderResult> BuildDisplayAsync(Profile profile,
                                                                           IViewProviderContext context)
        {
            var user = await _platoUserStore.GetByIdAsync(profile.Id);

            if (user == null)
            {
                return(await BuildIndexAsync(profile, context));
            }

            var badges = await _badgeEntriesStore.SelectByUserIdAsync(user.Id);

            var viewModel = new ProfileDisplayViewModel()
            {
                User   = user,
                Badges = badges
            };

            return(Views(
                       View <ProfileDisplayViewModel>("Profile.Display.Content", model => viewModel).Zone("content").Order(0)
                       ));
        }
Esempio n. 5
0
        async Task <IEnumerable <User> > GetPostedUsers()
        {
            var usersJson = "";

            foreach (var key in _request.Form.Keys)
            {
                if (key.Equals("users"))
                {
                    usersJson = _request.Form[key];
                }
            }


            // Build users to effect
            List <User> users = null;

            if (!String.IsNullOrEmpty(usersJson))
            {
                var items = JsonConvert.DeserializeObject <IEnumerable <UserApiResult> >(usersJson);
                foreach (var item in items)
                {
                    if (item.Id > 0)
                    {
                        if (users == null)
                        {
                            users = new List <User>();
                        }
                        var user = await _userStore.GetByIdAsync(item.Id);

                        if (user != null)
                        {
                            users.Add(user);
                        }
                    }
                }
            }

            return(users);
        }
Esempio n. 6
0
        public override async Task <IViewProviderResult> BuildDisplayAsync(Profile discuss, IViewProviderContext context)
        {
            var user = await _platoUserStore.GetByIdAsync(discuss.Id);

            if (user == null)
            {
                return(await BuildIndexAsync(discuss, context));
            }

            var followType  = FollowTypes.User;
            var isFollowing = false;

            var currentUser = await _contextFacade.GetAuthenticatedUserAsync();

            if (currentUser != null)
            {
                var existingFollow = await _followStore.SelectByNameThingIdAndCreatedUserId(
                    followType.Name,
                    user.Id,
                    currentUser.Id);

                if (existingFollow != null)
                {
                    isFollowing = true;
                }
            }

            return(Views(
                       View <FollowViewModel>("Follow.Display.Tools", model =>
            {
                model.FollowType = followType;
                model.ThingId = user.Id;
                model.IsFollowing = isFollowing;
                return model;
            }).Zone("tools").Order(1)
                       ));
        }
Esempio n. 7
0
        public async Task <IActionResult> Index(EntityIndexOptions opts, PagerOptions pager)
        {
            // Default options
            if (opts == null)
            {
                opts = new EntityIndexOptions();
            }

            // Default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get user
            var user = await _platoUserStore.GetByIdAsync(opts.CreatedByUserId);

            // Ensure user exists
            if (user == null)
            {
                return(NotFound());
            }

            // Get default options
            var defaultViewOptions  = new EntityIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (opts.Filter != defaultViewOptions.Filter)
            {
                this.RouteData.Values.Add("opts.filter", opts.Filter);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetIndexViewModelAsync(opts, pager);

            // Add view model to context
            HttpContext.Items[typeof(EntityIndexViewModel <Article>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetArticles", viewModel));
                }
            }

            // Build page title
            _pageTitleBuilder
            .AddSegment(S["Users"])
            .AddSegment(S[user.DisplayName])
            .AddSegment(S["Articles"]);

            // Build breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Users"], users => users
                                  .Action("Index", "Home", "Plato.Users")
                                  .LocalNav()
                                  ).Add(S[user.DisplayName], name => name
                                        .Action("Display", "Home", "Plato.Users", new RouteValueDictionary()
                {
                    ["opts.id"]    = user.Id,
                    ["opts.alias"] = user.Alias
                })
                                        .LocalNav()
                                        ).Add(S["Articles"]);
            });

            //// Return view
            return(View((LayoutViewModel)await _userViewProvider.ProvideDisplayAsync(new UserIndex()
            {
                Id = user.Id
            }, this)));
        }
Esempio n. 8
0
        public override async Task <IViewProviderResult> BuildEditAsync(User user, IViewProviderContext updater)
        {
            //var details = user.GetOrCreate<UserDetail>();

            User isVerifiedBy = null;
            User isSpamBy     = null;
            User isBannedBy   = null;
            User isStaffBy    = null;

            if (user.IsVerified && user.IsVerifiedUpdatedUserId > 0)
            {
                isVerifiedBy = await _userStore.GetByIdAsync(user.IsVerifiedUpdatedUserId);
            }

            if (user.IsSpam && user.IsSpamUpdatedUserId > 0)
            {
                isSpamBy = await _userStore.GetByIdAsync(user.IsSpamUpdatedUserId);
            }

            if (user.IsBanned && user.IsBannedUpdatedUserId > 0)
            {
                isBannedBy = await _userStore.GetByIdAsync(user.IsBannedUpdatedUserId);
            }

            if (user.IsStaff && user.IsStaffUpdatedUserId > 0)
            {
                isStaffBy = await _userStore.GetByIdAsync(user.IsStaffUpdatedUserId);
            }

            var viewModel = new EditUserViewModel()
            {
                Id                    = user.Id,
                DisplayName           = user.DisplayName,
                UserName              = user.UserName,
                Email                 = user.Email,
                Avatar                = user.Avatar,
                Css                   = user.Css,
                Location              = user.Location,
                Url                   = user.Url,
                Biography             = user.Biography,
                Signature             = user.Signature,
                SignatureHtml         = user.SignatureHtml,
                SignatureHtmlName     = BySignatureHtmlName,
                CreatedDate           = user.CreatedDate,
                LastLoginDate         = user.LastLoginDate,
                IsNewUser             = user.Id == 0,
                UserType              = user.UserType,
                RoleNames             = user.RoleNames,
                DisplayPasswordFields = user.Id == 0,
                EmailConfirmed        = user.EmailConfirmed,
                IsSpam                = user.IsSpam,
                IsSpamUpdatedUser     = isSpamBy != null ? new SimpleUser(isSpamBy) : null,
                IsSpamUpdatedDate     = user.IsSpamUpdatedDate,
                IsVerified            = user.IsVerified,
                IsVerifiedUpdatedUser = isVerifiedBy != null ? new SimpleUser(isVerifiedBy) : null,
                IsVerifiedUpdatedDate = user.IsVerifiedUpdatedDate,
                IsStaff               = user.IsStaff,
                IsStaffUpdatedUser    = isStaffBy != null ? new SimpleUser(isStaffBy) : null,
                IsStaffUpdatedDate    = user.IsStaffUpdatedDate,
                IsBanned              = user.IsBanned,
                IsBannedUpdatedUser   = isBannedBy != null ? new SimpleUser(isBannedBy) : null,
                IsBannedUpdatedDate   = user.IsBannedUpdatedDate
            };

            return(Views(
                       View <EditUserViewModel>("Admin.Edit.Header", model => viewModel).Zone("header"),
                       View <EditUserViewModel>("Admin.Edit.Meta", model => viewModel).Zone("meta"),
                       View <EditUserViewModel>("Admin.Edit.Content", model => viewModel).Zone("content"),
                       View <EditUserViewModel>("Admin.Edit.Sidebar", model => viewModel).Zone("sidebar"),
                       View <EditUserViewModel>("Admin.Edit.Footer", model => viewModel).Zone("footer"),
                       View <EditUserViewModel>("Admin.Edit.Actions", model => viewModel).Zone("actions")
                       ));
        }
Esempio n. 9
0
        async Task <TEntity> BuildContributorsAsync(TEntity entity)
        {
            // We always need a contributor to add
            if (entity.ModifiedUserId <= 0)
            {
                return(entity);
            }

            // Get user modifying entity
            var user = await _platoUserStore.GetByIdAsync(entity.ModifiedUserId);

            // We always need a contributor to add
            if (user == null)
            {
                return(entity);
            }

            // Get entity details to update
            var details = entity.GetOrCreate <ArticleDetails>();

            // No need to add the contributor more than once
            var exists = false;

            foreach (var contributor in details.Contributors)
            {
                if (contributor.Id == user.Id)
                {
                    // Indicate contributor already exists
                    exists = true;

                    // Update contributor details as they may change
                    contributor.Id            = user.Id;
                    contributor.UserName      = user.UserName;
                    contributor.DisplayName   = user.DisplayName;
                    contributor.Alias         = user.Alias;
                    contributor.PhotoColor    = user.PhotoColor;
                    contributor.PhotoUrl      = user.PhotoUrl;
                    contributor.Signature     = "";
                    contributor.SignatureHtml = "";

                    // update contribution data
                    contributor.ContributionCount += 1;
                    contributor.ContributionDate   = DateTimeOffset.UtcNow;
                }
            }

            // If the contributor does not exist add them
            if (!exists)
            {
                details.Contributors.Add(new EntityContributor()
                {
                    Id                = user.Id,
                    UserName          = user.UserName,
                    DisplayName       = user.DisplayName,
                    Alias             = user.Alias,
                    PhotoColor        = user.PhotoColor,
                    PhotoUrl          = user.PhotoUrl,
                    Signature         = "",
                    SignatureHtml     = "",
                    ContributionCount = 1,
                    ContributionDate  = DateTimeOffset.UtcNow
                });
            }

            // Add updated data to entity
            entity.AddOrUpdate <ArticleDetails>(details);

            // Return updated entity
            return(entity);
        }
Esempio n. 10
0
        public override async Task <IViewProviderResult> BuildDisplayAsync(ProfilePage profile, IViewProviderContext context)
        {
            // Get user
            var user = await _platoUserStore.GetByIdAsync(profile.Id);

            // Ensure user exists
            if (user == null)
            {
                return(await BuildIndexAsync(profile, context));
            }

            var indexOptions = new EntityIndexOptions()
            {
                CreatedByUserId = user.Id
            };


            var featureEntityMetrics = new FeatureEntityCounts()
            {
                Features = await _featureEntityCountService
                           .ConfigureQuery(async q =>
                {
                    // Hide private?
                    if (!await _authorizationService.AuthorizeAsync(context.Controller.HttpContext.User,
                                                                    Permissions.ViewPrivateEntities))
                    {
                        q.HidePrivate.True();
                    }

                    // Hide hidden?
                    if (!await _authorizationService.AuthorizeAsync(context.Controller.HttpContext.User,
                                                                    Permissions.ViewHiddenEntities))
                    {
                        q.HideHidden.True();
                    }

                    // Hide spam?
                    if (!await _authorizationService.AuthorizeAsync(context.Controller.HttpContext.User,
                                                                    Permissions.ViewSpamEntities))
                    {
                        q.HideSpam.True();
                    }

                    // Hide deleted?
                    if (!await _authorizationService.AuthorizeAsync(context.Controller.HttpContext.User,
                                                                    Permissions.ViewDeletedEntities))
                    {
                        q.HideDeleted.True();
                    }
                })
                           .GetResultsAsync(indexOptions)
            };

            var viewModel = new UserDisplayViewModel <Entity>()
            {
                User           = user,
                Counts         = featureEntityMetrics,
                IndexViewModel = new EntityIndexViewModel <Entity>()
                {
                    Options = indexOptions,
                    Pager   = new PagerOptions()
                    {
                        Page    = 1,
                        Size    = 10,
                        Enabled = false
                    }
                }
            };

            // Return view
            return(Views(
                       View <UserDisplayViewModel <Entity> >("Profile.Entities.Display.Content", model => viewModel)
                       .Zone("content")
                       .Order(int.MaxValue - 100)
                       ));
        }
Esempio n. 11
0
        public async Task <IActionResult> CreatePost(EditModeratorViewModel viewModel)
        {
            // Build users to effect
            var users = new List <User>();

            if (!String.IsNullOrEmpty(viewModel.Users))
            {
                var items = JsonConvert.DeserializeObject <IEnumerable <UserApiResult> >(viewModel.Users);
                foreach (var item in items)
                {
                    if (item.Id > 0)
                    {
                        var user = await _userStore.GetByIdAsync(item.Id);

                        if (user != null)
                        {
                            users.Add(user);
                        }
                    }
                }
            }

            var userId = 0;

            foreach (var user in users)
            {
                userId = user.Id;
            }

            var moderator = new Moderator()
            {
                UserId = userId
            };

            // Validate model state within all involved view providers
            if (await _viewProvider.IsModelStateValidAsync(moderator, this))
            {
                // Get composed type from all involved view providers
                var model = await _viewProvider.ComposeModelAsync(moderator, this);

                // Create moderator
                var result = await _moderatorStore.CreateAsync(model);

                if (result != null)
                {
                    // Update moderator within various view providers
                    await _viewProvider.ProvideUpdateAsync(result, this);

                    // Everything was OK
                    _alerter.Success(T["Moderator Created Successfully!"]);

                    // Redirect to topic
                    return(RedirectToAction(nameof(Index), new { Id = 0 }));
                }
            }
            else
            {
                _alerter.Danger(T["You must specify at least 1 user!"]);
            }

            return(await Create());


            //if (users.Count > 0)
            //{

            //    // Compose moderator from all involved view providers
            //    // This ensures the claims are always populated
            //    var composedModerator = await _viewProvider.GetComposedType(this);
            //    var isValid = false;

            //    //// Update each user
            //    //foreach (var user in users)
            //    //{

            //    //    composedModerator.UserId = user.Id;

            //    //    // Validate model state within all view providers
            //    //    if (await _viewProvider.IsModelStateValid(composedModerator, this))
            //    //    {
            //    //        // Create moderator
            //    //        var result = await _moderatorStore.CreateAsync(composedModerator);
            //    //        if (result != null)
            //    //        {
            //    //            // Update moderator within various view providers
            //    //            await _viewProvider.ProvideUpdateAsync(result, this);
            //    //            isValid = true;
            //    //        }
            //    //    }
            //    //}

            //    //if (isValid)
            //    //{

            //    //    // Everything was OK
            //    //    _alerter.Success(T["Moderator Created Successfully!"]);

            //    //    // Redirect to topic
            //    //    return RedirectToAction(nameof(Index), new {Id = 0});

            //    //}

            //    // if we reach this point some view model validation
            //    // failed within a view provider, display model state errors
            //    foreach (var modelState in ViewData.ModelState.Values)
            //    {
            //        foreach (var error in modelState.Errors)
            //        {
            //            _alerter.Danger(T[error.ErrorMessage]);
            //        }
            //    }

            //    return await Create();

            //}
            //else
            //{
            //    _alerter.Danger(T["You must specify at least 1 user!"]);
            //}

            //return await Create();
        }
Esempio n. 12
0
        // -----------------
        // Display User
        // -----------------

        public async Task <IActionResult> Display(DisplayUserOptions opts)
        {
            // Ensure we have permission
            if (!await _authorizationService.AuthorizeAsync(User,
                                                            Permissions.ViewProfiles))
            {
                return(Unauthorized());
            }

            // Get user to display
            var user = opts.Id > 0
                ? await _platoUserStore.GetByIdAsync(opts.Id)
                : await _contextFacade.GetAuthenticatedUserAsync();

            if (user == null)
            {
                return(NotFound());
            }

            // Ensure we have permission to view unconfirmed accounts
            if (!user.EmailConfirmed)
            {
                if (!await _authorizationService.AuthorizeAsync(User,
                                                                Permissions.ViewUnconfirmedUsers))
                {
                    return(Unauthorized());
                }
            }

            // Ensure we have permission to view users flagged as SPAM
            if (user.IsSpam)
            {
                if (!await _authorizationService.AuthorizeAsync(User,
                                                                Permissions.ViewSpamUsers))
                {
                    return(Unauthorized());
                }
            }

            // Ensure we have permission to view banned users
            if (user.IsBanned)
            {
                if (!await _authorizationService.AuthorizeAsync(User,
                                                                Permissions.ViewBannedUsers))
                {
                    return(Unauthorized());
                }
            }

            // Return Url for authentication & canonical url purposes
            ViewData["ReturnUrl"] = _contextFacade.GetRouteUrl(new RouteValueDictionary()
            {
                ["area"]       = "Plato.Users",
                ["controller"] = "Home",
                ["action"]     = "Display",
                ["opts.id"]    = user != null ? user.Id.ToString() : "",
                ["opts.alias"] = user != null ? user.Alias : ""
            });;

            // Build page title
            _pageTitleBuilder.AddSegment(S[user.DisplayName], int.MaxValue);

            // Build breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Users"], discuss => discuss
                                  .Action("Index", "Home", "Plato.Users")
                                  .LocalNav()
                                  ).Add(S[user.DisplayName]);
            });

            // Add user to context
            HttpContext.Items[typeof(User)] = user;

            // Build view model
            var viewModel = new ProfilePage()
            {
                Id = user.Id
            };

            // Return view
            return(View((LayoutViewModel)await _viewProvider.ProvideDisplayAsync(viewModel, this)));
        }
Esempio n. 13
0
        public override async Task <IViewProviderResult> BuildDisplayAsync(EntityUserIndex userIndex, IViewProviderContext context)
        {
            var user = await _platoUserStore.GetByIdAsync(userIndex.Id);

            if (user == null)
            {
                return(await BuildIndexAsync(userIndex, context));
            }

            var indexViewModel = context.Controller.HttpContext.Items[typeof(EntityIndexViewModel <Entity>)] as EntityIndexViewModel <Entity>;

            if (indexViewModel == null)
            {
                throw new Exception($"A view model of type {typeof(EntityIndexViewModel<Entity>).ToString()} has not been registered on the HttpContext!");
            }



            var featureEntityMetrics = new FeatureEntityCounts()
            {
                Features = await _featureEntityCountService
                           .ConfigureQuery(q =>
                {
                    q.CreatedUserId.Equals(user.Id);
                    q.HideSpam.True();
                    q.HideHidden.True();
                    q.HideDeleted.True();
                    q.HidePrivate.True();

                    //// Hide private?
                    //if (!await _authorizationService.AuthorizeAsync(context.Controller.HttpContext.User,
                    //    Permissions.ViewPrivateEntities))
                    //{
                    //    q.HidePrivate.True();
                    //}

                    //// Hide hidden?
                    //if (!await _authorizationService.AuthorizeAsync(context.Controller.HttpContext.User,
                    //    Permissions.ViewHiddenEntities))
                    //{
                    //    q.HideHidden.True();
                    //}

                    //// Hide spam?
                    //if (!await _authorizationService.AuthorizeAsync(context.Controller.HttpContext.User,
                    //    Permissions.ViewSpamEntities))
                    //{
                    //    q.HideSpam.True();
                    //}

                    //// Hide deleted?
                    //if (!await _authorizationService.AuthorizeAsync(context.Controller.HttpContext.User,
                    //    Permissions.ViewDeletedEntities))
                    //{
                    //    q.HideDeleted.True();
                    //}
                })
                           .GetResultsAsync()
            };

            var userDisplayViewModel = new UserDisplayViewModel <Entity>()
            {
                User           = user,
                IndexViewModel = indexViewModel,
                Counts         = featureEntityMetrics
            };

            return(Views(
                       View <UserDisplayViewModel>("User.Index.Header", model => userDisplayViewModel).Zone("header"),
                       View <UserDisplayViewModel <Entity> >("User.Index.Content", model => userDisplayViewModel).Zone("content"),
                       View <UserDisplayViewModel>("User.Entities.Display.Sidebar", model => userDisplayViewModel).Zone("sidebar")
                       ));
        }