Пример #1
0
        public ForumThreadsDrop(IPortalLiquidContext portalLiquidContext,
                                IDataAdapterDependencies dependencies,
                                IForum forum,
                                int startRowIndex = 0, int pageSize = -1, string orderBy = "adx_lastpostdate", string sortDirection = "asc"
                                ) : base(portalLiquidContext)
        {
            if (forum != null)
            {
                Dependencies = dependencies;

                PortalLiquidContext = portalLiquidContext;

                SetParams(startRowIndex, pageSize, orderBy, sortDirection);

                Forum = forum;

                var forumAggregationDataAdapter = new ForumDataAdapter(forum.EntityReference,
                                                                       Dependencies, serviceContext => CreateThreadEntityQuery(serviceContext, Forum.EntityReference));

                _adapter = forumAggregationDataAdapter;

                _threads = new Lazy <ForumThreadDrop[]>(() => _adapter.SelectThreads(StartRowIndex, PageSize).Select(e => new ForumThreadDrop(this, Dependencies, e)).ToArray(), LazyThreadSafetyMode.None);
            }
            else
            {
                Dependencies = dependencies;

                PortalLiquidContext = portalLiquidContext;

                SetParams(startRowIndex, pageSize, orderBy, sortDirection);

                var forumAggregationDataAdapter = new ForumDataAdapter(Dependencies, serviceContext => CreateThreadEntityQuery(serviceContext));

                _adapter = forumAggregationDataAdapter;

                _threads = new Lazy <ForumThreadDrop[]>(() => _adapter.SelectThreads(StartRowIndex, PageSize).Select(e => new ForumThreadDrop(this, Dependencies, e)).ToArray(), LazyThreadSafetyMode.None);
            }
        }
Пример #2
0
        protected override void ProcessRequest(HttpContext context, ICmsEntityServiceProvider serviceProvider, Guid portalScopeId, IPortalContext portal, OrganizationServiceContext serviceContext, Entity entity, CmsEntityMetadata entityMetadata, ICrmEntitySecurityProvider security)
        {
            if (!(IsRequestMethod(context.Request, "POST") || IsRequestMethod(context.Request, "DELETE")))
            {
                throw new CmsEntityServiceException(HttpStatusCode.MethodNotAllowed, "Request method {0} not allowed for this resource.".FormatWith(context.Request.HttpMethod));
            }

            CrmEntityInactiveInfo inactiveInfo;

            if (CrmEntityInactiveInfo.TryGetInfo(entity.LogicalName, out inactiveInfo))
            {
                serviceContext.SetState(inactiveInfo.InactiveState, inactiveInfo.InactiveStatus, entity);

                WriteNoContentResponse(context.Response);

                return;
            }

            if (entity.LogicalName == "adx_communityforumthread")
            {
                var forum = entity.GetRelatedEntity(serviceContext, new Relationship("adx_communityforum_communityforumthread"));

                if (forum != null)
                {
                    var forumDataAdapter = new ForumDataAdapter(
                        forum.ToEntityReference(),
                        new PortalConfigurationDataAdapterDependencies(portalName: PortalName, requestContext: context.Request.RequestContext));

                    forumDataAdapter.DeleteThread(entity.ToEntityReference());

                    WriteNoContentResponse(context.Response);

                    if (FeatureCheckHelper.IsFeatureEnabled(FeatureNames.TelemetryFeatureUsage))
                    {
                        PortalFeatureTrace.TraceInstance.LogFeatureUsage(FeatureTraceCategory.Forum, HttpContext.Current, "delete_forumthread", 1, entity.ToEntityReference(), "delete");
                    }

                    return;
                }
            }

            if (entity.LogicalName == "adx_communityforumpost")
            {
                var forumThread = entity.GetRelatedEntity(serviceContext, new Relationship("adx_communityforumthread_communityforumpost"));

                if (forumThread != null)
                {
                    var forumThreadDataAdapter = new ForumThreadDataAdapter(
                        forumThread.ToEntityReference(),
                        new PortalConfigurationDataAdapterDependencies(portalName: PortalName, requestContext: context.Request.RequestContext));

                    forumThreadDataAdapter.DeletePost(entity.ToEntityReference());

                    WriteNoContentResponse(context.Response);

                    if (FeatureCheckHelper.IsFeatureEnabled(FeatureNames.TelemetryFeatureUsage))
                    {
                        PortalFeatureTrace.TraceInstance.LogFeatureUsage(FeatureTraceCategory.Forum, HttpContext.Current, "delete_forumpost", 1, entity.ToEntityReference(), "delete");
                    }

                    return;
                }
            }

            serviceContext.DeleteObject(entity);
            serviceContext.SaveChanges();

            WriteNoContentResponse(context.Response);

            if (FeatureCheckHelper.IsFeatureEnabled(FeatureNames.TelemetryFeatureUsage))
            {
                PortalFeatureTrace.TraceInstance.LogFeatureUsage(FeatureTraceCategory.Blog, HttpContext.Current, "delete_blogpost", 1, entity.ToEntityReference(), "delete");
            }
        }