/* * These methods should be moved to the PrayerRequestsController after * they have been tweaked to be a bit more general use approved. * * Daniel Hazelbaker 9/29/2021 */ /// <summary> /// Prays for the specified request and optionally launches a workflow /// and/or records an interaction. /// </summary> /// <param name="prayerRequestGuid">The prayer request unique identifier that is being prayed for.</param> /// <param name="requestContext">The request context that describes the current request in process.</param> /// <param name="launchWorkflowGuid">The workflow type unique identifier to be launched.</param> /// <param name="recordInteraction">If set to <c>true</c> then an interaction will be recorded.</param> private bool PrayForRequest(Guid prayerRequestGuid, RockRequestContext requestContext, Guid?launchWorkflowGuid, bool recordInteraction) { return(PrayForRequest(prayerRequestGuid, requestContext.CurrentPerson, launchWorkflowGuid, recordInteraction, string.Empty, requestContext.ClientInformation?.UserAgent, requestContext.ClientInformation?.IpAddress, null)); }
/// <summary> /// Gets the e-mail template option choices available to the individual. /// </summary> /// <param name="rockContext">The database context to use for data lookup.</param> /// <returns>A collection of view models that represent the e-mail templates.</returns> internal static List <ListItemViewModel> GetEmailTemplateOptions(RockContext rockContext, RockRequestContext requestContext) { return(new SystemCommunicationService(rockContext) .Queryable() .Where(c => c.IsActive == true) .ToList() .Where(c => c.IsAuthorized(Rock.Security.Authorization.VIEW, requestContext.CurrentPerson)) .OrderBy(c => c.Title) .Select(c => new ListItemViewModel { Value = c.Guid.ToString(), Text = c.Title }) .ToList()); }
public async Task <IActionResult> Postback(int blockId, string actionName, [FromBody] JToken parameters, [FromServices] RockRequestContext rockRequestContext) { try { var blockCache = BlockCache.Get(blockId); var block = blockCache.GetMappedBlockType(HttpContext.RequestServices); block.Block = blockCache; block.PageCache = blockCache.Page; block.RockPage = new RockPage(PageCache.Get(blockCache.PageId.Value), rockRequestContext); rockRequestContext.CurrentPage = block.RockPage; if (!(block is IAsyncActionBlock actionBlock)) { return(new BadRequestObjectResult("Block does not support actions.")); } ActionData actionData; try { actionData = parameters.ToObject <ActionData>(); } catch { return(new BadRequestObjectResult("Invalid parameter data.")); } foreach (var q in Request.Query) { actionData.Parameters.AddOrReplace(q.Key, JToken.FromObject(q.Value.ToString())); } return(await actionBlock.ProcessActionAsync(actionName, actionData)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public HttpResponseMessage GetTvmlForPage(Guid pageGuid) { var response = new HttpResponseMessage(); var currentPerson = GetPerson(); var page = PageCache.Get(pageGuid); // If page is null return 404 if (page == null) { response.StatusCode = HttpStatusCode.NotFound; return(response); } // Check security if (!page.IsAuthorized(Rock.Security.Authorization.VIEW, currentPerson)) { response.StatusCode = HttpStatusCode.Unauthorized; return(response); } // Get requested cache control from client (client trumps server. We'll use this to set the reponse header to help inform any CDNs var cacheRequest = this.Request.GetHeader("X-Rock-Tv-RequestedCacheControl"); if (cacheRequest.IsNotNullOrWhiteSpace()) { var cacheParts = cacheRequest.Split(':'); switch (cacheParts[0]) { case "public": { var maxAgeInSeconds = cacheParts[1] != null ? cacheParts[1].AsInteger() : 777; response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, MaxAge = new TimeSpan(0, 0, maxAgeInSeconds) }; break; } case "private": { response.Headers.CacheControl = new CacheControlHeaderValue() { Private = true }; break; } } } else { // Use cache from database if (page.CacheControlHeaderSettings.IsNotNullOrWhiteSpace()) { switch (page.CacheControlHeader.RockCacheablityType) { case Rock.Utility.RockCacheablityType.Public: { response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, MaxAge = new TimeSpan(0, 0, page.CacheControlHeader.MaxAge.ToSeconds()), SharedMaxAge = new TimeSpan(0, 0, page.CacheControlHeader.SharedMaxAge.ToSeconds()) }; break; } case Rock.Utility.RockCacheablityType.Private: { response.Headers.CacheControl = new CacheControlHeaderValue() { Private = true }; break; } } } } // Get content and return it try { var site = SiteCache.Get(page.SiteId); var applicationSettings = JsonConvert.DeserializeObject <AppleTvApplicationSettings>(site.AdditionalSettings); var mergeFields = RockRequestContext.GetCommonMergeFields(); mergeFields.Add("SiteStyles", applicationSettings.ApplicationStyles); mergeFields.Add("CurrentPage", page); mergeFields.Add("CurrentPersonCanEdit", page.IsAuthorized(Rock.Security.Authorization.EDIT, currentPerson)); mergeFields.Add("CurrentPersonCanAdministrate", page.IsAuthorized(Rock.Security.Authorization.ADMINISTRATE, currentPerson)); //mergeFields.Add( "PageParameter", this.Request.GetQueryNameValuePairs() ); mergeFields.Add("TvShellVersion", RockRequestContext.GetHeader("X-Rock-TvShellVersion")); mergeFields.Add("TvAppTheme", RockRequestContext.GetHeader("X-Rock-AppTheme")); mergeFields.Add("IsDemoModeEnabled", RockRequestContext.GetHeader("X-Rock-IsDemoModeEnabled")); // Get device data var deviceData = this.Request.GetHeader("X-Rock-DeviceData"); if (deviceData.IsNotNullOrWhiteSpace()) { mergeFields.Add("DeviceData", JsonConvert.DeserializeObject <DeviceData>(deviceData)); } // Get the page response content from the AdditionalSettings property var pageResponse = JsonConvert.DeserializeObject <ApplePageResponse>(page.AdditionalSettings); // Run Lava across the content pageResponse.Content = pageResponse.Content.ResolveMergeFields(mergeFields, currentPerson, "All"); response.Content = new StringContent(pageResponse.ToJson(), System.Text.Encoding.UTF8, "application/json"); response.StatusCode = HttpStatusCode.OK; return(response); } catch { // Ooops... response.StatusCode = HttpStatusCode.InternalServerError; return(response); } }
/// <summary> /// Initializes a new instance of the <see cref="RockPage"/> class. /// </summary> /// <param name="id">The identifier.</param> /// <exception cref="System.Exception">Page not found</exception> public RockPage(PageCache pageCache, RockRequestContext context) { PageCache = pageCache ?? throw new ArgumentNullException(nameof(pageCache), "pageCache cannot be null."); Context = context; }