Ejemplo n.º 1
0
        private static void RegisterCustomConditions()
        {
            IResource       res;
            IFilterRegistry fMgr = Core.FilterRegistry;

            #region Core.FilterRegistry.Std.ResourceIsCategorized Cleaning
            //  Fix previous version of this condition (it was implemented as
            //  predicate-type).
            IResourceList old = Core.ResourceStore.FindResources(FilterManagerProps.ConditionResName, "Name", Core.FilterRegistry.Std.ResourceIsCategorizedName);
            old = old.Intersect(Core.ResourceStore.FindResources(FilterManagerProps.ConditionResName, "ConditionType", "predicate"), true);
            old.DeleteAll();
            #endregion Core.FilterRegistry.Std.ResourceIsCategorized Cleaning

            fMgr.RegisterCustomCondition(fMgr.Std.ResourceIsCategorizedName, fMgr.Std.ResourceIsCategorizedNameDeep,
                                         null, new ResourceIsCategorized());
            res = fMgr.RegisterCustomCondition(fMgr.Std.ResourceHasEmptyContentName, fMgr.Std.ResourceHasEmptyContentNameDeep,
                                               null, new ResourceHasEmptyContent());
            fMgr.MarkConditionOnlyForRule(res);

            res = fMgr.CreateStandardCondition(FilterManagerStandards.DummyConditionName, FilterManagerStandards.DummyConditionName,
                                               null, "Id", ConditionOp.Gt, "0");
            res.SetProp("Invisible", true);

            res = fMgr.CreateCustomConditionTemplate(fMgr.Std.InTheCategoryAndSubcategoriesXName, fMgr.Std.InTheCategoryAndSubcategoriesXNameDeep,
                                                     null, new MatchCategoryAndSubcategories(), ConditionOp.In, "Category", "Category");
            fMgr.AssociateConditionWithGroup(res, "Category Conditions");

            res = fMgr.CreateCustomConditionTemplate(fMgr.Std.FromToCCContactXName, fMgr.Std.FromToCCContactXNameDeep,
                                                     null, new CorrespondenceOfContact(), ConditionOp.In, "Contact", "Category");
            fMgr.AssociateConditionWithGroup(res, "Address and Contact Conditions");

            res = fMgr.CreateCustomConditionTemplate(fMgr.Std.FromToContactXName, fMgr.Std.FromToContactXNameDeep,
                                                     null, new FromToOfContact(), ConditionOp.In, "Contact", "Category");
            fMgr.AssociateConditionWithGroup(res, "Address and Contact Conditions");

            res = fMgr.CreateCustomConditionTemplate(fMgr.Std.ResourceContainsTextXName, fMgr.Std.ResourceContainsTextXNameDeep,
                                                     null, new ResourceContainsText(), ConditionOp.Eq, "Subject");
            fMgr.AssociateConditionWithGroup(res, "Text Query Conditions");
            fMgr.MarkConditionOnlyForRule(res);

            res = fMgr.CreateCustomConditionTemplate(fMgr.Std.MessageIsInThreadOfXName, fMgr.Std.MessageIsInThreadOfXNameDeep,
                                                     null, new MessageIsInThreadOf(), ConditionOp.In, "Email", "Category");
            res.SetProp("Invisible", true);

            //  Interversion consistency. In old build this condition was
            //  registered in other plugin(s). Since they now refer to Std,
            //  we have to register it again.
            res = fMgr.CreateConditionTemplate(fMgr.Std.FromContactXName, fMgr.Std.FromContactXNameDeep, null, ConditionOp.In, "Contact", "From");
            fMgr.AssociateConditionWithGroup(res, "Address and Contact Conditions");

            //  Upgrade for old versions.
            res = fMgr.CreateConditionTemplate(fMgr.Std.DeletedInTheTimeSpanXName, fMgr.Std.DeletedInTheTimeSpanXNameDeep, null, ConditionOp.Eq, "DelDate");
            fMgr.AssociateConditionWithGroup(res, "Temporal Conditions");
        }