예제 #1
0
        public async Task<ActionResult> Create(EventInformation model)
        {
            var profile = _profileService.GetProfile(User.Identity.GetUserId().ToLong());

            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("", "All of the form fields are required");
                var createModel = new CreateEventViewModel(profile);
                return View(createModel);
            }

            var start = new DateTime(model.StartDate.Year, model.StartDate.Month, model.StartDate.Day,
                model.StartTime.Hour, model.StartTime.Minute, model.StartTime.Second);

            var end = new DateTime(model.EndDate.Year, model.EndDate.Month, model.EndDate.Day,
                model.EndTime.Hour, model.EndTime.Minute, model.EndTime.Second);

            var ev = new Event
            {
                DateCreated = DateTime.UtcNow,
                StartTime = start,
                EndTime = end,
                Name = model.EventName,
                Description = model.Description,
                Privacy = model.PrivacyLevel,
                Owner = profile.User,
                Location = new Location
                {
                    Name = model.LocationInput,
                    Address = new Address
                    {
                        AddressLine1 = string.Format("{0} {1}", model.street_number, model.route),
                        City = model.locality,
                        CountryRegion = model.country,
                        PostalCode = model.postal_code,
                        StateProvince = model.state
                    }
                }
            };

            if (!model.lng.IsEmpty() && !model.lat.IsEmpty())
            {
                ev.Location.Geography = DbGeography.FromText(string.Format("POINT ({0} {1})", model.lng, model.lat));
            }

            if (model.Picture != null)
            {
                using (var content = new MultipartContent())
                {
                    content.Add(new StreamContent(model.Picture.InputStream));

                    var upload = new MediaUpload
                    {
                        Content = content,
                        ContentSize = model.Picture.ContentLength,
                        ContentType = model.Picture.ContentType
                    };

                    var picture = await _mediaService.UploadMediaAsync(upload);
                    ev.Picture = picture;
                    Log.InfoFormat("Uploaded picture for event. MediaId={0}", picture.Id);
                }
            }

            // If they want to create on facebook, do it here
            try
            {
                if (model.CreateFacebookEvent)
                {
                    var fbEvent = new FacebookEvent
                    {
                        Name = ev.Name,
                        Description = ev.Description,
                        State_Time = start,
                        Owner = new FacebookIdentity
                        {
                            Id = profile.FacebookId
                        }
                    };

                    var eventId = await _facebookService.PublishEvent(profile.User, fbEvent);
                    Log.InfoFormat("Created Facebook Event for new event.  UserId={0} FacebookId={1}", profile.User.Id, eventId);
                    ev.FacebookId = eventId;
                }
            }
            catch (Exception e)
            {
                Log.ErrorFormat("Failed to create Facebook Event for new event.  UserId={0}", profile.User.Id);
            }


            // Add yourself to the invitees list
            ev.Invitations = new List<Invitation>
            {
                new Invitation
                {
                    FacebookUserId = profile.FacebookId,
                    FacebookName = profile.GetFullName(),
                    Response = RSVP.YES
                }
            };

            // Save event
            _eventService.CreateEvent(ev);
            Log.InfoFormat("Created new Event. UserId={0} EventId={1}", profile.User.Id, ev.Id);

            return RedirectToAction("Event", new {Id = ev.Id});
        }
예제 #2
0
        private double CalculateTotalStorage(Event e)
        {
            double totalStorage = 0;

            foreach (MediaFile item in e.Media)
            {
                totalStorage += item.ContentSize;
            }

            return totalStorage;
        }
예제 #3
0
 public EventViewModel(UserProfile profile, Event ev)
     : base(profile)
 {
     Title = "Event";
     Event = ev;
 }
예제 #4
0
        private double CalculateNumViews(Event e, double numUsers)
        {
            double numViews = 0;

            if(e.StartTime.HasValue)
            {
                int difference = (DateTime.Now - e.StartTime.Value).Days;

                if(difference == 0)
                {
                    numViews = 5 * numUsers;
                }

                else if(Math.Abs(difference) == 1)
                {
                    numViews = 2 * numUsers;
                }

                else if(difference == 2)
                {
                    numViews = numUsers;
                }

                else if((difference >= 3 && difference <= 6) || (difference <= -2 && difference >= -4))
                {
                    numViews = numUsers / 2;
                }
            }

            return numViews;
        }