Exemple #1
0
    /// <summary>
    /// Checks if the node can be created.
    /// </summary>
    /// <param name="node">Tree node</param>
    protected bool treeElem_BeforeCreateNode(ObjectTypeTreeNode node)
    {
        string objectType = node.ObjectType;

        if (string.IsNullOrEmpty(objectType))
        {
            return(true);
        }

        return(Settings.IsIncluded(objectType, node.Site));
    }
Exemple #2
0
    public TreeNode CreateNode(ObjectTypeTreeNode source)
    {
        // Create new node
        TreeNode newNode = new TreeNode();
        newNode.Expanded = source.Expand;

        // Get the image
        string objectType = source.ObjectType ?? source.Group;

        if (!UsePostback)
        {
            newNode.NavigateUrl = "#";
        }

        string template = NodeTextTemplate;

        // Site
        int siteId = 0;
        if (source.Site)
        {
            siteId = SiteID;
        }

        // Title
        string name = GetString("ObjectTasks." + objectType.Replace(".", "_").Replace("#", "_"));

        // Image
        string imageUrl = GetObjectIconUrl(objectType, "list.png");
        string imageTag = "<img src=\"" + imageUrl + "\" alt=\"\" style=\"border:0px;vertical-align:middle;\" onclick=\"return false;\"/>";
        if ((objectType == String.Empty) || (objectType == CMSObjectHelper.GROUP_OBJECTS))
        {
            imageUrl = GetImageUrl("General/DefaultRoot.png");
            imageTag = "<img src=\"" + imageUrl + "\" alt=\"\" style=\"border:none;height:10px;width:1px;\" onclick=\"return false;\"/>";
            template = imageTag + SelectedNodeTextTemplate;
            siteId = -1;
            name = GetString("ObjectTasks.Root");
        }

        if (source.Main)
        {
            name = "<strong>" + name + "</strong>";
        }

        newNode.Text = template.Replace("##ICON##", imageTag).Replace("##NODENAME##", name).Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", HttpUtility.UrlEncode(objectType));

        if (ValueTextTemplate != null)
        {
            newNode.Value = ValueTextTemplate.Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", objectType);
        }

        // Add image to the node
        if (UseImages && (imageUrl != ""))
        {
            newNode.ImageUrl = imageUrl;
        }

        // Disable if not active node
        if (UsePostback && !source.Active)
        {
            newNode.SelectAction = TreeNodeSelectAction.None;
        }

        if (source.Group != null && !source.Active)
        {
            newNode.SelectAction = TreeNodeSelectAction.Expand;
        }

        // Add child nodes
        if (source.ChildNodes.Count > 0)
        {
            foreach (ObjectTypeTreeNode child in source.ChildNodes)
            {
                if ((SiteID > 0) || !child.Site)
                {
                    if ((OnBeforeCreateNode == null) || OnBeforeCreateNode(child))
                    {
                        // Create child node
                        TreeNode childNode = CreateNode(child);
                        if ((child.ObjectType != null) || (childNode.ChildNodes.Count > 0))
                        {
                            newNode.ChildNodes.Add(childNode);
                            // Preselect node
                            if ((child.ObjectType == PreselectObjectType) && (child.Site == IsPreselectedObjectTypeSiteObject))
                            {
                                childNode.Selected = true;
                            }
                        }
                    }
                }
            }
        }

        return newNode;
    }
    /// <summary>
    /// Checks if the node can be created.
    /// </summary>
    /// <param name="node">Tree node</param>
    protected bool treeElem_BeforeCreateNode(ObjectTypeTreeNode node)
    {
        string objectType = node.ObjectType;
        if (string.IsNullOrEmpty(objectType))
        {
            return true;
        }

        return Settings.IsIncluded(objectType, node.Site);
    }
    /// <summary>
    /// Create tree node from supplied data
    /// </summary>
    /// <param name="source">Tree node data</param>
    /// <returns>TreeNode</returns>
    public TreeNode CreateNode(ObjectTypeTreeNode source)
    {
        // Create new node
        TreeNode newNode = new TreeNode();

        // Get the image
        string type = source.ObjectType ?? source.Group;

        if (!UsePostback)
        {
            newNode.NavigateUrl = "#";
        }

        string template = NodeTextTemplate;

        // Site
        int siteId = 0;

        if (source.Site)
        {
            siteId = SiteID;
        }

        // Title
        var name = GetNodeName(type);

        if ((type == String.Empty) || (type == ObjectHelper.GROUP_OBJECTS))
        {
            template = SelectedNodeTextTemplate;
            siteId   = -1;
            name     = GetString("ObjectTasks.Root");
        }

        if (source.Main)
        {
            name = "<strong>" + name + "</strong>";
        }

        newNode.Text = template.Replace("##NODENAME##", name).Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", HttpUtility.UrlEncode(type));

        if (ValueTextTemplate != null)
        {
            newNode.Value = ValueTextTemplate.Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", type);
        }

        // Disable if not active node
        if (UsePostback && !source.Active)
        {
            newNode.SelectAction = TreeNodeSelectAction.None;
        }

        if (source.Group != null && !source.Active)
        {
            newNode.SelectAction = TreeNodeSelectAction.Expand;
        }

        // Add child nodes
        if (source.ChildNodes.Count > 0)
        {
            IEnumerable <ObjectTypeTreeNode> children = source.ChildNodes;
            if (source.SortChildren)
            {
                children = children.OrderBy(n => GetNodeName(n.ObjectType ?? n.Group));
            }

            foreach (var child in children)
            {
                if ((SiteID > 0) || !child.Site)
                {
                    if ((OnBeforeCreateNode == null) || OnBeforeCreateNode(child))
                    {
                        // Create child node
                        TreeNode childNode = CreateNode(child);
                        if ((child.ObjectType != null) || (childNode.ChildNodes.Count > 0))
                        {
                            newNode.ChildNodes.Add(childNode);
                            // Preselect node
                            if ((child.ObjectType == PreselectObjectType) && (child.Site == IsPreselectedObjectTypeSiteObject))
                            {
                                childNode.Selected = true;
                            }
                        }
                    }
                }
            }
        }

        newNode.Expanded = source.Expand;

        return(newNode);
    }
Exemple #5
0
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        // Check 'Manage objects tasks' permission
        if (!CurrentUser.IsAuthorizedPerResource("cms.staging", "ManageObjectsTasks"))
        {
            RedirectToAccessDenied("cms.staging", "ManageObjectsTasks");
        }

        CurrentMaster.DisplaySiteSelectorPanel = true;

        // Check enabled servers
        var isCallback = RequestHelper.IsCallback();

        if (!isCallback && !ServerInfoProvider.IsEnabledServer(SiteContext.CurrentSiteID))
        {
            ShowInformation(GetString("ObjectStaging.NoEnabledServer"));
            CurrentMaster.PanelHeader.Visible = false;
            plcContent.Visible = false;
            pnlFooter.Visible  = false;
            return;
        }

        // Register script for pendingCallbacks repair
        ScriptHelper.FixPendingCallbacks(Page);

        // Setup server dropdown
        selectorElem.DropDownList.AutoPostBack       = true;
        selectorElem.UniSelector.OnSelectionChanged += UniSelector_OnSelectionChanged;

        // Set server ID
        SelectedServerID = ValidationHelper.GetInteger(selectorElem.Value, QueryHelper.GetInteger("serverId", 0));

        // All servers
        if (SelectedServerID == UniSelector.US_ALL_RECORDS)
        {
            SelectedServerID   = 0;
            selectorElem.Value = UniSelector.US_ALL_RECORDS;
        }
        else
        {
            selectorElem.Value = SelectedServerID.ToString();
        }

        ltlScript.Text += ScriptHelper.GetScript("var currentServerId = " + SelectedServerID + ";");

        HeaderActions.ActionPerformed += HeaderActions_ActionPerformed;

        if (!isCallback)
        {
            // Check 'Manage object tasks' permission
            if (!CurrentUser.IsAuthorizedPerResource("cms.staging", "ManageObjectsTasks"))
            {
                RedirectToAccessDenied("cms.staging", "ManageObjectsTasks");
            }

            synchronizedSiteId = QueryHelper.GetInteger("siteid", 0);
            CurrentSiteID      = SiteContext.CurrentSiteID;

            ucDisabledModule.TestSettingKeys = "CMSStagingLogObjectChanges";
            ucDisabledModule.ParentPanel     = pnlNotLogged;

            if (synchronizedSiteId == -1)
            {
                ucDisabledModule.InfoText         = GetString("objectstaging.globalandsitenotlogged");
                ucDisabledModule.KeyScope         = DisabledModuleScope.CurrentSiteAndGlobal;
                ucDisabledModule.GlobalButtonText = GetString("objectstaging.enableglobalandsiteobjects");
            }
            else if (synchronizedSiteId == 0)
            {
                ucDisabledModule.InfoText         = GetString("objectstaging.globalnotlogged");
                ucDisabledModule.KeyScope         = DisabledModuleScope.Global;
                ucDisabledModule.GlobalButtonText = GetString("objectstaging.enableglobalobjects");
            }
            else
            {
                ucDisabledModule.InfoText       = GetString("ObjectStaging.SiteNotLogged");
                ucDisabledModule.KeyScope       = DisabledModuleScope.Site;
                ucDisabledModule.SiteButtonText = GetString("objectstaging.enablesiteobjects");
            }

            // Check logging
            if (!ucDisabledModule.Check())
            {
                CurrentMaster.PanelHeader.Visible = false;
                plcContent.Visible = false;
                return;
            }

            // Get object type
            objectType = QueryHelper.GetString("objecttype", string.Empty);

            // Create "synchronize current" header action for tree root, nodes or objects with database representation
            if (String.IsNullOrEmpty(objectType) || objectType.StartsWith("##", StringComparison.Ordinal) || (ModuleManager.GetReadOnlyObject(objectType) != null))
            {
                HeaderActions.AddAction(new HeaderAction
                {
                    Text      = GetString("ObjectTasks.SyncCurrent"),
                    EventName = SYNCHRONIZE_CURRENT
                });
            }

            // Add CSS class to panels wrapper in order it could be stacked
            CurrentMaster.PanelHeader.AddCssClass("header-container-multiple-panels");

            // Setup title
            ctlAsyncLog.TitleText = GetString("Synchronization.Title");

            // Get the selected types
            ObjectTypeTreeNode selectedNode = StagingTaskInfoProvider.ObjectTree.FindNode(objectType, (synchronizedSiteId > 0));
            objectType = (selectedNode != null) ? selectedNode.GetObjectTypes(true) : string.Empty;
            if (!ControlsHelper.CausedPostBack(HeaderActions, btnSyncSelected, btnSyncAll))
            {
                // Register the dialog script
                ScriptHelper.RegisterDialogScript(this);

                plcContent.Visible = true;

                // Initialize buttons
                btnDeleteAll.OnClientClick      = "return confirm(" + ScriptHelper.GetString(GetString("Tasks.ConfirmDeleteAll")) + ");";
                btnDeleteSelected.OnClientClick = "return confirm(" + ScriptHelper.GetString(GetString("general.confirmdelete")) + ");";
                btnSyncSelected.OnClientClick   = "return !" + gridTasks.GetCheckSelectionScript();

                // Initialize grid
                gridTasks.ZeroRowsText    = GetString("Tasks.NoTasks");
                gridTasks.OnDataReload   += gridTasks_OnDataReload;
                gridTasks.ShowActionsMenu = true;
                gridTasks.Columns         = "TaskID, TaskSiteID, TaskDocumentID, TaskNodeAliasPath, TaskTitle, TaskTime, TaskType, TaskObjectType, TaskObjectID, TaskRunning, (SELECT COUNT(*) FROM Staging_Synchronization WHERE SynchronizationTaskID = TaskID AND SynchronizationErrorMessage IS NOT NULL AND (SynchronizationServerID = @ServerID OR (@ServerID = 0 AND (@TaskSiteID = 0 OR SynchronizationServerID IN (SELECT ServerID FROM Staging_Server WHERE ServerSiteID = @TaskSiteID AND ServerEnabled=1))))) AS FailedCount";
                StagingTaskInfo ti = new StagingTaskInfo();
                gridTasks.AllColumns = SqlHelper.MergeColumns(ti.ColumnNames);

                pnlLog.Visible     = false;
                TaskTypeCategories = TaskHelper.TASK_TYPE_CATEGORY_GENERAL + ";" + TaskHelper.TASK_TYPE_CATEGORY_OBJECTS + ";" + TaskHelper.TASK_TYPE_CATEGORY_DATA;
            }
        }
    }
Exemple #6
0
    protected void Page_Load(object sender, EventArgs e)
    {
        // Register script for pendingCallbacks repair
        ScriptHelper.FixPendingCallbacks(Page);

        // Initialize current user for the async actions
        currentUser = MembershipContext.AuthenticatedUser;

        HeaderActions.ActionPerformed += HeaderActions_ActionPerformed;

        if (!RequestHelper.IsCallback())
        {
            // Check 'Manage object tasks' permission
            if (!currentUser.IsAuthorizedPerResource("cms.staging", "ManageObjectsTasks"))
            {
                RedirectToAccessDenied("cms.staging", "ManageObjectsTasks");
            }

            siteId          = QueryHelper.GetInteger("siteid", 0);
            currentSiteId   = SiteContext.CurrentSiteID;
            currentSiteName = SiteContext.CurrentSiteName;
            serverId        = QueryHelper.GetInteger("serverid", 0);

            ucDisabledModule.SettingsKeys = "CMSStagingLogObjectChanges";
            ucDisabledModule.InfoTexts.Add(GetString("StagingChanges.NotLogged") + "<br/>");
            ucDisabledModule.ParentPanel = pnlNotLogged;

            if (siteId == -1)
            {
                ucDisabledModule.InfoTexts.Add(GetString("objectstaging.globalandsitenotlogged"));
                ucDisabledModule.SiteObjects   = "CMSStagingLogObjectChanges";
                ucDisabledModule.GlobalObjects = "CMSStagingLogObjectChanges";
            }
            else if (siteId == 0)
            {
                ucDisabledModule.InfoTexts.Add(GetString("objectstaging.globalnotlogged"));
                ucDisabledModule.GlobalObjects = "CMSStagingLogObjectChanges";
            }
            else
            {
                ucDisabledModule.InfoTexts.Add(GetString("ObjectStaging.SiteNotLogged"));
                ucDisabledModule.SiteObjects = "CMSStagingLogObjectChanges";
            }

            // Check logging
            if (!ucDisabledModule.Check())
            {
                plcContent.Visible = false;
                return;
            }

            // Get object type
            objectType = QueryHelper.GetString("objecttype", string.Empty);

            // Create "synchronize current" header action only for objects with database representation
            if (ModuleManager.GetReadOnlyObject(objectType) != null)
            {
                HeaderActions.AddAction(new HeaderAction
                {
                    Text      = GetString("ObjectTasks.SyncCurrent"),
                    EventName = SYNCHRONIZE_CURRENT
                });
            }

            // Setup title
            titleElem.TitleText = GetString("Synchronization.Title");

            // Get the selected types
            ObjectTypeTreeNode selectedNode = StagingTaskInfoProvider.ObjectTree.FindNode(objectType, (siteId > 0));
            objectType = (selectedNode != null) ? selectedNode.GetObjectTypes(true) : string.Empty;
            if (!ControlsHelper.CausedPostBack(HeaderActions, btnSyncSelected, btnSyncAll))
            {
                // Register the dialog script
                ScriptHelper.RegisterDialogScript(this);

                plcContent.Visible = true;

                // Initialize buttons
                btnCancel.Attributes.Add("onclick", ctlAsync.GetCancelScript(true) + "return false;");
                btnCancel.Text                  = GetString("General.Cancel");
                btnDeleteAll.OnClientClick      = "return confirm(" + ScriptHelper.GetString(GetString("Tasks.ConfirmDeleteAll")) + ");";
                btnDeleteSelected.OnClientClick = "return confirm(" + ScriptHelper.GetString(GetString("general.confirmdelete")) + ");";
                btnSyncSelected.OnClientClick   = "return !" + gridTasks.GetCheckSelectionScript();

                // Initialize grid
                gridTasks.ZeroRowsText         = GetString("Tasks.NoTasks");
                gridTasks.OnAction            += gridTasks_OnAction;
                gridTasks.OnDataReload        += gridTasks_OnDataReload;
                gridTasks.OnExternalDataBound += gridTasks_OnExternalDataBound;
                gridTasks.ShowActionsMenu      = true;
                gridTasks.Columns              = "TaskID, TaskSiteID, TaskDocumentID, TaskNodeAliasPath, TaskTitle, TaskTime, TaskType, TaskObjectType, TaskObjectID, TaskRunning, (SELECT COUNT(*) FROM Staging_Synchronization WHERE SynchronizationTaskID = TaskID AND SynchronizationErrorMessage IS NOT NULL AND (SynchronizationServerID = @ServerID OR (@ServerID = 0 AND (@TaskSiteID = 0 OR SynchronizationServerID IN (SELECT ServerID FROM Staging_Server WHERE ServerSiteID = @TaskSiteID AND ServerEnabled=1))))) AS FailedCount";
                StagingTaskInfo ti = new StagingTaskInfo();
                gridTasks.AllColumns = SqlHelper.MergeColumns(ti.ColumnNames);

                pnlLog.Visible = false;
            }
        }

        ctlAsync.OnFinished   += ctlAsync_OnFinished;
        ctlAsync.OnError      += ctlAsync_OnError;
        ctlAsync.OnRequestLog += ctlAsync_OnRequestLog;
        ctlAsync.OnCancel     += ctlAsync_OnCancel;
    }
Exemple #7
0
    public TreeNode CreateNode(ObjectTypeTreeNode source)
    {
        // Create new node
        TreeNode newNode = new TreeNode();

        newNode.Expanded = source.Expand;

        // Get the image
        string objectType = source.ObjectType ?? source.Group;

        if (!UsePostback)
        {
            newNode.NavigateUrl = "#";
        }

        string template = NodeTextTemplate;

        // Site
        int siteId = 0;

        if (source.Site)
        {
            siteId = SiteID;
        }

        // Title
        string name = GetString("ObjectTasks." + objectType.Replace(".", "_").Replace("#", "_"));

        // Image
        string imageUrl = GetObjectIconUrl(objectType, "list.png");
        string imageTag = "<img src=\"" + imageUrl + "\" alt=\"\" style=\"border:0px;vertical-align:middle;\" onclick=\"return false;\"/>";

        if ((objectType == String.Empty) || (objectType == CMSObjectHelper.GROUP_OBJECTS))
        {
            imageUrl = GetImageUrl("General/DefaultRoot.png");
            imageTag = "<img src=\"" + imageUrl + "\" alt=\"\" style=\"border:none;height:10px;width:1px;\" onclick=\"return false;\"/>";
            template = imageTag + SelectedNodeTextTemplate;
            siteId   = -1;
            name     = GetString("ObjectTasks.Root");
        }

        if (source.Main)
        {
            name = "<strong>" + name + "</strong>";
        }

        newNode.Text = template.Replace("##ICON##", imageTag).Replace("##NODENAME##", name).Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", HttpUtility.UrlEncode(objectType));

        if (ValueTextTemplate != null)
        {
            newNode.Value = ValueTextTemplate.Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", objectType);
        }

        // Add image to the node
        if (UseImages && (imageUrl != ""))
        {
            newNode.ImageUrl = imageUrl;
        }

        // Disable if not active node
        if (UsePostback && !source.Active)
        {
            newNode.SelectAction = TreeNodeSelectAction.None;
        }

        if (source.Group != null && !source.Active)
        {
            newNode.SelectAction = TreeNodeSelectAction.Expand;
        }

        // Add child nodes
        if (source.ChildNodes.Count > 0)
        {
            foreach (ObjectTypeTreeNode child in source.ChildNodes)
            {
                if ((SiteID > 0) || !child.Site)
                {
                    if ((OnBeforeCreateNode == null) || OnBeforeCreateNode(child))
                    {
                        // Create child node
                        TreeNode childNode = CreateNode(child);
                        if ((child.ObjectType != null) || (childNode.ChildNodes.Count > 0))
                        {
                            newNode.ChildNodes.Add(childNode);
                            // Preselect node
                            if ((child.ObjectType == PreselectObjectType) && (child.Site == IsPreselectedObjectTypeSiteObject))
                            {
                                childNode.Selected = true;
                            }
                        }
                    }
                }
            }
        }

        return(newNode);
    }
Exemple #8
0
    protected void Page_Load(object sender, EventArgs e)
    {
        // Register script for pendingCallbacks repair
        ScriptHelper.FixPendingCallbacks(Page);

        // Initialize current user for the async actions
        currentUser = CMSContext.CurrentUser;

        if (!RequestHelper.IsCallback())
        {
            // Check 'Manage object tasks' permission
            if (!currentUser.IsAuthorizedPerResource("cms.staging", "ManageObjectsTasks"))
            {
                RedirectToAccessDenied("cms.staging", "ManageObjectsTasks");
            }

            siteId          = QueryHelper.GetInteger("siteid", 0);
            currentSiteId   = CMSContext.CurrentSiteID;
            currentSiteName = CMSContext.CurrentSiteName;

            // Check logging
            if (siteId > 0)
            {
                if (!ValidationHelper.GetBoolean(SettingsKeyProvider.GetBoolValue(currentSiteName + ".CMSStagingLogObjectChanges"), false))
                {
                    plcTasks.Visible     = false;
                    pnlNotLogged.Visible = true;
                    lblNotLogged.Text    = GetString("ObjectStaging.SiteNotLogged");
                    return;
                }
            }
            else if (siteId == 0)
            {
                if (!ValidationHelper.GetBoolean(SettingsKeyProvider.GetBoolValue("CMSStagingLogObjectChanges"), false))
                {
                    plcTasks.Visible     = false;
                    pnlNotLogged.Visible = true;
                    lblNotLogged.Text    = GetString("ObjectStaging.GlobalNotLogged");
                    return;
                }
            }

            serverId = QueryHelper.GetInteger("serverid", 0);

            // Get object type
            objectType = QueryHelper.GetString("objecttype", string.Empty);
            if ((objectType == string.Empty) || (objectType == PredefinedObjectType.MEDIAFOLDER))
            {
                pnlMenu.Visible = false;
            }

            // Setup title
            titleElem.TitleText  = GetString("Synchronization.Title");
            titleElem.TitleImage = GetImageUrl("/CMSModules/CMS_Staging/synchronization.png");

            // Get the selected types
            ObjectTypeTreeNode selectedNode = TaskInfoProvider.ObjectTree.FindNode(objectType, (siteId > 0));
            objectType = (selectedNode != null) ? selectedNode.GetObjectTypes(true) : string.Empty;
            if (!RequestHelper.CausedPostback(btnCurrent, btnSyncSelected, btnSyncAll))
            {
                // Register the dialog script
                ScriptHelper.RegisterDialogScript(this);

                // Initialize images
                viewImage           = GetImageUrl("Design/Controls/UniGrid/Actions/View.png");
                deleteImage         = GetImageUrl("Design/Controls/UniGrid/Actions/Delete.png");
                syncImage           = GetImageUrl("Design/Controls/UniGrid/Actions/Synchronize.png");
                imgCurrent.ImageUrl = GetImageUrl("CMSModules/CMS_Staging/syncsubtree.png");

                // Initialize tooltips
                syncTooltip   = GetString("general.synchronize");
                deleteTooltip = GetString("general.delete");
                viewTooltip   = GetString("general.view");
                syncCurrent   = GetString("ObjectTasks.SyncCurrent");

                plcContent.Visible = true;

                // Initialize buttons
                btnCancel.Attributes.Add("onclick", ctlAsync.GetCancelScript(true) + "return false;");
                btnCancel.Text                  = GetString("General.Cancel");
                btnDeleteAll.OnClientClick      = "return confirm(" + ScriptHelper.GetString(GetString("Tasks.ConfirmDeleteAll")) + ");";
                btnDeleteSelected.OnClientClick = "return confirm(" + ScriptHelper.GetString(GetString("general.confirmdelete")) + ");";
                btnSyncSelected.OnClientClick   = "return !" + gridTasks.GetCheckSelectionScript();

                // Initialize grid
                gridTasks.ZeroRowsText         = GetString("Tasks.NoTasks");
                gridTasks.OnAction            += gridTasks_OnAction;
                gridTasks.OnDataReload        += gridTasks_OnDataReload;
                gridTasks.OnExternalDataBound += gridTasks_OnExternalDataBound;
                gridTasks.ShowActionsMenu      = true;
                gridTasks.Columns              = "TaskID, TaskSiteID, TaskDocumentID, TaskNodeAliasPath, TaskTitle, TaskTime, TaskType, TaskObjectType, TaskObjectID, TaskRunning, (SELECT COUNT(*) FROM Staging_Synchronization WHERE SynchronizationTaskID = TaskID AND SynchronizationErrorMessage IS NOT NULL AND (SynchronizationServerID = @ServerID OR (@ServerID = 0 AND (@TaskSiteID = 0 OR SynchronizationServerID IN (SELECT ServerID FROM Staging_Server WHERE ServerSiteID = @TaskSiteID AND ServerEnabled=1))))) AS FailedCount";
                TaskInfo ti = new TaskInfo();
                gridTasks.AllColumns = SqlHelperClass.MergeColumns(ti.ColumnNames.ToArray());



                pnlLog.Visible = false;
            }
        }

        ctlAsync.OnFinished   += ctlAsync_OnFinished;
        ctlAsync.OnError      += ctlAsync_OnError;
        ctlAsync.OnRequestLog += ctlAsync_OnRequestLog;
        ctlAsync.OnCancel     += ctlAsync_OnCancel;
    }
        internal void Setup(String invokeActionName,
                            String invokeActionName2,
                            EventHandler invokeDelegate,
                            EventHandler invokeDelegate2,
                            TreeNode node,
                            Object obj,
                            MemberInfo memberInfo,
                            ParameterInfo[] parameters)
        {
            // We are already all set
            if (_node == node)
            {
                return;
            }

            Clear();
            _node = node;

            // Add the parameters of the method or property indexers
            if (parameters != null)
            {
                for (int i = 0; i < parameters.Length; i++)
                {
                    ParameterInfo param          = parameters[i];
                    Object        propIndexValue = null;

                    // See if the current object value of the node is
                    // set to something, and if so, put the index
                    // value in the index parameter
                    if (memberInfo is PropertyInfo)
                    {
                        ObjectTypeTreeNode otNode = (ObjectTypeTreeNode)node;
                        if (otNode.CurrentPropIndexValues != null)
                        {
                            propIndexValue = otNode.CurrentPropIndexValues[i];
                        }
                    }

                    ParamControlInfo pci = AddParam(propIndexValue, param.ParameterType, param.Name, param, !FIELD_PROP_VALUE);

                    if (memberInfo is PropertyInfo)
                    {
                        pci._propertyIndexer = true;
                    }
                }
            }

            // String class is a special case for a type node;
            if (node is TypeTreeNode)
            {
                Type type = ((TypeTreeNode)node).Type;
                if (type.Equals(typeof(String)))
                {
                    AddParam(null, typeof(String), "value", null, FIELD_PROP_VALUE);
                }
            }

            // Handle the field/property value "parameters"
            if (memberInfo != null)
            {
                if (!SetupFieldPropValues(node, obj, memberInfo, parameters))
                {
                    return;
                }
            }

            ArrayList paramList = new ArrayList();

            foreach (ParamControlInfo param in _paramInfos)
            {
                paramList.Add(param);
            }

            // Supress set button on indexed properties, which
            // is always the 2nd button
            if (memberInfo is PropertyInfo)
            {
                PropertyInfo propInfo = (PropertyInfo)memberInfo;
                if (ParamControlInfo.IsUnhandledStruct(propInfo.PropertyType))
                {
                    invokeActionName2 = null;
                }
            }

            // Calc tab offset to make up for the buttons below
            int tabOffset = 0;

            if (invokeActionName != null)
            {
                tabOffset++;
            }
            if (invokeActionName2 != null)
            {
                tabOffset++;
            }

            Utils.AddHasControls(this, paramList, tabOffset);

            if (invokeActionName != null || invokeActionName2 != null)
            {
                Panel bp = new Panel();
                bp.Dock   = DockStyle.Top;
                bp.Height = Utils.BUTTON_HEIGHT;
                bp.Width  = Width;

                Button b;
                if (invokeActionName != null)
                {
                    b        = Utils.MakeButton(invokeActionName);
                    b.Dock   = DockStyle.Right;
                    b.Click += invokeDelegate;
                    bp.Controls.Add(b);
                    bp.TabIndex = --tabOffset;
                }

                if (invokeActionName2 != null)
                {
                    b        = Utils.MakeButton(invokeActionName2);
                    b.Dock   = DockStyle.Right;
                    b.Click += invokeDelegate2;
                    bp.Controls.Add(b);
                    bp.TabIndex = --tabOffset;
                }

                Controls.Add(bp);
            }
        }
        // Returns true if processing should continue, false otherwise
        internal bool SetupFieldPropValues(TreeNode node,
                                           Object obj,
                                           MemberInfo memberInfo,
                                           ParameterInfo[] parameters)
        {
            if (memberInfo is PropertyInfo)
            {
                if (((PropertyInfo)memberInfo).CanWrite)
                {
                    PropertyInfo pi = (PropertyInfo)memberInfo;

                    // If not indexed, a struct property is treated like
                    // a struct field; nothing is done in the param panel.
                    // If indexed, we need to show the index
                    if (ParamControlInfo.IsUnhandledStruct(pi.PropertyType))
                    {
                        if (parameters.Length > 0)
                        {
                            return(true);
                        }
                        return(false);
                    }

                    if (obj == null)
                    {
                        AddParam(null, pi.PropertyType, "value", null, FIELD_PROP_VALUE);
                    }
                    else
                    {
                        ObjectTypeTreeNode otNode = (ObjectTypeTreeNode)node;
                        Object             value  = null;
                        try {
                            value = pi.GetValue(obj, otNode.CurrentPropIndexValues);
                        } catch (Exception ex) {
                            TraceUtil.WriteLineInfo
                                (this,
                                "Exception in getting property "
                                + "value for " + pi + ": " + ex);

                            // Use the value from ObjectInfo, this is
                            // necessary for the property that can only
                            // be set, we want to show the last value we
                            // set it to, if possible
                            value = otNode.ObjectInfo.Obj;
                        }
                        AddParam(value, pi.PropertyType, "value", null, FIELD_PROP_VALUE);
                    }
                }
                else
                {
                    // Not indexed, nothing to invoke, if index,
                    if (parameters == null || parameters.Length == 0)
                    {
                        AddMessage("Property is read only");
                        return(false);
                    }
                }
            }
            else if (memberInfo is FieldInfo)
            {
                if (!((FieldInfo)memberInfo).IsLiteral)
                {
                    FieldInfo fi = (FieldInfo)memberInfo;

                    // Structs are handled by expanding their members
                    if (ParamControlInfo.IsUnhandledStruct(fi.FieldType))
                    {
                        return(false);
                    }

                    if (obj == null)
                    {
                        AddParam(null, fi.FieldType, "value", null, FIELD_PROP_VALUE);
                    }
                    else
                    {
                        Object value = null;
                        try {
                            value = fi.GetValue(obj);
                        } catch (Exception ex) {
                            TraceUtil.WriteLineInfo
                                (this,
                                "Exception in getting field "
                                + "value for " + fi + ": " + ex);

                            // Just ignore it
                        }
                        AddParam(value, fi.FieldType, "value", null, FIELD_PROP_VALUE);
                    }
                }
                else
                {
                    AddMessage("Constant; cannot be changed");
                    return(false);
                }
            }
            else if (memberInfo is EventInfo)
            {
                return(false);
            }
            return(true);
        }
    /// <summary>
    /// Create tree node from supplied data
    /// </summary>
    /// <param name="source">Tree node data</param>
    /// <returns>TreeNode</returns>
    public TreeNode CreateNode(ObjectTypeTreeNode source)
    {
        // Create new node
        TreeNode newNode = new TreeNode();

        // Get the image
        string type = source.ObjectType ?? source.Group;

        if (!UsePostback)
        {
            newNode.NavigateUrl = "#";
        }

        string template = NodeTextTemplate;

        // Site
        int siteId = 0;
        if (source.Site)
        {
            siteId = SiteID;
        }

        // Title
        var name = GetNodeName(type);

        if ((type == String.Empty) || (type == ObjectHelper.GROUP_OBJECTS))
        {
            template = SelectedNodeTextTemplate;
            siteId = -1;
            name = GetString("ObjectTasks.Root");
        }

        if (source.Main)
        {
            name = "<strong>" + name + "</strong>";
        }

        newNode.Text = template.Replace("##NODENAME##", name).Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", HttpUtility.UrlEncode(type));

        if (ValueTextTemplate != null)
        {
            newNode.Value = ValueTextTemplate.Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", type);
        }

        // Disable if not active node
        if (UsePostback && !source.Active)
        {
            newNode.SelectAction = TreeNodeSelectAction.None;
        }

        if (source.Group != null && !source.Active)
        {
            newNode.SelectAction = TreeNodeSelectAction.Expand;
        }

        // Add child nodes
        if (source.ChildNodes.Count > 0)
        {
            IEnumerable<ObjectTypeTreeNode> children = source.ChildNodes;
            if (source.SortChildren)
            {
                children = children.OrderBy(n => GetNodeName(n.ObjectType ?? n.Group));
            }

            foreach (var child in children)
            {
                if ((SiteID > 0) || !child.Site)
                {
                    if ((OnBeforeCreateNode == null) || OnBeforeCreateNode(child))
                    {
                        // Create child node
                        TreeNode childNode = CreateNode(child);
                        if ((child.ObjectType != null) || (childNode.ChildNodes.Count > 0))
                        {
                            newNode.ChildNodes.Add(childNode);
                            // Preselect node
                            if ((child.ObjectType == PreselectObjectType) && (child.Site == IsPreselectedObjectTypeSiteObject))
                            {
                                childNode.Selected = true;
                            }
                        }
                    }
                }
            }
        }

        newNode.Expanded = source.Expand;

        return newNode;
    }