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)); } }
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); }
/// <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)); } }
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); }
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(); } }
public static bool CanDeleteAttachment(AnnouncementAttachment announcementAttachment, UserContext context) { return(BaseSecurity.IsSysAdmin(context) || announcementAttachment.Attachment.PersonRef == context.PersonId); }