Beispiel #1
0
        private static void AddSermons(DBConnection dbCon, SermonSeries series)
        {
            string query = "SELECT * FROM sermons WHERE series = @seriesId ";
            var    cmd   = new MySqlCommand(query, dbCon.Connection);

            cmd.Parameters.AddWithValue("@seriesId", series.id);
            cmd.Prepare();
            var reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                var sermon = new Sermon();
                sermon.id                   = reader.GetInt32(0);
                sermon.title                = reader.GetString(1);
                sermon.slug                 = reader.GetString(2);
                sermon.description          = reader.GetString(3);
                sermon.speaker              = reader.GetString(4);
                sermon.duration             = reader.GetInt32(5);
                sermon.kitclub_id           = reader.GetInt32(6);
                sermon.vimeo_id             = reader.GetInt64(7);
                sermon.vimeo_sd_url         = reader.GetString(8);
                sermon.vimeo_live_url       = reader.GetString(9);
                sermon.audio_link           = reader.GetString(10);
                sermon.audio_size           = reader.GetString(11);
                sermon.series               = reader.GetInt32(12);
                sermon.campus               = reader.GetInt32(13);
                sermon.podcast_views        = reader.GetInt32(14);
                sermon.date                 = reader.GetInt64(15);
                sermon.notes_downloaded     = reader.GetInt32(16);
                sermon.questions_downloaded = reader.GetInt32(17);
                sermon.deleted              = reader.GetBoolean(18);
                series.sermons.Add(sermon);
            }
            reader.Close();
        }
        /// <summary>
        /// Finds and replaces the old object for the replacement
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <SystemResponse <SermonSeries> > UpdateSermonSeries(SermonSeries request)
        {
            if (!IsValidObjectId(request.Id))
            {
                return(new SystemResponse <SermonSeries>(true, string.Format(SystemMessages.UnableToFindPropertyForId, "Sermon Series", request.Id)));
            }

            // updated time is now
            request.LastUpdated = DateTime.UtcNow;

            var singleSeries = await _sermonsCollection.FindOneAndReplaceAsync(
                Builders <SermonSeries> .Filter.Eq(s => s.Id, request.Id), request);

            if (singleSeries == null)
            {
                return(new SystemResponse <SermonSeries>(true, string.Format(SystemMessages.UnableToFindValueInCollection, request.Id, "Sermons")));
            }

            return(new SystemResponse <SermonSeries>(request, "Success!"));
        }
        /// <summary>
        /// Adds a new SermonSeries to the Sermons Collection
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <SystemResponse <SermonSeries> > CreateNewSermonSeries(SermonSeries request)
        {
            // updated time is now
            request.LastUpdated = DateTime.UtcNow;

            await _sermonsCollection.InsertOneAsync(request);

            // respond with the inserted object
            var inserted = await _sermonsCollection.FindAsync(
                Builders <SermonSeries> .Filter.Eq(l => l.Slug, request.Slug));

            var response = inserted.FirstOrDefault();

            if (response == default(SermonSeries))
            {
                return(new SystemResponse <SermonSeries>(true, string.Format(SystemMessages.ErrorOcurredInsertingIntoCollection, "Sermons")));
            }

            return(new SystemResponse <SermonSeries>(response, "Success!"));
        }
Beispiel #4
0
        public IHttpActionResult GetSpeakerSeries(string slug = "", string speaker = "", int offset = 0)
        {
            var cacheKey = string.Format("api/sermonfeed/{0}/{1}/{2}", slug, speaker, offset);
            var output   = RockCache.Get(cacheKey) as List <SermonSeries>;

            if (output != null)
            {
                return(Json(output));
            }


            string      imageLocation = GlobalAttributesCache.Get().GetValue("PublicApplicationRoot").EnsureTrailingForwardslash() + "GetImage.ashx?Guid=";
            string      audioLocation = GlobalAttributesCache.Get().GetValue("PublicApplicationRoot").EnsureTrailingForwardslash() + "GetFile.ashx?Guid=";
            RockContext rockContext   = new RockContext();

            var speakerQry = new AttributeValueService(rockContext).Queryable().Where(av => av.AttributeId == SPEAKER_ATTRIBUTE && av.Value == speaker);
            ContentChannelItemService contentChannelItemService = new ContentChannelItemService(rockContext);
            var sermonSeriesQry = contentChannelItemService.Queryable()
                                  .Where(i => i.ContentChannelId == CONTENT_CHANNEL);

            if (!string.IsNullOrWhiteSpace(slug))
            {
                sermonSeriesQry = sermonSeriesQry.Where(i => i.ContentChannelItemSlugs.Where(s => s.ContentChannelItemId == i.Id && s.Slug == slug).Any());
            }
            var sermonSeriesList = sermonSeriesQry.SelectMany(i => i.ChildItems)
                                   .Select(i => i.ChildContentChannelItem)
                                   .Join(
                speakerQry,
                i => i.Id,
                a => a.EntityId,
                (i, a) => i
                )
                                   .Select(i => i.ParentItems.FirstOrDefault().ContentChannelItem)
                                   .DistinctBy(i => i.Id)
                                   .OrderByDescending(i => i.StartDateTime)
                                   .Skip(offset)
                                   .Take(12)
                                   .ToList();

            output = new List <SermonSeries>();

            foreach (var seriesItem in sermonSeriesList)
            {
                seriesItem.LoadAttributes();
                var sermonSeries = new SermonSeries
                {
                    id           = seriesItem.Id,
                    title        = seriesItem.Title,
                    description  = seriesItem.Content,
                    slug         = seriesItem.PrimarySlug,
                    image        = imageLocation + seriesItem.GetAttributeValue("Image"),
                    image_url    = imageLocation + seriesItem.GetAttributeValue("Image"),
                    last_updated = ConvertTime(seriesItem.StartDateTime),
                    sermons      = new List <Sermon>()
                };
                if (string.IsNullOrWhiteSpace(seriesItem.GetAttributeValue("Image")))
                {
                    var childItem = seriesItem.ChildItems.FirstOrDefault().ChildContentChannelItem;
                    childItem.LoadAttributes();
                    sermonSeries.image_url = imageLocation + childItem.GetAttributeValue("Image");
                    sermonSeries.image     = imageLocation + childItem.GetAttributeValue("Image");
                }

                output.Add(sermonSeries);

                //add sermons to series
                foreach (var sermonItem in seriesItem.ChildItems.Select(s => s.ChildContentChannelItem))
                {
                    sermonItem.LoadAttributes();
                    if (sermonItem.GetAttributeValue("Speaker").ToLower() != speaker.ToLower())
                    {
                        continue;
                    }

                    sermonSeries.sermons.Add(
                        new Sermon
                    {
                        id          = sermonItem.Id,
                        title       = sermonItem.Title,
                        description = sermonItem.Content,
                        slug        = sermonItem.PrimarySlug,
                        audio_link  = audioLocation + sermonItem.GetAttributeValue("Audio"),
                        date        = ConvertTime(sermonItem.StartDateTime),
                        duration    = sermonItem.GetAttributeValue("Duration").AsInteger(),
                        image       = imageLocation + sermonItem.GetAttributeValue("Image"),
                        image_url   = imageLocation + sermonItem.GetAttributeValue("Image"),
                        speaker     = sermonItem.GetAttributeValue("Speaker"),
                        vimeo_id    = sermonItem.GetAttributeValue("VimeoId").AsInteger()
                    });
                }
            }
            RockCache.AddOrUpdate(cacheKey, null, output, RockDateTime.Now.AddHours(1));

            return(Json(output));
        }
Beispiel #5
0
        /// <summary>
        /// returns a list of all SermonSeries Objets
        /// </summary>
        public async Task <SystemResponse <SermonSeries> > CreateNewSermonSeries(CreateSermonSeriesRequest request)
        {
            var validRequest = CreateSermonSeriesRequest.ValidateRequest(request);

            if (validRequest.HasErrors)
            {
                return(new SystemResponse <SermonSeries>(true, validRequest.ErrorMessage));
            }

            // the Slug on the series should be unique, so if we already have one with this slug
            // return an error - because we want to avoid having bad data in our database
            var allSermonSries = await _sermonsRepository.GetAllSermons();

            if (allSermonSries == null || allSermonSries == default(AllSermonsResponse))
            {
                return(null);
            }

            var seriesWithSameSlug = allSermonSries.Sermons.Where(i => string.Equals(i.Slug, request.Slug, StringComparison.InvariantCultureIgnoreCase));

            if (seriesWithSameSlug.Any())
            {
                var foundSeries = seriesWithSameSlug.FirstOrDefault();

                // there is already a sermon series with this slug, respond with one of those
                return(new SystemResponse <SermonSeries>(foundSeries, "202"));
            }

            // if any of the sermon series' are currently active
            if (request.EndDate == null)
            {
                var currentlyActiveSeries = allSermonSries.Sermons.Where(i => i.EndDate == null);
                if (currentlyActiveSeries.Any())
                {
                    // one of the series' is already active
                    var currentlyActive = currentlyActiveSeries.FirstOrDefault();
                    return(new SystemResponse <SermonSeries>(currentlyActive, "202"));
                }
            }
            else
            {
                request.EndDate = request.EndDate.Value.ToUniversalTime().Date;
            }

            // sanitise the start dates
            request.StartDate = request.StartDate.Value.ToUniversalTime().Date;

            var messageList = new List <SermonMessage>();

            foreach (var message in request.Messages)
            {
                messageList.Add(new SermonMessage
                {
                    AudioFileSize = message.AudioFileSize,
                    AudioDuration = message.AudioDuration,
                    // sanitise the message dates and get rid of the times
                    Date       = message.Date.Value.Date.ToUniversalTime().Date,
                    MessageId  = Guid.NewGuid().ToString(),
                    AudioUrl   = message.AudioUrl,
                    PassageRef = message.PassageRef,
                    Speaker    = message.Speaker,
                    Title      = message.Title,
                    VideoUrl   = message.VideoUrl
                });
            }

            var sermonSeries = new SermonSeries
            {
                ArtUrl    = request.ArtUrl,
                EndDate   = request.EndDate,
                Messages  = messageList,
                Name      = request.Name,
                Slug      = request.Slug,
                StartDate = request.StartDate,
                Thumbnail = request.Thumbnail,
                Year      = request.Year
            };

            var creationResponse = await _sermonsRepository.CreateNewSermonSeries(sermonSeries);

            if (creationResponse.HasErrors)
            {
                return(new SystemResponse <SermonSeries>(true, creationResponse.ErrorMessage));
            }

            // Save data in cache.
            _cache.Set(string.Format(CacheKeys.GetSermonSeries, creationResponse.Result.Id), creationResponse.Result, PersistentCacheEntryOptions);

            return(new SystemResponse <SermonSeries>(creationResponse.Result, "Success!"));
        }