//private void ContentService_Copying(IContentService sender,CopyEventArgs<IContent> eventArgs) {
        //    ActionModel copy = null;
        //    int _currentUserId;

        //    using(var contextReference = _context.EnsureUmbracoContext()) {
        //        _currentUserId = contextReference.UmbracoContext.Security.CurrentUser.Id;
        //    }

        //    try {

        //        using(var scope = _scopeProvider.CreateScope(autoComplete: true)) {
        //            var sql = scope.SqlContext.Sql().Select("*").From<ActionModel>()
        //                            .Where<ActionModel>(x => x.id == 5);
        //            copy = scope.Database.Fetch<ActionModel>(sql).FirstOrDefault();
        //        }
        //    }
        //    catch(Exception ex) {
        //        _logger.Error<ActionModel>("Failed to get Content Protector setting for copy action: " + ex.Message);
        //    }

        //    if(copy != null) {
        //        if(copy.nodes.Contains(eventArgs.Copy.Id.ToString())) {
        //            if(!copy.userExceptions.Split(',').Contains(_currentUserId.ToString())) {
        //                eventArgs.Cancel = true;
        //                eventArgs.CanCancel = true;
        //                eventArgs.Messages.Add(new EventMessage("Action rejected. Contact website admin","You cannot copy " + eventArgs.Copy.Name,EventMessageType.Error));
        //            }
        //        }
        //    }

        //}

        //private void ContentService_Moving(IContentService sender,MoveEventArgs<IContent> eventArgs) {
        //    ActionModel move = null;
        //    int _currentUserId;

        //    using(var contextReference = _context.EnsureUmbracoContext()) {
        //        _currentUserId = contextReference.UmbracoContext.Security.CurrentUser.Id;
        //    }

        //    try {

        //        using(var scope = _scopeProvider.CreateScope(autoComplete: true)) {
        //            var sql = scope.SqlContext.Sql().Select("*").From<ActionModel>()
        //                            .Where<ActionModel>(x => x.id == 2);
        //            move = scope.Database.Fetch<ActionModel>(sql).FirstOrDefault();
        //        }
        //    }
        //    catch(Exception ex) {
        //        _logger.Error<ActionModel>("Failed to get Content Protector setting for move action: " + ex.Message);
        //    }

        //    foreach(var node in eventArgs.MoveInfoCollection) {
        //        if(move != null) {
        //            if(move.nodes.Contains(node.Entity.Id.ToString()) || move.disableAction) {
        //                if(!move.userExceptions.Split(',').Contains(_currentUserId.ToString())) {
        //                    eventArgs.CancelOperation(new EventMessage("Action rejected. Contact website admin","You cannot move " + node.Entity.Name,EventMessageType.Error));
        //                }
        //            }
        //        }
        //    }
        //}

        private void ContentService_Saving(IContentService sender, ContentSavingEventArgs eventArgs)
        {
            ActionModel save = null;
            int         _currentUserId;

            using (var contextReference = _context.EnsureUmbracoContext()) {
                _currentUserId = contextReference.UmbracoContext.Security.CurrentUser.Id;
            }

            try {
                using (var scope = _scopeProvider.CreateScope(autoComplete: true)) {
                    var sql = scope.SqlContext.Sql().Select("*").From <ActionModel>()
                              .Where <ActionModel>(x => x.id == 1);
                    save = scope.Database.Fetch <ActionModel>(sql).FirstOrDefault();
                }
            }
            catch (Exception ex) {
                _logger.Error <ActionModel>("Failed to get Content Protector setting for save action: " + ex.Message);
            }

            foreach (var node in eventArgs.SavedEntities)
            {
                if (save != null)
                {
                    if (save.nodes.Split(',').Contains(node.Id.ToString()) || save.disableAction)
                    {
                        if (!save.userExceptions.Split(',').Contains(_currentUserId.ToString()))
                        {
                            eventArgs.CancelOperation(new EventMessage("Action rejected. Contact website admin", "You cannot save " + node.Name, EventMessageType.Error));
                        }
                    }
                }
            }
        }
        private void ContentService_Saving(IContentService sender, ContentSavingEventArgs e)
        {
            contentService = sender;
            using (var scope = scopeProvider.CreateScope())
            {
                foreach (var node in e.SavedEntities)
                {
                    var parentNodeId = node.ParentId;


                    // If the document type is a resourceItem
                    if (node.ContentType.Alias == BlogPage.ModelTypeAlias)
                    {
                        string parentModelTypeAlias  = String.Empty;
                        string modelTypeAlias        = String.Empty;
                        string datePropertyTypeAlias = String.Empty;

                        switch (node.ContentType.Alias)
                        {
                        case BlogPage.ModelTypeAlias:
                            modelTypeAlias        = BlogPage.ModelTypeAlias;
                            parentModelTypeAlias  = Section.ModelTypeAlias;
                            datePropertyTypeAlias = BlogPage.GetModelPropertyType(r => r.PublishedDate).Alias;
                            break;

                        default:
                            throw new Exception("Error setting Model/Prop alias");
                        }


                        IContent monthFolder;

                        if (parentNodeId <= 0 && e.CanCancel)
                        {
                            e.CancelOperation(new EventMessage("Error", "Something went wrong with publishing the resource", EventMessageType.Error));
                        }

                        var currentParent = GetCurrentParent(parentNodeId);
                        var date          = node.GetValue <DateTime>(datePropertyTypeAlias);

                        if (date == DateTime.MinValue)
                        {
                            date = DateTime.Today;
                            node.SetValue(datePropertyTypeAlias, date);
                        }
                        var dateYear  = date.ToString("yyyy");
                        var dateMonth = date.ToString("MMMM");

                        if (currentParent.ContentType.Alias == DateFolder.ModelTypeAlias)
                        {
                            bool moveNode = VerifyOrMoveToCorrectLocation(scope, currentParent, dateYear, dateMonth, out monthFolder);

                            if (moveNode)
                            {
                                node.SetParent(monthFolder);
                            }
                        }

                        else if (currentParent.ContentType.Alias == parentModelTypeAlias)
                        {
                            monthFolder = MoveToCorrectLocation(scope, currentParent, dateYear, dateMonth);

                            node.SetParent(monthFolder);
                        }
                    }
                }
                scope.Complete();
            }
        }