Пример #1
0
    public void RaisePostBackEvent(string eventArgument)
    {
        var currentUser = MembershipContext.AuthenticatedUser;

        // Current Node ID
        int nodeId = ValidationHelper.GetInteger(Param1, 0);

        TreeProvider tree = new TreeProvider(currentUser);

        string documentName = string.Empty;
        string action       = Action.ToLowerCSafe();
        string siteName     = SiteContext.CurrentSiteName;

        // Process the request
        switch (action)
        {
        case "refresh":
            treeElem.SelectedNodeID = nodeId;
            AddScript("currentNodeId = " + nodeId + ";");
            break;

        case "moveup":
        case "movedown":
        case "movetop":
        case "movebottom":
            // Move the document up (document order)
            try
            {
                if (nodeId == 0)
                {
                    AddAlert(GetString("ContentRequest.ErrorMissingSource"));
                    return;
                }

                // Get document to move
                TreeNode node = tree.SelectSingleNode(nodeId);

                // Check whether node exists
                if (node == null)
                {
                    ShowError(GetString("ContentRequest.ErrorMissingSource"));
                    return;
                }

                // Check the permissions for document
                if (currentUser.IsAuthorizedPerDocument(node, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Allowed)
                {
                    // Root of products tree can not be moved
                    if (!IsProductTree || (node.NodeAliasPath.CompareToCSafe(StartingAliasPath, true) != 0))
                    {
                        switch (action)
                        {
                        case "moveup":
                            tree.MoveNodeUp(node);
                            break;

                        case "movedown":
                            tree.MoveNodeDown(node);
                            break;

                        case "movetop":
                            tree.SetNodeOrder(node, DocumentOrderEnum.First);
                            break;

                        case "movebottom":
                            tree.SetNodeOrder(node, DocumentOrderEnum.Last);
                            break;
                        }

                        // Log the synchronization tasks for the entire tree level
                        DocumentSynchronizationHelper.LogDocumentChangeOrder(siteName, node.NodeAliasPath, tree);

                        // Select the document in the tree
                        documentName = node.GetDocumentName();

                        treeElem.ExpandNodeID   = node.NodeParentID;
                        treeElem.SelectedNodeID = node.NodeID;
                        AddScript("currentNodeId = " + node.NodeID + ";");
                    }
                }
                else
                {
                    // Select the document in the tree
                    treeElem.SelectedNodeID = nodeId;

                    AddAlert(GetString("ContentRequest.MoveDenied"));
                }
            }
            catch (Exception ex)
            {
                var logData = new EventLogData(EventTypeEnum.Error, "Content", "MOVE")
                {
                    EventDescription = EventLogProvider.GetExceptionLogMessage(ex),
                    EventUrl         = RequestContext.RawURL,
                    UserID           = currentUser.UserID,
                    UserName         = currentUser.UserName,
                    NodeID           = nodeId,
                    DocumentName     = documentName,
                    IPAddress        = RequestContext.UserHostAddress,
                    SiteID           = SiteContext.CurrentSite.SiteID
                };

                Service.Resolve <IEventLogService>().LogEvent(logData);
                AddAlert(GetString("ContentRequest.MoveFailed") + " : " + ex.Message);
            }
            break;

        case "setculture":
            // Set the preferred culture code
            try
            {
                // Set the culture code
                string language = ValidationHelper.GetString(Param2, string.Empty);
                if (!string.IsNullOrEmpty(language))
                {
                    LocalizationContext.PreferredCultureCode = language;
                    treeElem.Culture = language;
                }
                // Refresh the document
                if (nodeId > 0)
                {
                    treeElem.SelectedNodeID = nodeId;

                    AddScript("SelectNode(" + nodeId + ");");
                }
            }
            catch (Exception ex)
            {
                var logData = new EventLogData(EventTypeEnum.Error, "Content", "SETCULTURE")
                {
                    EventDescription = EventLogProvider.GetExceptionLogMessage(ex),
                    EventUrl         = RequestContext.RawURL,
                    UserID           = currentUser.UserID,
                    UserName         = currentUser.UserName,
                    NodeID           = nodeId,
                    DocumentName     = documentName,
                    IPAddress        = RequestContext.UserHostAddress,
                    SiteID           = SiteContext.CurrentSite.SiteID
                };

                Service.Resolve <IEventLogService>().LogEvent(logData);
                AddAlert(GetString("ContentRequest.ErrorChangeLanguage"));
            }
            break;

        case "setdevice":
            // Set the device profile
            try
            {
                // Refresh the document
                if (nodeId > 0)
                {
                    treeElem.SelectedNodeID = nodeId;

                    AddScript("SelectNode(" + nodeId + ");");
                }
            }
            catch (Exception ex)
            {
                var logData = new EventLogData(EventTypeEnum.Error, "Content", "SETDEVICE")
                {
                    EventDescription = EventLogProvider.GetExceptionLogMessage(ex),
                    EventUrl         = RequestContext.RawURL,
                    UserID           = currentUser.UserID,
                    UserName         = currentUser.UserName,
                    NodeID           = nodeId,
                    DocumentName     = documentName,
                    IPAddress        = RequestContext.UserHostAddress,
                    SiteID           = SiteContext.CurrentSite.SiteID
                };

                Service.Resolve <IEventLogService>().LogEvent(logData);
                AddAlert(GetString("ContentRequest.ErrorChangeLanguage"));
            }
            break;

        // Sorting
        case "sortalphaasc":
        case "sortalphadesc":
        case "sortdateasc":
        case "sortdatedesc":

            int siteId = SiteContext.CurrentSite.SiteID;

            try
            {
                // Get document to sort
                TreeNode node = tree.SelectSingleNode(nodeId);

                // Check the permissions for document
                if ((node != null) && (currentUser.IsAuthorizedPerDocument(node, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Allowed) &&
                    (currentUser.IsAuthorizedPerDocument(node, NodePermissionsEnum.ExploreTree) == AuthorizationResultEnum.Allowed))
                {
                    siteId = node.NodeSiteID;

                    switch (action)
                    {
                    case "sortalphaasc":
                        tree.SortNodesAlphabetically(nodeId, siteId, true);
                        break;

                    case "sortalphadesc":
                        tree.SortNodesAlphabetically(nodeId, siteId, false);
                        break;

                    case "sortdateasc":
                        tree.SortNodesByDate(nodeId, siteId, true);
                        break;

                    case "sortdatedesc":
                        tree.SortNodesByDate(nodeId, siteId, false);
                        break;
                    }

                    // Log the synchronization tasks for the entire tree level
                    string fakeAlias = node.NodeAliasPath.TrimEnd('/') + "/child";
                    DocumentSynchronizationHelper.LogDocumentChangeOrder(siteName, fakeAlias, tree);
                }
                else
                {
                    AddAlert(GetString("ContentRequest.SortDenied"));
                }

                // Refresh the tree
                if (nodeId > 0)
                {
                    treeElem.ExpandNodeID   = nodeId;
                    treeElem.SelectedNodeID = nodeId;
                    if (IsProductTree)
                    {
                        AddScript("window.frames['contentview'].location.replace(window.frames['contentview'].location);");
                    }
                    else
                    {
                        AddScript("SelectNode(" + nodeId + ");");
                    }
                }
            }
            catch (Exception ex)
            {
                var logData = new EventLogData(EventTypeEnum.Error, "Content", "SORT")
                {
                    EventDescription = EventLogProvider.GetExceptionLogMessage(ex),
                    EventUrl         = RequestContext.RawURL,
                    UserID           = currentUser.UserID,
                    UserName         = currentUser.UserName,
                    NodeID           = nodeId,
                    DocumentName     = documentName,
                    IPAddress        = RequestContext.UserHostAddress,
                    SiteID           = siteId
                };

                Service.Resolve <IEventLogService>().LogEvent(logData);
                AddAlert(GetString("ContentRequest.ErrorSort"));
            }

            break;
        }

        // Maintain scrollbar position
        string script =
            @"
SetSelectedNodeId(currentNodeId);
MaintainScroll('" + nodeId + @"','" + pnlTreeArea.ClientID + @"', " + ScrollPosition + @");
HideAllContextMenus();
";

        ScriptHelper.RegisterStartupScript(Page, typeof(string), "MaintainScrollbar", script, true);
    }
Пример #2
0
    public void RaisePostBackEvent(string eventArgument)
    {
        if (eventArgument == "move")
        {
            // Keep current user object
            var cu = MembershipContext.AuthenticatedUser;

            // Parse input value
            string[] values = hdnMoveId.Value.Split(';');

            // Create tree provider
            TreeProvider tree = new TreeProvider(cu);

            // Get tree node object
            int      nodeId = ValidationHelper.GetInteger(values[1], 0);
            TreeNode node   = tree.SelectSingleNode(nodeId);

            // Check whether node exists
            if (node == null)
            {
                ShowError(GetString("ContentRequest.ErrorMissingSource"));
                return;
            }

            try
            {
                // Check permissions
                if (cu.IsAuthorizedPerDocument(node, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Allowed)
                {
                    // Switch by action
                    switch (values[0])
                    {
                    case "up":
                        tree.MoveNodeUp(node);
                        break;

                    case "down":
                        tree.MoveNodeDown(node);
                        break;

                    case "top":
                        tree.SetNodeOrder(node, DocumentOrderEnum.First);
                        break;

                    case "bottom":
                        tree.SetNodeOrder(node, DocumentOrderEnum.Last);
                        break;
                    }

                    if (!RequiresDialog)
                    {
                        ScriptHelper.RegisterStartupScript(this, typeof(string), "refreshAfterMove", ScriptHelper.GetScript("parent.RefreshTree(" + node.NodeParentID + ", " + node.NodeParentID + ");"));
                    }

                    // Log the synchronization tasks for the entire tree level
                    DocumentSynchronizationHelper.LogDocumentChangeOrder(node.NodeSiteName, node.NodeAliasPath, tree);
                }
                else
                {
                    ShowError(GetString("ContentRequest.MoveDenied"));
                }
            }
            catch (Exception ex)
            {
                EventLogProvider.LogEvent(EventType.ERROR, "Content", "MOVE", EventLogProvider.GetExceptionLogMessage(ex), RequestContext.RawURL, cu.UserID, cu.UserName, nodeId, node.DocumentName, RequestContext.UserHostAddress, SiteContext.CurrentSite.SiteID);

                ShowError(GetString("ContentRequest.MoveFailed") + " : " + ex.Message);
            }
        }
        else if (eventArgument == "refresh")
        {
            // Register the refresh script after the 'move' action is performed
            Hashtable parameters = WindowHelper.GetItem(Identifier) as Hashtable;
            if ((parameters == null) || (parameters.Count <= 0))
            {
                return;
            }

            int    refreshNodeId = ValidationHelper.GetInteger(parameters["refreshnodeid"], 0);
            string refreshScript = "parent.RefreshTree(" + refreshNodeId + ", " + refreshNodeId + ")";
            ScriptHelper.RegisterStartupScript(this, typeof(string), "refreshAfterMove", refreshScript, true);
        }
    }
Пример #3
0
    public void RaisePostBackEvent(string eventArgument)
    {
        CurrentUserInfo currentUser = CMSContext.CurrentUser;

        // Current Node ID
        int nodeId = ValidationHelper.GetInteger(Param1, 0);

        TreeProvider     tree = new TreeProvider(currentUser);
        EventLogProvider log  = new EventLogProvider();

        string documentName = string.Empty;
        string action       = Action.ToLower();
        string siteName     = CMSContext.CurrentSiteName;

        // Process the request
        switch (action)
        {
        case "refresh":
            treeContent.NodeID = nodeId;
            AddScript("currentNodeId = " + nodeId + ";\n");

            break;

        case "moveup":
        case "movedown":
        case "movetop":
        case "movebottom":
            // Move the document up (document order)
            try
            {
                if (nodeId == 0)
                {
                    AddAlert(GetString("ContentRequest.ErrorMissingSource"));
                    return;
                }

                // Get document to move
                TreeNode node = tree.SelectSingleNode(nodeId);

                // Check the permissions for document
                if (currentUser.IsAuthorizedPerDocument(node, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Allowed)
                {
                    switch (action)
                    {
                    case "moveup":
                        node = tree.MoveNodeUp(nodeId);
                        break;

                    case "movedown":
                        node = tree.MoveNodeDown(nodeId);
                        break;

                    case "movetop":
                        node = tree.SelectSingleNode(nodeId);
                        tree.SetNodeOrder(nodeId, DocumentOrderEnum.First);
                        break;

                    case "movebottom":
                        node = tree.SelectSingleNode(nodeId);
                        tree.SetNodeOrder(nodeId, DocumentOrderEnum.Last);
                        break;
                    }

                    if (node != null)
                    {
                        // Log the synchronization tasks for the entire tree level
                        if (SettingsKeyProvider.GetBoolValue(siteName + ".CMSStagingLogChanges"))
                        {
                            // Log the synchronization tasks for the entire tree level
                            DocumentSynchronizationHelper.LogDocumentChangeOrder(siteName, node.NodeAliasPath, tree);
                        }

                        // Select the document in the tree
                        documentName = node.DocumentName;

                        treeContent.ExpandNodeID = node.NodeParentID;
                        treeContent.NodeID       = node.NodeID;
                        AddScript("currentNodeId = " + node.NodeID + ";\n");
                    }
                    else
                    {
                        AddAlert(GetString("ContentRequest.MoveFailed"));
                    }
                }
                else
                {
                    // Select the document in the tree
                    treeContent.NodeID = nodeId;

                    AddAlert(GetString("ContentRequest.MoveDenied"));
                }
            }
            catch (Exception ex)
            {
                log.LogEvent(EventLogProvider.EVENT_TYPE_ERROR, DateTime.Now, "Content", "MOVE", currentUser.UserID, currentUser.UserName, nodeId, documentName, HTTPHelper.UserHostAddress, EventLogProvider.GetExceptionLogMessage(ex), CMSContext.CurrentSite.SiteID, HTTPHelper.GetAbsoluteUri());
                AddAlert(GetString("ContentRequest.MoveFailed") + " : " + ex.Message);
            }
            break;

        case "setculture":
            // Set the preferred culture code
            try
            {
                // Set the culture code
                string language = ValidationHelper.GetString(Param2, "");
                if (!string.IsNullOrEmpty(language))
                {
                    CMSContext.PreferredCultureCode = language;
                }

                // Refresh the document
                if (nodeId > 0)
                {
                    treeContent.NodeID = nodeId;

                    AddScript("SelectNode(" + nodeId + "); \n");
                }
            }
            catch (Exception ex)
            {
                log.LogEvent(EventLogProvider.EVENT_TYPE_ERROR, DateTime.Now, "Content", "SETCULTURE", currentUser.UserID, currentUser.UserName, nodeId, documentName, HTTPHelper.UserHostAddress, EventLogProvider.GetExceptionLogMessage(ex), CMSContext.CurrentSite.SiteID, HTTPHelper.GetAbsoluteUri());
                AddAlert(GetString("ContentRequest.ErrorChangeLanguage"));
            }
            break;

        // Sorting
        case "sortalphaasc":
        case "sortalphadesc":
        case "sortdateasc":
        case "sortdatedesc":
            // Set the preferred culture code
            try
            {
                // Get document to sort
                TreeNode node = tree.SelectSingleNode(nodeId);

                // Check the permissions for document
                if ((currentUser.IsAuthorizedPerDocument(node, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Allowed) &&
                    (currentUser.IsAuthorizedPerDocument(node, NodePermissionsEnum.ExploreTree) == AuthorizationResultEnum.Allowed))
                {
                    switch (action)
                    {
                    case "sortalphaasc":
                        tree.OrderNodesAlphabetically(nodeId, true);
                        break;

                    case "sortalphadesc":
                        tree.OrderNodesAlphabetically(nodeId, false);
                        break;

                    case "sortdateasc":
                        tree.OrderNodesByDate(nodeId, true);
                        break;

                    case "sortdatedesc":
                        tree.OrderNodesByDate(nodeId, false);
                        break;
                    }

                    // Log the synchronization tasks for the entire tree level
                    if (SettingsKeyProvider.GetBoolValue(siteName + ".CMSStagingLogChanges"))
                    {
                        // Log the synchronization tasks for the entire tree level
                        string fakeAlias = node.NodeAliasPath.TrimEnd('/') + "/child";
                        DocumentSynchronizationHelper.LogDocumentChangeOrder(siteName, fakeAlias, tree);
                    }
                }
                else
                {
                    AddAlert(GetString("ContentRequest.SortDenied"));
                }

                // Refresh the tree
                if (nodeId > 0)
                {
                    treeContent.ExpandNodeID = nodeId;
                    treeContent.NodeID       = nodeId;
                    AddScript("SelectNode(" + nodeId + "); \n");
                }
            }
            catch (Exception ex)
            {
                log.LogEvent(EventLogProvider.EVENT_TYPE_ERROR, DateTime.Now, "Content", "SORT", currentUser.UserID, currentUser.UserName, nodeId, documentName, HTTPHelper.UserHostAddress, EventLogProvider.GetExceptionLogMessage(ex), CMSContext.CurrentSite.SiteID, HTTPHelper.GetAbsoluteUri());
                AddAlert(GetString("ContentRequest.ErrorSort"));
            }
            break;
        }

        // Maintain scrollbar position
        string script =
            @"var elm = jQuery('#handle_" + nodeId + @"');
  var pnl = jQuery('#" + pnlTreeArea.ClientID + @"');
  var origScroll = " + ScrollPosition + @";
  var elmOff = elm.offset();
  var elmPos = (elmOff == null) ? 0 : elmOff.top;
  var scroll = ((elmPos < origScroll) || (elmPos > (origScroll + pnl.height())));
  pnl.scrollTop(origScroll);
  if(scroll){pnl.animate({ scrollTop: elmPos - 20 }, 300);};";

        ScriptHelper.RegisterStartupScript(Page, typeof(string), "MaintainScrollbar", script, true);
    }
    /// <summary>
    /// Processes the callback action.
    /// </summary>
    void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
    {
        eventArgument = eventArgument.ToLowerCSafe();
        string[] parameters = eventArgument.Split(';');
        if (parameters.Length < 3)
        {
            return;
        }

        // Get the arguments
        string action   = parameters[0];
        int    nodeId   = ValidationHelper.GetInteger(parameters[1], 0);
        int    targetId = ValidationHelper.GetInteger(parameters[2], 0);

        // Get the target node
        TreeNode targetNode = TreeProvider.SelectSingleNode(targetId, TreeProvider.ALL_CULTURES);

        if (targetNode == null)
        {
            AddError(GetString("ContentRequest.ErrorMissingTarget") + " " + eventArgument);
            mCallbackResult += GetFallBackToRootScript(true);
            return;
        }

        // Get the node
        TreeNode node = TreeProvider.SelectSingleNode(nodeId);

        if (node == null)
        {
            AddError(GetString("ContentRequest.ErrorMissingSource"));
            mCallbackResult += GetFallBackToRootScript(true);
            return;
        }

        // Get new parent ID
        int newParentId = targetNode.NodeID;

        if (action.Contains("position"))
        {
            if (action.Contains("move") && (nodeId == targetId))
            {
                // There is no need to change position
                return;
            }

            if (!targetNode.IsRoot())
            {
                newParentId = targetNode.NodeParentID;
            }
        }
        else if (node.NodeParentID == newParentId)
        {
            // Move/Copy/Link as the first node under the same parent
            if (action.EndsWithCSafe("position"))
            {
                action = action.Substring(0, action.Length - 8);
            }

            action += "first";
        }

        bool copy = (action.Contains("copy"));
        bool link = (action.Contains("link"));

        // Do not allow to move or copy under itself
        if ((node.NodeID == newParentId) && !copy && !link)
        {
            AddError(GetString("ContentRequest.CannotMoveToItself"));
            return;
        }

        // Local action - Only position change
        if ((node.NodeParentID == newParentId) && !copy && !link)
        {
            // Local action - Only position change
            int      originalPosition = node.NodeOrder;
            TreeNode newNode          = ProcessAction(node, targetNode, action, false, false, true);
            if ((newNode != null) && (originalPosition != newNode.NodeOrder))
            {
                // Log the synchronization tasks for the entire tree level
                DocumentSynchronizationHelper.LogDocumentChangeOrder(SiteContext.CurrentSiteName, newNode.NodeAliasPath, TreeProvider);

                mCallbackResult += "CancelDragOperation(); RefreshTree(" + newNode.NodeParentID + ", currentNodeId);";
            }
        }
        else
        {
            // Different parent
            mCallbackResult += "DragOperation(" + nodeId + ", " + targetId + ", '" + action + "');";
        }
    }