private void OpenProductPage(ProductLookup product)
        {
            // TODO: Make dynamic (use XML config files in root of product)
            string path = "";

            switch (product.name)
            {
            case "InventoryPro":
                path = "content/66801";
                break;

            case "QuestSystemPro":
                path = "content/63460";
                break;

            case "SciFiDesign":
                path = "content/55270";
                break;

            case "LosPro":
                path = "content/55292";
                break;

            default:
                break;
            }

            if (string.IsNullOrEmpty(path) == false)
            {
                UnityEditorInternal.AssetStore.Open(path);
            }
        }
        private static void Initialize()
        {
            reviewIcon                   = AssetDatabase.LoadAssetAtPath <Texture>(ReviewIconUri);
            reviewIconEmpty              = AssetDatabase.LoadAssetAtPath <Texture>(ReviewIconEmptyUri);
            votingThankYouScreen         = AssetDatabase.LoadAssetAtPath <Texture>(VotingThankYouScreenUri);
            _forceShowVotingPage         = false;
            _requestMailSignupForProduct = null;
            _requestingFeedbackOnProduct = null;
            _triedToSubmit               = false;

            _installedProductNames = ProductRatingUtility.GetAllProducts();
        }
        public static void SubmitProduct(ProductLookup product)
        {
            using (var client = new WebClient())
            {
                var values = new NameValueCollection();
                values["rating"]        = product.rating.ToString();
                values["message"]       = product.feedback;
                values["product_name"]  = product.name;
                values["email_address"] = product.email;

                client.UploadValues(ProductWebRequestUri, values);
            }
        }
 private void RateProduct(ProductLookup product, int rating)
 {
     _triedToSubmit = false;
     product.rating = rating;
     if (rating <= 3)
     {
         // Request feedback
         _requestingFeedbackOnProduct = product;
     }
     else
     {
         // Open asset store so the user can leave the review
         _requestMailSignupForProduct = product;
         OpenProductPage(product);
     }
 }
        private void DrawFeedbackRequestForProduct(ProductLookup product)
        {
            EditorGUI.LabelField(new Rect(10, 10, position.width - 20f, 20), "Leave feedback for " + product.name + " (your rating: " + product.rating + "/5)");
            EditorGUI.LabelField(new Rect(10, 30, position.width - 20f, 20), "Email:");

            if (_triedToSubmit && string.IsNullOrEmpty(product.email))
            {
                GUI.color = Color.red;
            }

            product.email = EditorGUI.TextField(new Rect(10, 50, position.width - 20f, EditorGUIUtility.singleLineHeight), product.email);
            GUI.color     = Color.white;

            EditorGUI.LabelField(new Rect(10, 70, position.width - 20f, 20), "Message:");
            product.feedback = EditorGUI.TextArea(new Rect(10, 90, position.width - 20f, 40), product.feedback);

            _subscribeToNewsletter = EditorGUI.Toggle(new Rect(position.width - 173f, 135f, 163f, EditorGUIUtility.singleLineHeight), "Subscribe to newsletter", _subscribeToNewsletter);

            var btnRect = new Rect(10f, 135f, 100f, EditorGUIUtility.singleLineHeight);

            if (GUI.Button(btnRect, "Cancel"))
            {
                _requestingFeedbackOnProduct = null;
            }

            btnRect.x += 110f;
            if (GUI.Button(btnRect, "Submit"))
            {
                _triedToSubmit = true;
                if (string.IsNullOrEmpty(product.email) == false)
                {
                    _requestingFeedbackOnProduct = null;
                    _requestMailSignupForProduct = null;
                    _forceShowVotingPage         = false;

                    // Send data
                    ProductRatingUtility.SubmitProduct(product);

                    if (_subscribeToNewsletter)
                    {
                        string result;
                        NewsletterEditorUtility.SubscribeToMailingList(product.email, out result);
                    }
                }
            }
        }
        private void DrawMailSignupRequestForProduct(ProductLookup product)
        {
            EditorGUI.LabelField(new Rect(10, 10, position.width - 20f, 40f), "Subscribe to the newsletter for new product\nannouncements, discounts, giveaways and more.");
            EditorGUI.LabelField(new Rect(10, 50, position.width - 20f, 20), "Email:");
            if (_triedToSubmit && string.IsNullOrEmpty(product.email))
            {
                GUI.color = Color.red;
            }

            product.email = EditorGUI.TextField(new Rect(10, 70, position.width - 20f, EditorGUIUtility.singleLineHeight), product.email);
            GUI.color     = Color.white;

            var btnRect = new Rect(10f, 100f, 100f, EditorGUIUtility.singleLineHeight);

            if (GUI.Button(btnRect, "No thank you"))
            {
                _requestingFeedbackOnProduct = null;
                _requestMailSignupForProduct = null;
            }

            btnRect.x += 110f;
            if (GUI.Button(btnRect, "Subscribe"))
            {
                _triedToSubmit = true;
                if (string.IsNullOrEmpty(product.email) == false)
                {
                    _requestingFeedbackOnProduct = null;
                    _requestMailSignupForProduct = null;
                    _forceShowVotingPage         = false;

                    if (_subscribeToNewsletter)
                    {
                        string result;
                        NewsletterEditorUtility.SubscribeToMailingList(product.email, out result);
                    }
                }
            }
        }