Exemplo n.º 1
0
 public ActionResult MarkCommentHelpful(int commentId, string returnUrl)
 {
     try
     {
         int count = Db.HelpfulMarkGivenEvents
                     .Where(c => c.EventLog.SenderId == CurrentUser.Id)
                     .Where(c => c.LogCommentEventId == commentId)
                     .Count();
         if (count == 0)
         {
             LogCommentEvent comment = Db.LogCommentEvents.Where(c => c.Id == commentId).FirstOrDefault();
             if (commentId != 0)
             {
                 HelpfulMarkGivenEvent help = new HelpfulMarkGivenEvent()
                 {
                     LogCommentEventId = commentId
                 };
                 OsbideWebService client = new OsbideWebService();
                 Authentication   auth   = new Authentication();
                 string           key    = auth.GetAuthenticationKey();
                 EventLog         log    = new EventLog(help, CurrentUser);
                 client.SubmitLog(log, CurrentUser);
             }
         }
     }
     catch (Exception ex)
     {
         LogErrorMessage(ex);
     }
     Response.Redirect(returnUrl);
     return(View());
 }
Exemplo n.º 2
0
        public ActionResult PostFeedComment(FormCollection formCollection)
        {
            try
            {
                var comment = formCollection["comment"];
                if (string.IsNullOrWhiteSpace(comment))
                {
                    return(RedirectToAction("Index"));
                }

                comment = comment.TrimStart(',');
                OsbideWebService client = new OsbideWebService();
                Authentication   auth   = new Authentication();
                string           key    = auth.GetAuthenticationKey();
                if (string.IsNullOrEmpty(comment) == false)
                {
                    EventLog log = new EventLog();
                    log.SenderId = CurrentUser.Id;
                    log.LogType  = FeedPostEvent.Name;
                    FeedPostEvent commentEvent = new FeedPostEvent();
                    commentEvent.Comment = comment;
                    log.Data.BinaryData  = EventFactory.ToZippedBinary(commentEvent);
                    log = client.SubmitLog(log, CurrentUser);

                    //find all of this user's subscribers and send them an email
                    List <OsbideUser> observers = new List <OsbideUser>();

                    observers = (from subscription in Db.UserSubscriptions
                                 join user in Db.Users on
                                 new { InstitutionId = subscription.ObserverInstitutionId, SchoolId = subscription.ObserverSchoolId }
                                 equals new { InstitutionId = user.InstitutionId, SchoolId = user.SchoolId }
                                 where subscription.SubjectSchoolId == CurrentUser.SchoolId &&
                                 subscription.SubjectInstitutionId == CurrentUser.InstitutionId &&
                                 user.ReceiveEmailOnNewFeedPost == true
                                 select user).ToList();
                    if (observers.Count > 0)
                    {
                        string url  = StringConstants.GetActivityFeedDetailsUrl(log.Id);
                        string body = "Greetings,<br />{0} posted a new item to the activity feed:<br />\"{1}\"<br />To view this "
                                      + "conversation online, please visit {2} or visit your OSBIDE user profile.<br /><br />Thanks,\nOSBIDE<br /><br />"
                                      + "These automated messages can be turned off by editing your user profile.";
                        body = string.Format(body, CurrentUser.FirstAndLastName, comment, url);
                        List <MailAddress> to = new List <MailAddress>();
                        foreach (OsbideUser user in observers)
                        {
                            to.Add(new MailAddress(user.Email));
                        }
                        Email.Send("[OSBIDE] New Activity Post", body, to);
                    }
                }
            }
            catch (Exception ex)
            {
                LogErrorMessage(ex);
            }

            return(RedirectToAction("Index"));
        }
Exemplo n.º 3
0
        public ActionResult SubmitAssignmentFile(HttpPostedFileBase file)
        {
            //make sure that we have both a course id and assignment id
            int assignmentId = 0;
            int courseId     = 0;

            Int32.TryParse(Request.Form["AssignmentId"], out assignmentId);
            Int32.TryParse(Request.Form["CourseId"], out courseId);

            if (courseId < 1 || assignmentId < 1)
            {
                return(RedirectToAction("MyCourses"));
            }

            //get file information and continue if not null
            if (file != null)
            {
                //create submit event
                SubmitEvent submitEvent = new SubmitEvent();

                if (file.ContentLength > 0 && file.ContentLength < 5000000) //limit size to 5 MB
                {
                    submitEvent.SolutionName = Path.GetFileName(file.FileName);

                    byte[] fileData = null;
                    using (var binaryReader = new BinaryReader(file.InputStream))
                    {
                        fileData = binaryReader.ReadBytes(file.ContentLength);
                    }

                    MemoryStream stream = new MemoryStream();
                    using (ZipFile zip = new ZipFile())
                    {
                        zip.AddEntry(submitEvent.SolutionName, fileData);
                        zip.Save(stream);
                        stream.Position = 0;
                    }
                    //add the solution data to the event
                    submitEvent.CreateSolutionBinary(stream.ToArray());
                }
                else
                {
                    //TODO: handle specific errors
                    return(RedirectToAction("GenericError", "Error"));
                }

                submitEvent.AssignmentId = assignmentId;
                //create event log with solution to submit
                EventLog eventLog = new EventLog(submitEvent);
                eventLog.Sender   = CurrentUser;
                eventLog.SenderId = CurrentUser.Id;
                //create client to submit assignment to the db
                OsbideWebService client = new OsbideWebService();
                client.SubmitAssignment(assignmentId, eventLog, CurrentUser);

                return(RedirectToAction("Details", new { id = courseId }));
            }
            else
            {
                //TODO: handle specific errors
                return(RedirectToAction("GenericError", "Error"));
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Helper method for posting a comment.  Will return true if everything went OK, false otherwise
        /// </summary>
        /// <param name="logId"></param>
        /// <param name="comment"></param>
        /// <returns></returns>
        protected bool PostComment(string logId, string comment)
        {
            int id = -1;

            if (Int32.TryParse(logId, out id) == true)
            {
                //comments made on comments or mark helpful events need to be routed back to the original source
                IOsbideEvent checkEvent = Db.LogCommentEvents.Where(l => l.EventLogId == id).FirstOrDefault();
                if (checkEvent != null)
                {
                    id = (checkEvent as LogCommentEvent).SourceEventLogId;
                }
                else
                {
                    checkEvent = Db.HelpfulMarkGivenEvents.Where(l => l.EventLogId == id).FirstOrDefault();
                    if (checkEvent != null)
                    {
                        id = (checkEvent as HelpfulMarkGivenEvent).LogCommentEvent.SourceEventLogId;
                    }
                }

                LogCommentEvent logComment = new LogCommentEvent()
                {
                    Content          = comment,
                    SourceEventLogId = id,
                    SolutionName     = "OSBIDE"
                };
                OsbideWebService client = new OsbideWebService();
                Authentication   auth   = new Authentication();
                string           key    = auth.GetAuthenticationKey();
                EventLog         log    = null;
                if (string.IsNullOrEmpty(comment) == false)
                {
                    log = new EventLog(logComment, CurrentUser);
                    log = client.SubmitLog(log, CurrentUser);
                }
                else
                {
                    return(false);
                }
                logComment = Db.LogCommentEvents.Where(l => l.EventLogId == log.Id).FirstOrDefault();

                //the code below performs two functions:
                // 1. Send interested parties email notifications
                // 2. Log the comment in the social activity log (displayed on an individual's profile page)

                //find others that have posted on this same thread
                List <OsbideUser> interestedParties = Db.LogCommentEvents
                                                      .Where(l => l.SourceEventLogId == id)
                                                      .Where(l => l.EventLog.SenderId != CurrentUser.Id)
                                                      .Select(l => l.EventLog.Sender)
                                                      .ToList();

                //(email only) find those that are subscribed to this thread
                List <OsbideUser> subscribers = (from logSub in Db.EventLogSubscriptions
                                                 join user in Db.Users on logSub.UserId equals user.Id
                                                 where logSub.LogId == id &&
                                                 logSub.UserId != CurrentUser.Id &&
                                                 user.ReceiveNotificationEmails == true
                                                 select user).ToList();

                //check to see if the author wants to be notified of posts
                OsbideUser eventAuthor = Db.EventLogs.Where(l => l.Id == id).Select(l => l.Sender).FirstOrDefault();

                //master list shared between email and social activity log
                Dictionary <int, OsbideUser> masterList = new Dictionary <int, OsbideUser>();
                if (eventAuthor != null)
                {
                    masterList.Add(eventAuthor.Id, eventAuthor);
                }
                foreach (OsbideUser user in interestedParties)
                {
                    if (masterList.ContainsKey(user.Id) == false)
                    {
                        masterList.Add(user.Id, user);
                    }
                }

                //add the current user for activity log tracking, but not for emails
                OsbideUser creator = new OsbideUser(CurrentUser);
                creator.ReceiveNotificationEmails = false;  //force no email send on the current user
                if (masterList.ContainsKey(creator.Id) == true)
                {
                    masterList.Remove(creator.Id);
                }
                masterList.Add(creator.Id, creator);

                //update social activity
                foreach (OsbideUser user in masterList.Values)
                {
                    CommentActivityLog social = new CommentActivityLog()
                    {
                        TargetUserId      = user.Id,
                        LogCommentEventId = logComment.Id
                    };
                    Db.CommentActivityLogs.Add(social);
                }
                Db.SaveChanges();

                //form the email list
                SortedDictionary <int, OsbideUser> emailList = new SortedDictionary <int, OsbideUser>();

                //add in interested parties from our master list
                foreach (OsbideUser user in masterList.Values)
                {
                    if (user.ReceiveNotificationEmails == true)
                    {
                        if (emailList.ContainsKey(user.Id) == false)
                        {
                            emailList.Add(user.Id, user);
                        }
                    }
                }

                //add in subscribers to email list
                foreach (OsbideUser user in subscribers)
                {
                    if (emailList.ContainsKey(user.Id) == false)
                    {
                        emailList.Add(user.Id, user);
                    }
                }

                //send emails
                if (emailList.Count > 0)
                {
                    //send email
                    string url  = StringConstants.GetActivityFeedDetailsUrl(id);
                    string body = "Greetings,<br />{0} has commented on a post that you have previously been involved with:<br />\"{1}\"<br />To view this "
                                  + "conversation online, please visit {2} or visit your OSBIDE user profile.<br /><br />Thanks,<br />OSBIDE<br /><br />"
                                  + "These automated messages can be turned off by editing your user profile.";
                    body = string.Format(body, logComment.EventLog.Sender.FirstAndLastName, logComment.Content, url);
                    List <MailAddress> to = new List <MailAddress>();
                    foreach (OsbideUser user in emailList.Values)
                    {
                        to.Add(new MailAddress(user.Email));
                    }
                    Email.Send("[OSBIDE] Activity Notification", body, to);
                }
            }
            return(true);
        }