Esempio n. 1
0
        public void DeleteTabModule(int pageId, int moduleId)
        {
            var portalSettings = PortalController.Instance.GetCurrentPortalSettings();
            var tab            = _tabController.GetTab(pageId, portalSettings.PortalId);

            if (tab == null)
            {
                throw new PageModuleNotFoundException();
            }

            var tabModule = _moduleController.GetModule(moduleId, pageId, false);

            if (tabModule == null)
            {
                throw new PageModuleNotFoundException();
            }

            if (!TabPermissionController.CanAddContentToPage(tab))
            {
                throw new SecurityException("You do not have permission to delete module on this page");
            }

            _moduleController.DeleteTabModule(pageId, moduleId, true);
            _moduleController.ClearCache(pageId);
        }
Esempio n. 2
0
        private void ForceDeleteVersion(int tabId, int version)
        {
            var unpublishedVersion = GetUnPublishedVersion(tabId);

            if (unpublishedVersion != null &&
                unpublishedVersion.Version == version)
            {
                throw new InvalidOperationException(
                          String.Format(
                              Localization.GetString("TabVersionCannotBeDeleted_UnpublishedVersion",
                                                     Localization.ExceptionsResourceFile), tabId, version));
            }

            var tabVersions = _tabVersionController.GetTabVersions(tabId).OrderByDescending(tv => tv.Version);

            if (tabVersions.Count() <= 1)
            {
                throw new InvalidOperationException(
                          String.Format(
                              Localization.GetString("TabVersionCannotBeDiscarded_OnlyOneVersion", Localization.ExceptionsResourceFile),
                              tabId, version));
            }

            var versionToDelete = tabVersions.ElementAt(0);

            // check if the version to delete if the latest published one
            if (versionToDelete.Version == version)
            {
                var restoreMaxNumberOfVersions = false;
                var portalId            = _portalSettings.PortalId;
                var maxNumberOfVersions = _tabVersionSettings.GetMaxNumberOfVersions(portalId);

                // If we already have reached the maxNumberOfVersions we need to extend to 1 this limit to allow the tmp version
                if (tabVersions.Count() == maxNumberOfVersions)
                {
                    _tabVersionSettings.SetMaxNumberOfVersions(portalId, maxNumberOfVersions + 1);
                    restoreMaxNumberOfVersions = true;
                }

                try
                {
                    var previousVersion        = tabVersions.ElementAt(1);
                    var previousVersionDetails = GetVersionModulesDetails(tabId, previousVersion.Version).ToArray();
                    var versionToDeleteDetails =
                        _tabVersionDetailController.GetTabVersionDetails(versionToDelete.TabVersionId);

                    foreach (var versionToDeleteDetail in versionToDeleteDetails)
                    {
                        switch (versionToDeleteDetail.Action)
                        {
                        case TabVersionDetailAction.Added:
                            _moduleController.DeleteTabModule(tabId, versionToDeleteDetail.ModuleId, true);
                            break;

                        case TabVersionDetailAction.Modified:
                            var peviousVersionDetail =
                                previousVersionDetails.SingleOrDefault(tv => tv.ModuleId == versionToDeleteDetail.ModuleId);
                            if (peviousVersionDetail != null &&
                                (peviousVersionDetail.PaneName != versionToDeleteDetail.PaneName ||
                                 peviousVersionDetail.ModuleOrder != versionToDeleteDetail.ModuleOrder))
                            {
                                _moduleController.UpdateModuleOrder(tabId, peviousVersionDetail.ModuleId,
                                                                    peviousVersionDetail.ModuleOrder, peviousVersionDetail.PaneName);
                            }

                            if (versionToDeleteDetail.ModuleVersion != Null.NullInteger)
                            {
                                DiscardDetail(tabId, versionToDeleteDetail);
                            }
                            break;
                        }
                    }
                    DeleteTmpVersionIfExists(tabId, versionToDelete);
                    _tabVersionController.DeleteTabVersion(tabId, versionToDelete.TabVersionId);
                    ManageModulesToBeRestored(tabId, previousVersionDetails);
                    _moduleController.ClearCache(tabId);
                }
                finally
                {
                    if (restoreMaxNumberOfVersions)
                    {
                        _tabVersionSettings.SetMaxNumberOfVersions(portalId, maxNumberOfVersions);
                    }
                }
            }
            else
            {
                for (var i = 1; i < tabVersions.Count(); i++)
                {
                    if (tabVersions.ElementAt(i).Version == version)
                    {
                        CreateSnapshotOverVersion(tabId, tabVersions.ElementAtOrDefault(i - 1), tabVersions.ElementAt(i));
                        _tabVersionController.DeleteTabVersion(tabId, tabVersions.ElementAt(i).TabVersionId);
                        break;
                    }
                }
            }
        }