Exemple #1
0
    /// <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);
    }
Exemple #2
0
    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;
    }
Exemple #3
0
    /// <summary>
    /// Button make version major click.
    /// </summary>
    protected void btnMakeMajor_Click(object sender, EventArgs e)
    {
        if (Object != null)
        {
            // Check permissions
            if (CheckPermissions && !AllowModify)
            {
                ShowError(GetString("History.ErrorNotAllowedToModify"));
                return;
            }

            ObjectVersionHistoryInfo version = ObjectVersionManager.GetLatestVersion(Object.TypeInfo.ObjectType, Object.Generalized.ObjectID);
            if (version != null)
            {
                if (ObjectVersionManager.MakeVersionMajor(version))
                {
                    ShowConfirmation(GetString("objectversioning.makeversionmajorinfo"));
                }

                ReloadData();
            }
            else
            {
                ShowError(GetString("objectversioning.makeversionmajornoversion") + " " + GetString("objectversioning.objecthasnohistory"));
            }
        }
        else
        {
            UIContext.EditedObject = null;
        }
    }
    /// <summary>
    /// Gets new table header cell which contains label and rollback image.
    /// </summary>
    /// <param name="suffixID">ID suffix</param>
    /// <param name="objectVersion">VersionHistoryInfo object</param>
    private TableHeaderCell GetRollbackTableHeaderCell(string suffixID, ObjectVersionHistoryInfo objectVersion)
    {
        TableHeaderCell tblHeaderCell = new TableHeaderCell();

        // Label
        Label lblValue = new Label();

        lblValue.ID   = "lbl" + suffixID;
        lblValue.Text = HTMLHelper.HTMLEncode(GetVersionNumber(objectVersion.VersionNumber, objectVersion.VersionModifiedWhen)) + "&nbsp;";
        tblHeaderCell.Controls.Add(lblValue);

        // Add rollback controls if user authorized to modify selected object
        if (objectVersion.CheckPermissions(PermissionsEnum.Modify, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
        {
            // Rollback image
            var imgRollback = new HyperLink();
            imgRollback.ID          = "imgRollback" + suffixID;
            imgRollback.CssClass    = "table-header-action";
            imgRollback.NavigateUrl = "#";

            string tooltip     = null;
            string confirmText = null;

            var info            = ProviderHelper.GetInfoById(Version.VersionObjectType, Version.VersionObjectID);
            var rollbackEnabled = !SynchronizationHelper.IsCheckedOutByOtherUser(info);

            // Set image action and description according to roll back type
            if (chkDisplayAllData.Checked)
            {
                tooltip     = GetString("objectversioning.versionlist.versionfullrollbacktooltip");
                confirmText = GetString("objectversioning.versionlist.confirmfullrollback");
            }
            else
            {
                tooltip     = GetString("history.versionrollbacktooltip");
                confirmText = GetString("Unigrid.ObjectVersionHistory.Actions.Rollback.Confirmation");
            }

            imgRollback.Text    = tooltip;
            imgRollback.Enabled = rollbackEnabled;

            // Prepare onclick script
            if (rollbackEnabled)
            {
                var confirmScript = "if (confirm(\"" + confirmText + "\")) { ";
                confirmScript += ControlsHelper.GetPostBackEventReference(this, objectVersion.VersionID + "|" + chkDisplayAllData.Checked) + "; } return false;";
                imgRollback.Attributes.Add("onclick", confirmScript);
            }

            tblHeaderCell.Controls.Add(imgRollback);
        }

        return(tblHeaderCell);
    }
Exemple #5
0
    /// <summary>
    /// Destroys latest version from history. Called when the "Destroy version" button is pressed.
    /// Expects the CreateVersionedObject method to be run first.
    /// </summary>
    private bool DestroyVersion()
    {
        // Get the css stylesheet
        CssStylesheetInfo stylesheet = CssStylesheetInfoProvider.GetCssStylesheetInfo("MyNewVersionedStylesheet");

        if (stylesheet != null)
        {
            // Get the latest version
            ObjectVersionHistoryInfo version = ObjectVersionManager.GetLatestVersion(stylesheet.ObjectType, stylesheet.StylesheetID);

            if (version != null)
            {
                // Destroy the latest version
                ObjectVersionManager.DestroyObjectVersion(version.VersionID);

                return(true);
            }
        }

        return(false);
    }
Exemple #6
0
    /// <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);
    }
    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;
    }
Exemple #8
0
    /// <summary>
    /// Button make version major click.
    /// </summary>
    protected void btnMakeMajor_Click(object sender, EventArgs e)
    {
        if (Object != null)
        {
            ObjectVersionHistoryInfo version = ObjectVersionManager.GetLatestVersion(Object.ObjectType, Object.ObjectID);
            if (version != null)
            {
                ObjectVersionManager.MakeVersionMajor(version);
                ReloadData();

                lblInfo.Text = GetString("objectversioning.makeversionmajorinfo");
            }
            else
            {
                lblError.Text = GetString("objectversioning.makeversionmajornoversion") + " " + GetString("objectversioning.objecthasnohistory");
            }

            plcLabels.Visible = true;
        }
        else
        {
            CMSPage.EditedObject = null;
        }
    }
Exemple #9
0
    /// <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>
    /// Gets new table header cell which contains label and rollback image.
    /// </summary>
    /// <param name="suffixID">ID suffix</param>
    /// <param name="objectVersion">VersionHistoryInfo object</param>
    private TableHeaderCell GetRollbackTableHeaderCell(string suffixID, ObjectVersionHistoryInfo objectVersion)
    {
        TableHeaderCell tblHeaderCell = new TableHeaderCell();

        // Label
        Label lblValue = new Label();
        lblValue.ID = "lbl" + suffixID;
        lblValue.Text = HTMLHelper.HTMLEncode(GetVersionNumber(objectVersion.VersionNumber, objectVersion.VersionModifiedWhen)) + "&nbsp;";
        tblHeaderCell.Controls.Add(lblValue);

        // Add rollback controls if user authorized to modify selected object
        if (objectVersion.CheckPermissions(PermissionsEnum.Modify, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
        {
            // Rollback image
            var imgRollback = new HyperLink();
            imgRollback.ID = "imgRollback" + suffixID;
            imgRollback.CssClass = "table-header-action";
            imgRollback.NavigateUrl = "#";

            string tooltip = null;
            string confirmText = null;

            var info = BaseAbstractInfoProvider.GetInfoById(Version.VersionObjectType, Version.VersionObjectID);
            var rollbackEnabled = !SynchronizationHelper.IsCheckedOutByOtherUser(info);

            // Set image action and description according to roll back type
            if (chkDisplayAllData.Checked)
            {
                tooltip = GetString("objectversioning.versionlist.versionfullrollbacktooltip");
                confirmText = GetString("objectversioning.versionlist.confirmfullrollback");
            }
            else
            {
                tooltip = GetString("history.versionrollbacktooltip");
                confirmText = GetString("Unigrid.ObjectVersionHistory.Actions.Rollback.Confirmation");
            }

            imgRollback.Text = tooltip;
            imgRollback.Enabled = rollbackEnabled;

            // Prepare onclick script
            if (rollbackEnabled)
            {
                var confirmScript = "if (confirm(\"" + confirmText + "\")) { ";
                confirmScript += ControlsHelper.GetPostBackEventReference(this, objectVersion.VersionID + "|" + chkDisplayAllData.Checked) + "; return false; }";
                imgRollback.Attributes.Add("onclick", confirmScript);
            }

            tblHeaderCell.Controls.Add(imgRollback);
        }

        return tblHeaderCell;
    }
    /// <summary>
    /// Gets new table header cell which contains label and rollback image.
    /// </summary>
    /// <param name="suffixID">ID suffix</param>
    /// <param name="documentID">Document ID</param>
    /// <param name="versionID">Version history ID</param>
    /// <param name="action">Action</param>
    private TableHeaderCell GetRollbackTableHeaderCell(string suffixID, ObjectVersionHistoryInfo objectVersion)
    {
        TableHeaderCell tblHeaderCell = new TableHeaderCell();

        // Label
        Label lblValue = new Label();

        lblValue.ID   = "lbl" + suffixID;
        lblValue.Text = HTMLHelper.HTMLEncode(GetVersionNumber(objectVersion.VersionNumber, objectVersion.VersionModifiedWhen));

        // Panel
        Panel pnlLabel = new Panel();

        pnlLabel.ID       = "pnlLabel" + suffixID;
        pnlLabel.CssClass = "LeftAlign";
        pnlLabel.Controls.Add(lblValue);

        tblHeaderCell.Controls.Add(pnlLabel);

        // Add rollback controls if user authorized to modify selected object
        if (UserInfoProvider.IsAuthorizedPerObject(objectVersion.VersionObjectType, PermissionsEnum.Modify, CMSContext.CurrentSiteName, CMSContext.CurrentUser))
        {
            // Rollback panel
            Panel pnlImage = new Panel();
            pnlImage.ID       = "pnlRollback" + suffixID;
            pnlImage.CssClass = "RightAlign";

            // Rollback image
            Image imgRollback = new Image();
            imgRollback.ID = "imgRollback" + suffixID;

            string tooltip     = null;
            string confirmText = null;

            var info            = CMSObjectHelper.GetObjectById(Version.VersionObjectType, Version.VersionObjectID);
            var rollbackEnabled = !CMSObjectHelper.IsCheckedOutByOtherUser(info);

            // Set image action and description according to roll back type
            if (chkDisplayAllData.Checked)
            {
                tooltip              = GetString("objectversioning.versionlist.versionfullrollbacktooltip");
                confirmText          = GetString("objectversioning.versionlist.confirmfullrollback");
                imgRollback.ImageUrl = GetImageUrl(rollbackEnabled ? "CMSModules/CMS_RecycleBin/restorechilds.png" : "CMSModules/CMS_RecycleBin/restorechildsdisabled.png");
            }
            else
            {
                tooltip              = GetString("history.versionrollbacktooltip");
                confirmText          = GetString("Unigrid.ObjectVersionHistory.Actions.Rollback.Confirmation");
                imgRollback.ImageUrl = GetImageUrl(rollbackEnabled ? "Design/Controls/UniGrid/Actions/undo.png" : "Design/Controls/UniGrid/Actions/undodisabled.png");
            }

            imgRollback.AlternateText = tooltip;
            imgRollback.ToolTip       = tooltip;
            imgRollback.Style.Add("cursor", "pointer");

            // Prepare onclick script
            if (rollbackEnabled)
            {
                var confirmScript = "if (confirm(\"" + confirmText + "\")) { ";
                confirmScript += ControlsHelper.GetPostBackEventReference(this, objectVersion.VersionID + "|" + chkDisplayAllData.Checked) + "; return false; }";
                imgRollback.Attributes.Add("onclick", confirmScript);
            }

            pnlImage.Controls.Add(imgRollback);
            tblHeaderCell.Controls.Add(pnlImage);
        }

        return(tblHeaderCell);
    }
Exemple #12
0
    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 = ObjectVersionHistoryInfo.Provider.Get(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
                        Service.Resolve <IEventLogService>().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>
    /// 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.TypeInfo.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>
    /// 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 = '" + CssStylesheetInfo.OBJECT_TYPE + "' AND VersionDeletedByUserID = " + MembershipContext.AuthenticatedUser.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>
    /// Gets new table header cell which contains label and rollback image.
    /// </summary>
    /// <param name="suffixID">ID suffix</param>
    /// <param name="documentID">Document ID</param>
    /// <param name="versionID">Version history ID</param>
    /// <param name="action">Action</param>
    private TableHeaderCell GetRollbackTableHeaderCell(string suffixID, ObjectVersionHistoryInfo objectVersion)
    {
        TableHeaderCell tblHeaderCell = new TableHeaderCell();

        string tooltip = null;

        // Label
        Label lblValue = new Label();
        lblValue.ID = "lbl" + suffixID;
        lblValue.Text = HTMLHelper.HTMLEncode(GetVersionNumber(objectVersion.VersionNumber, objectVersion.VersionModifiedWhen));

        // Panel
        Panel pnlLabel = new Panel();
        pnlLabel.ID = "pnlLabel" + suffixID;
        pnlLabel.CssClass = "LeftAlign";
        pnlLabel.Controls.Add(lblValue);

        tblHeaderCell.Controls.Add(pnlLabel);

        // Add rollback controls if user authorized to modify selected object
        if (UserInfoProvider.IsAuthorizedPerObject(objectVersion.VersionObjectType, PermissionsEnum.Modify, CMSContext.CurrentSiteName, CMSContext.CurrentUser))
        {
            // Rollback panel
            Panel pnlImage = new Panel();
            pnlImage.ID = "pnlRollback" + suffixID;
            pnlImage.CssClass = "RightAlign";

            // Rollback image
            Image imgRollback = new Image();
            imgRollback.ID = "imgRollback" + suffixID;

            string confirmScript = null;

            // Set image action and description according to roll back type
            if (chkDisplayAllData.Checked)
            {
                imgRollback.ImageUrl = GetImageUrl("CMSModules/CMS_RecycleBin/restorechilds.png");
                confirmScript = "if (confirm(\"" + GetString("objectversioning.versionlist.confirmfullrollback") + "\")) { ";
                confirmScript += ControlsHelper.GetPostBackEventReference(this, objectVersion.VersionID.ToString() + "|" + true) + "; return false; }";
                tooltip = GetString("objectversioning.versionlist.versionfullrollbacktooltip");
            }
            else
            {
                imgRollback.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/undo.png");
                confirmScript = "if (confirm(\"" + GetString("Unigrid.ObjectVersionHistory.Actions.Rollback.Confirmation") + "\")) { ";
                confirmScript += ControlsHelper.GetPostBackEventReference(this, objectVersion.VersionID.ToString() + "|" + false) + "; return false; }";
                tooltip = GetString("history.versionrollbacktooltip");
            }

            imgRollback.Style.Add("cursor", "pointer");
            imgRollback.AlternateText = tooltip;
            imgRollback.ToolTip = tooltip;

            // Prepare onclick script
            imgRollback.Attributes.Add("onclick", confirmScript);

            pnlImage.Controls.Add(imgRollback);
            tblHeaderCell.Controls.Add(pnlImage);
        }

        return tblHeaderCell;
    }
    /// <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);
    }