Esempio n. 1
0
        private ActionResult RedirectToShoppingCart()
        {
            const string shoppingCartSiteMarker = "Shopping Cart";

            var context = PortalCrmConfigurationManager.CreatePortalContext();

            var website = context.ServiceContext.CreateQuery("adx_website").FirstOrDefault(w => w.GetAttributeValue <Guid>("adx_websiteid") == context.Website.Id);

            var page = context.ServiceContext.GetPageBySiteMarkerName(website, shoppingCartSiteMarker);

            if (page == null)
            {
                throw new Exception("Please contact your System Administrator. Required Site Marker '{0}' is missing.".FormatWith(shoppingCartSiteMarker));
            }

            var path = context.ServiceContext.GetUrl(page);

            if (path == null)
            {
                throw new Exception("Please contact your System Administrator. Unable to build URL for Site Marker '{0}'.".FormatWith(shoppingCartSiteMarker));
            }

            return(Redirect(path));
        }
Esempio n. 2
0
        public ActionResult DeleteNote(string id)
        {
            Guid annotationId;

            Guid.TryParse(id, out annotationId);
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var dataAdapter             = new AnnotationDataAdapter(dataAdapterDependencies);
            var annotation = dataAdapter.GetAnnotation(annotationId);

            var result = dataAdapter.DeleteAnnotation(annotation, new AnnotationSettings(dataAdapterDependencies.GetServiceContext(), true));

            if (!result.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Entity Permissions have not been defined. Your request could not be completed."));
            }

            if (!result.CanDelete)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Permission Denied. You do not have the appropriate Entity Permissions to delete this record."));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
Esempio n. 3
0
        public ActionResult ProfileBlogPosts(string contactId, int?page)
        {
            Guid guid;

            if (!Guid.TryParse(contactId, out guid))
            {
                return(HttpNotFound());
            }

            var service = this.HttpContext.GetOrganizationService();
            var contact = service.RetrieveSingle(CreateContactQuery(guid));

            if (contact == null)
            {
                return(HttpNotFound());
            }

            var portal = PortalCrmConfigurationManager.CreatePortalContext();

            var dependencies    = new Adxstudio.Xrm.Blogs.PortalContextDataAdapterDependencies(portal, requestContext: Request.RequestContext);
            var blogDataAdapter = new AuthorWebsiteBlogAggregationDataAdapter(guid, dependencies);
            var website         = this.HttpContext.GetWebsite();

            var profileViewModel = new ProfileViewModel
            {
                BlogCount = blogDataAdapter.SelectBlogCount(),
                User      = contact,
                Website   = website.Entity
            };

            EnityEnablePermission(profileViewModel);
            profileViewModel.BlogPosts = new PaginatedList <IBlogPost>(page, profileViewModel.BlogCount,
                                                                       blogDataAdapter.SelectPosts);

            return(View(profileViewModel));
        }
Esempio n. 4
0
        public ActionResult GetProductReviews(string productid, string sortExpression, int startRowIndex = 0, int pageSize = DefaultPageSize)
        {
            Guid productID;

            if (string.IsNullOrEmpty(productid) || !Guid.TryParse(productid, out productID))
            {
                throw new ArgumentException("Please provide a valid product id.");
            }
            if (pageSize < 0)
            {
                pageSize = DefaultPageSize;
            }
            if (pageSize > DefaultMaxPageSize)
            {
                Tracing.FrameworkInformation(GetType().FullName, "GetProductReviews", "pageSize={0} is greater than the allowed maximum page size of {1}. Page size has been constrained to {1}.", pageSize, DefaultMaxPageSize);
                pageSize = DefaultMaxPageSize;
            }
            var portal  = PortalCrmConfigurationManager.CreatePortalContext();
            var context = new OrganizationServiceContext(new OrganizationService("Xrm"));
            var product = GetActiveProduct(productID, context);
            var productReviewDataAdapter = new ProductReviewAggregationDataAdapter(product.ToEntityReference(), new Adxstudio.Xrm.Products.PortalContextDataAdapterDependencies(portal, null, Request.RequestContext));
            var reviews =
                productReviewDataAdapter.SelectReviews(startRowIndex, pageSize, sortExpression)
                .Select(
                    r =>
                    new Review(r.EntityReference != null ? r.EntityReference.Id : Guid.Empty, r.Content,
                               r.Product != null ? r.Product.Id : Guid.Empty, r.Rating, r.RatingRationalValue, r.RatingMaximumValue,
                               r.Recommend, r.ReviewerContact != null ? r.ReviewerContact.Id : Guid.Empty, r.ReviewerEmail,
                               r.ReviewerLocation, r.ReviewerName, r.SubmittedOn, r.Title))
                .ToArray();
            var count = productReviewDataAdapter.SelectReviewCount();
            var data  = new ReviewPaginatedViewData(reviews, count, pageSize, startRowIndex);
            var json  = Json(data);

            return(json);
        }
Esempio n. 5
0
        public ActionResult ProfileForumPosts(string contactId, int?page)
        {
            Guid guid;

            if (!Guid.TryParse(contactId, out guid))
            {
                return(HttpNotFound());
            }

            var service = Request.GetOwinContext().GetOrganizationService();
            var contact = service.RetrieveSingle(CreateContactQuery(guid));

            if (contact == null)
            {
                return(HttpNotFound());
            }

            var portal = PortalCrmConfigurationManager.CreatePortalContext();

            var forumDataAdapter =
                new WebsiteForumPostUserAggregationDataAdapter(guid,
                                                               new Adxstudio.Xrm.Forums.PortalContextDataAdapterDependencies(portal));

            var profileViewModel = new ProfileViewModel
            {
                ForumPostCount = forumDataAdapter.SelectPostCount(),
                User           = contact,
                Website        = portal.Website
            };

            EnityEnablePermission(profileViewModel);
            profileViewModel.ForumPosts = new PaginatedList <IForumPost>(page, profileViewModel.ForumPostCount,
                                                                         forumDataAdapter.SelectPostsDescending);

            return(View(profileViewModel));
        }
Esempio n. 6
0
        protected string BuildOpenNewSupportRequestUrl(Guid id)
        {
            var portalContext = PortalCrmConfigurationManager.CreatePortalContext();

            var page = portalContext.ServiceContext.GetPageBySiteMarkerName(portalContext.Website, OpenNewSupportRequestSiteMarker);

            if (page == null)
            {
                throw new Exception("Please contact your System Administrator. Required Site Marker '{0}' is missing.".FormatWith(OpenNewSupportRequestSiteMarker));
            }

            var pageUrl = portalContext.ServiceContext.GetUrl(page);

            if (pageUrl == null)
            {
                throw new Exception("Please contact your System Administrator. Unable to build URL for Site Marker '{0}'.".FormatWith(OpenNewSupportRequestSiteMarker));
            }

            var url = new UrlBuilder(pageUrl);

            url.QueryString.Set("id", id.ToString());

            return(WebsitePathUtility.ToAbsolute(portalContext.Website, url.PathWithQueryString));
        }
Esempio n. 7
0
        protected void Page_Load(object sender, EventArgs e)
        {
            Target = GetTargetEntityReference();

            if (Target == null)
            {
                Payment.Visible             = false;
                GeneralErrorMessage.Visible = true;

                return;
            }

            Guid quoteId;

            if (IsPostBack && Guid.TryParse(QuoteId.Value, out quoteId))
            {
                WebForm.CurrentSessionHistory.QuoteId = quoteId;
            }

            var dataAdapterDependencies = new Adxstudio.Xrm.Commerce.PortalConfigurationDataAdapterDependencies(PortalName, Request.RequestContext);
            var dataAdapter             = CreatePurchaseDataAdapter(Target, CurrentStepEntityPrimaryKeyLogicalName);

            Purchasable = dataAdapter.Select();

            if (Purchasable == null)
            {
                Payment.Visible             = false;
                GeneralErrorMessage.Visible = true;

                return;
            }

            // If the session quote is not the purchase quote, update and persist the session, as
            // there won't necessarily be a postback to save the session later.
            if (WebForm.CurrentSessionHistory.QuoteId != Purchasable.Quote.Id)
            {
                WebForm.CurrentSessionHistory.QuoteId = Purchasable.Quote.Id;

                WebForm.SaveSessionHistory(dataAdapterDependencies.GetServiceContext());
            }

            QuoteId.Value = Purchasable.Quote.Id.ToString();

            if (Purchasable.TotalAmount == 0)
            {
                var portal  = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
                var context = dataAdapterDependencies.GetServiceContext();
                var quote   = context.CreateQuery("quote").First(q => q.GetAttributeValue <Guid>("quoteid") == Purchasable.Quote.Id);
                var adapter = new CoreDataAdapter(portal, context);
                var status  = quote.GetAttributeValue <OptionSetValue>("statecode").Value;

                if (status != (int)QuoteState.Active)
                {
                    adapter.SetState(quote.ToEntityReference(), (int)QuoteState.Active, (int)QuoteStatusCode.InProgressActive);
                }

                if (status != (int)QuoteState.Won)
                {
                    adapter.WinQuote(quote.ToEntityReference());
                }

                adapter.CovertQuoteToSalesOrder(quote.ToEntityReference());

                dataAdapter.CompletePurchase();

                SetAttributeValuesAndSave();

                MoveToNextStep();

                return;
            }

            if (Paid)
            {
                dataAdapter.CompletePurchase();

                SetAttributeValuesAndSave();

                MoveToNextStep();

                return;
            }

            Payment.Visible             = true;
            GeneralErrorMessage.Visible = false;

            if (IsPaymentError)
            {
                SetErrorFields();
            }

            SetMerchantShippingFields(ServiceContext.CreateQuery("quote").FirstOrDefault(q => q.GetAttributeValue <Guid>("quoteid") == Purchasable.Quote.Id));

            if (IsPaymentAuthorizeNet || IsPaymentDemo)
            {
                CreditCardPaymentPanel.Visible = true;
                PayPalPaymentPanel.Visible     = false;

                SetMerchantFields();

                PopulateContactInfo(Contact);

                EnableTestMode(TestModeEnabled);

                PurchaseDiscounts.DataSource = Purchasable.Discounts;
                PurchaseDiscounts.DataBind();

                PurchaseItems.DataSource = Purchasable.Items.Where(item => item.IsSelected && item.Quantity > 0);
                PurchaseItems.DataBind();
            }
            else if (IsPaymentPaypal)
            {
                PayPalPaymentPanel.Visible     = true;
                CreditCardPaymentPanel.Visible = false;

                PayPalPurchaseDiscounts.DataSource = Purchasable.Discounts;
                PayPalPurchaseDiscounts.DataBind();

                PayPalPurchaseItems.DataSource = Purchasable.Items.Where(item => item.IsSelected && item.Quantity > 0);
                PayPalPurchaseItems.DataBind();
            }
        }
Esempio n. 8
0
        protected override void PerformDataBindingOfCrmEntity(Entity entity)
        {
            var portal  = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
            var context = portal.ServiceContext;

            entity = context.MergeClone(entity);

            if (ShowTitle)
            {
                Controls.Add(new Property
                {
                    PropertyName = GetPropertyName(context, entity, "adx_title"),
                    CssClass     = "weblinkset-title",
                    EditType     = "text",
                    DataItem     = entity
                });
            }

            if (ShowCopy)
            {
                Controls.Add(new Property
                {
                    PropertyName = GetPropertyName(context, entity, "adx_copy"),
                    CssClass     = "weblinkset-copy",
                    EditType     = "html",
                    DataItem     = entity
                });
            }

            var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName);

            var weblinks = entity.GetRelatedEntities(context, "adx_weblinkset_weblink")
                           .Where(e => securityProvider.TryAssert(context, e, CrmEntityRight.Read))
                           .OrderBy(weblink => weblink.GetAttributeValue <int?>("adx_displayorder"))
                           .ToList();

            var weblinkCount = weblinks.Count();

            var listItems = weblinks.Select((weblink, index) =>
            {
                var li = new HtmlGenericControl("li");

                SetPositionalClassAttribute(li, weblinkCount, index);

                if (ItemTemplate != null)
                {
                    var item = CreateItem(this, index, ListItemType.Item, true, weblink);

                    Controls.Remove(item);
                    li.Controls.Add(item);
                }
                else
                {
                    li.Controls.Add(GetHyperLinkForWebLink(weblink));

                    if (ShowLinkDescriptions)
                    {
                        var description = new HtmlGenericControl("div");

                        description.Controls.Add(new Property
                        {
                            PropertyName = GetPropertyName(context, weblink, "adx_description"),
                            DataItem     = weblink,
                            Literal      = true
                        });

                        if (!string.IsNullOrEmpty(DescriptionCssClass))
                        {
                            description.Attributes["class"] = DescriptionCssClass;
                        }

                        li.Controls.Add(description);
                    }
                }

                return(li);
            });

            var container           = new HtmlGenericControl("div");
            var containerCssClasses = new List <string> {
                "weblinkset-weblinks"
            };

            Controls.Add(container);

            if (listItems.Any())
            {
                var list = new HtmlGenericControl("ul");

                foreach (var li in listItems)
                {
                    list.Controls.Add(li);
                }

                container.Controls.Add(list);
            }

            if (Editable)
            {
                containerCssClasses.Add("xrm-entity");
                containerCssClasses.Add("xrm-editable-{0}".FormatWith(entity.LogicalName));

                if (HasEditPermission(entity))
                {
                    var metadataProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityEditingMetadataProvider>();

                    metadataProvider.AddEntityMetadata(PortalName, this, container, entity);

                    this.RegisterClientSideDependencies();
                }
            }

            container.Attributes["class"] = string.Join(" ", containerCssClasses.ToArray());
        }
            private static OrganizationServiceContext GetServiceContext(string portalName = null, RequestContext request = null)
            {
                var portal = PortalCrmConfigurationManager.CreatePortalContext(portalName, request);

                return(portal.ServiceContext);
            }
Esempio n. 10
0
        /// <summary>
        /// Generate the HTML to render a modal lookup records dialog.
        /// </summary>
        protected virtual IHtmlString BuildLookupModal(Control container)
        {
            var html                           = Mvc.Html.EntityExtensions.GetHtmlHelper(Metadata.FormView.ContextName, container.Page.Request.RequestContext, container.Page.Response); //new HtmlHelper(new ViewContext(), new ViewPage());
            var context                        = CrmConfigurationManager.CreateContext(Metadata.FormView.ContextName);
            var portal                         = PortalCrmConfigurationManager.CreatePortalContext(Metadata.FormView.ContextName);
            var user                           = portal == null ? null : portal.User;
            var viewConfigurations             = new List <ViewConfiguration>();
            var defaultViewId                  = Metadata.LookupViewID;
            var modalGridSearchPlaceholderText = html.SnippetLiteral("Portal/Lookup/Modal/Grid/Search/PlaceholderText");
            var modalGridSearchTooltipText     = html.SnippetLiteral("Portal/Lookup/Modal/Grid/Search/TooltipText");
            var modalGridPageSize              = html.IntegerSetting("Portal/Lookup/Modal/Grid/PageSize") ?? 10;
            var modalSizeSetting               = html.Setting("Portal/Lookup/Modal/Size");
            var modalSize                      = BootstrapExtensions.BootstrapModalSize.Large;

            if (modalSizeSetting != null && modalSizeSetting.ToLower() == "default")
            {
                modalSize = BootstrapExtensions.BootstrapModalSize.Default;
            }
            if (modalSizeSetting != null && modalSizeSetting.ToLower() == "small")
            {
                modalSize = BootstrapExtensions.BootstrapModalSize.Small;
            }

            var formEntityReferenceInfo = GetFormEntityReferenceInfo(container.Page.Request);

            if (defaultViewId == Guid.Empty)
            {
                // By default a lookup field cell defined in the form XML does not contain view parameters unless the user has specified a view that is not the default for that entity and we must query to find the default view.  Saved Query entity's QueryType code 64 indicates a lookup view.

                viewConfigurations.AddRange(
                    Metadata.LookupTargets.Select(
                        target => new ViewConfiguration(new SavedQueryView(context, target, 64, true, Metadata.LanguageCode), modalGridPageSize)
                {
                    Search = new ViewSearch(!Metadata.LookupDisableQuickFind)
                    {
                        PlaceholderText = modalGridSearchPlaceholderText, TooltipText = modalGridSearchTooltipText
                    },
                    EnableEntityPermissions = Metadata.FormView.EnableEntityPermissions,
                    PortalName   = Metadata.FormView.ContextName,
                    LanguageCode = Metadata.LanguageCode,
                    ModalLookupAttributeLogicalName           = Metadata.DataFieldName,
                    ModalLookupEntityLogicalName              = Metadata.TargetEntityName,
                    ModalLookupFormReferenceEntityId          = formEntityReferenceInfo.Item2,
                    ModalLookupFormReferenceEntityLogicalName = formEntityReferenceInfo.Item1,
                    ModalLookupFormReferenceRelationshipName  = formEntityReferenceInfo.Item3,
                    ModalLookupFormReferenceRelationshipRole  = formEntityReferenceInfo.Item4
                }));
            }
            else
            {
                viewConfigurations.Add(new ViewConfiguration(new SavedQueryView(context, defaultViewId, Metadata.LanguageCode), modalGridPageSize)
                {
                    Search = new ViewSearch(!Metadata.LookupDisableQuickFind)
                    {
                        PlaceholderText = modalGridSearchPlaceholderText, TooltipText = modalGridSearchTooltipText
                    },
                    EnableEntityPermissions = Metadata.FormView.EnableEntityPermissions,
                    PortalName   = Metadata.FormView.ContextName,
                    LanguageCode = Metadata.LanguageCode,
                    ModalLookupAttributeLogicalName           = Metadata.DataFieldName,
                    ModalLookupEntityLogicalName              = Metadata.TargetEntityName,
                    ModalLookupFormReferenceEntityId          = formEntityReferenceInfo.Item2,
                    ModalLookupFormReferenceEntityLogicalName = formEntityReferenceInfo.Item1,
                    ModalLookupFormReferenceRelationshipName  = formEntityReferenceInfo.Item3,
                    ModalLookupFormReferenceRelationshipRole  = formEntityReferenceInfo.Item4
                });
            }

            if (!Metadata.LookupDisableViewPicker && !string.IsNullOrWhiteSpace(Metadata.LookupAvailableViewIds))
            {
                var addViewConfigurations = new List <ViewConfiguration>();
                var viewids = Metadata.LookupAvailableViewIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                if (viewids.Length >= 1)
                {
                    var viewGuids = Array.ConvertAll(viewids, Guid.Parse).AsEnumerable().OrderBy(o => o != defaultViewId).ThenBy(o => o).ToArray();
                    addViewConfigurations.AddRange(from viewGuid in viewGuids
                                                   from viewConfiguration in viewConfigurations
                                                   where viewConfiguration.ViewId != viewGuid
                                                   select new ViewConfiguration(new SavedQueryView(context, viewGuid, Metadata.LanguageCode), modalGridPageSize)
                    {
                        Search = new ViewSearch(!Metadata.LookupDisableQuickFind)
                        {
                            PlaceholderText = modalGridSearchPlaceholderText, TooltipText = modalGridSearchTooltipText
                        },
                        EnableEntityPermissions = Metadata.FormView.EnableEntityPermissions,
                        PortalName   = Metadata.FormView.ContextName,
                        LanguageCode = Metadata.LanguageCode,
                        ModalLookupAttributeLogicalName           = Metadata.DataFieldName,
                        ModalLookupEntityLogicalName              = Metadata.TargetEntityName,
                        ModalLookupFormReferenceEntityId          = formEntityReferenceInfo.Item2,
                        ModalLookupFormReferenceEntityLogicalName = formEntityReferenceInfo.Item1,
                        ModalLookupFormReferenceRelationshipName  = formEntityReferenceInfo.Item3,
                        ModalLookupFormReferenceRelationshipRole  = formEntityReferenceInfo.Item4
                    });
                }
                viewConfigurations.AddRange(addViewConfigurations);
            }

            var    applyRelatedRecordFilter = !string.IsNullOrWhiteSpace(Metadata.LookupFilterRelationshipName);
            string filterFieldName          = null;

            if (!string.IsNullOrWhiteSpace(Metadata.LookupDependentAttributeName))             // entity.attribute (i.e. contact.adx_subject)
            {
                var pos = Metadata.LookupDependentAttributeName.IndexOf(".", StringComparison.InvariantCulture);
                filterFieldName = pos >= 0
                                        ? Metadata.LookupDependentAttributeName.Substring(pos + 1)
                                        : Metadata.LookupDependentAttributeName;
            }

            var modalTitle                   = html.SnippetLiteral("Portal/Lookup/Modal/Title");
            var modalPrimaryButtonText       = html.SnippetLiteral("Portal/Lookup/Modal/PrimaryButtonText");
            var modalCancelButtonText        = html.SnippetLiteral("Portal/Lookup/Modal/CancelButtonText");
            var modalDismissButtonSrText     = html.SnippetLiteral("Portal/Lookup/Modal/DismissButtonSrText");
            var modalRemoveValueButtonText   = html.SnippetLiteral("Portal/Lookup/Modal/RemoveValueButtonText");
            var modalNewValueButtonText      = html.SnippetLiteral("Portal/Lookup/Modal/NewValueButtonText");
            var modalDefaultErrorMessage     = html.SnippetLiteral("Portal/Lookup/Modal/DefaultErrorMessage");
            var modalGridLoadingMessage      = html.SnippetLiteral("Portal/Lookup/Modal/Grid/LoadingMessage");
            var modalGridErrorMessage        = html.SnippetLiteral("Portal/Lookup/Modal/Grid/ErrorMessage");
            var modalGridAccessDeniedMessage = html.SnippetLiteral("Portal/Lookup/Modal/Grid/AccessDeniedMessage");
            var modalGridEmptyMessage        = html.SnippetLiteral("Portal/Lookup/Modal/Grid/EmptyMessage");
            var modalGridToggleFilterText    = html.SnippetLiteral("Portal/Lookup/Modal/Grid/ToggleFilterText");

            return(html.LookupModal(ControlID, viewConfigurations,
                                    BuildControllerActionUrl("GetLookupGridData", "EntityGrid", new { area = "Portal", __portalScopeId__ = portal == null ? Guid.Empty : portal.Website.Id }), user, applyRelatedRecordFilter,
                                    Metadata.LookupAllowFilterOff, Metadata.LookupFilterRelationshipName, Metadata.LookupDependentAttributeType,
                                    filterFieldName, null, null, modalTitle, modalPrimaryButtonText, modalCancelButtonText, modalDismissButtonSrText,
                                    modalRemoveValueButtonText, modalNewValueButtonText, null, null, modalGridLoadingMessage, modalGridErrorMessage, modalGridAccessDeniedMessage,
                                    modalGridEmptyMessage, modalGridToggleFilterText, modalDefaultErrorMessage, null, null, null, Metadata.FormView.ContextName,
                                    Metadata.LanguageCode, null, modalSize, Metadata.LookupReferenceEntityFormId, EvaluateCreatePrivilege(portal.ServiceContext),
                                    ControlID == "entitlementid" ? BuildControllerActionUrl("GetDefaultEntitlements", "Entitlements", new { area = "CaseManagement", __portalScopeId__ = portal == null ? Guid.Empty : portal.Website.Id }) : null));
        }
Esempio n. 11
0
 public IPortalContext CreatePortalContext()
 {
     return(PortalCrmConfigurationManager.CreatePortalContext(PortalName, RequestContext));
 }
        protected virtual void ProcessCustomer()
        {
            var portalContext    = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
            var context          = PortalCrmConfigurationManager.CreateServiceContext(PortalName);
            var dataAdapter      = new UserCasesDataAdapter(new PortalContextDataAdapterDependencies(portalContext, PortalName, HttpContext.Current.Request.RequestContext));
            var permissionScopes = dataAdapter.SelectPermissionScopes();
            var canCreate        = permissionScopes.Self.Create || permissionScopes.Accounts.Any(permissions => permissions.Create);

            if (!canCreate)
            {
                RenderPermissionDenied();
                return;
            }
            var accounts = permissionScopes.Accounts.Where(permissions => permissions.Create).ToList();

            NumberOfAccounts = accounts.Count();
            if (NumberOfAccounts > 1 || (permissionScopes.Self.Create && NumberOfAccounts == 1))
            {
                EnableReselectCustomerButton = true;
                var snippetHelpDeskEntitlementSelectCustomer = new Literal {
                    ID = "SelectCustomer", Text = DefaultSnippetHelpDeskEntitlementSelectCustomer
                };
                var snippet = context.CreateQuery("adx_contentsnippet").FirstOrDefault(c => c.GetAttributeValue <string>("adx_name") == "Help Desk Entitlement Select Customer");
                if (snippet != null)
                {
                    snippetHelpDeskEntitlementSelectCustomer.Text = !string.IsNullOrWhiteSpace(snippet.GetAttributeValue <string>("adx_value")) ? snippet.GetAttributeValue <string>("adx_value") : DefaultSnippetHelpDeskEntitlementSelectCustomer;
                }
                var panelHelpDeskEntitlementSelectCustomer = new Panel {
                    ID = "EntitlementSelectCustomerPanel"
                };
                panelHelpDeskEntitlementSelectCustomer.Controls.Add(snippetHelpDeskEntitlementSelectCustomer);
                var customerDropdown = new DropDownList
                {
                    ID              = "CustomerDropDown",
                    CssClass        = "form-control",
                    AutoPostBack    = true,
                    ValidationGroup = ValidationGroup
                };
                customerDropdown.Items.Add(new ListItem(string.Empty));
                if (permissionScopes.Self.Create && portalContext.User != null)
                {
                    ContactID = portalContext.User.Id;
                    customerDropdown.Items.Add(new ListItem(portalContext.User.Attributes.ContainsKey("fullname") ? portalContext.User.Attributes["fullname"].ToString() : DefaultCustomerDropdownSelfText, portalContext.User.Id.ToString()));
                }
                foreach (var accountPermissions in permissionScopes.Accounts.Where(permissions => permissions.Create).OrderBy(o => o.Account.Name))
                {
                    customerDropdown.Items.Add(new ListItem(accountPermissions.Account.Name, accountPermissions.Account.Id.ToString()));
                }
                customerDropdown.SelectedIndexChanged += CustomerDropDownList_SelectedIndexChanged;
                var requiredValidator = new RequiredFieldValidator
                {
                    ID = "CustomerDropDownRequiredFieldValidator",
                    ControlToValidate = customerDropdown.ID,
                    Display           = ValidatorDisplay.Static,
                    ErrorMessage      = ResourceManager.GetString("Select_Customer_Error_Message"),
                    ValidationGroup   = ValidationGroup,
                    InitialValue      = string.Empty,
                    CssClass          = "help-block error",
                };
                panelHelpDeskEntitlementSelectCustomer.Controls.Add(customerDropdown);
                panelHelpDeskEntitlementSelectCustomer.Controls.Add(requiredValidator);
                Controls.Add(panelHelpDeskEntitlementSelectCustomer);
            }
            else
            {
                if (NumberOfAccounts == 1)
                {
                    var account = accounts.Single();
                    Customer = new EntityReference("account", account.Account.Id);
                    ProcessSupportPlansForAccount();
                }
                else if (permissionScopes.Self.Create && portalContext.User != null)
                {
                    ContactID = portalContext.User.Id;
                    Customer  = new EntityReference("contact", portalContext.User.Id);
                    ProcessSupportPlansForContact();
                }
                else
                {
                    RenderGeneralError();
                }
            }
        }
        public static Entity GetPageBySiteMarkerName(this OrganizationServiceContext context, Entity website, string siteMarkerName)
        {
            website.AssertEntityName("adx_website");

            var siteMarkers = new SiteMarkerDataAdapter(new WebsiteDataAdapterDependencies(context, website, PortalCrmConfigurationManager.CreatePortalContext()));

            var siteMarkerTarget = siteMarkers.Select(siteMarkerName);

            return(siteMarkerTarget == null ? null : siteMarkerTarget.Entity);
        }
        protected override void CreateChildControls()
        {
            Controls.Clear();

            var portalContext  = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
            var serviceContext = PortalCrmConfigurationManager.CreateServiceContext(PortalName);

            Entity entitylist;
            bool   updateEntityListReference;

            if (!TryGetEntityList(portalContext, serviceContext, out entitylist, out updateEntityListReference))
            {
                Visible = false;

                return;
            }

            if (updateEntityListReference)
            {
                EntityListReference = entitylist.ToEntityReference();
            }

            if (LanguageCode <= 0)
            {
                LanguageCode = this.Context.GetPortalSolutionsDetails().OrganizationBaseLanguageCode;
            }

            RegisterClientSideDependencies(this);

            var registerStartupScript = entitylist.GetAttributeValue <string>("adx_registerstartupscript");

            if (!string.IsNullOrWhiteSpace(registerStartupScript))
            {
                var html = Mvc.Html.EntityExtensions.GetHtmlHelper(PortalName, Page.Request.RequestContext, Page.Response);

                var control = new HtmlGenericControl()
                {
                };

                var script = html.ScriptAttribute(serviceContext, entitylist, "adx_registerstartupscript");

                control.InnerHtml = script.ToString();

                Controls.Add(control);
            }

            var entityName       = entitylist.GetAttributeValue <string>("adx_entityname");
            var primaryKeyName   = entitylist.GetAttributeValue <string>("adx_primarykeyname");
            var view             = entitylist.GetAttributeValue <string>("adx_view"); // old comma delimited list of views
            var viewMetadataJson = entitylist.GetAttributeValue <string>("adx_views");

            EnableEntityPermissions = entitylist.GetAttributeValue <bool?>("adx_entitypermissionsenabled").GetValueOrDefault(false);

            if (string.IsNullOrWhiteSpace(entityName))
            {
                throw new ApplicationException("Entity Name (adx_entityname) attribute on Entity List (adx_entitylist) is null or empty. Please specify the logical name of the entity.");
            }

            if (!string.IsNullOrWhiteSpace(entityName) && string.IsNullOrWhiteSpace(primaryKeyName))
            {
                primaryKeyName = MetadataHelper.GetEntityPrimaryKeyAttributeLogicalName(serviceContext, entityName);
            }

            if (string.IsNullOrWhiteSpace(primaryKeyName))
            {
                throw new ApplicationException(string.Format("The entity primary key logical name couldn't be determined.", entityName));
            }

            if (string.IsNullOrWhiteSpace(view) && string.IsNullOrWhiteSpace(viewMetadataJson))
            {
                throw new ApplicationException("View selection on Entity List (adx_entitylist) is null or empty. Specify the savedquery views.");
            }

            var          gridMetadataJson = entitylist.GetAttributeValue <string>("adx_settings");
            GridMetadata gridMetadata     = null;

            if (!string.IsNullOrWhiteSpace(gridMetadataJson))
            {
                try
                {
                    gridMetadata = JsonConvert.DeserializeObject <GridMetadata>(gridMetadataJson,
                                                                                new JsonSerializerSettings
                    {
                        ContractResolver = JsonConfigurationContractResolver.Instance,
                        TypeNameHandling = TypeNameHandling.Objects,
                        Converters       = new List <JsonConverter> {
                            new GuidConverter()
                        },
                        Binder = new ActionSerializationBinder()
                    });
                }
                catch (Exception e)
                {
                    ADXTrace.Instance.TraceError(TraceCategory.Application, e.ToString());
                }
            }

            var viewConfigurations = new List <ViewConfiguration>();

            if (string.IsNullOrWhiteSpace(viewMetadataJson))
            {
                if (string.IsNullOrWhiteSpace(view))
                {
                    return;
                }
                var viewids   = view.Split(',');
                var viewGuids = viewids.Length < 1 ? null : Array.ConvertAll(viewids, Guid.Parse);

                if (viewGuids == null || !viewGuids.Any())
                {
                    throw new ApplicationException(
                              ResourceManager.GetString("ADX_View_Attribute_On_Entity_List_Contains_Invalid_Data_Exception"));
                }

                viewConfigurations =
                    viewGuids.Select(
                        viewGuid =>
                        new ViewConfiguration(portalContext, serviceContext, entitylist, entityName, primaryKeyName, viewGuid,
                                              gridMetadata, PortalName, LanguageCode, EnableEntityPermissions, PageQueryStringField, FilterQueryStringField,
                                              SearchQueryStringField, SortQueryStringField, FilterByUserOptionLabel, ActionLinksColumnWidth,
                                              MetadataFilterQueryStringField, DefaultDetailsButtonLabel, ActionLinkDetailsViewTooltipLabel,
                                              DefaultCreateButtonLabel, ActionLinkInsertTooltipLabel, DefaultEmptyListText)).ToList();
            }
            else
            {
                ViewMetadata viewMetadata = null;
                try
                {
                    viewMetadata = JsonConvert.DeserializeObject <ViewMetadata>(viewMetadataJson,
                                                                                new JsonSerializerSettings {
                        ContractResolver = JsonConfigurationContractResolver.Instance, TypeNameHandling = TypeNameHandling.Objects, Binder = new ActionSerializationBinder(), Converters = new List <JsonConverter> {
                            new GuidConverter()
                        }
                    });
                }
                catch (Exception e)
                {
                    ADXTrace.Instance.TraceError(TraceCategory.Application, e.ToString());
                }

                if (viewMetadata != null && viewMetadata.Views != null && viewMetadata.Views.Any())
                {
                    foreach (var viewMeta in viewMetadata.Views)
                    {
                        var viewConfiguration = new ViewConfiguration(portalContext, serviceContext, entitylist, entityName,
                                                                      primaryKeyName, viewMeta.ViewId,
                                                                      gridMetadata, PortalName, LanguageCode, EnableEntityPermissions, PageQueryStringField, FilterQueryStringField,
                                                                      SearchQueryStringField, SortQueryStringField, FilterByUserOptionLabel, ActionLinksColumnWidth,
                                                                      MetadataFilterQueryStringField, DefaultDetailsButtonLabel, ActionLinkDetailsViewTooltipLabel,
                                                                      DefaultCreateButtonLabel, ActionLinkInsertTooltipLabel, DefaultEmptyListText);
                        if (viewMeta.DisplayName != null)
                        {
                            var displayName = Localization.GetLocalizedString(viewMeta.DisplayName, LanguageCode);
                            if (!string.IsNullOrWhiteSpace(displayName))
                            {
                                viewConfiguration.ViewDisplayName = displayName;
                            }
                        }
                        viewConfigurations.Add(viewConfiguration);
                    }
                }
            }

            var crmEntityListView = new CrmEntityListView
            {
                EnableEntityPermissions = EnableEntityPermissions,
                EntityListReference     = EntityListReference,
                ViewConfigurations      = viewConfigurations,
                ListCssClass            = ListCssClass,
                PortalName   = PortalName,
                LanguageCode = LanguageCode,
                ViewQueryStringParameterName = ViewQueryStringField,
                IsGallery = IsGallery
            };

            if (gridMetadata != null)
            {
                if (gridMetadata.ErrorDialog != null)
                {
                    crmEntityListView.ErrorModal = new ViewErrorModal
                    {
                        CloseButtonCssClass = gridMetadata.ErrorDialog.CloseButtonCssClass,
                        CloseButtonText     = gridMetadata.ErrorDialog.CloseButtonText.GetLocalizedString(LanguageCode),
                        CssClass            = gridMetadata.ErrorDialog.CssClass,
                        DismissButtonSrText = gridMetadata.ErrorDialog.DismissButtonSrText.GetLocalizedString(LanguageCode),
                        Body          = gridMetadata.ErrorDialog.Body.GetLocalizedString(LanguageCode),
                        Size          = gridMetadata.ErrorDialog.Size,
                        Title         = gridMetadata.ErrorDialog.Title.GetLocalizedString(LanguageCode),
                        TitleCssClass = gridMetadata.ErrorDialog.TitleCssClass
                    };
                }
            }

            Controls.Add(crmEntityListView);
        }
Esempio n. 15
0
        public ActionResult Delete(EntityReference entityReference)
        {
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies  = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var serviceContext           = dataAdapterDependencies.GetServiceContext();
            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Entity Permissions have not been defined. Your request could not be completed."));
            }

            var entityMetadata = serviceContext.GetEntityMetadata(entityReference.LogicalName, EntityFilters.All);
            var primaryKeyName = entityMetadata.PrimaryIdAttribute;
            var entity         =
                serviceContext.CreateQuery(entityReference.LogicalName)
                .First(e => e.GetAttributeValue <Guid>(primaryKeyName) == entityReference.Id);
            var test = entityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Delete, entity);

            if (test)
            {
                try
                {
                    serviceContext.DeleteObject(entity);
                    serviceContext.SaveChanges();

                    SalesHub hub = new SalesHub();
                    string   url = Request.Url.OriginalString;
                }

                catch (Exception ex)
                {
                    if (ex.InnerException.Message.Contains("The object you tried to delete is associated with another object and cannot be deleted."))
                    {
                        throw new InvalidOperationException("Record cannot be deleted. It is already used in transactions.");
                    }
                    else
                    {
                        throw new InvalidOperationException(ex.InnerException.Message.ToString());
                    }
                }
                //string userId = Portal.User.Id.ToString();
                //string fullName = Portal.User.Attributes["fullname"].ToString();
                //hub.UserHasSaved(url, userId, fullName);
            }
            else
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Permission Denied. You do not have the appropriate Entity Permissions to delete this record."));
            }


            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
        private string BuildSharePointGrid(object id)
        {
            if (id == null)
            {
                return(string.Empty);
            }

            Guid entityId;

            if (!Guid.TryParse(id.ToString(), out entityId))
            {
                return(string.Empty);
            }

            var    portalContext                           = PortalCrmConfigurationManager.CreatePortalContext(Metadata.FormView.ContextName);
            var    target                                  = new EntityReference(Metadata.TargetEntityName, entityId);
            var    html                                    = new HtmlHelper(new ViewContext(), new ViewPage());
            var    settings                                = Metadata.SharePointSettings;
            var    createEnabled                           = Metadata.FormView.Mode != FormViewMode.ReadOnly; // Change to false when settings are available.
            var    deleteEnabled                           = Metadata.FormView.Mode != FormViewMode.ReadOnly; // Change to false when settings are available.
            string addFilesButtonLabel                     = null;
            string addFolderButtonLabel                    = null;
            string toolbarButtonLabel                      = null;
            string deleteButtonLabel                       = null;
            string gridTitle                               = null;
            string fileNameColumnLabel                     = null;
            string modifiedColumnLabel                     = null;
            string parentFolderPrefix                      = null;
            string accessDeniedMessage                     = null;
            string errorMessage                            = null;
            string loadingMessage                          = null;
            string emptyMessage                            = null;
            string addFilesModalCssClass                   = null;
            string addFilesModalTitle                      = null;
            string addFilesModalTitleCssClass              = null;
            var    addFilesModalSize                       = BootstrapExtensions.BootstrapModalSize.Default;
            string addFilesModalPrimaryButtonText          = null;
            string addFilesModalDismissButtonSrText        = null;
            string addFilesModalCloseButtonText            = null;
            string addFilesModalPrimaryButtonCssClass      = null;
            string addFilesModalCloseButtonCssClass        = null;
            string addFilesModalAttachFileLabel            = null;
            string addFilesModalAttachFileAccept           = null;
            var    addFilesModalDisplayOverwriteField      = true;
            string addFilesModalOverwriteFieldLabel        = null;
            var    addFilesModalOverwriteFieldDefaultValue = true;
            string addFilesModalDestinationFolderLabel     = null;
            string addFilesModalLeftColumnCssClass         = null;
            string addFilesModalRightColumnCssClass        = null;
            string addFolderModalCssClass                  = null;
            string addFolderModalTitle                     = null;
            string addFolderModalTitleCssClass             = null;
            var    addFolderModalSize                      = BootstrapExtensions.BootstrapModalSize.Default;
            string addFolderModalPrimaryButtonText         = null;
            string addFolderModalDismissButtonSrText       = null;
            string addFolderModalCloseButtonText           = null;
            string addFolderModalPrimaryButtonCssClass     = null;
            string addFolderModalCloseButtonCssClass       = null;
            string addFolderModalNameLabel                 = null;
            string addFolderModalDestinationFolderLabel    = null;
            string addFolderModalLeftColumnCssClass        = null;
            string addFolderModalRightColumnCssClass       = null;
            var    deleteFileModalSize                     = BootstrapExtensions.BootstrapModalSize.Default;
            string deleteFileModalCssClass                 = null;
            string deleteFileModalTitle                    = null;
            string deleteFileModalTitleCssClass            = null;
            string deleteFileModalConfirmation             = null;
            string deleteFileModalPrimaryButtonText        = null;
            string deleteFileModalDismissButtonSrText      = null;
            string deleteFileModalCloseButtonText          = null;
            string deleteFileModalPrimaryButtonCssClass    = null;
            string deleteFileModalCloseButtonCssClass      = null;
            var    deleteFolderModalSize                   = BootstrapExtensions.BootstrapModalSize.Default;
            string deleteFolderModalCssClass               = null;
            string deleteFolderModalTitle                  = null;
            string deleteFolderModalTitleCssClass          = null;
            string deleteFolderModalConfirmation           = null;
            string deleteFolderModalPrimaryButtonText      = null;
            string deleteFolderModalDismissButtonSrText    = null;
            string deleteFolderModalCloseButtonText        = null;
            string deleteFolderModalPrimaryButtonCssClass  = null;
            string deleteFolderModalCloseButtonCssClass    = null;

            if (settings != null)
            {
                accessDeniedMessage = Localization.GetLocalizedString(settings.AccessDeniedMessage, Metadata.LanguageCode);
                errorMessage        = Localization.GetLocalizedString(settings.ErrorMessage, Metadata.LanguageCode);
                loadingMessage      = Localization.GetLocalizedString(settings.LoadingMessage, Metadata.LanguageCode);
                emptyMessage        = Localization.GetLocalizedString(settings.EmptyMessage, Metadata.LanguageCode);
                addFilesButtonLabel = Localization.GetLocalizedString(settings.AddFileButtonLabel, Metadata.LanguageCode);
                deleteButtonLabel   = Localization.GetLocalizedString(settings.DeleteFileButtonLabel, Metadata.LanguageCode);
                gridTitle           = Localization.GetLocalizedString(settings.GridTitle, Metadata.LanguageCode);
                fileNameColumnLabel = Localization.GetLocalizedString(settings.FileNameColumnLabel, Metadata.LanguageCode);
                modifiedColumnLabel = Localization.GetLocalizedString(settings.ModifiedColumnLabel, Metadata.LanguageCode);
                parentFolderPrefix  = Localization.GetLocalizedString(settings.ParentFolderPrefix, Metadata.LanguageCode);
                createEnabled       = settings.CreateEnabled.GetValueOrDefault(false);
                deleteEnabled       = settings.DeleteEnabled.GetValueOrDefault(false);
                var addFilesModal = settings.AddFilesDialog;
                addFilesModalCssClass = addFilesModal == null ? null : addFilesModal.CssClass;
                if (addFilesModal != null && addFilesModal.Size != null)
                {
                    addFilesModalSize = addFilesModal.Size.GetValueOrDefault(BootstrapExtensions.BootstrapModalSize.Default);
                }
                addFilesModalTitle                      = addFilesModal == null ? null : Localization.GetLocalizedString(addFilesModal.Title, Metadata.LanguageCode);
                addFilesModalTitleCssClass              = addFilesModal == null ? null : addFilesModal.TitleCssClass;
                addFilesModalPrimaryButtonText          = addFilesModal == null ? null : Localization.GetLocalizedString(addFilesModal.PrimaryButtonText, Metadata.LanguageCode);
                addFilesModalDismissButtonSrText        = addFilesModal == null ? null : Localization.GetLocalizedString(addFilesModal.DismissButtonSrText, Metadata.LanguageCode);
                addFilesModalCloseButtonText            = addFilesModal == null ? null : Localization.GetLocalizedString(addFilesModal.CloseButtonText, Metadata.LanguageCode);
                addFilesModalPrimaryButtonCssClass      = addFilesModal == null ? null : addFilesModal.PrimaryButtonCssClass;
                addFilesModalCloseButtonCssClass        = addFilesModal == null ? null : addFilesModal.CloseButtonCssClass;
                addFilesModalAttachFileLabel            = addFilesModal == null ? null : Localization.GetLocalizedString(addFilesModal.AttachFileLabel, Metadata.LanguageCode);
                addFilesModalAttachFileAccept           = addFilesModal == null ? null : Localization.GetLocalizedString(addFilesModal.AttachFileAccept, Metadata.LanguageCode);
                addFilesModalDisplayOverwriteField      = addFilesModal != null && addFilesModal.DisplayOverwriteField.GetValueOrDefault(true);
                addFilesModalOverwriteFieldLabel        = addFilesModal == null ? null : Localization.GetLocalizedString(addFilesModal.OverwriteFieldLabel, Metadata.LanguageCode);
                addFilesModalOverwriteFieldDefaultValue = addFilesModal != null && addFilesModal.OverwriteFieldDefaultValue.GetValueOrDefault(true);
                addFilesModalDestinationFolderLabel     = addFilesModal == null ? null : Localization.GetLocalizedString(addFilesModal.DestinationFolderLabel, Metadata.LanguageCode);
                addFilesModalLeftColumnCssClass         = addFilesModal == null ? null : addFilesModal.LeftColumnCSSClass;
                addFilesModalRightColumnCssClass        = addFilesModal == null ? null : addFilesModal.RightColumnCSSClass;
                var addFolderModal = settings.AddFolderDialog;
                addFolderModalCssClass = addFolderModal == null ? null : addFolderModal.CssClass;
                if (addFolderModal != null && addFolderModal.Size != null)
                {
                    addFolderModalSize = addFolderModal.Size.GetValueOrDefault(BootstrapExtensions.BootstrapModalSize.Default);
                }
                addFolderModalTitle                  = addFolderModal == null ? null : Localization.GetLocalizedString(addFolderModal.Title, Metadata.LanguageCode);
                addFolderModalTitleCssClass          = addFolderModal == null ? null : addFolderModal.TitleCssClass;
                addFolderModalPrimaryButtonText      = addFolderModal == null ? null : Localization.GetLocalizedString(addFolderModal.PrimaryButtonText, Metadata.LanguageCode);
                addFolderModalDismissButtonSrText    = addFolderModal == null ? null : Localization.GetLocalizedString(addFolderModal.DismissButtonSrText, Metadata.LanguageCode);
                addFolderModalCloseButtonText        = addFolderModal == null ? null : Localization.GetLocalizedString(addFolderModal.CloseButtonText, Metadata.LanguageCode);
                addFolderModalPrimaryButtonCssClass  = addFolderModal == null ? null : addFolderModal.PrimaryButtonCssClass;
                addFolderModalCloseButtonCssClass    = addFolderModal == null ? null : addFolderModal.CloseButtonCssClass;
                addFolderModalNameLabel              = addFolderModal == null ? null : Localization.GetLocalizedString(addFolderModal.NameLabel, Metadata.LanguageCode);
                addFolderModalDestinationFolderLabel = addFolderModal == null ? null : Localization.GetLocalizedString(addFolderModal.DestinationFolderLabel, Metadata.LanguageCode);
                addFolderModalLeftColumnCssClass     = addFolderModal == null ? null : addFolderModal.LeftColumnCSSClass;
                addFolderModalRightColumnCssClass    = addFolderModal == null ? null : addFolderModal.RightColumnCSSClass;
                var deleteFileModal = settings.DeleteFileDialog;
                if (deleteFileModal != null && deleteFileModal.Size != null)
                {
                    deleteFileModalSize = deleteFileModal.Size.GetValueOrDefault(BootstrapExtensions.BootstrapModalSize.Default);
                }
                deleteFileModalCssClass              = deleteFileModal == null ? null : deleteFileModal.CssClass;
                deleteFileModalTitle                 = deleteFileModal == null ? null : Localization.GetLocalizedString(deleteFileModal.Title, Metadata.LanguageCode);
                deleteFileModalTitleCssClass         = deleteFileModal == null ? null : deleteFileModal.TitleCssClass;
                deleteFileModalConfirmation          = deleteFileModal == null ? null : Localization.GetLocalizedString(deleteFileModal.Confirmation, Metadata.LanguageCode);
                deleteFileModalPrimaryButtonText     = deleteFileModal == null ? null : Localization.GetLocalizedString(deleteFileModal.PrimaryButtonText, Metadata.LanguageCode);
                deleteFileModalDismissButtonSrText   = deleteFileModal == null ? null : Localization.GetLocalizedString(deleteFileModal.DismissButtonSrText, Metadata.LanguageCode);
                deleteFileModalCloseButtonText       = deleteFileModal == null ? null : Localization.GetLocalizedString(deleteFileModal.CloseButtonText, Metadata.LanguageCode);
                deleteFileModalPrimaryButtonCssClass = deleteFileModal == null ? null : deleteFileModal.PrimaryButtonCssClass;
                deleteFileModalCloseButtonCssClass   = deleteFileModal == null ? null : deleteFileModal.CloseButtonCssClass;
                var deleteFolderModal = settings.DeleteFolderDialog;
                if (deleteFolderModal != null && deleteFolderModal.Size != null)
                {
                    deleteFolderModalSize = deleteFolderModal.Size.GetValueOrDefault(BootstrapExtensions.BootstrapModalSize.Default);
                }
                deleteFolderModalCssClass              = deleteFolderModal == null ? null : deleteFolderModal.CssClass;
                deleteFolderModalTitle                 = deleteFolderModal == null ? null : Localization.GetLocalizedString(deleteFolderModal.Title, Metadata.LanguageCode);
                deleteFolderModalTitleCssClass         = deleteFolderModal == null ? null : deleteFolderModal.TitleCssClass;
                deleteFolderModalConfirmation          = deleteFolderModal == null ? null : Localization.GetLocalizedString(deleteFolderModal.Confirmation, Metadata.LanguageCode);
                deleteFolderModalPrimaryButtonText     = deleteFolderModal == null ? null : Localization.GetLocalizedString(deleteFolderModal.PrimaryButtonText, Metadata.LanguageCode);
                deleteFolderModalDismissButtonSrText   = deleteFolderModal == null ? null : Localization.GetLocalizedString(deleteFolderModal.DismissButtonSrText, Metadata.LanguageCode);
                deleteFolderModalCloseButtonText       = deleteFolderModal == null ? null : Localization.GetLocalizedString(deleteFolderModal.CloseButtonText, Metadata.LanguageCode);
                deleteFolderModalPrimaryButtonCssClass = deleteFolderModal == null ? null : deleteFolderModal.PrimaryButtonCssClass;
                deleteFolderModalCloseButtonCssClass   = deleteFolderModal == null ? null : deleteFolderModal.CloseButtonCssClass;
            }

            var regarding = portalContext.ServiceContext.CreateQuery(Metadata.TargetEntityName).First(e => e.GetAttributeValue <Guid>(Metadata.TargetEntityPrimaryKeyName) == entityId);

            var result = new SharePointResult(regarding.ToEntityReference(), new CrmEntityPermissionProvider(), portalContext.ServiceContext);

            if (createEnabled)
            {
                createEnabled = result.PermissionsExist &&
                                result.CanCreate &&
                                result.CanAppend &&
                                result.CanAppendTo &&
                                result.CanWrite;
            }

            if (deleteEnabled)
            {
                deleteEnabled = result.PermissionsExist &&
                                result.CanDelete;
            }

            var sharePointGridHtml = html.SharePointGrid(target,
                                                         BuildControllerActionUrl("GetSharePointData", "SharePointGrid", new { area = "Portal", __portalScopeId__ = portalContext.Website.Id }),
                                                         createEnabled, deleteEnabled,
                                                         BuildControllerActionUrl("AddSharePointFiles", "SharePointGrid", new { area = "Portal", __portalScopeId__ = portalContext.Website.Id }),
                                                         BuildControllerActionUrl("AddSharePointFolder", "SharePointGrid", new { area = "Portal", __portalScopeId__ = portalContext.Website.Id }),
                                                         BuildControllerActionUrl("DeleteSharePointItem", "SharePointGrid", new { area = "Portal", __portalScopeId__ = portalContext.Website.Id }),
                                                         Metadata.SharePointGridPageSize ?? 0, gridTitle, fileNameColumnLabel, modifiedColumnLabel, parentFolderPrefix,
                                                         loadingMessage, errorMessage, accessDeniedMessage, emptyMessage,
                                                         addFilesButtonLabel, addFolderButtonLabel, toolbarButtonLabel, deleteButtonLabel, addFilesModalSize,
                                                         addFilesModalCssClass, addFilesModalTitle, addFilesModalDismissButtonSrText, addFilesModalPrimaryButtonText,
                                                         addFilesModalCloseButtonText, addFilesModalTitleCssClass, addFilesModalPrimaryButtonCssClass,
                                                         addFilesModalCloseButtonCssClass, addFilesModalAttachFileLabel, addFilesModalAttachFileAccept,
                                                         addFilesModalDisplayOverwriteField, addFilesModalOverwriteFieldLabel, addFilesModalOverwriteFieldDefaultValue,
                                                         addFilesModalDestinationFolderLabel, addFilesModalLeftColumnCssClass, addFilesModalRightColumnCssClass,
                                                         null, addFolderModalSize, addFolderModalCssClass, addFolderModalTitle, addFolderModalDismissButtonSrText,
                                                         addFolderModalPrimaryButtonText, addFolderModalCloseButtonText, addFolderModalTitleCssClass,
                                                         addFolderModalPrimaryButtonCssClass, addFolderModalCloseButtonCssClass, addFolderModalNameLabel,
                                                         addFolderModalDestinationFolderLabel, addFolderModalLeftColumnCssClass, addFolderModalRightColumnCssClass,
                                                         null, deleteFileModalSize, deleteFileModalCssClass, deleteFileModalTitle, deleteFileModalConfirmation,
                                                         deleteFileModalDismissButtonSrText, deleteFileModalPrimaryButtonText, deleteFileModalCloseButtonText,
                                                         deleteFileModalTitleCssClass, deleteFileModalPrimaryButtonCssClass, deleteFileModalCloseButtonCssClass, null,
                                                         deleteFolderModalSize, deleteFolderModalCssClass, deleteFolderModalTitle, deleteFolderModalConfirmation,
                                                         deleteFolderModalDismissButtonSrText, deleteFolderModalPrimaryButtonText, deleteFolderModalCloseButtonText,
                                                         deleteFolderModalTitleCssClass, deleteFolderModalPrimaryButtonCssClass, deleteFolderModalCloseButtonCssClass);

            return(sharePointGridHtml.ToString());
        }
        private void AddFileUpload(Control container)
        {
            var result = new SharePointResult(new EntityReference(Metadata.TargetEntityName, Guid.Empty), new CrmEntityPermissionProvider(), PortalCrmConfigurationManager.CreatePortalContext(Metadata.FormView.ContextName).ServiceContext);

            if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanWrite)
            {
                return;
            }

            FileUpload = new FileUpload
            {
                ID            = Metadata.ControlID,
                CssClass      = CssClass ?? string.Empty,
                AllowMultiple = true
            };
            container.Controls.Add(FileUpload);
        }
 public PaymentProcessingRequestHandlerFactory(RequestContext requestContext)
 {
     Portal = PortalCrmConfigurationManager.CreatePortalContext(PortalName, requestContext);
 }
Esempio n. 19
0
        protected static void Profile_MigrateAnonymous(object sender, ProfileMigrateEventArgs e)
        {
            // transfer the anonyous shopping cart items to the authenticated shopping cart

            var visitorId = e.AnonymousID;
            var portal    = PortalCrmConfigurationManager.CreatePortalContext();

            using (var context = PortalCrmConfigurationManager.CreateServiceContext())
            {
                if (!AdxstudioCrmConfigurationManager.TryAssertSolutionName(PortalSolutions.SolutionNames.CommerceSolutionName))
                {
                    ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Execution aborted. {0} has not been imported.", PortalSolutions.SolutionNames.CommerceSolutionName));
                    return;
                }

                var website = context.CreateQuery("adx_website").First(ws => ws.GetAttributeValue <Guid>("adx_websiteid") == portal.Website.Id);
                //var visitorBaseCart = context.GetCartsForVisitor(visitorId, website).FirstOrDefault() as Adx_shoppingcart;
                var visitorCart = context.GetCartsForVisitor(visitorId, website).FirstOrDefault();

                if (visitorCart != null)
                {
                    var contactCartBase = context.GetCartsForContact(portal.User, website).FirstOrDefault();

                    var contactCart = contactCartBase != null ? new ShoppingCart((contactCartBase), context) : null;

                    if (contactCart != null)
                    {
                        // merge the anonymous cart with the authenticated cart

                        foreach (var item in visitorCart.GetRelatedEntities(context, new Relationship("adx_shoppingcart_shoppingcartitem")))
                        {
                            if (item.GetAttributeValue <EntityReference>("adx_productid") == null)
                            {
                                continue;
                            }

                            contactCart.AddProductToCart(item.GetAttributeValue <EntityReference>("adx_productid").Id, PriceListName, (int)item.GetAttributeValue <decimal>("adx_quantity"));
                        }

                        if (!context.IsAttached(visitorCart))
                        {
                            context.Attach(visitorCart);
                        }

                        context.DeleteObject(visitorCart);
                    }
                    else
                    {
                        // transfer the cart directly

                        const string nameFormat = "Cart for {0}";

                        var contact = portal.User;

                        if (contact != null)
                        {
                            visitorCart.SetAttributeValue("adx_name", string.Format(nameFormat, contact.GetAttributeValue <string>("fullname")));
                        }

                        visitorCart.SetAttributeValue("adx_visitorid", string.Empty);
                        visitorCart.SetAttributeValue("adx_contactid", portal.User.ToEntityReference());

                        if (!context.IsAttached(visitorCart))
                        {
                            context.Attach(visitorCart);
                        }

                        context.UpdateObject(visitorCart);
                    }

                    if (!context.IsAttached(visitorCart))
                    {
                        context.Attach(visitorCart);
                    }

                    context.SaveChanges();
                }
            }

            AnonymousIdentificationModule.ClearAnonymousIdentifier();
        }
        public ActionResult AddNote(string regardingEntityLogicalName, string regardingEntityId, string text, bool isPrivate = false, HttpPostedFileBase file = null, string attachmentSettings = null)
        {
            if (string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(StringHelper.StripHtml(text)))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.ExpectationFailed, ResourceManager.GetString("Required_Field_Error").FormatWith(ResourceManager.GetString("Note_DefaultText"))));
            }

            Guid regardingId;

            Guid.TryParse(regardingEntityId, out regardingId);
            var    regarding           = new EntityReference(regardingEntityLogicalName, regardingId);
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var serviceContext          = dataAdapterDependencies.GetServiceContext();
            var user = Request.GetOwinContext().GetUser();

            var dataAdapter = new AnnotationDataAdapter(dataAdapterDependencies);
            var settings    = GetAnnotationSettings(serviceContext, attachmentSettings);

            var annotation = new Annotation
            {
                NoteText  = string.Format("{0}{1}", AnnotationHelper.WebAnnotationPrefix, text),
                Subject   = AnnotationHelper.BuildNoteSubject(serviceContext, user.ContactId, isPrivate),
                Regarding = regarding
            };

            if (file != null && file.ContentLength > 0)
            {
                annotation.FileAttachment = AnnotationDataAdapter.CreateFileAttachment(file, settings.StorageLocation);
            }

            var result = (AnnotationCreateResult)dataAdapter.CreateAnnotation(annotation, settings);

            if (!result.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
            }

            if (!result.CanCreate)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, string.Format(ResourceManager.GetString("No_Entity_Permissions"), "create notes")));
            }

            if (!result.CanAppendTo)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, string.Format(ResourceManager.GetString("No_Entity_Permissions"), "append to record")));
            }

            if (!result.CanAppend)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, string.Format(ResourceManager.GetString("No_Entity_Permissions"), "append notes")));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.Created));
        }
Esempio n. 21
0
        protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
            if (Value == null)
            {
                base.Render(writer);
                return;
            }

            DateTime dt;

            if (Value is DateTime)
            {
                dt = (DateTime)Value;
            }
            else if (Value is DateTime?)
            {
                dt = ((DateTime?)Value).Value;
            }
            else
            {
                dt = DateTime.Parse(Value.ToString());
            }

            if (dt.Kind == DateTimeKind.Utc)
            {
                // check if we are to use the default site timezone
                if (UseSiteTimeZone)
                {
                    var portal = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
                    var tz     = portal.GetTimeZone();
                    dt = TimeZoneInfo.ConvertTimeFromUtc(dt, tz);

                    // if no timezone label provided, use the display name of the current timezone
                    if (string.IsNullOrEmpty(TimeZoneLabel))
                    {
                        TimeZoneLabel = tz.DisplayName;
                    }
                }
                else if (!string.IsNullOrEmpty(TimeZone))                  // a specific timezone is given
                {
                    var tz = TimeZoneInfo.FindSystemTimeZoneById(TimeZone);
                    dt = TimeZoneInfo.ConvertTimeFromUtc(dt, tz);

                    // if no timezone label provided, use the display name of the current timezone
                    if (string.IsNullOrEmpty(TimeZoneLabel))
                    {
                        TimeZoneLabel = tz.DisplayName;
                    }
                }
            }

            // output the datetime in the correct format (default if not provided)
            Text = string.IsNullOrEmpty(Format) ? dt.ToString() : dt.ToString(Format);

            // append the time zone label if it is not disabled and if we have one
            if (!string.IsNullOrEmpty(TimeZoneLabel) && OutputTimeZoneLabel)
            {
                Text = "{0} {1}".FormatWith(Text, TimeZoneLabel);
            }

            base.Render(writer);
        }
        public ActionResult UpdateNote(string id, string text, string subject, bool isPrivate = false, HttpPostedFileBase file = null, string attachmentSettings = null)
        {
            if (string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(StringHelper.StripHtml(text)))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.ExpectationFailed, ResourceManager.GetString("Required_Field_Error").FormatWith(ResourceManager.GetString("Note_DefaultText"))));
            }
            Guid annotationId;

            Guid.TryParse(id, out annotationId);
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var dataAdapter             = new AnnotationDataAdapter(dataAdapterDependencies);
            var settings = GetAnnotationSettings(dataAdapterDependencies.GetServiceContext(), attachmentSettings);

            var annotation = dataAdapter.GetAnnotation(annotationId);

            annotation.AnnotationId = annotationId;

            annotation.NoteText = string.Format("{0}{1}", AnnotationHelper.WebAnnotationPrefix, text);

            if (!isPrivate && !string.IsNullOrWhiteSpace(subject) && subject.Contains(AnnotationHelper.PrivateAnnotationPrefix))
            {
                annotation.Subject = subject.Replace(AnnotationHelper.PrivateAnnotationPrefix, string.Empty);
            }

            if (isPrivate && !string.IsNullOrWhiteSpace(subject) && !subject.Contains(AnnotationHelper.PrivateAnnotationPrefix))
            {
                annotation.Subject = subject + AnnotationHelper.PrivateAnnotationPrefix;
            }

            if (file != null && file.ContentLength > 0)
            {
                annotation.FileAttachment = AnnotationDataAdapter.CreateFileAttachment(file, settings.StorageLocation);
            }

            try
            {
                var result = dataAdapter.UpdateAnnotation(annotation, settings);

                if (!result.PermissionsExist)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.Forbidden,
                                                    ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
                }

                if (!result.PermissionGranted)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, string.Format(ResourceManager.GetString("No_Entity_Permissions"), "update notes")));
                }

                return(new HttpStatusCodeResult(HttpStatusCode.OK));
            }
            catch (AnnotationException ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ex.Message));
            }
        }
        public static string GetSiteSettingValueByName(this OrganizationServiceContext context, Entity website, string siteSettingName)
        {
            website.AssertEntityName("adx_website");

            var portalViewContext = new PortalViewContext(new WebsiteDataAdapterDependencies(context, website, PortalCrmConfigurationManager.CreatePortalContext()), SiteMap.Provider);

            return(portalViewContext.Settings.GetValue(siteSettingName));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ContentAccessProvider"/> class.
 /// </summary>
 /// <param name="configuration">Configuration for FetchXML attributes</param>
 /// <param name="portalName">Specifies portal name to generate portal context</param>
 protected ContentAccessProvider(ContentAccessConfiguration configuration, string portalName = null) : this(configuration, PortalCrmConfigurationManager.CreatePortalContext(portalName))
 {
 }
Esempio n. 25
0
        public static string GetCrmEntitySetDataServiceUri(this Type crmDataContextType, string crmEntityName, string serviceBaseUri)
        {
            var portal = PortalCrmConfigurationManager.CreatePortalContext();

            return(GetCrmEntitySetDataServiceUri(crmDataContextType, crmEntityName, serviceBaseUri, "adx_websiteid", portal.Website.Id));
        }
Esempio n. 26
0
 public IPortalContext GetPortalContext()
 {
     return(PortalCrmConfigurationManager.CreatePortalContext(_portalName, _requestContext));
 }
Esempio n. 27
0
        protected override void OnPreRender(EventArgs e)
        {
            if (WebLink != null)
            {
                WebLink.AssertEntityName("adx_weblink");

                var portal  = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
                var context = portal.ServiceContext;

                var weblinkUrl = context.GetUrl(context.MergeClone(WebLink));

                NavigateUrl = weblinkUrl;

                if (weblinkUrl != null && string.IsNullOrEmpty(WebLink.GetAttributeValue <string>("adx_externalurl")))
                {
                    var cssClasses = new List <string>();

                    if (!string.IsNullOrEmpty(CurrentSiteMapNodeCssClass) && IsCurrentNode(weblinkUrl))
                    {
                        cssClasses.Add(CurrentSiteMapNodeCssClass);
                    }

                    if (!string.IsNullOrEmpty(ParentOfCurrentSiteMapNodeCssClass) && IsParentOfCurrentNode(weblinkUrl))
                    {
                        cssClasses.Add(ParentOfCurrentSiteMapNodeCssClass);
                    }

                    if (cssClasses.Any())
                    {
                        CssClass = "{0} {1}".FormatWith(CssClass, string.Join(" ", cssClasses.ToArray()));
                    }
                }

                if (string.IsNullOrEmpty(Target) && WebLink.GetAttributeValue <bool?>("adx_openinnewwindow").GetValueOrDefault(false))
                {
                    Target = "_blank";
                }

                if (!WebLink.GetAttributeValue <bool?>("adx_robotsfollowlink").GetValueOrDefault(true))
                {
                    Attributes["rel"] = "nofollow";
                }

                var contentFormatter = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityContentFormatter>(GetType().FullName) ?? new PassthroughCrmEntityContentFormatter();

                var name = contentFormatter.Format(WebLink.GetAttributeValue <string>("adx_name"), WebLink, this);

                if (string.IsNullOrEmpty(ToolTip))
                {
                    ToolTip = name;
                }

                var imageUrl = WebLink.GetAttributeValue <string>("adx_imageurl");

                if (ShowImage && !string.IsNullOrEmpty(imageUrl))
                {
                    var image = new Image
                    {
                        ImageUrl      = imageUrl.StartsWith("~/") ? VirtualPathUtility.ToAppRelative(imageUrl) : imageUrl,
                        AlternateText = contentFormatter.Format(WebLink.GetAttributeValue <string>("adx_imagealttext"), WebLink, this)
                    };

                    var weblinkImageHeight = WebLink.GetAttributeValue <int?>("adx_imageheight");

                    if (weblinkImageHeight.HasValue)
                    {
                        image.Height = weblinkImageHeight.Value;
                    }

                    var weblinkImageWidth = WebLink.GetAttributeValue <int?>("adx_imagewidth");

                    if (weblinkImageWidth.HasValue)
                    {
                        image.Width = weblinkImageWidth.Value;
                    }

                    Controls.Add(image);
                }
                else if (string.IsNullOrEmpty(Text))
                {
                    Text = name;
                }
            }

            base.OnPreRender(e);
        }
Esempio n. 28
0
        /// <summary>
        /// Initialize the Session History
        /// </summary>
        /// <param name="context">Context used to retrieve session history</param>
        /// <param name="webFormId">ID of the web form</param>
        /// <param name="stepId">ID of the current step</param>
        /// <param name="stepIndex">Index of the current step</param>
        /// <param name="recordId">ID of the target record</param>
        /// <param name="recordEntityLogicalName">Logical name of the target record entity</param>
        /// <param name="recordEntityPrimaryKeyLogicalName">Logical name of the primary key of the target record entity</param>
        /// <returns>Session History</returns>
        public SessionHistory InitializeSessionHistory(OrganizationServiceContext context, Guid webFormId, Guid stepId, int stepIndex, Guid recordId, string recordEntityLogicalName, string recordEntityPrimaryKeyLogicalName)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (webFormId == Guid.Empty)
            {
                throw new ArgumentNullException("webFormId");
            }

            if (stepId == Guid.Empty)
            {
                throw new ArgumentNullException("stepId");
            }

            if (string.IsNullOrWhiteSpace(recordEntityLogicalName))
            {
                throw new ArgumentNullException("recordEntityLogicalName");
            }

            if (string.IsNullOrWhiteSpace(recordEntityPrimaryKeyLogicalName))
            {
                throw new ArgumentNullException("recordEntityPrimaryKeyLogicalName");
            }

            var contactId               = Guid.Empty;
            var systemUserId            = Guid.Empty;
            var anonymousIdentification = string.Empty;
            var userIdentityName        = string.Empty;
            var userHostName            = string.Empty;

            if (HttpContext.Current.Request.IsAuthenticated)
            {
                var portalContext = PortalCrmConfigurationManager.CreatePortalContext();
                if (portalContext.User == null)
                {
                    throw new ApplicationException("Couldn't load user record. Portal context User is null.");
                }
                switch (portalContext.User.LogicalName)
                {
                case "contact":
                    contactId = portalContext.User.Id;
                    break;

                case "systemuser":
                    systemUserId = portalContext.User.Id;
                    break;

                default:
                    if (HttpContext.Current.User == null || string.IsNullOrWhiteSpace(HttpContext.Current.User.Identity.Name))
                    {
                        throw new ApplicationException(string.Format("The user entity type {0} isn't supported.", portalContext.User.LogicalName));
                    }
                    break;
                }
            }
            else
            {
                if (HttpContext.Current.Profile != null && !string.IsNullOrWhiteSpace(HttpContext.Current.Profile.UserName))
                {
                    anonymousIdentification = HttpContext.Current.Profile.UserName;
                }
            }

            if (HttpContext.Current.User != null && !string.IsNullOrWhiteSpace(HttpContext.Current.User.Identity.Name))
            {
                userIdentityName = HttpContext.Current.User.Identity.Name;
            }

            if (!string.IsNullOrWhiteSpace(HttpContext.Current.Request.UserHostName))
            {
                userHostName = HttpContext.Current.Request.UserHostName;
            }

            return(InitializeSessionHistory(webFormId, stepId, stepIndex, recordId, recordEntityLogicalName, recordEntityPrimaryKeyLogicalName, contactId, systemUserId, anonymousIdentification, userIdentityName, userHostName));
        }
Esempio n. 29
0
        public ActionResult Search(double longitude, double latitude, int distance, string units, Guid id)
        {
            var originLatitude  = latitude;
            var originLongitude = longitude;
            var radius          = distance <= 0 ? 5 : distance;

            var uom = string.IsNullOrWhiteSpace(units)
                                                ? GeoHelpers.Units.Miles
                                                : units == "km" ? GeoHelpers.Units.Kilometers : GeoHelpers.Units.Miles;
            var context = PortalCrmConfigurationManager.CreateServiceContext();

            var entityList = context.CreateQuery("adx_entitylist").FirstOrDefault(e => e.GetAttributeValue <Guid>("adx_entitylistid") == id);

            if (entityList == null)
            {
                return(Json(Enumerable.Empty <MapNode>()));
            }

            var entityName           = entityList.GetAttributeValue <string>("adx_entityname");
            var latitudeFieldName    = entityList.GetAttributeValue <string>("adx_map_latitudefieldname");
            var longitudeFieldName   = entityList.GetAttributeValue <string>("adx_map_longitudefieldname");
            var titleFieldName       = entityList.GetAttributeValue <string>("adx_map_infoboxtitlefieldname");
            var descriptionFieldName = entityList.GetAttributeValue <string>("adx_map_infoboxdescriptionfieldname");
            var pushpinImageUrl      = entityList.GetAttributeValue <string>("adx_map_pushpinurl") ?? string.Empty;
            var pushpinImageWidth    = entityList.GetAttributeValue <int?>("adx_map_pushpinwidth").GetValueOrDefault(DefaultMapPushpinWidth);
            var pushpinImageHeight   = entityList.GetAttributeValue <int?>("adx_map_pushpinheight").GetValueOrDefault(DefaultMapPushpinHeight);

            if (!string.IsNullOrWhiteSpace(pushpinImageUrl) && !pushpinImageUrl.StartsWith("http", true, CultureInfo.InvariantCulture))
            {
                var portalContext = PortalCrmConfigurationManager.CreatePortalContext();
                pushpinImageUrl = WebsitePathUtility.ToAbsolute(portalContext.Website, pushpinImageUrl);
            }

            var fetchIn = CreateFetch(context, entityName, latitudeFieldName, longitudeFieldName);

            if (fetchIn == null)
            {
                return(new JObjectResult(new JObject
                {
                    { "success", false },
                    { "error", ResourceManager.GetString("Access_Denied_No_Permissions_To_View_These_Records_Message") }
                }));
            }

            fetchIn.FilterByBoxDistance(originLatitude, originLongitude, longitudeFieldName, latitudeFieldName, "double", radius, uom);

            var nodes = FetchEntities(context, fetchIn)
                        .DistanceQueryWithResult(originLatitude, originLongitude, longitudeFieldName, latitudeFieldName, radius, uom)
                        .ToList();

            var mapNodes = new List <MapNode>();

            if (nodes.Any())
            {
                mapNodes = nodes.Select(s =>
                                        new MapNode(s.Item1.Id, string.Empty,
                                                    s.Item1.GetAttributeValue <string>(titleFieldName),
                                                    s.Item1.GetAttributeValue <string>(descriptionFieldName),
                                                    s.Item1.GetAttributeValue <Double?>(latitudeFieldName) ?? 0,
                                                    s.Item1.GetAttributeValue <Double?>(longitudeFieldName) ?? 0,
                                                    string.Format("{0},{1}", s.Item1.GetAttributeValue <Double?>(latitudeFieldName) ?? 0, s.Item1.GetAttributeValue <Double?>(longitudeFieldName) ?? 0),
                                                    Math.Round(s.Item2, 1), pushpinImageUrl, pushpinImageHeight, pushpinImageWidth)).ToList();
            }

            var json = Json(mapNodes);

            return(json);
        }
        /// <summary>
        /// Provides the object that processes the request.
        /// </summary>
        /// <param name="requestContext">An object that encapsulates information about the request.</param>
        /// <returns></returns>
        public override IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            string routeUrl = string.Empty;

            try
            {
                Route route = (System.Web.Routing.Route)requestContext.RouteData.Route;
                routeUrl = route.Url;
            }
            catch { }
            ADXTrace.Instance.TraceInfo(TraceCategory.Monitoring, string.Format("GetHttpHandler route=[{0}] ", routeUrl));

            // apply the current SiteMapNode to the OWIN environment
            var node = GetNode(requestContext);

            if (node != null)
            {
                requestContext.Set(node);
            }

            // Note: prior to this next call, PortalContext is null.
            var portal = PortalCrmConfigurationManager.CreatePortalContext(PortalName, requestContext);

            portal = OnPortalLoaded(requestContext, portal);

            if (portal == null)
            {
                return(null);
            }

            AsyncTracking.TrackRequest(requestContext.HttpContext);

            var isInvalidNode = portal.Entity == null || portal.Path == null;

            // there's nothing else we can really do--we'll exit with a bare-bones 404.
            if (isInvalidNode)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "FindSiteMapNode failed to find a non-null CrmSiteMapNode. Responding with a basic 404.");

                RenderNotFound(requestContext);

                return(null);
            }

            if (portal.StatusCode == HttpStatusCode.NotFound)
            {
                var response = requestContext.HttpContext.Response;
                response.StatusCode = (int)HttpStatusCode.NotFound;
            }
            else if (portal.StatusCode == HttpStatusCode.Forbidden)
            {
                var response = requestContext.HttpContext.Response;
                response.StatusCode = (int)HttpStatusCode.Forbidden;
            }

            IHttpHandler handler;

            if (TryCreateHandler(portal, out handler))
            {
                return(handler);
            }

            if (node?.Entity?.Attributes != null && node.Entity.Attributes.ContainsKey("adx_alloworigin"))
            {
                var allowOrigin = node.Entity["adx_alloworigin"] as string;

                Web.Extensions.SetAccessControlAllowOriginHeader(requestContext.HttpContext, allowOrigin);
            }
            // remove the querystring

            var rewritePath = portal.Path;
            var index       = rewritePath.IndexOf("?");
            var path        = index > -1 ? rewritePath.Substring(0, index) : rewritePath;

            DisplayInfo displayInfo;

            if (string.Equals(path, DefaultWebTemplate, StringComparison.OrdinalIgnoreCase) && requestContext.HttpContext.GetSiteSetting <bool>(DisableValidationSiteSetting))
            {
                path = WebTemplateWithoutValidation;
            }

            ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Current path: {0}", path));

            if (TryGetDisplayModeInfoForPath(path, requestContext.HttpContext, out displayInfo))
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Found displayModeInfo={0} for path", displayInfo.DisplayMode.DisplayModeId));

                return(displayInfo.FilePath == null ? null : CreateHandlerFromVirtualPath(displayInfo.FilePath));
            }

            ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Unable to get DisplayModeInfo for adx_pagetemplate with rewrite path");

            return(path == null ? null : CreateHandlerFromVirtualPath(path));
        }