public void SaveFileTransaction(FileTransferBase file) { try { rx.BeginTransaction(); file.isCompleted = (file.Status == TransferStatus.Completed); RepositoryItem ri = GetRepositoryItem(file); if (ri != null) { ri.Availability = StatusToAvailability(file, ri.Availability); rx.Save(ri); } RepositoryItemVersion riv = GetRepositoryItemVersion(file); if (riv != null) { riv.Availability = StatusToAvailability(file, riv.Availability); rx.Save(riv); } rx.Save(file); rx.Commit(); } catch (Exception ex) { rx.Rollback(); throw ex; } }
public void ExecuteAction(long idItem, long idVersion, ItemAction action, String unknownUser, String repositoryPath, String thumnailPath) { if (!SessionTimeout()) { Boolean reloadItems = false; Int32 idCommunity = UserContext.CurrentCommunityID; ModuleRepository.ActionType uAction = ModuleRepository.ActionType.GenericError; liteRepositoryItemVersion version = Service.VersionGet(idVersion); if (version == null) { View.DisplayUserMessage(UserMessageType.versionItemNotFound); uAction = ModuleRepository.ActionType.UnknownItemFound; } else { liteRepositoryItem item = Service.ItemGet(version.IdItem); if (item != null) { String path = repositoryPath; switch (item.Repository.Type) { case RepositoryType.Portal: path += "\\0"; break; case RepositoryType.Community: path += "\\" + item.Repository.IdCommunity.ToString(); break; } Boolean executed = false; switch (action) { case ItemAction.addVersion: RepositoryItemVersion vr = Service.VersionSetActive(idVersion); reloadItems = (vr != null && vr.IsActive); if (reloadItems) { View.CurrentVersionUpdated(); } View.DisplayUserMessage((reloadItems ? UserMessageType.versionPromoted : UserMessageType.versionNotPromoted)); uAction = (reloadItems) ? ModuleRepository.ActionType.VersionSetAsActive : ModuleRepository.ActionType.VersionUnableToSetAsActive; break; } if (reloadItems) { LoadVersions(item, unknownUser, repositoryPath); } } } View.SendUserAction(idCommunity, Service.GetIdModule(), uAction, idVersion, ModuleRepository.ObjectType.VersionItem); } }
public MultimediaFileObject MultimediaSetDefaultItem(long idItem, long idVersion, long idDocument) { MultimediaFileObject document = null; try { RepositoryItem item = Manager.Get <RepositoryItem> (idItem); RepositoryItemVersion version = Manager.Get <RepositoryItemVersion> (idVersion); List <MultimediaFileObject> cDefaults = (from f in Manager.GetIQ <MultimediaFileObject>() where f.Id != idDocument && f.IdVersion == idVersion && f.IsDefaultDocument select f).ToList(); document = Manager.Get <MultimediaFileObject>(idDocument); if (document != null && !document.IsDefaultDocument) { DateTime date = DateTime.Now; Manager.BeginTransaction(); FileTransferMultimedia mTransfer = MultimediaTransferGet(idItem, idVersion); if (mTransfer != null) { mTransfer.DefaultDocument = document; mTransfer.DefaultDocumentPath = document.Fullname; Manager.SaveOrUpdate(mTransfer); } document.IsDefaultDocument = true; foreach (MultimediaFileObject d in cDefaults) { d.IsDefaultDocument = false; } if (cDefaults.Any()) { Manager.SaveOrUpdateList(cDefaults); } version.UpdateMetaInfo(UC.CurrentUserID, UC.IpAddress, UC.ProxyIpAddress, date); if (item.IdVersion == version.Id) { item.UpdateMetaInfo(UC.CurrentUserID, UC.IpAddress, UC.ProxyIpAddress, date); Manager.SaveOrUpdate(item); } Manager.SaveOrUpdate(version); Manager.SaveOrUpdate(document); Manager.Commit(); } } catch (Exception ex) { Manager.RollBack(); } return(document); }
public List <dtoModuleUploadedItem> FileAddToRepository(liteRepositorySettings settings, String istance, RepositoryIdentifier identifier, litePerson person, Boolean alwaysLastVersion, long idFolder, dtoFolderTreeItem folderQuota, IEnumerable <RepositoryItem> rpItems, List <dtoUploadedItem> itemsToAdd, Object obj, long idObject, Int32 idObjectType, String moduleCode, Int32 idModuleAjaxAction, Int32 idModuleAction = 0) { List <dtoModuleUploadedItem> files = null; Boolean isInTransaction = Manager.IsInTransaction(); try { if (person != null) { DateTime date = DateTime.Now; files = new List <dtoModuleUploadedItem>(); List <String> brothersFile = rpItems.Where(i => i.IdFolder == idFolder && i.Type != ItemType.Link && i.Type != ItemType.Folder && i.Deleted == BaseStatusDeleted.None).Select(f => f.DisplayName).ToList(); RepositoryItem father = rpItems.FirstOrDefault(i => i.Id == idFolder); List <RepositoryItem> fathers = (idFolder == 0) ? new List <RepositoryItem>() : GetFullReverseFathers(idFolder, rpItems); files.AddRange(itemsToAdd.Where(i => !i.IsValid).Select(i => new dtoModuleUploadedItem() { UploadedFile = i, Error = ItemUploadError.UnableToSaveFile }).ToList()); Int32 idModule = Manager.GetModuleID(moduleCode); Dictionary <ItemType, Boolean> defaultDownload = settings.GetDefaultAllowDownload(); Dictionary <ItemType, DisplayMode> defaultDisplayMode = settings.GetDefaultDisplayMode(); List <litePlayerSettings> players = (itemsToAdd.Any(i => i.IsValid && (i.Type == ItemType.Multimedia || i.Type == ItemType.ScormPackage || i.Type == ItemType.VideoStreaming)) ? PlayerGetSettings() : null); foreach (dtoUploadedItem dto in itemsToAdd.Where(i => i.IsValid)) { Boolean allowedByQuota = false; ItemUploadError error = ItemUploadError.None; RepositoryItem item = null; RepositoryItemVersion version = null; allowedByQuota = folderQuota.ValidateSpace(dto.Size, true); if (allowedByQuota) { if (idFolder == 0 || father != null) { long displayOrder = GetCurrentDisplayOrder(idFolder, rpItems); if (ItemHasDuplicate(brothersFile, dto.Name, ItemType.File, dto.Extension)) { dto.OriginalName = dto.DisplayName; dto.Name = ItemGetSuggestedName(brothersFile, dto.Name, ItemType.File, dto.Extension); } try { var queryAssignments = GetQueryAssignments(identifier).Where(a => a.Deleted == BaseStatusDeleted.None && a.Inherited); if (!isInTransaction) { Manager.BeginTransaction(); } item = RepositoryItem.CreateFile(idFolder, dto, defaultDownload[dto.Type], defaultDisplayMode[dto.Type], person, date, UC.IpAddress, UC.ProxyIpAddress, identifier); item.DisplayOrder = displayOrder; item.Thumbnail = dto.ThumbnailFileName; if (!String.IsNullOrWhiteSpace(dto.ThumbnailFileName)) { item.AutoThumbnail = true; item.DisplayMode = DisplayMode.downloadOrPlayOrModal; } switch (item.Type) { case ItemType.VideoStreaming: case ItemType.ScormPackage: case ItemType.Multimedia: item.IdPlayer = (players != null ? players.Where(p => p.Type == item.Type && p.EnableForUse && p.EnableForPlay).OrderByDescending(p => p.Id).Select(p => p.Id).FirstOrDefault() : 0); break; } Manager.SaveOrUpdate(item); version = item.CreateFirstVersion(); Manager.SaveOrUpdate(version); item.IdVersion = version.Id; Manager.SaveOrUpdate(item); switch (item.Type) { case ItemType.VideoStreaming: case ItemType.ScormPackage: case ItemType.Multimedia: FileTransferAdd(item, dto, person, date); break; } if (!isInTransaction) { Manager.Commit(); } if (!isInTransaction) { brothersFile.Add(dto.Name); dto.Id = item.Id; } folderQuota.Size += item.Size; if (fathers != null && fathers.Any()) { isInTransaction = isInTransaction || isInTransaction; if (!isInTransaction) { Manager.BeginTransaction(); } RecalculateFatherSize(fathers, item.Size, item.VersionsSize, person.Id, date); if (!isInTransaction) { Manager.Commit(); } } long permissions = (long)ModuleRepository.Base2Permission.DownloadOrPlay; ItemAssignments assignment = AssignmentAddCommunity(item.Id, item.Repository, item.IdCommunity, false, false, permissions, person, date); if (idFolder == 0) { assignment = AssignmentAddCommunity(item.Id, item.Repository, item.IdCommunity, false, true, permissions, person, date); } else { ApplyInheritedAssignment(item, GetQuery <ItemAssignments>().Where(a => a.Deleted == BaseStatusDeleted.None && a.Inherited), permissions, person, date); } if (isInTransaction) { brothersFile.Add(dto.Name); dto.Id = item.Id; } } catch (Exception ex) { if (!isInTransaction) { Manager.RollBack(); } if (item != null && dto.Id == 0) { item = null; } } } else { error = ItemUploadError.UnableToAddFileToUnknownFolder; } } else if (folderQuota.ValidateUploadSize(dto.Size)) { error = ItemUploadError.UnavailableRepositorySpace; } else { error = ItemUploadError.InvalidFileSize; } if (item != null) { files.Add(new dtoModuleUploadedItem() { Link = CreateModuleAction((Int32)ModuleRepository.Base2Permission.DownloadOrPlay, alwaysLastVersion, Manager.Get <liteRepositoryItem>(item.Id), idModule), ItemAdded = Manager.Get <liteRepositoryItem>(item.Id), VersionAdded = (version != null ? Manager.Get <liteRepositoryItemVersion>(version.Id) : null), UploadedFile = dto, Error = error }); } else { files.Add(new dtoModuleUploadedItem() { UploadedFile = dto, Error = error }); } } if (files.Any(i => i.IsValid && i.IsAdded && (i.ItemAdded.Type == ItemType.Multimedia || i.ItemAdded.Type == ItemType.VideoStreaming || i.ItemAdded.Type == ItemType.ScormPackage))) { FileTransferNotifyToTransferService(istance); } if (files.Any(i => i.IsAdded)) { lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(CacheKeys.Repository(identifier)); lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(CacheKeys.UsersViewOfRepository(identifier)); lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(CacheKeys.UsersSizeViewOfRepository(identifier)); } } } catch (Exception ex) { } return(files); }
public List <dtoModuleUploadedItem> FileAddToRepository(liteRepositorySettings settings, String istance, RepositoryIdentifier identifier, litePerson person, Boolean alwaysLastVersion, List <dtoUploadedItem> itemsToAdd, Object obj, long idObject, Int32 idObjectType, String moduleCode, Int32 idModuleAjaxAction, Int32 idModuleAction = 0) { List <dtoModuleUploadedItem> files = null; Boolean isInTransaction = Manager.IsInTransaction(); try { if (person != null) { DateTime date = DateTime.Now; files = new List <dtoModuleUploadedItem>(); List <String> brothersFile = new List <String>(); files.AddRange(itemsToAdd.Where(i => !i.IsValid).Select(i => new dtoModuleUploadedItem() { UploadedFile = i, Error = ItemUploadError.UnableToSaveFile }).ToList()); Int32 idModule = Manager.GetModuleID(moduleCode); Dictionary <ItemType, Boolean> defaultDownload = settings.GetDefaultAllowDownload(); Dictionary <ItemType, DisplayMode> defaultDisplayMode = settings.GetDefaultDisplayMode(); List <litePlayerSettings> players = (itemsToAdd.Any(i => i.IsValid && (i.Type == ItemType.Multimedia || i.Type == ItemType.ScormPackage || i.Type == ItemType.VideoStreaming)) ? PlayerGetSettings() : null); foreach (dtoUploadedItem dto in itemsToAdd.Where(i => i.IsValid)) { ItemUploadError error = ItemUploadError.None; RepositoryItem item = null; RepositoryItemVersion version = null; if (ItemHasDuplicate(brothersFile, dto.Name, ItemType.File, dto.Extension)) { dto.OriginalName = dto.DisplayName; dto.Name = ItemGetSuggestedName(brothersFile, dto.Name, ItemType.File, dto.Extension); } try { if (!isInTransaction) { Manager.BeginTransaction(); } item = RepositoryItem.CreateFile(dto, defaultDownload[dto.Type], defaultDisplayMode[dto.Type], person, date, UC.IpAddress, UC.ProxyIpAddress, identifier, obj, idObject, idObjectType, idModule, moduleCode, idModuleAjaxAction, idModuleAction); item.Thumbnail = dto.ThumbnailFileName; if (!String.IsNullOrWhiteSpace(dto.ThumbnailFileName)) { item.AutoThumbnail = true; item.DisplayMode = DisplayMode.downloadOrPlayOrModal; } Manager.SaveOrUpdate(item); switch (item.Type) { case ItemType.VideoStreaming: case ItemType.ScormPackage: case ItemType.Multimedia: item.IdPlayer = (players != null ? players.Where(p => p.Type == item.Type && p.EnableForUse && p.EnableForPlay).OrderByDescending(p => p.Id).Select(p => p.Id).FirstOrDefault() : 0); break; } version = item.CreateFirstVersion(); Manager.SaveOrUpdate(version); item.IdVersion = version.Id; Manager.SaveOrUpdate(item); switch (item.Type) { case ItemType.VideoStreaming: case ItemType.ScormPackage: case ItemType.Multimedia: FileTransferAdd(item, dto, person, date); break; } if (!isInTransaction) { Manager.Commit(); } brothersFile.Add(dto.Name); dto.Id = item.Id; } catch (Exception ex) { if (!isInTransaction) { Manager.RollBack(); } if (item != null && dto.Id == 0) { item = null; version = null; error = ItemUploadError.UnableToSaveFile; } } if (item != null) { files.Add(new dtoModuleUploadedItem() { Link = CreateModuleAction((Int32)ModuleRepository.Base2Permission.DownloadOrPlay, alwaysLastVersion, Manager.Get <liteRepositoryItem>(item.Id), idModule), ItemAdded = Manager.Get <liteRepositoryItem>(item.Id), VersionAdded = (version != null ? Manager.Get <liteRepositoryItemVersion>(version.Id) : null), UploadedFile = dto, Error = error }); } else { files.Add(new dtoModuleUploadedItem() { UploadedFile = dto, Error = error }); } } if (files.Any(i => i.IsValid && i.IsAdded && (i.ItemAdded.Type == ItemType.Multimedia || i.ItemAdded.Type == ItemType.VideoStreaming || i.ItemAdded.Type == ItemType.ScormPackage))) { FileTransferNotifyToTransferService(istance); } } } catch (Exception ex) { } return(files); }
private RepositoryItem CloneItem(Int32 idPerson, RepositoryItem item, RepositoryItemVersion version, RepositoryIdentifier destIdentifier, Boolean hasVersions, long idObjectOwner = 0) { RepositoryItem clone = new RepositoryItem(); clone.CreateMetaInfo(idPerson, UC.IpAddress, UC.ProxyIpAddress); clone.AllowUpload = item.AllowUpload; clone.AutoThumbnail = item.AutoThumbnail; clone.CloneOf = item.Id; clone.CloneOfUniqueId = item.UniqueId; clone.ContentType = item.ContentType; clone.Description = item.Description; clone.DisplayMode = item.DisplayMode; clone.DisplayOrder = item.DisplayOrder; clone.Downloaded = 0; clone.Extension = item.Extension; clone.HasVersions = hasVersions; clone.IdCommunity = item.IdCommunity; clone.IdFolder = item.IdFolder; clone.IdOwner = idPerson; clone.IsDownloadable = item.IsDownloadable; clone.IsFile = item.IsFile; clone.IsInternal = item.IsInternal; clone.IsPersonal = item.IsPersonal; clone.IsVirtual = item.IsVirtual; clone.IsVisible = item.IsVisible; clone.Name = item.Name; clone.PreviewTime = item.PreviewTime; clone.Size = item.Size; clone.Status = item.Status; clone.Time = item.Time; clone.Type = item.Type; clone.UniqueId = Guid.NewGuid(); clone.UniqueIdVersion = Guid.NewGuid(); clone.Url = item.Url; clone.Versions = new List <RepositoryItemVersion>(); if (item.IsInternal && item.Module != null) { clone.Module = item.Module; clone.Module.IdObject = idObjectOwner; } clone.IdPlayer = item.IdPlayer; clone.IdVersion = 0; clone.VersionsSize = 0; clone.Tags = item.Tags; if (!String.IsNullOrWhiteSpace(clone.Thumbnail)) { clone.Thumbnail = "thumb_" + Guid.NewGuid().ToString() + ".jpg"; } else { clone.AutoThumbnail = false; } clone.Repository = destIdentifier; if (hasVersions) { clone.Number = item.Versions.Count(v => v.Deleted == BaseStatusDeleted.None); } else { clone.Number = 0; } clone.RevisionsNumber = 0; switch (clone.Type) { case ItemType.Multimedia: case ItemType.ScormPackage: clone.Availability = ItemAvailability.transfer; clone.Status = ItemStatus.Active; break; default: clone.Availability = ItemAvailability.available; clone.Status = ItemStatus.Active; break; } return(clone); }
public Boolean CloneInternalItem(long idObjectOwner, Int32 idModule, String moduleCode, long idItem, long idVersion, litePerson person, String baseFilePath, String baseThumbnailPath, RepositoryIdentifier destIdentifier, ref RepositoryItem itemCloned, ref RepositoryItemVersion versionCloned, Boolean onlyLastVersion = true) { Boolean cloned = false; Boolean isInTransaction = Manager.IsInTransaction(); String destFile = ""; String dThumbnail = ""; try { if (!isInTransaction) { Manager.BeginTransaction(); } RepositoryItem item = Manager.Get <RepositoryItem>(idItem); if (item != null) { RepositoryItemVersion version = Manager.Get <RepositoryItemVersion>((idVersion > 0 ? idVersion : item.IdVersion)); if (version != null) { String sourcePath = GetItemDiskPath(baseFilePath, item.Repository); String destinationPath = System.IO.Path.Combine(baseFilePath, item.Repository.IdCommunity.ToString()); itemCloned = CloneItem(person.Id, item, version, destIdentifier, !onlyLastVersion, idObjectOwner); if (!String.IsNullOrWhiteSpace(itemCloned.Thumbnail)) { String stPath = GetItemDiskPath(baseThumbnailPath, item.Repository); String dtPath = GetItemDiskPath(baseThumbnailPath, itemCloned.Repository); if (!lm.Comol.Core.File.Exists.Directory(dtPath)) { lm.Comol.Core.File.Create.Directory(dtPath); } if (!lm.Comol.Core.File.Create.CopyFile(System.IO.Path.Combine(stPath, item.Thumbnail), System.IO.Path.Combine(dtPath, itemCloned.Thumbnail))) { itemCloned.Thumbnail = ""; } } String sourceFile = ""; switch (itemCloned.Type) { case ItemType.Folder: case ItemType.Link: break; default: sourceFile = System.IO.Path.Combine(sourcePath, item.UniqueId.ToString() + item.Extension); destFile = System.IO.Path.Combine(destinationPath, itemCloned.UniqueId.ToString() + itemCloned.Extension); if (!lm.Comol.Core.File.Exists.Directory(destinationPath)) { lm.Comol.Core.File.Create.Directory(destinationPath); } if (!lm.Comol.Core.File.Create.CopyFile(sourceFile, destFile)) { itemCloned = null; destFile = ""; } break; } if (itemCloned != null) { Manager.SaveOrUpdate(itemCloned); List <String> tags = null; if (!String.IsNullOrWhiteSpace(itemCloned.Tags)) { tags = itemCloned.Tags.Split(',').ToList(); } if (tags != null && tags.Any()) { ServiceTags.SaveTags(person, destIdentifier.IdCommunity, idModule, moduleCode, tags); } versionCloned = itemCloned.CreateFirstVersion(); Manager.SaveOrUpdate(versionCloned); itemCloned.IdVersion = versionCloned.Id; Manager.SaveOrUpdate(itemCloned); switch (itemCloned.Type) { case ItemType.VideoStreaming: case ItemType.ScormPackage: case ItemType.Multimedia: FileTransferAdd(item, destinationPath, itemCloned.UniqueId.ToString() + itemCloned.Extension, person, itemCloned.CreatedOn); break; } } } } if (!isInTransaction) { Manager.Commit(); } cloned = true; } catch (Exception ex) { if (!isInTransaction && Manager.IsInTransaction()) { Manager.RollBack(); } cloned = false; itemCloned = null; versionCloned = null; if (!String.IsNullOrWhiteSpace(destFile)) { lm.Comol.Core.File.Delete.File(destFile); } if (!String.IsNullOrWhiteSpace(dThumbnail)) { lm.Comol.Core.File.Delete.File(dThumbnail); } } return(cloned); }
public RepositoryItemVersion VersionSetActive(long idVersion) { RepositoryItemVersion version = null; try { version = Manager.Get <RepositoryItemVersion>(idVersion); RepositoryItem file = (version == null ? null : version.File); litePerson person = GetValidPerson(UC.CurrentUserID); if (version != null && person != null && !version.IsActive && file != null) { Manager.BeginTransaction(); DateTime date = DateTime.Now; switch (version.Type) { case ItemType.File: case ItemType.Multimedia: case ItemType.ScormPackage: List <RepositoryItem> repositoryItems = GetFullQuery(file.Repository).ToList(); List <RepositoryItem> fathers = (file.IdFolder == 0) ? new List <RepositoryItem>() : GetFullReverseFathers(file.IdFolder, repositoryItems); file.Size = version.Size; if (fathers != null && fathers.Any()) { RecalculateFatherSize(fathers, file.Size, file.VersionsSize, person.Id, date); } Manager.SaveOrUpdate(file); break; } version.IsActive = true; version.Status = ItemStatus.Active; version.Deleted = BaseStatusDeleted.None; file.Thumbnail = version.Thumbnail; file.AutoThumbnail = version.AutoThumbnail; file.IdVersion = version.Id; file.UniqueIdVersion = version.UniqueIdVersion; file.DisplayMode = version.DisplayMode; file.Availability = version.Availability; Manager.SaveOrUpdate(file); List <RepositoryItemVersion> versions = (from v in Manager.GetIQ <RepositoryItemVersion>() where v.File != null && v.File.Id == file.Id && v.Status == ItemStatus.Active && v.Id != version.Id select v).ToList(); if (versions.Any()) { foreach (RepositoryItemVersion v in versions) { v.Status = ItemStatus.Replaced; v.IsActive = false; v.UpdateMetaInfo(person.Id, UC.IpAddress, UC.ProxyIpAddress, date); } Manager.SaveOrUpdateList(versions); } Manager.SaveOrUpdate(version); Manager.Commit(); RefreshLiteItem(version.File.Id, version.Id); lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(CacheKeys.Repository(file.Repository)); lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(CacheKeys.UsersViewOfRepository(file.Repository)); lm.Comol.Core.DomainModel.Helpers.CacheHelper.PurgeCacheItems(CacheKeys.UsersSizeViewOfRepository(file.Repository)); } } catch (Exception ex) { version = null; } return(version); }