private void RelationshipNameSiteInfo_Delete_After(object sender, ObjectEventArgs e)
 {
     if (RelHelper.IsStagingEnabled())
     {
         RelationshipNameSite_CreateStagingTask((RelationshipNameSiteInfo)e.Object, TaskTypeEnum.RemoveFromSite);
     }
 }
 /// <summary>
 /// Handle the Removal of Node Categories when not bound to the document, since binding to the Nodes don't seem to operate right.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void NonBindingNodeDocument_ProcessTask_After(object sender, StagingSynchronizationEventArgs e)
 {
     if (e.TaskType == TaskTypeEnum.DeleteObject)
     {
         // Don't want to trigger updates as we set the data in the database, so we won't log synchronziations
         using (new CMSActionContext()
         {
             LogSynchronization = false,
             LogIntegration = false
         })
         {
             if (e.ObjectType.ToLower() == "cms.treecategory")
             {
                 DataTable NodeCategoryTable = e.TaskData.Tables[0];
                 // Translate tables
                 int NodeID     = RelHelper.TranslateBindingTranslateID((int)NodeCategoryTable.Rows[0]["NodeID"], e.TaskData, "cms.node");
                 int CategoryID = RelHelper.TranslateBindingTranslateID((int)NodeCategoryTable.Rows[0]["CategoryID"], e.TaskData, "cms.category");
                 if (NodeID > 0 && CategoryID > 0)
                 {
                     TreeCategoryInfo.Provider.Remove(NodeID, CategoryID);
                 }
             }
         }
     }
 }
 private void RelationshipName_Update_After(object sender, ObjectEventArgs e)
 {
     if (RelHelper.IsStagingEnabled())
     {
         RelationshipName_CreateStagingTask((RelationshipNameInfo)e.Object, TaskTypeEnum.UpdateObject);
     }
 }
        public static object GetBindingCategoryWhere(EvaluationContext context, params object[] parameters)
        {
            string BindingClass      = ValidationHelper.GetString(parameters[0], "");
            string ObjectIDFieldName = "[" + SqlHelper.EscapeQuotes(ValidationHelper.GetString(parameters[1], "")) + "]";
            string LeftFieldName     = "[" + SqlHelper.EscapeQuotes(ValidationHelper.GetString(parameters[2], "")) + "]";
            string RightFieldName    = "[" + SqlHelper.EscapeQuotes(ValidationHelper.GetString(parameters[3], "")) + "]";

            string[]      Values         = ValidationHelper.GetString(parameters[4], "").Split("|;,".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            string        ObjIDTableName = null;
            IdentityType  IdentType      = IdentityType.ID;
            ConditionType CondType       = ConditionType.Any;

            if (parameters.Length > 5)
            {
                IdentType = (IdentityType)ValidationHelper.GetInteger(parameters[5], 0);
            }
            if (parameters.Length > 6)
            {
                CondType = (ConditionType)ValidationHelper.GetInteger(parameters[6], 0);
            }
            if (parameters.Length > 7)
            {
                ObjIDTableName = SqlHelper.EscapeQuotes(ValidationHelper.GetString(parameters[7], "").Trim('.'));
            }

            return(RelHelper.GetBindingCategoryWhere(BindingClass, ObjectIDFieldName, LeftFieldName, RightFieldName, Values, IdentType, CondType, ObjIDTableName));
        }
 private void LogTask_Before(object sender, StagingLogTaskEventArgs e)
 {
     RelHelper.UpdateTaskDataWithNodeBinding(e, new NodeBinding_DocumentLogTaskBefore_Configuration[]
     {
         new NodeBinding_DocumentLogTaskBefore_Configuration(
             new TreeCategoryInfo(),
             "NodeID = {0}")
     });
 }
        private void Relationship_Insert_Or_Delete_After(object sender, ObjectEventArgs e)
        {
            RelationshipInfo     RelationshipObj     = (RelationshipInfo)e.Object;
            RelationshipNameInfo RelationshipNameObj = RelationshipNameInfo.Provider.Get(RelationshipObj.RelationshipNameId);

            if (IsCustomAdhocRelationshipName(RelationshipNameObj))
            {
                TreeNode LeftNode = new DocumentQuery().WhereEquals("NodeID", RelationshipObj.LeftNodeId).FirstOrDefault();
                if (RelHelper.IsStagingEnabled(LeftNode.NodeSiteID))
                {
                    DocumentSynchronizationHelper.LogDocumentChange(LeftNode.NodeSiteName, LeftNode.NodeAliasPath, TaskTypeEnum.UpdateDocument, LeftNode.TreeProvider);
                }
            }
        }
        private void ProcessTask_After(object sender, StagingSynchronizationEventArgs e)
        {
            if (e.TaskType == TaskTypeEnum.UpdateDocument || e.TaskType == TaskTypeEnum.CreateDocument || e.TaskType == TaskTypeEnum.MoveDocument || e.TaskType == TaskTypeEnum.PublishDocument || e.TaskType == TaskTypeEnum.ArchiveDocument)
            {
                // Seems the first table is always the node's table, the table name dose change by the document page type.
                DataTable NodeTable = e.TaskData.Tables[0];
                if (NodeTable != null && NodeTable.Columns.Contains("NodeGuid"))
                {
                    // Don't want to trigger updates as we set the data in the database, so we won't log synchronziations
                    TreeNode NodeObj = new DocumentQuery().WhereEquals("NodeGUID", NodeTable.Rows[0]["NodeGuid"]).FirstOrDefault();

                    using (new CMSActionContext()
                    {
                        LogSynchronization = false,
                        LogIntegration = false
                    })
                    {
                        List <int> NewNodeCategoryIDs = RelHelper.NewBoundObjectIDs(e, TreeCategoryInfo.OBJECT_TYPE, "NodeID", "CategoryID", CategoryInfo.TYPEINFO);

                        // Now handle categories, deleting categories not found, and adding ones that are not set yet.
                        TreeCategoryInfo.Provider.Get().WhereEquals("NodeID", NodeObj.NodeID).WhereNotIn("CategoryID", NewNodeCategoryIDs).ForEachObject(x => x.Delete());
                        List <int> CurrentCategories = TreeCategoryInfo.Provider.Get().WhereEquals("NodeID", NodeObj.NodeID).Select(x => x.CategoryID).ToList();
                        foreach (int NewCategoryID in NewNodeCategoryIDs.Except(CurrentCategories))
                        {
                            TreeCategoryInfo.Provider.Add(NodeObj.NodeID, NewCategoryID);
                        }
                    }
                    if (RelHelper.IsStagingEnabled(NodeObj.NodeSiteID))
                    {
                        TaskTypeEnum TaskTypeToUse = e.TaskType;
                        switch (e.TaskType)
                        {
                        case TaskTypeEnum.MoveDocument:
                            TaskTypeToUse = TaskTypeEnum.UpdateDocument;
                            break;
                        }
                        // Check if we need to generate a task for a server that isn't the origin server
                        RelHelper.CheckIfTaskCreationShouldOccur(NodeObj.NodeGUID, TaskTypeToUse);
                    }
                }
                else
                {
                    Service.Resolve <IEventLogService>().LogEvent(EventTypeEnum.Error, "RelationshipExended", "No Node Table Found", eventDescription: "First Table in the incoming Staging Task did not contain the Node GUID, could not processes.");
                }
            }
        }
        public static object GetDocumentCategoryWhere(EvaluationContext context, params object[] parameters)
        {
            ConditionType CondType            = ConditionType.Any;
            string        DocumentIDTableName = "CMS_Document";

            string[] Values = new string[] { };
            if (parameters.Length > 0)
            {
                Values = ValidationHelper.GetString(parameters[0], "").Split("|;,".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            }
            if (parameters.Length > 1)
            {
                CondType = (ConditionType)ValidationHelper.GetInteger(parameters[1], 0);
            }
            if (parameters.Length > 2)
            {
                DocumentIDTableName = SqlHelper.EscapeQuotes(ValidationHelper.GetString(parameters[2], "CMS_Document")).Trim('.');
            }
            return(RelHelper.GetDocumentCategoryWhere(Values, CondType, DocumentIDTableName));
        }
 private void TreeCategory_Insert_Or_Delete_After(object sender, ObjectEventArgs e)
 {
     RelHelper.HandleNodeBindingInsertUpdateDeleteEvent(((TreeCategoryInfo)e.Object).NodeID, TreeCategoryInfo.OBJECT_TYPE);
 }
 private void NonBindingLogTask_Before(object sender, StagingLogTaskEventArgs e)
 {
     RelHelper.SetBetterBindingTaskTitle(e, TreeCategoryInfo.OBJECT_TYPE, "NodeID", "CategoryID", "Category", CategoryInfo.TYPEINFO);
 }