private DataSet GetRecycleBinSeletedItems(BinSettingsContainer settings, string columns) { var where = new WhereCondition(); switch (settings.CurrentWhat) { case What.AllObjects: if (IsSingleSite) { where.WhereNull("VersionObjectSiteID"); } if (settings.Site != null) { where.Or().WhereEquals("VersionObjectSiteID", settings.Site.SiteID); } // Wrap filter condition with brackets where.Where(new WhereCondition(filter.WhereCondition) { WhereIsComplex = true }); where = GetWhereCondition(where); break; case What.SelectedObjects: // Restore selected objects var toRestore = settings.SelectedItems; where.WhereIn("VersionID", toRestore); break; } return(ObjectVersionHistoryInfoProvider.GetRecycleBin(where.ToString(true), OrderBy, -1, columns)); }
/// <summary> /// Loads drop down list with data. /// </summary> private void ReloadData() { drpObjectTypes.Items.Clear(); // Check if show all item should be displayed if (ShowAll) { drpObjectTypes.Items.Add(new ListItem(GetString("general.selectall"), "")); } // Get recycle bin object types DataSet dsObjectTypes = ObjectVersionHistoryInfoProvider.GetRecycleBin(UserID, WhereCondition, "VersionObjectType", -1, "DISTINCT VersionObjectType"); if (!DataHelper.DataSourceIsEmpty(dsObjectTypes)) { SortedDictionary <string, string> sdObjectTypes = new SortedDictionary <string, string>(); foreach (DataRow dr in dsObjectTypes.Tables[0].Rows) { string objType = ValidationHelper.GetString(dr["VersionObjectType"], null); if (!String.IsNullOrEmpty(objType)) { // Sort object types by translated display names sdObjectTypes.Add(objType, GetString("ObjectType." + objType.Replace(".", "_"))); } } foreach (string key in sdObjectTypes.Keys) { drpObjectTypes.Items.Add(new ListItem(sdObjectTypes[key], key)); } } }
protected void Page_Load(object sender, EventArgs e) { btnClose.Text = GetString("General.Close"); bool noCompare = ValidationHelper.GetBoolean(QueryHelper.GetString("nocompare", string.Empty), false); // Initialize view version control viewVersion.NoComparison = noCompare; int versionId = ValidationHelper.GetInteger(QueryHelper.GetString("versionhistoryid", string.Empty), 0); viewVersion.VersionCompareID = ValidationHelper.GetInteger(QueryHelper.GetString("comparehistoryid", string.Empty), 0); // Get version to initialize title ObjectVersionHistoryInfo version = ObjectVersionHistoryInfoProvider.GetVersionHistoryInfo(versionId); if (version != null) { string objectType = version.VersionObjectType; string objType = GetString("ObjectType." + objectType.Replace(".", "_")); string title = String.Format(GetString("objectversioning.viewversion.title"), objType, HTMLHelper.HTMLEncode(ResHelper.LocalizeString(version.VersionObjectDisplayName))); // Set title - do not display context help when comparison not available string helpTopic = noCompare ? null : "objectversioning_viewversion"; this.SetTitle("CMSModules/CMS_ObjectVersioning/viewversion.png", title, helpTopic, "Object versioning - View version"); viewVersion.Version = version; // Exclude site binding table data GeneralizedInfo infoObj = TranslationHelper.GetReadOnlyObject(objectType); viewVersion.ExcludedTableNames = CMSObjectHelper.GetTableName(infoObj.TypeInfo.SiteBindingObject); } // Set what data should be displayed bool showAll = ValidationHelper.GetBoolean(QueryHelper.GetBoolean("showall", false), false); viewVersion.ObjectDataOnly = !showAll; }
/// <summary> /// Provides version rollback. Called when the "Rollback version" button is pressed. /// Expects the CreateVersionedObject method to be run first. /// </summary> private bool RollbackVersion() { // Get the css stylesheet CssStylesheetInfo stylesheet = CssStylesheetInfoProvider.GetCssStylesheetInfo("MyNewVersionedStylesheet"); if (stylesheet != null) { // Prepare query parameters string where = "VersionObjectID =" + stylesheet.StylesheetID + " AND VersionObjectType = '" + stylesheet.ObjectType + "'"; string orderBy = "VersionModifiedWhen ASC"; int topN = 1; // Get dataset with versions according to the parameters DataSet versionDS = ObjectVersionHistoryInfoProvider.GetVersionHistories(where, orderBy, topN, null); if (!DataHelper.DataSourceIsEmpty(versionDS)) { // Get version ObjectVersionHistoryInfo version = new ObjectVersionHistoryInfo(versionDS.Tables[0].Rows[0]); // Roll back ObjectVersionManager.RollbackVersion(version.VersionID); return(true); } } return(false); }
/// <summary> /// Loads drop down list with data. /// </summary> private void ReloadData() { drpObjectTypes.Items.Clear(); // Check if show all item should be displayed if (ShowAll) { drpObjectTypes.Items.Add(new ListItem(GetString("general.selectall"), "")); } // Get recycle bin object types DataSet dsObjectTypes = ObjectVersionHistoryInfoProvider.GetRecycleBin(UserID, WhereCondition, null, -1, "DISTINCT VersionObjectType"); if (!DataHelper.DataSourceIsEmpty(dsObjectTypes)) { SortedDictionary <string, string> sdObjectTypes = new SortedDictionary <string, string>(); foreach (DataRow dr in dsObjectTypes.Tables[0].Rows) { string objType = ValidationHelper.GetString(dr["VersionObjectType"], null); if (!String.IsNullOrEmpty(objType)) { sdObjectTypes.Add(GetString("ObjectType." + objType.Replace(".", "_")), objType); } } foreach (string key in sdObjectTypes.Keys) { drpObjectTypes.Items.Add(new ListItem(key, sdObjectTypes[key])); } } // Preselect value if (!String.IsNullOrEmpty(SelectedValue)) { mObjectType = SelectedValue; } ListItem selectedItem = drpObjectTypes.Items.FindByValue(mObjectType); if (selectedItem != null) { this.drpObjectTypes.ClearSelection(); selectedItem.Selected = true; } else { this.drpObjectTypes.SelectedIndex = 0; SelectedValue = null; } }
/// <summary> /// Restores object from recycle bin. Called when the "Restore object" button is pressed. /// Expects the DeleteObject method to be run first. /// </summary> private bool RestoreObject() { // Prepare query parameters string where = "VersionObjectType = '" + SiteObjectType.CSSSTYLESHEET + "' AND VersionDeletedByUserID = " + CMSContext.CurrentUser.UserID; string orderBy = "VersionDeletedWhen DESC"; int topN = 1; // Get dataset with versions according to the parameters DataSet versionDS = ObjectVersionHistoryInfoProvider.GetVersionHistories(where, orderBy, topN, null); if (!DataHelper.DataSourceIsEmpty(versionDS)) { // Get version ObjectVersionHistoryInfo version = new ObjectVersionHistoryInfo(versionDS.Tables[0].Rows[0]); // Restore the object ObjectVersionManager.RestoreObject(version.VersionID, true); return(true); } return(false); }
/// <summary> /// Removes global shipping options from recycle bin. /// </summary> private static void RemoveGlobalShippingOptionsFromRecycleBin() { const string shippingObjectType = "ecommerce.shippingoption"; var shippingOption = ModuleManager.GetObject(shippingObjectType); // Nothing to remove when shipping option type not present if (shippingOption == null) { return; } // Get histories for all objects of shipping option type var histories = ObjectVersionHistoryInfoProvider.GetVersionHistories().WhereEquals("VersionObjectType", shippingObjectType); // Fill ids list with IDs of global shipping options present in histories var ids = new List <int>(); foreach (var history in histories) { if (!String.IsNullOrEmpty(history.VersionXML)) { HierarchyHelper.LoadObjectFromXML(OperationTypeEnum.Export, shippingOption, history.VersionXML); if (shippingOption.IsGlobal) { ids.Add(shippingOption.Generalized.ObjectID); } } } // Remove version histories for selected shipping options if (ids.Count != 0) { var where = new WhereCondition().WhereIn("VersionObjectID", ids); ObjectVersionHistoryInfoProvider.DeleteVersionHistories(where.ToString(true)); } }
protected void Page_Load(object sender, EventArgs e) { // Even thought this page uses dialog master page, it always opens in new tab PageTitle.IsDialog = false; bool noCompare = ValidationHelper.GetBoolean(QueryHelper.GetString("nocompare", string.Empty), false); // Initialize view version control viewVersion.NoComparison = noCompare; int versionId = ValidationHelper.GetInteger(QueryHelper.GetString("versionhistoryid", string.Empty), 0); viewVersion.VersionCompareID = ValidationHelper.GetInteger(QueryHelper.GetString("comparehistoryid", string.Empty), 0); // Get version to initialize title ObjectVersionHistoryInfo version = ObjectVersionHistoryInfoProvider.GetVersionHistoryInfo(versionId); if (version != null) { string objectType = version.VersionObjectType; string objType = GetString("ObjectType." + objectType.Replace(".", "_")); string title = String.Format(GetString("objectversioning.viewversion.title"), objType, HTMLHelper.HTMLEncode(ResHelper.LocalizeString(version.VersionObjectDisplayName))); // Set title SetTitle(title); viewVersion.Version = version; // Exclude site binding table data GeneralizedInfo infoObj = ModuleManager.GetReadOnlyObject(objectType); viewVersion.ExcludedTableNames = ObjectHelper.GetSerializationTableName(infoObj.TypeInfo.SiteBindingObject); } // Set what data should be displayed bool showAll = ValidationHelper.GetBoolean(QueryHelper.GetBoolean("showall", false), false); viewVersion.ObjectDataOnly = !showAll; }
/// <summary> /// Handles the UniGrid's OnAction event. /// </summary> /// <param name="actionName">Name of item (button) that throws event</param> /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param> protected void ugRecycleBin_OnAction(string actionName, object actionArgument) { int versionHistoryId = ValidationHelper.GetInteger(actionArgument, 0); actionName = actionName.ToLowerCSafe(); switch (actionName) { case "restorechilds": case "restorewithoutbindings": case "restorecurrentsite": try { if (MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("cms.globalpermissions", "RestoreObjects")) { switch (actionName) { case "restorechilds": ObjectVersionManager.RestoreObject(versionHistoryId, true); break; case "restorewithoutbindings": ObjectVersionManager.RestoreObject(versionHistoryId, 0); break; case "restorecurrentsite": ObjectVersionManager.RestoreObject(versionHistoryId, SiteContext.CurrentSiteID); break; } ShowConfirmation(GetString("ObjectVersioning.Recyclebin.RestorationOK")); } else { ShowError(ResHelper.GetString("objectversioning.recyclebin.restorationfailedpermissions")); } } catch (CodeNameNotUniqueException ex) { ShowError(String.Format(GetString("objectversioning.restorenotuniquecodename"), (ex.Object != null) ? "('" + ex.Object.ObjectCodeName + "')" : null)); } catch (Exception ex) { ShowError(GetString("objectversioning.recyclebin.restorationfailed") + GetString("general.seeeventlog")); // Log to event log LogException("OBJECTRESTORE", ex); } break; case "destroy": ObjectVersionHistoryInfo verInfo = ObjectVersionHistoryInfoProvider.GetVersionHistoryInfo(versionHistoryId); if (verInfo != null) { // Get object site name string siteName = (CurrentSite != null) ? CurrentSite.SiteName : SiteInfoProvider.GetSiteName(verInfo.VersionObjectSiteID); if (CurrentUser.IsAuthorizedPerObject(PermissionsEnum.Destroy, verInfo.VersionObjectType, siteName)) { ObjectVersionManager.DestroyObjectHistory(verInfo.VersionObjectType, verInfo.VersionObjectID); ShowConfirmation(GetString("ObjectVersioning.Recyclebin.DestroyOK")); } else { ShowError(String.Format(ResHelper.GetString("objectversioning.recyclebin.destructionfailedpermissions"), HTMLHelper.HTMLEncode(ResHelper.LocalizeString(verInfo.VersionObjectDisplayName)))); } } break; } ugRecycleBin.ResetSelection(); }
/// <summary> /// Empties recycle bin. /// </summary> private void EmptyBin(object parameter) { // Begin log AddLog(ResHelper.GetString("Recyclebin.EmptyingBin", currentCulture)); BinSettingsContainer settings = (BinSettingsContainer)parameter; CurrentUserInfo currentUserInfo = settings.User; SiteInfo currentSite = settings.Site; DataSet recycleBin = null; string where = IsSingleSite ? "VersionObjectSiteID IS NULL" : null; switch (settings.CurrentWhat) { case What.AllObjects: if (currentSite != null) { where = SqlHelper.AddWhereCondition(where, "VersionObjectSiteID = " + currentSite.SiteID, "OR"); } where = GetWhereCondition(where); where = SqlHelper.AddWhereCondition(where, filter.WhereCondition); break; case What.SelectedObjects: List <string> toRestore = ugRecycleBin.SelectedItems; // Restore selected objects if (toRestore.Count > 0) { where = SqlHelper.GetWhereCondition("VersionID", toRestore); } break; } recycleBin = ObjectVersionHistoryInfoProvider.GetRecycleBin(where, null, -1, "VersionID, VersionObjectType, VersionObjectID, VersionObjectDisplayName, VersionObjectSiteID"); try { if (!DataHelper.DataSourceIsEmpty(recycleBin)) { foreach (DataRow dr in recycleBin.Tables[0].Rows) { int versionHistoryId = Convert.ToInt32(dr["VersionID"]); string versionObjType = Convert.ToString(dr["VersionObjectType"]); string objName = HTMLHelper.HTMLEncode(ResHelper.LocalizeString(ValidationHelper.GetString(dr["VersionObjectDisplayName"], string.Empty))); string siteName = null; if (currentSite != null) { siteName = currentSite.SiteName; } else { int siteId = ValidationHelper.GetInteger(dr["VersionObjectSiteID"], 0); siteName = SiteInfoProvider.GetSiteName(siteId); } // Check permissions if (!currentUserInfo.IsAuthorizedPerObject(PermissionsEnum.Destroy, versionObjType, siteName)) { CurrentError = String.Format(ResHelper.GetString("objectversioning.Recyclebin.DestructionFailedPermissions", currentCulture), objName); AddLog(CurrentError); } else { AddLog(ResHelper.GetString("general.object", currentCulture) + " '" + objName + "'"); // Destroy the version int versionObjId = ValidationHelper.GetInteger(dr["VersionObjectID"], 0); ObjectVersionManager.DestroyObjectHistory(versionObjType, versionObjId); LogContext.LogEvent(EventType.INFORMATION, "Objects", "DESTROYOBJECT", ResHelper.GetString("objectversioning.Recyclebin.objectdestroyed"), RequestContext.RawURL, currentUserInfo.UserID, currentUserInfo.UserName, 0, null, RequestContext.UserHostAddress, (currentSite != null) ? currentSite.SiteID : 0, SystemContext.MachineName, RequestContext.URLReferrer, RequestContext.UserAgent, DateTime.Now); } } if (!String.IsNullOrEmpty(CurrentError)) { CurrentError = ResHelper.GetString("objectversioning.recyclebin.errorsomenotdestroyed", currentCulture); AddLog(CurrentError); } else { CurrentInfo = ResHelper.GetString("ObjectVersioning.Recyclebin.DestroyOK", currentCulture); AddLog(CurrentInfo); } } } catch (ThreadAbortException ex) { string state = ValidationHelper.GetString(ex.ExceptionState, string.Empty); if (state != CMSThread.ABORT_REASON_STOP) { // Log error CurrentError = "Error occurred: " + ResHelper.GetString("general.seeeventlog", currentCulture); AddLog(CurrentError); // Log to event log LogException("EMPTYINGBIN", ex); } } catch (Exception ex) { // Log error CurrentError = "Error occurred: " + ResHelper.GetString("general.seeeventlog", currentCulture); AddLog(CurrentError); // Log to event log LogException("EMPTYINGBIN", ex); } }
/// <summary> /// Restores objects selected in UniGrid. /// </summary> private void Restore(object parameter, Action action) { try { // Begin log AddLog(ResHelper.GetString("objectversioning.recyclebin.restoringobjects", currentCulture)); BinSettingsContainer settings = (BinSettingsContainer)parameter; DataSet recycleBin = null; if (settings.User.IsAuthorizedPerResource("cms.globalpermissions", "RestoreObjects")) { string where = IsSingleSite ? "VersionObjectSiteID IS NULL" : null; switch (settings.CurrentWhat) { case What.AllObjects: if (settings.Site != null) { where = SqlHelper.AddWhereCondition(where, "VersionObjectSiteID = " + settings.Site.SiteID, "OR"); } where = SqlHelper.AddWhereCondition(where, filter.WhereCondition); recycleBin = ObjectVersionHistoryInfoProvider.GetRecycleBin(GetWhereCondition(where), null, -1, "VersionID, VersionObjectDisplayName, VersionObjectType, VersionObjectID"); break; case What.SelectedObjects: List <string> toRestore = ugRecycleBin.SelectedItems; // Restore selected objects if (toRestore.Count > 0) { where = SqlHelper.GetWhereCondition("VersionID", toRestore); recycleBin = ObjectVersionHistoryInfoProvider.GetRecycleBin(where, OrderBy, -1, "VersionID, VersionObjectDisplayName, VersionObjectType, VersionObjectID"); } break; } if (!DataHelper.DataSourceIsEmpty(recycleBin)) { RestoreDataSet(settings, recycleBin, action); } } else { CurrentError = ResHelper.GetString("objectversioning.recyclebin.restorationfailedpermissions"); AddLog(CurrentError); } } catch (ThreadAbortException ex) { string state = ValidationHelper.GetString(ex.ExceptionState, string.Empty); if (state == CMSThread.ABORT_REASON_STOP) { // When canceled CurrentInfo = ResHelper.GetString("Recyclebin.RestorationCanceled", currentCulture); AddLog(CurrentInfo); } else { // Log error CurrentError = ResHelper.GetString("objectversioning.recyclebin.restorationfailed", currentCulture) + ": " + ResHelper.GetString("general.seeeventlog", currentCulture); AddLog(CurrentError); // Log to event log LogException("OBJECTRESTORE", ex); } } catch (Exception ex) { // Log error CurrentError = ResHelper.GetString("objectversioning.recyclebin.restorationfailed", currentCulture) + ": " + ResHelper.GetString("general.seeeventlog", currentCulture); AddLog(CurrentError); // Log to event log LogException("OBJECTRESTORE", ex); } }
protected void gridHistory_OnAction(string actionName, object actionArgument) { int versionHistoryId = ValidationHelper.GetInteger(actionArgument, 0); actionName = actionName.ToLowerCSafe(); switch (actionName.ToLowerCSafe()) { case "rollback": case "fullrollback": if (versionHistoryId > 0) { // Check permissions if (CheckPermissions && !AllowModify) { ShowError(GetString("History.ErrorNotAllowedToModify")); } else { try { var newVersionId = ObjectVersionManager.RollbackVersion(versionHistoryId, (actionName == "fullrollback")); ObjectVersionHistoryInfo newVersion = ObjectVersionHistoryInfoProvider.GetVersionHistoryInfo(newVersionId); // Set object to null because after rollback it doesn't contain current data Object = null; gridHistory.ReloadData(); if (OnAfterRollback != null) { OnAfterRollback(this, null); } ShowConfirmation(GetString("objectversioning.rollbackOK")); ScriptHelper.RegisterStartupScript(this, typeof(string), "RefreshContent", ScriptHelper.GetScript("RefreshRelatedContent_" + ClientID + "();")); ScriptHelper.RefreshTabHeader(Page, newVersion.VersionObjectDisplayName); } catch (CodeNameNotUniqueException ex) { ShowError(String.Format(GetString("objectversioning.restorenotuniquecodename"), (ex.Object != null) ? "('" + ex.Object.ObjectCodeName + "')" : null)); } catch (Exception ex) { ShowError(GetString("objectversioning.recyclebin.restorationfailed") + " " + GetString("general.seeeventlog")); // Log to event log EventLogProvider.LogException("Object version list", "OBJECTRESTORE", ex); } } } break; case "destroy": if (versionHistoryId > 0) { // Check permissions if (CheckPermissions && !AllowDestroy) { ShowError(GetString("History.ErrorNotAllowedToDestroy")); } else { ObjectVersionManager.DestroyObjectVersion(versionHistoryId); ShowConfirmation(GetString("objectversioning.destroyOK")); } } break; } }
/// <summary> /// Handles the UniGrid's OnAction event. /// </summary> /// <param name="actionName">Name of item (button) that throws event</param> /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param> protected void ugRecycleBin_OnAction(string actionName, object actionArgument) { int versionHistoryId = ValidationHelper.GetInteger(actionArgument, 0); actionName = actionName.ToLower(); switch (actionName) { case "restorechilds": case "restorewithoutbindings": case "restorecurrentsite": try { if (CMSContext.CurrentUser.IsAuthorizedPerResource("cms.globalpermissions", "RestoreObjects")) { switch (actionName) { case "restorechilds": ObjectVersionManager.RestoreObject(versionHistoryId, true); break; case "restorewithoutbindings": ObjectVersionManager.RestoreObject(versionHistoryId, 0); break; case "restorecurrentsite": ObjectVersionManager.RestoreObject(versionHistoryId, CMSContext.CurrentSiteID); break; } lblInfo.Visible = true; lblInfo.Text = GetString("ObjectVersioning.Recyclebin.RestorationOK"); } else { lblError.Visible = true; lblError.Text = ResHelper.GetString("objectversioning.recyclebin.restorationfailedpermissions"); } } catch (CodeNameNotUniqueException ex) { lblError.Visible = true; lblError.Text = String.Format(GetString("objectversioning.restorenotuniquecodename"), (ex.Object != null) ? "('" + ex.Object.ObjectCodeName + "')" : null); } catch (Exception ex) { lblError.Visible = true; lblError.Text = GetString("objectversioning.recyclebin.restorationfailed") + GetString("general.seeeventlog"); // Log to event log LogException("OBJECTRESTORE", ex); } break; case "destroy": ObjectVersionHistoryInfo verInfo = ObjectVersionHistoryInfoProvider.GetVersionHistoryInfo(versionHistoryId); // Get object site name string siteName = null; if (CurrentSite != null) { siteName = CurrentSite.SiteName; } else { siteName = SiteInfoProvider.GetSiteName(verInfo.VersionObjectSiteID); } if ((verInfo != null) && CurrentUser.IsAuthorizedPerObject(PermissionsEnum.Destroy, verInfo.VersionObjectType, siteName)) { ObjectVersionManager.DestroyObjectHistory(verInfo.VersionObjectType, verInfo.VersionObjectID); lblInfo.Visible = true; lblInfo.Text = GetString("ObjectVersioning.Recyclebin.DestroyOK"); } else { lblError.Visible = true; lblError.Text = String.Format(ResHelper.GetString("objectversioning.recyclebin.destructionfailedpermissions"), HTMLHelper.HTMLEncode(ResHelper.LocalizeString(verInfo.VersionObjectDisplayName))); } break; } ugRecycleBin.ResetSelection(); pnlUpdateInfo.Update(); ReloadFilter((CurrentSite != null) ? CurrentSite.SiteID : -1, IsSingleSite, false); }