/// <summary>
        /// Sets the given access type for the specified Content.
        /// </summary>
        /// <param name="contentId">Content Id</param>
        /// <param name="userId">User Identity</param>
        /// <param name="accessType">Access type of the Content.</param>
        /// <returns>Status of the operation. Success, if succeeded. Failure message and exception details in case of exception.</returns>
        public OperationStatus SetContentAccessType(long contentId, long userId, AccessType accessType)
        {
            OperationStatus status = null;

            try
            {
                if (_userRepository.IsSiteAdmin(userId))
                {
                    // Get the current content from DB.
                    var content = _contentRepository.GetItem((c) => c.ContentID == contentId);

                    // Make sure content exists
                    this.CheckNotNull(() => new { content });

                    content.AccessTypeID = (int)accessType;

                    content.IsOffensive = (accessType == AccessType.Private);

                    var offensiveDetails = new OffensiveEntry()
                    {
                        EntityID = contentId,
                        ReviewerID = userId,
                        Status = OffensiveStatusType.Offensive
                    };

                    UpdateAllOffensiveContentEntry(contentId, offensiveDetails);

                    _contentRepository.Update(content);
                    _contentRepository.SaveChanges();

                    // Create Success message if set access type is successful.
                    status = OperationStatus.CreateSuccessStatus();
                }
            }
            catch (Exception exception)
            {
                status = OperationStatus.CreateFailureStatus(exception);
            }

            return status;
        }
        /// <summary>
        /// Sets the given access type for the specified community.
        /// </summary>
        /// <param name="communityId">Community Id</param>
        /// <param name="userId">User Identity</param>
        /// <param name="accessType">Access type of the community.</param>
        /// <returns>Status of the operation. Success, if succeeded. Failure message and exception details in case of exception.</returns>
        public async Task<OperationStatus> SetCommunityAccessType(long communityId, long userId, AccessType accessType)
        {
            OperationStatus status;

            try
            {
                if (_userRepository.IsSiteAdmin(userId))
                {
                    var community =  _communityRepository.GetItem(c => c.CommunityID == communityId);

                    // Make sure community exists
                    this.CheckNotNull(() => new { community });

                    community.AccessTypeID = (int)accessType;

                    community.IsOffensive = (accessType == AccessType.Private);

                    var offensiveDetails = new OffensiveEntry()
                    {
                        EntityID = communityId,
                        ReviewerID = userId,
                        Status = OffensiveStatusType.Offensive
                    };

                    UpdateAllOffensiveCommunityEntry(communityId, offensiveDetails);

                    _communityRepository.Update(community);
                    _communityRepository.SaveChanges();

                    // Create Success message if set access type is successful.
                    status = OperationStatus.CreateSuccessStatus();
                }
                else
                {
                    status = OperationStatus.CreateFailureStatus(Resources.UserNotSiteAdminError);
                }
            }
            catch (Exception exception)
            {
                status = OperationStatus.CreateFailureStatus(exception);
            }

            return status;
        }