Esempio n. 1
0
        public Announcement Add(int announcementId, AnnouncementTypeEnum type, int attachmentId)
        {
            var annDetails = ServiceLocator.GetAnnouncementService(type).GetAnnouncementDetails(announcementId);

            Trace.Assert(Context.PersonId.HasValue);
            Trace.Assert(Context.SchoolLocalId.HasValue);
            if (!CanAttach(annDetails))
            {
                throw new ChalkableSecurityException();
            }

            using (var u = Update())
            {
                var attDa = new AttachmentDataAccess(u);
                var att   = attDa.GetById(attachmentId);
                if (att.PersonRef != Context.PersonId)
                {
                    throw new ChalkableSecurityException();
                }

                var annAtt = new AnnouncementAttachment
                {
                    AnnouncementRef = annDetails.Id,
                    AttachedDate    = Context.NowSchoolTime,
                    Order           = ServiceLocator.GetAnnouncementService(type).GetNewAnnouncementItemOrder(annDetails),
                    AttachmentRef   = attachmentId
                };
                new AnnouncementAttachmentDataAccess(u).Insert(annAtt);
                att.LastAttachedDate = annAtt.AttachedDate;
                attDa.Update(att);
                u.Commit();
                NotifyUsers(annDetails, type);
            }
            return(annDetails);
        }
        /// <summary>
        /// 上传公告附件
        /// </summary>
        /// <param name="id">公告ID</param>
        /// <returns></returns>
        public GetAnnouncementAttachmentDTO UploadAnnouncementAttachment(int?announcementId = null)
        {
            string randomString = StringExtensions.GetRandomString(6, true);
            //获取绝对路径
            DirectoryInfo dir = Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, SystemConfig.UploadFilePathWin, randomString));
            //保存文件
            string saveName = FileHelper.Upload(HttpContext.Current, dir.FullName);

            //生成AnnouncementAttachment对象
            string path = "/" + Path.Combine(SystemConfig.UploadFilePathWeb, randomString, saveName).Replace(@"\", @"/");

            AnnouncementAttachment aa = new AnnouncementAttachment()
            {
                AnnouncementId = announcementId,
                Name           = saveName,
                RelativeURL    = path
            };

            //保存到数据库
            using (var ctx = new AspodesDB())
            {
                //if (!ctx.Announcements.Any(a => a.AnnouncementId == id && a.Status == "C"))
                //{
                //    throw new NotFoundException("未找到公告");
                //}
                var announcementattachments = ctx.AnnouncementAttachments.Add(aa);
                ctx.SaveChanges();
                return(Mapper.Map <GetAnnouncementAttachmentDTO>(announcementattachments));
            }
        }
Esempio n. 3
0
 private bool CanDeleteAttachment(AnnouncementAttachment announcementAttachment)
 {
     //TODO: impl method get announcement owners
     //var ann = ServiceLocator.AnnouncementService.GetAnnouncementById(announcementAttachment.AnnouncementRef);
     //int? classId = null;
     //if (ann is LessonPlan) classId = (ann as LessonPlan).ClassRef;
     //if (ann is ClassAnnouncement) classId = (ann as ClassAnnouncement).ClassRef;
     //var teachers =  ServiceLocator.ClassService.GetClassTeachers(classId, null);
     //return teachers.Any(x => x.PersonRef == announcementAttachment.PersonRef) || announcementAttachment.PersonRef == Context.PersonId;
     return(true);
 }
Esempio n. 4
0
        /// <summary>
        /// </summary>
        /// <returns>Source annAttahcment and new annAttachment</returns>
        public static IList <Pair <AnnouncementAttachment, AnnouncementAttachment> > CopyAnnouncementAttachments(IDictionary <int, int> fromToAnnouncementIds,
                                                                                                                 IList <int> attachmentsOwners, UnitOfWork unitOfWork, IServiceLocatorSchool serviceLocator, ConnectorLocator connectorLocator)
        {
            Trace.Assert(serviceLocator.Context.PersonId.HasValue);

            //var attachmentDA = new AttachmentDataAccess(unitOfWork);

            var annoncementAttachmentDA = new AnnouncementAttachmentDataAccess(unitOfWork);
            var annAttachmentsToCopy    = annoncementAttachmentDA.GetByAnnouncementIds(fromToAnnouncementIds.Select(x => x.Key).ToList(), attachmentsOwners);

            var fromToAnnAttachments = new List <Pair <AnnouncementAttachment, AnnouncementAttachment> >();

            foreach (var announcementPair in fromToAnnouncementIds)
            {
                var announcementAttachmentsToCopy = annAttachmentsToCopy.Where(x => x.AnnouncementRef == announcementPair.Key).ToList();

                foreach (var annAttachmentToCopy in announcementAttachmentsToCopy)
                {
                    //var newAttachment = new Attachment
                    //{
                    //    Name = annAttachmentToCopy.Attachment.Name,
                    //    PersonRef = serviceLocator.Context.PersonId.Value,
                    //    Uuid = null,
                    //    UploadedDate = serviceLocator.Context.NowSchoolTime,
                    //    LastAttachedDate = serviceLocator.Context.NowSchoolTime,
                    //};

                    //newAttachment.Id = attachmentDA.InsertWithEntityId(newAttachment);

                    var newAnnAttachment = new AnnouncementAttachment
                    {
                        AnnouncementRef = announcementPair.Value,
                        AttachedDate    = annAttachmentToCopy.AttachedDate,
                        Order           = annAttachmentToCopy.Order,
                        AttachmentRef   = annAttachmentToCopy.AttachmentRef,
                        Attachment      = annAttachmentToCopy.Attachment
                    };

                    fromToAnnAttachments.Add(new Pair <AnnouncementAttachment, AnnouncementAttachment>(annAttachmentToCopy, newAnnAttachment));
                }
            }

            annoncementAttachmentDA.Insert(fromToAnnAttachments.Select(x => x.Second).ToList());

            return(fromToAnnAttachments);
        }
 /// <summary>
 /// 下载公告附件
 /// </summary>
 /// <param name="announcementAttachmentId">附件ID</param>
 /// <returns></returns>
 public HttpResponseMessage DownloadAnnouncementAttachment(int?announcementAttachmentId)
 {
     try
     {
         AnnouncementAttachment attach = null;
         using (var ctx = new AspodesDB())
         {
             attach = ctx.AnnouncementAttachments.FirstOrDefault(aa => aa.AnnouncementAttachmentId == announcementAttachmentId);
         }
         return(attach == null?ResponseWrapper.ExceptionResponse(new NotFoundException())
                    : FileHelper.Download(HttpContext.Current, attach.RelativeURL, attach.Name));
     }
     catch (Exception e)
     {
         return(ResponseWrapper.ExceptionResponse(e));
     }
 }
Esempio n. 6
0
        public static IList <AnnouncementAttachment> CopyAnnouncementAttachments(int fromAnnouncementId, IList <int> attachmentsOwners, IList <int> toAnnouncemenIds, UnitOfWork unitOfWork, IServiceLocatorSchool serviceLocator, ConnectorLocator connectorLocator)
        {
            Trace.Assert(serviceLocator.Context.PersonId.HasValue);
            var da = new AnnouncementAttachmentDataAccess(unitOfWork);
            var annAttachmentsForCopying = attachmentsOwners.Count == 0
                ? da.GetLastAttachments(fromAnnouncementId).ToList()
                : da.GetLastAttachments(fromAnnouncementId).Where(x => attachmentsOwners.Contains(x.Attachment.PersonRef)).ToList();

            var annAtts = new List <AnnouncementAttachment>();

            foreach (var annAttForCopy in annAttachmentsForCopying)
            {
                foreach (var toAnnouncemenId in toAnnouncemenIds)
                {
                    //var attForCopy = annAttForCopy.Attachment;
                    //var content = serviceLocator.AttachementService.GetAttachmentContent(attForCopy).Content;
                    //if (content != null)
                    //{
                    //    var att = AttachmentService.Upload(attForCopy.Name, content, attForCopy.IsStiAttachment, unitOfWork, serviceLocator, connectorLocator);
                    //    var annAtt = new AnnouncementAttachment
                    //    {
                    //        AnnouncementRef = toAnnouncemenId,
                    //        AttachedDate = annAttForCopy.AttachedDate,
                    //        Order = annAttForCopy.Order,
                    //        AttachmentRef = att.Id,
                    //        Attachment = att
                    //    };
                    //    annAtts.Add(annAtt);
                    //}

                    var annAtt = new AnnouncementAttachment
                    {
                        AnnouncementRef = toAnnouncemenId,
                        AttachedDate    = annAttForCopy.AttachedDate,
                        Order           = annAttForCopy.Order,
                        AttachmentRef   = annAttForCopy.AttachmentRef,
                        Attachment      = annAttForCopy.Attachment
                    };
                    annAtts.Add(annAtt);
                }
            }
            da.Insert(annAtts);
            return(da.GetLastAttachments(toAnnouncemenIds, annAtts.Count));
        }
        public Announcement AddAttachment(int announcementId, AnnouncementTypeEnum annType, byte[] content, string name)
        {
            var ann = ServiceLocator.GetAnnouncementService(annType).GetAnnouncementDetails(announcementId);

            if (!Context.PersonId.HasValue)
            {
                throw new UnassignedUserException();
            }
            if (!CanAttach(ann))
            {
                throw new ChalkableSecurityException();
            }

            var uuid   = UploadToCrocodoc(name, content);
            var annAtt = new AnnouncementAttachment
            {
                AnnouncementRef = ann.Id,
                AttachedDate    = Context.NowSchoolTime,
                Order           = ServiceLocator.GetAnnouncementService(annType).GetNewAnnouncementItemOrder(ann)
            };

            var attachment = AnnouncementAttachmentStorage.Add(annAtt);

            ServiceLocator.StorageBlobService.AddBlob(ATTACHMENT_CONTAINER_ADDRESS, attachment.Id.ToString(CultureInfo.InvariantCulture), content);

            if (ann.State != AnnouncementState.Draft)
            {
                if (ann.IsOwner)
                {
                    ServiceLocator.NotificationService.AddAnnouncementNewAttachmentNotification(announcementId, annType);
                }
                else
                {
                    ServiceLocator.NotificationService.AddAnnouncementNewAttachmentNotificationToOwner(announcementId, annType, Context.PersonId.Value);
                }
            }
            return(ann);
        }
Esempio n. 8
0
        public AnnouncementAttachment UploadAttachment(int announcementId, AnnouncementTypeEnum type, byte[] content, string name)
        {
            var annDetails = ServiceLocator.GetAnnouncementService(type).GetAnnouncementDetails(announcementId);

            Trace.Assert(Context.PersonId.HasValue);
            Trace.Assert(Context.SchoolLocalId.HasValue);
            if (!CanAttach(annDetails))
            {
                throw new ChalkableSecurityException();
            }

            using (var uow = Update())
            {
                var att    = AttachmentService.Upload(name, content, false, uow, ServiceLocator, ConnectorLocator);
                var annAtt = new AnnouncementAttachment
                {
                    AnnouncementRef = annDetails.Id,
                    AttachedDate    = Context.NowSchoolTime,
                    Order           = ServiceLocator.GetAnnouncementService(type).GetNewAnnouncementItemOrder(annDetails),
                    AttachmentRef   = att.Id,
                };
                var da    = new AnnouncementAttachmentDataAccess(uow);
                var attId = da.InsertWithEntityId(annAtt);
                uow.Commit();
                bool notifyUsers = !annDetails.IsOwner ||
                                   (annDetails.ClassAnnouncementData != null && annDetails.ClassAnnouncementData.VisibleForStudent) ||
                                   (annDetails.LessonPlanData != null && annDetails.LessonPlanData.VisibleForStudent) ||
                                   annDetails.AdminAnnouncementData != null;
                if (notifyUsers)
                {
                    NotifyUsers(annDetails, type);
                }

                return(da.GetById(attId, Context.PersonId.Value, Context.RoleId, true));
            }
        }
        /// <summary>
        /// 删除公告附件
        /// </summary>
        /// <param name="announcementAttachmentId">公告附件ID</param>
        /// <returns></returns>
        public void Delete(int announcementAttachmentId)
        {
            AnnouncementAttachment aa = null;
            string path = "";

            using (var ctx = new AspodesDB())
            {
                aa = ctx.AnnouncementAttachments.FirstOrDefault(an => an.AnnouncementAttachmentId == announcementAttachmentId);
                if (null == aa)
                {
                    throw new NotFoundException("未找到公告");
                }

                //获取绝对路径
                string relative = aa.RelativeURL.Replace("~", "").Replace("/", @"\");
                if (relative.StartsWith(@"\"))
                {
                    relative = relative.Substring(1);
                }
                path = Path.Combine(HttpRuntime.AppDomainAppPath, relative);
                ctx.AnnouncementAttachments.Remove(aa);
                ctx.SaveChanges();
            }
        }
Esempio n. 10
0
 public static bool CanDeleteAttachment(AnnouncementAttachment announcementAttachment, UserContext context)
 {
     return(BaseSecurity.IsSysAdmin(context) || announcementAttachment.Attachment.PersonRef == context.PersonId);
 }