예제 #1
0
        public new void NewsUpdate(News entity)
        {
            // Check permission: Admin
              PrincipalPermission permAdmin = new PrincipalPermission(Thread.CurrentPrincipal.Identity.Name, "Administrator");
              permAdmin.Demand();

              TraceCallEnterEvent.Raise();
              try
              {
            // Check required fields:
            if (entity.Title.Length == 0) throw new ArgumentNullException("News.Title", "A hír címe nincs megadva.");
            if (entity.Abstract.Length == 0)
              throw new ArgumentNullException("News.Abstract", "A hír abstract nincs megadva.");
            if (entity.NewsBody.Length == 0)
              throw new ArgumentNullException("News.NewsBody", "A hír szövege nincs megadva.");

            if (entity.PictureUrl.Length > 0 && entity.PictureUrl != DBString.Null)
            {
              string ext = Path.GetExtension(entity.PictureUrl).ToLower();
              if (!(ext.Equals(".gif") || ext.Equals(".jpg") || ext.Equals(".jpeg")))
            throw new ApplicationException("Csak jpeg vagy gif formátumú kép csatolható.");
              if (entity.PictureData == null || entity.PictureData.Length == 0)
            throw new ApplicationException("A fájlnévhez nem tartozik adat.");

              if (entity.PictureData != null && entity.PictureData.Length > 0)
              {
            if (entity.PictureUrl.Length == 0)
              throw new ApplicationException("A kép adathoz nem tartozik fájlnév.");
              }
            }
            // Logical checks
            News selected = NewsSelect(entity.ID);
            if (selected == null)
              throw new ApplicationException("A megadott azonosítóval nem létezik hír.");

            //string oldFileName = selected.PictureUrl;

            // Save data
            selected.Title = entity.Title;
            selected.Abstract = entity.Abstract;
            selected.NewsBody = entity.NewsBody;
            selected.VisibleForVisitor = entity.VisibleForVisitor;
            selected.VisibleForRegistered = entity.VisibleForRegistered;
            selected.IsActive = entity.IsActive;
            selected.PictureUrl = entity.PictureUrl;
            selected.IsActual = entity.IsActual;
            selected.CategoryRef = entity.CategoryRef;

            NewsPictureService newsPictureSrv = new NewsPictureService(m_DataContext);
            FileDataContext fileDataContext = new FileDataContext();
            m_DataContext.BeginNestedTran();
            try
            {
              // Clear old files:
              NewsPictureContainer oldPics = base.SelectChildrenByPictureOfNews(entity.ID);
              foreach (NewsPicture oldPic in oldPics.All)
              {
            newsPictureSrv.NewsPictureDelete(oldPic);
              }

              // NewsPicture - insert:
              foreach (NewsPicture pic in entity.NewsPictures.Current)
              {
            if (/*pic.PicturePath.Length > 0 &&*/  entity.PictureUrl != DBString.Null && entity.PictureData != null && pic.PictureData.Length > 0)
              newsPictureSrv.NewsPictureInsert(pic);
              }

              selected.NewsAttachments = entity.NewsAttachments;

              NewsAttachmentService attSrv = new NewsAttachmentService(m_DataContext);

              // Clear old files:
              NewsAttachmentContainer oldFiles = base.SelectChildrenByAttachmentOfNews(entity.ID);
              foreach (NewsAttachment oldFile in oldFiles.All)
              {
            attSrv.NewsAttachmentDelete(oldFile);
              }
              NewsAttachment newFile;
              // EDocumentAttachments - insert:
              foreach (NewsAttachment file in selected.NewsAttachments.Current)
              {
            if (file.FileData.Length == 0)
            {
              newFile = attSrv.NewsAttachmentSelectFile(file.ID);
            }
            else
            {
              newFile = file;
            }
            newFile.NewsRef = selected.ID;
            newFile.Name = file.Name;
            newFile.Description = file.Description;
            newFile.CreatedDate = DateTime.Now;

            if (attSrv.NewsAttachmentSelect(newFile.ID) != null)
            {
              attSrv.NewsAttachmentUpdate(newFile);
            }
            else
            {
              attSrv.NewsAttachmentInsert(newFile);
            }
              }
              // News
              base.NewsUpdate(selected);

              // News base picture update
              fileDataContext.NewsDelete(selected.ID);
              if (entity.PictureData != null && entity.PictureData.Length > 0)
              {
            fileDataContext.NewsInsert(entity.ID, entity.PictureData);
              }

              m_DataContext.CommitNested();
            }
            catch
            {
              m_DataContext.RollbackNested();
              throw;
            }

            BusinessAuditEvent.Success(
              new EventParameter("NewsID", entity.ID.ToString()),
              new EventParameter("NewsTitle", entity.Title)
              );
            TraceCallReturnEvent.Raise();
            return;
              }
              catch (Exception ex)
              {
            ExceptionManager.Publish(ex);
            BusinessAuditEvent.Fail(
              new EventParameter("Exception", ex.ToString()),
              new EventParameter("NewsID", entity.ID.ToString()),
              new EventParameter("NewsTitle", entity.Title)
              );
            TraceCallReturnEvent.Raise(false);
            throw;
              }
        }