Esempio n. 1
0
        public BlockActionResult GetContent(Guid connectionTypeGuid, GetConnectionOpportunitiesFilterViewModel filter = null)
        {
            filter = filter ?? new GetConnectionOpportunitiesFilterViewModel();

            return(ActionOk(GetConnectionOpportunities(connectionTypeGuid, filter)));
        }
Esempio n. 2
0
        /// <summary>
        /// Gets the connection opportunities view model that can be sent to the client.
        /// </summary>
        /// <param name="connectionTypeGuid">The connection type unique identifier.</param>
        /// <param name="filterViewModel">The filter.</param>
        /// <returns>The <see cref="GetContentViewModel"/> that contains the information about the response.</returns>
        private GetContentViewModel GetConnectionOpportunities(Guid connectionTypeGuid, GetConnectionOpportunitiesFilterViewModel filterViewModel)
        {
            using (var rockContext = new RockContext())
            {
                var opportunityService       = new ConnectionOpportunityService(rockContext);
                var opportunityClientService = new ConnectionOpportunityClientService(rockContext, RequestContext.CurrentPerson);
                var connectionType           = new ConnectionTypeService(rockContext).GetNoTracking(connectionTypeGuid);

                var filterOptions = new ConnectionOpportunityQueryOptions
                {
                    ConnectionTypeGuids = new List <Guid> {
                        connectionTypeGuid
                    },
                    IncludeInactive = true
                };

                if (filterViewModel.OnlyMyConnections)
                {
                    filterOptions.ConnectorPersonIds = new List <int> {
                        RequestContext.CurrentPerson?.Id ?? 0
                    };
                }

                // Put all the opportunities in memory so we can check security.
                var qry           = opportunityService.GetConnectionOpportunitiesQuery(filterOptions);
                var opportunities = qry.ToList()
                                    .Where(o => o.IsAuthorized(Authorization.VIEW, RequestContext.CurrentPerson));

                // Get the various counts to make available to the Lava template.
                // The conversion of the value to a dictionary is a temporary work-around
                // until we have a way to mark external types as lava safe.
                var opportunityIds = opportunities.Select(o => o.Id).ToList();
                var requestCounts  = opportunityClientService.GetOpportunityRequestCounts(opportunityIds)
                                     .ToDictionary(k => k.Key, k => k.Value
                                                   .GetType()
                                                   .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                                                   .ToDictionary(prop => prop.Name, prop => prop.GetValue(k.Value, null)));

                // Process the connection opportunities with the template.
                var mergeFields = RequestContext.GetCommonMergeFields();
                mergeFields.AddOrReplace("ConnectionOpportunities", opportunities);
                mergeFields.AddOrReplace("DetailPage", DetailPageGuid);
                mergeFields.AddOrReplace("ConnectionRequestCounts", requestCounts);

                var content = OpportunityTemplate.ResolveMergeFields(mergeFields);

                // Process the header template for.
                mergeFields = RequestContext.GetCommonMergeFields();
                if (connectionType != null)
                {
                    mergeFields.Add("ConnectionType", connectionType);
                }

                var headerContent = HeaderTemplate.ResolveMergeFields(mergeFields);

                return(new GetContentViewModel
                {
                    HeaderContent = headerContent,
                    Content = content
                });
            }
        }