Beispiel #1
0
        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);
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }