コード例 #1
0
 protected override void SetEditProperties(FieldResource field, PropertyInfo property,
                                           DisplayNameAttribute displayNameAttr)
 {
     field.Placeholder = property.Name;
     field.Required    = property.GetCustomAttribute <RequiredAttribute>() != null;
     field.Name        = property.Name;
     if (property.GetCustomAttribute <DisabledFieldAttribute>() is { })
コード例 #2
0
        /**
         * This function creates a FieldResource given a magento product and an attribute code for a MULTI SELECT field
         * That means a field where you can pick multiple options from a dropdown
         * NOTE:
         * If this function runs into a property where the matching Ea field ALSO has an option list, they must have identical values
         * Or the function will skip the option and continue on
         *
         * @param   magentoProduct  Magento product to parse
         * @param   attributeCode   Attribute code, hard coded value in Magento
         *
         * @return  FieldResource   Resource to add to EA product
         */
        private FieldResource CreateFieldFromMultiSelect(ProductResource magentoProduct, string attrCode)
        {
            //Get option value from magento product
            var           optionId = GetAttributeByCode(magentoProduct.custom_attributes, attrCode);
            FieldResource resource = null;

            //Get matching EA field identifier for this attribute
            var eaFieldId = ConfigReader.GetValueForField(attrCode);

            if (optionId != null && eaFieldId != -1)
            {
                //Get the specified option value, if there iso ne
                var attribute      = _magentoCustomAttributesController.GetCustomAttributeIfExists(attrCode);
                var selectedValues = optionId.ToString().Split(',');

                var valueNames = new List <string>();

                //Get the Ea field definition
                var fieldDef = _eaFieldDefinitionController.GetAFieldDefinition(eaFieldId);

                foreach (var selectedValue in selectedValues)
                {
                    //Determine if field definition has options, if so we want to cross reference them
                    if (fieldDef.Options.Any())
                    {
                        //Get the Label for the selected option in magento from the custom attribute itself, where they are stored
                        var valueName =
                            GetLabelFromAttributeValue(attribute.options, selectedValue.ToString()).ToString();
                        var value = fieldDef.Options.Find(x => x.Value == valueName);

                        if (value != null)
                        {
                            valueNames.Add(value.Value);
                        }
                        else
                        {
                            Console.WriteLine(
                                "Unable to add field from magento product {0} (name) {1} (sku) property {2} option {3} as there was no matching value in EA, continuing on",
                                magentoProduct.name, magentoProduct.sku, attrCode, valueName);
                        }
                    }
                    else
                    {
                        valueNames.Add(GetLabelFromAttributeValue(attribute.options, selectedValue).ToString());
                    }
                }

                resource = new FieldResource
                {
                    FieldDefinitionId      = eaFieldId,
                    LanguageInvariantValue = string.Join(", ", valueNames)
                };
            }

            return(resource);
        }
コード例 #3
0
        /**
         * This function creates a Field
         *
         * @param      fieldDefinitionId   Identifier of a FieldDefinition in EA
         *
         * @returns    FieldResource       Object with reference to EA FieldDefinition for Name and magento product name
         */
        private static FieldResource CreateField(int fieldDefinitionId, string name)
        {
            var nameField = new FieldResource
            {
                FieldDefinitionId      = fieldDefinitionId,
                LanguageInvariantValue = name
            };

            return(nameField);
        }
コード例 #4
0
    static void Main(string[] args)
    {
        // Find your Account Sid and Token at twilio.com/console
        const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        const string authToken  = "your_auth_token";

        TwilioClient.Init(accountSid, authToken);

        FieldResource.Delete(
            pathAssistantSid: "UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            pathTaskSid: "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            pathSid: "UEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
            );
    }
コード例 #5
0
        public void TestFetchResponse()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();

            twilioRestClient.AccountSid.Returns("ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            twilioRestClient.Request(Arg.Any <Request>())
            .Returns(new Response(
                         System.Net.HttpStatusCode.OK,
                         "{\"url\": \"https://autopilot.twilio.com/v1/Assistants/UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Tasks/UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Fields/UEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"account_sid\": \"ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"unique_name\": \"unique_name\",\"date_updated\": \"2015-07-30T20:00:00Z\",\"assistant_sid\": \"UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"task_sid\": \"UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"date_created\": \"2015-07-30T20:00:00Z\",\"sid\": \"UEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"field_type\": \"field_type\"}"
                         ));

            var response = FieldResource.Fetch("UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "UEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient);

            Assert.NotNull(response);
        }
コード例 #6
0
        public void TestReadFullResponse()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();

            twilioRestClient.AccountSid.Returns("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
            twilioRestClient.Request(Arg.Any <Request>())
            .Returns(new Response(
                         System.Net.HttpStatusCode.OK,
                         "{\"fields\": [{\"url\": \"https://preview.twilio.com/understand/Services/UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Intents/UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Fields/UEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"account_sid\": \"ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"unique_name\": \"unique_name\",\"date_updated\": \"2015-07-30T20:00:00Z\",\"service_sid\": \"UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"intent_sid\": \"UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"date_created\": \"2015-07-30T20:00:00Z\",\"sid\": \"UEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"field_type\": \"field_type\"}],\"meta\": {\"page\": 0,\"first_page_url\": \"https://preview.twilio.com/understand/Services/UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Intents/UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Fields?PageSize=50&Page=0\",\"url\": \"https://preview.twilio.com/understand/Services/UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Intents/UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Fields?PageSize=50&Page=0\",\"key\": \"fields\",\"next_page_url\": null,\"previous_page_url\": null,\"page_size\": 50}}"
                         ));

            var response = FieldResource.Read("UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", client: twilioRestClient);

            Assert.NotNull(response);
        }
コード例 #7
0
        public void TestDeleteResponse()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();

            twilioRestClient.AccountSid.Returns("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
            twilioRestClient.Request(Arg.Any <Request>())
            .Returns(new Response(
                         System.Net.HttpStatusCode.NoContent,
                         "null"
                         ));

            var response = FieldResource.Delete("UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "UEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", client: twilioRestClient);

            Assert.NotNull(response);
        }
コード例 #8
0
        public void TestFetchResponse()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();

            twilioRestClient.AccountSid.Returns("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
            twilioRestClient.Request(Arg.Any <Request>())
            .Returns(new Response(
                         System.Net.HttpStatusCode.OK,
                         "{\"url\": \"https://preview.twilio.com/understand/Services/UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Intents/UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Fields/UEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"account_sid\": \"ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"unique_name\": \"unique_name\",\"date_updated\": \"2015-07-30T20:00:00Z\",\"service_sid\": \"UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"intent_sid\": \"UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"date_created\": \"2015-07-30T20:00:00Z\",\"sid\": \"UEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"field_type\": \"field_type\"}"
                         ));

            var response = FieldResource.Fetch("UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "UEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", client: twilioRestClient);

            Assert.NotNull(response);
        }
コード例 #9
0
        public void TestReadEmptyResponse()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();

            twilioRestClient.AccountSid.Returns("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
            twilioRestClient.Request(Arg.Any <Request>())
            .Returns(new Response(
                         System.Net.HttpStatusCode.OK,
                         "{\"fields\": [],\"meta\": {\"page\": 0,\"first_page_url\": \"https://preview.twilio.com/understand/Services/UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Intents/UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Fields?PageSize=50&Page=0\",\"url\": \"https://preview.twilio.com/understand/Services/UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Intents/UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Fields?PageSize=50&Page=0\",\"key\": \"fields\",\"next_page_url\": null,\"previous_page_url\": null,\"page_size\": 50}}"
                         ));

            var response = FieldResource.Read("UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", client: twilioRestClient);

            Assert.NotNull(response);
        }
コード例 #10
0
    static void Main(string[] args)
    {
        // Find your Account Sid and Token at twilio.com/console
        const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        const string authToken  = "your_auth_token";

        TwilioClient.Init(accountSid, authToken);

        var field = FieldResource.Fetch(
            pathAssistantSid: "UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            pathTaskSid: "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            pathSid: "UEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
            );

        Console.WriteLine(field.UniqueName);
    }
コード例 #11
0
    static void Main(string[] args)
    {
        // Find your Account Sid and Token at twilio.com/console
        const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        const string authToken  = "your_auth_token";

        TwilioClient.Init(accountSid, authToken);

        var field = FieldResource.Create(
            fieldType: "FieldType",
            uniqueName: "UniqueName",
            pathAssistantSid: "UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            pathIntentSid: "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
            );

        Console.WriteLine(field.Sid);
    }
コード例 #12
0
        /**
         * This function creates a FieldResource given a magento product and an attribute code for a TEXT field
         * That means a field where you can only enter text
         *
         * @param   magentoProduct  Magento product to parse
         * @param   attributeCode   Attribute code, hard coded value in Magento
         *
         * @return  FieldResource   Resource to add to EA product
         */
        private static FieldResource CreateFieldFromText(ProductResource magentoProduct, string attrCode)
        {
            var           value = GetAttributeByCode(magentoProduct.custom_attributes, attrCode);
            FieldResource field = null;

            if (value != null)
            {
                var fieldId = ConfigReader.GetValueForField(attrCode);

                if (fieldId != -1)
                {
                    field = CreateField(ConfigReader.GetValueForField(attrCode), value.ToString());
                }
            }

            return(field);
        }
コード例 #13
0
        /**
         * This function creates a FieldResource given a magento product and an attribute code for a SINGLE SELECT field
         * That is a field where you can pick a SINGLE item from a drop down list
         *
         * @param   magentoProduct  Magento product to parse
         * @param   attributeCode   Attribute code, hard coded value in Magento
         *
         * @return  FieldResource   Resource to add to EA product
         */
        private FieldResource CreateFieldFromSingleSelect(ProductResource magentoProduct, string attrCode)
        {
            var           optionId  = GetAttributeByCode(magentoProduct.custom_attributes, attrCode);
            FieldResource resource  = null;
            var           eaFieldId = ConfigReader.GetValueForField(attrCode);

            if (optionId != null && eaFieldId != -1)
            {
                var attribute = _magentoCustomAttributesController.GetCustomAttributeIfExists(attrCode);
                var value     = GetLabelFromAttributeValue(attribute.options, optionId.ToString()).ToString();

                resource = new FieldResource {
                    FieldDefinitionId = eaFieldId, LanguageInvariantValue = value
                };
            }

            return(resource);
        }
コード例 #14
0
    static void Main(string[] args)
    {
        // Find your Account Sid and Token at twilio.com/console
        const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        const string authToken  = "your_auth_token";

        TwilioClient.Init(accountSid, authToken);

        var fields = FieldResource.Read(
            pathAssistantSid: "UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            pathTaskSid: "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
            );

        foreach (var record in fields)
        {
            Console.WriteLine(record.Sid);
        }
    }
コード例 #15
0
    static void Main(string[] args)
    {
        // Find your Account Sid and Token at twilio.com/console
        // DANGER! This is insecure. See http://twil.io/secure
        const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        const string authToken  = "your_auth_token";

        TwilioClient.Init(accountSid, authToken);

        var field = FieldResource.Create(
            fieldType: "field_type",
            uniqueName: "unique_name",
            pathAssistantSid: "UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            pathTaskSid: "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
            );

        Console.WriteLine(field.Sid);
    }
コード例 #16
0
        public void TestReadRequest()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();
            var request          = new Request(
                HttpMethod.Get,
                Twilio.Rest.Domain.Preview,
                "/understand/Services/UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Intents/UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Fields",
                ""
                );

            twilioRestClient.Request(request).Throws(new ApiException("Server Error, no content"));

            try
            {
                FieldResource.Read("UAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "UDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", client: twilioRestClient);
                Assert.Fail("Expected TwilioException to be thrown for 500");
            }
            catch (ApiException) {}
            twilioRestClient.Received().Request(request);
        }
コード例 #17
0
        public void TestDeleteRequest()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();
            var request          = new Request(
                HttpMethod.Delete,
                Twilio.Rest.Domain.Preview,
                "/understand/Assistants/UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Tasks/UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Fields/UEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
                ""
                );

            twilioRestClient.Request(request).Throws(new ApiException("Server Error, no content"));

            try
            {
                FieldResource.Delete("UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "UEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient);
                Assert.Fail("Expected TwilioException to be thrown for 500");
            }
            catch (ApiException) {}
            twilioRestClient.Received().Request(request);
        }
コード例 #18
0
        public void TestReadRequest()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();
            var request          = new Request(
                HttpMethod.Get,
                Twilio.Rest.Domain.Autopilot,
                "/v1/Assistants/UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Tasks/UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Fields",
                ""
                );

            twilioRestClient.Request(request).Throws(new ApiException("Server Error, no content"));

            try
            {
                FieldResource.Read("UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient);
                Assert.Fail("Expected TwilioException to be thrown for 500");
            }
            catch (ApiException) {}
            twilioRestClient.Received().Request(request);
        }
コード例 #19
0
        public void TestCreateRequest()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();
            var request          = new Request(
                HttpMethod.Post,
                Twilio.Rest.Domain.Autopilot,
                "/v1/Assistants/UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Tasks/UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Fields",
                ""
                );

            request.AddPostParam("FieldType", Serialize("field_type"));
            request.AddPostParam("UniqueName", Serialize("unique_name"));
            twilioRestClient.Request(request).Throws(new ApiException("Server Error, no content"));

            try
            {
                FieldResource.Create("UAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "UDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "field_type", "unique_name", client: twilioRestClient);
                Assert.Fail("Expected TwilioException to be thrown for 500");
            }
            catch (ApiException) {}
            twilioRestClient.Received().Request(request);
        }
コード例 #20
0
        /**
         * This function parses the custom properties in a magento product and creates a matching
         * list of FieldResources for an EA product.
         * If the product has a mapped value, it will check if any of the fields were DELETED and if so
         * set the fields appropriately to have them deleted
         *
         * @param   magentoProduct          Magento product to parse
         *
         * @return  List<FieldResource>     Matching field resources
         */
        public List <FieldResource> ParseFieldsFromProduct(ProductResource magentoProduct)
        {
            var fields = new List <FieldResource>
            {
                CreateField(ConfigReader.GetValueForField(ConfigReader.MagentoNameCode),
                            magentoProduct.name)
            };

            //Add fields from custom attributes
            foreach (var attribute in magentoProduct.custom_attributes)
            {
                FieldResource field = null;

                //Skip colors for now, as that requires a seperate API request after the MP is created
                if (attribute.attribute_code != ConfigReader.MagentoColorCode)
                {
                    switch (
                        _magentoCustomAttributesController.GetCustomAttributeIfExists(attribute.attribute_code)
                        .frontend_input)
                    {
                    case "multiselect":
                        field = CreateFieldFromMultiSelect(magentoProduct, attribute.attribute_code);
                        break;

                    case "text":
                        field = CreateFieldFromText(magentoProduct, attribute.attribute_code);
                        break;

                    case "textarea":
                        field = CreateFieldFromText(magentoProduct, attribute.attribute_code);
                        break;

                    case "select":
                        field = CreateFieldFromSingleSelect(magentoProduct, attribute.attribute_code);
                        break;

                    default:
                        Console.WriteLine(
                            "Custom attribute {0} on product {1} (name) {2} (sku) was not synced as it is of a unsupported type. " +
                            "Only multiselect, textarea and select are supported.",
                            attribute.attribute_code, magentoProduct.name, magentoProduct.sku);
                        break;
                    }
                }

                if (field != null)
                {
                    fields.Add(field);
                }
            }

            //If this is an "Upsert"
            if (ProductHasMapping(magentoProduct))
            {
                var catalogItemId     = GetAttributeByCode(magentoProduct.custom_attributes, ConfigReader.MappingCode).ToString();
                var slug              = _eaCatalogsController.GetCatalogItem(catalogItemId).Slug;
                var productDocumentId = GetProductDocumentIdFromSlug(slug);

                //Go through and ensure all product fields no longer on the product are "empty", this will ensure they are deleted
                var eaFields =
                    _eaProductController.GetProductHierarchy(productDocumentId).RootRevision.FieldValues;

                foreach (var eaField in eaFields)
                {
                    var deleted = true;
                    //If matching field is missing from fields, add it but set it to null

                    foreach (var field in fields)
                    {
                        if (eaField.FieldDefinitionId == field.FieldDefinitionId)
                        {
                            deleted = false;
                        }
                    }

                    if (deleted)
                    {
                        fields.Add(new FieldResource
                        {
                            FieldDefinitionId      = eaField.FieldDefinitionId,
                            LanguageInvariantValue = ""
                        });
                    }
                }
            }

            return(fields);
        }
コード例 #21
0
 protected virtual void SetEditProperties(FieldResource field, PropertyInfo property,
                                          DisplayNameAttribute displayNameAttr)
 {
 }
コード例 #22
0
 protected virtual void SetPlaceholder(DisplayNameAttribute displayNameAttr, FieldResource field)
 {
 }