Exemple #1
0
        public override IItemData EvaluateUpdate(IItemData sourceItem, IItemData targetItem)
        {
            Assert.ArgumentNotNull(targetItem, "targetItemData");
            Assert.ArgumentNotNull(sourceItem, "sourceItemData");

            var deferredUpdateLog = new DeferredLogWriter <ISerializedAsMasterEvaluatorLogger>();

            _logger.Evaluated(sourceItem ?? targetItem);

            var result = _parentConfiguration.Resolve <IPredicate>().Includes(targetItem);

            // TODO: In reality, `result` should never come back null here. With the current tests it does however, and it's
            // ^&*"$*£"&(* to change them
            if (ShouldUpdateExisting(sourceItem, targetItem, deferredUpdateLog, result?.FieldValueManipulator))
            {
                using (new LogTransaction(_globalLogger))
                {
                    var changeHappened = _sourceDataStore.Save(targetItem, result?.FieldValueManipulator);

                    if (changeHappened)
                    {
                        _logger.SerializedUpdatedItem(targetItem);
                        deferredUpdateLog.ExecuteDeferredActions(_logger);
                    }
                }
                return(targetItem);
            }

            return(null);
        }
Exemple #2
0
        protected virtual void DeserializeRole(IRoleData role)
        {
            bool addedRole = false;

            // Add role if needed
            var name = role.RoleName;

            if (!System.Web.Security.Roles.RoleExists(name))
            {
                _loaderLogger.AddedNewRole(role);
                addedRole = true;
                System.Web.Security.Roles.CreateRole(name);
            }

            Role targetRole           = Role.FromName(name);
            var  currentSourceParents = new SitecoreRoleData(targetRole).MemberOfRoles;
            var  currentTargetParents = role.MemberOfRoles;

            var addedRoleMembership   = new List <string>();
            var removedRoleMembership = new List <string>();
            var deferredUpdateLog     = new DeferredLogWriter <IRoleLoaderLogger>();

            // Loop over the serialized parent roles and set db roles if needed
            foreach (var serializedMemberRoleName in currentTargetParents)
            {
                var memberRole = Role.FromName(serializedMemberRoleName);

                // add nonexistant parent role if needed. NOTE: parent role need not be one we have serialized or included.
                if (!Role.Exists(serializedMemberRoleName))
                {
                    deferredUpdateLog.AddEntry(log => log.AddedNewRoleMembership(new SitecoreRoleData(memberRole)));
                    System.Web.Security.Roles.CreateRole(serializedMemberRoleName);
                }

                // Add membership if not already in the parent role
                if (!RolesInRolesManager.IsRoleInRole(targetRole, memberRole, false))
                {
                    addedRoleMembership.Add(memberRole.Name);
                    RolesInRolesManager.AddRoleToRole(targetRole, memberRole);
                }
            }

            // Loop over parent roles that exist in the database but not in serialized and remove them
            var membershipToRemove = currentSourceParents.Where(parent => !currentTargetParents.Contains(parent, StringComparer.OrdinalIgnoreCase));

            foreach (var roleToRemove in membershipToRemove)
            {
                removedRoleMembership.Add(roleToRemove);
                RolesInRolesManager.RemoveRoleFromRole(targetRole, Role.FromName(roleToRemove));
            }

            if (!addedRole && (addedRoleMembership.Count > 0 || removedRoleMembership.Count > 0))
            {
                _loaderLogger.RoleMembershipChanged(role, addedRoleMembership.ToArray(), removedRoleMembership.ToArray());
            }

            deferredUpdateLog.ExecuteDeferredActions(_loaderLogger);
        }
Exemple #3
0
        public ISourceItem EvaluateUpdate(ISerializedItem serializedItem, ISourceItem existingItem)
        {
            Assert.ArgumentNotNull(serializedItem, "serializedItem");
            Assert.ArgumentNotNull(existingItem, "existingItem");

            var deferredUpdateLog = new DeferredLogWriter <ISerializedAsMasterEvaluatorLogger>();

            if (ShouldUpdateExisting(serializedItem, existingItem, deferredUpdateLog))
            {
                _logger.SerializedUpdatedItem(serializedItem);

                deferredUpdateLog.ExecuteDeferredActions(_logger);

                var updatedItem = DoDeserialization(serializedItem);

                return(updatedItem);
            }

            return(null);
        }
        public IItemData EvaluateUpdate(IItemData sourceItem, IItemData targetItem)
        {
            Assert.ArgumentNotNull(targetItem, "targetItemData");
            Assert.ArgumentNotNull(sourceItem, "sourceItemData");

            var deferredUpdateLog = new DeferredLogWriter <ISerializedAsMasterEvaluatorLogger>();

            _logger.Evaluated(sourceItem ?? targetItem);

            if (ShouldUpdateExisting(sourceItem, targetItem, deferredUpdateLog))
            {
                _logger.SerializedUpdatedItem(targetItem);

                deferredUpdateLog.ExecuteDeferredActions(_logger);

                DoDeserialization(targetItem);

                return(targetItem);
            }

            return(null);
        }
        public override IItemData EvaluateUpdate(IItemData sourceItem, IItemData targetItem)
        {
            Assert.ArgumentNotNull(targetItem, "targetItemData");
            Assert.ArgumentNotNull(sourceItem, "sourceItemData");

            var deferredUpdateLog = new DeferredLogWriter <ISerializedAsMasterEvaluatorLogger>();

            _logger.Evaluated(sourceItem ?? targetItem);

            if (ShouldUpdateExisting(sourceItem, targetItem, deferredUpdateLog))
            {
                using (new LogTransaction(_globalLogger))
                {
                    _logger.SerializedUpdatedItem(targetItem);
                    deferredUpdateLog.ExecuteDeferredActions(_logger);

                    _sourceDataStore.Save(targetItem);
                }
                return(targetItem);
            }

            return(null);
        }
		public override IItemData EvaluateUpdate(IItemData sourceItem, IItemData targetItem)
		{
			Assert.ArgumentNotNull(targetItem, "targetItemData");
			Assert.ArgumentNotNull(sourceItem, "sourceItemData");

			var deferredUpdateLog = new DeferredLogWriter<ISerializedAsMasterEvaluatorLogger>();

			_logger.Evaluated(sourceItem ?? targetItem);

			if (ShouldUpdateExisting(sourceItem, targetItem, deferredUpdateLog))
			{
				using (new LogTransaction(_globalLogger))
				{
					_logger.SerializedUpdatedItem(targetItem);
					deferredUpdateLog.ExecuteDeferredActions(_logger);

					_sourceDataStore.Save(targetItem);
				}
				return targetItem;
			}

			return null;
		}
Exemple #7
0
        protected virtual void DeserializeRole(IRoleData role)
        {
            bool addedRole = false;

            // Add role if needed
            var name = role.RoleName;
            if (!System.Web.Security.Roles.RoleExists(name))
            {
                _loaderLogger.AddedNewRole(role);
                addedRole = true;
                System.Web.Security.Roles.CreateRole(name);
            }

            Role targetRole = Role.FromName(name);
            var currentSourceParents = new SitecoreRoleData(targetRole).MemberOfRoles;
            var currentTargetParents = role.MemberOfRoles;

            var addedRoleMembership = new List<string>();
            var removedRoleMembership = new List<string>();
            var deferredUpdateLog = new DeferredLogWriter<IRoleLoaderLogger>();

            // Loop over the serialized parent roles and set db roles if needed
            foreach (var serializedMemberRoleName in currentTargetParents)
            {
                var memberRole = Role.FromName(serializedMemberRoleName);

                // add nonexistant parent role if needed. NOTE: parent role need not be one we have serialized or included.
                if (!Role.Exists(serializedMemberRoleName))
                {
                    deferredUpdateLog.AddEntry(log => log.AddedNewRoleMembership(new SitecoreRoleData(memberRole)));
                    System.Web.Security.Roles.CreateRole(serializedMemberRoleName);
                }

                // Add membership if not already in the parent role
                if (!RolesInRolesManager.IsRoleInRole(targetRole, memberRole, false))
                {
                    addedRoleMembership.Add(memberRole.Name);
                    RolesInRolesManager.AddRoleToRole(targetRole, memberRole);
                }
            }

            // Loop over parent roles that exist in the database but not in serialized and remove them
            var membershipToRemove = currentSourceParents.Where(parent => !currentTargetParents.Contains(parent, StringComparer.OrdinalIgnoreCase));
            foreach (var roleToRemove in membershipToRemove)
            {
                removedRoleMembership.Add(roleToRemove);
                RolesInRolesManager.RemoveRoleFromRole(targetRole, Role.FromName(roleToRemove));
            }

            if (!addedRole && (addedRoleMembership.Count > 0 || removedRoleMembership.Count > 0))
            {
                _loaderLogger.RoleMembershipChanged(role, addedRoleMembership.ToArray(), removedRoleMembership.ToArray());
            }

            deferredUpdateLog.ExecuteDeferredActions(_loaderLogger);
        }
        public IItemData EvaluateUpdate(IItemData sourceItem, IItemData targetItem)
        {
            Assert.ArgumentNotNull(targetItem, "targetItemData");
            Assert.ArgumentNotNull(sourceItem, "sourceItemData");

            var deferredUpdateLog = new DeferredLogWriter<ISerializedAsMasterEvaluatorLogger>();

            _logger.Evaluated(sourceItem ?? targetItem);

            if (ShouldUpdateExisting(sourceItem, targetItem, deferredUpdateLog))
            {
                _logger.SerializedUpdatedItem(targetItem);

                deferredUpdateLog.ExecuteDeferredActions(_logger);

                DoDeserialization(targetItem);

                return targetItem;
            }

            return null;
        }