Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by bsmither

  1. The change occurred between CC629 and CC640.
  2. Found it! In the PayPal Commerce module, /hooks/class.cubecart.construct.confirm.php, line 63, a test is made against the $result from requesting the order status from PayPal. In the $result is an array element holding the 'payer' phone number. If there is no such array element, or if it is blank, then use: <a href='https://cubecart.com/45'>Disabled</a> When visiting: https://cubecart.com/45 you are taken to: https://support.cubecart.com/hc/en-gb/articles/360006071537-How-do-I-get-PayPal-Commerce-to-return-a-phone-number-for-the-customer- Unfortunately, it seems that the link tag gets "URLSafed" when getting stored in the database, but not restored when being displayed in admin. Plus, that link string would be way too long to fit in any database table column holding a phone number. I will post an issue in the Github.
  3. Here is test code to show how Foundation's feature to "validate" form entry data can be used to solve this situation. It is meant to be a separate page request (like, www.store.com/validate.html), but loads two files from the Foundation skin. (So, be sure to have the Foundation skin in CubeCart's /skins/ folder.) The essential part, the "#test" validate object, would be incorporated in the overall collection of validate objects (located in Foundation's javascript file "3.cubecart.validate.js"). <!DOCTYPE html> <html> <head> <script src="skins/foundation/js/vendor/jquery.js"></script> </head> <body> <form id="test"> <select name="main" id="main"> <option value="">Select</option> <option value="Steak">Steak</option> <option value="Chicken">Chicken</option> <option value="Fish">Fish</option> <option value="Tofu">Tofu</option> </select> <select name="entry" id="entry"> <option value="">Select</option> <option value="Cheese">Cheese</option> <option value="Wings">Wings</option> <option value="Rings">Rings</option> <option value="Chili">Chili</option> </select> <select name="dessert" id="dessert"> <option value="">Select</option> <option value="Cake">Cake</option> <option value="Pie">Pie</option> <option value="Sorbet">Sorbet</option> <option value="CheeseCake">CheeseCake</option> </select> <br><input id="submit" type="submit" value="Submit" /> </form> <script src="skins/foundation/js/vendor/jquery.validate.js"></script> <script>function init_add_to_basket(){return false}</script> <script> jQuery(document).ready(function() { $.validator.setDefaults({ errorElement: 'small', errorPlacement: function(error, element) { if (element.attr("name")=="entry" || element.attr("name")=="dessert") { error.insertAfter("#dessert"); } else if (element.is(":radio") || element.is(":checkbox")) { var errorLocation = element.attr('rel'); if ($('#' + errorLocation).length) { error.insertAfter('#' + errorLocation); } else { element.removeClass("error"); alert(error.text()); } } else { error.insertAfter(element); } } }); $("#test").validate({ rules: { main: { required:true }, entry: { required:{depends:function(e){return $("#main option:selected").val().length>0 && $("#dessert option:selected").val().length==0;}} }, dessert:{ required:{depends:function(e){return $("#main option:selected").val().length>0 && $("#entry option:selected").val().length==0;}} } }, groups: { withName: "entry dessert" }, messages: { main: { required: "You must choose a main dish." }, entry: { required: "You must choose either an entry or a dessert, or one of both." }, dessert: { required: "You must choose either an entry or a dessert, or one of both." } }, }); /* Reset Form */ $('input:reset').click(function() { $(this).parents('form:first').validate().resetForm(); }); }); </script> </body> </html>
  4. Let's explore some possibilities: Any customizations that have been made on the core code, repeatedly applied to CC644 through cc649? Which modules are installed? Do you have that one PayPal module that takes it upon itself to update the customer's database record with data that comes from PayPal? Which skin are you using?
  5. That's how I read Pirate Ship's explanation. Give it a try. In admin, Sales Reports, Filter tab, choose a date range and select only "Processing". Click Display. When the page returns, on the Results tab, there will be a list of found orders. Below the list is an "Export" button. When clicked, CubeCart will offer you to download a CSV file. Load this file into a text editor and you will see that the rows of data comply with what Pirate Ship wants to see.
  6. From what I can discern from a knowledgebase article* at Pirate Ship, it is Pirate Ship that contacts the eCommerce Store, queries via the store's API for a list of orders sitting at the "Processing" stage, sends PDF documents (shipping labels) to the store owner to have the owner print out those labels. Pirate Ship also contacts the store via the store's API to have the store move those orders to the "Completed" stage. So, CubeCart would need to make an API listener, listen for the request command, deliver the list of Order Summaries through that API channel, listen for the response command, update all the orders that had shipping labels created. CubeCart is just now developing a versatile API mechanism to listen for commands. (There does currently exist a very structured listener mainly for payment gateway instant notifications.) Then, because it is Pirate Ship that initiates this entire sequence, Pirate Ship would need to learn about CubeCart's API and add it to their repertoire of interrogators. Finally, Pirate Ship says that the customer will never know the true shipping charges. You would need to figure that out by using the USPS, UPS, and/or All-in-One-Shipping modules. In conclusion, I think it is entirely do-able (and maybe already in CC649), perhaps starting with CC6410. See: https://github.com/cubecart/v6/issues/3071 *See: https://support.pirateship.com/en/articles/1655429-what-integrations-does-pirate-ship-have https://support.pirateship.com/en/articles/1515789-how-does-the-woocommerce-integration-work CubeCart can export Order Summaries to a CSV file, which Pirate Ship says it can import for bulk processing.
  7. This will require an enhancement to the skin's javascript, as well as writing an enforcement test in the core code. I did something very much like this in CC3. This will be an interesting project for CC6, but no guarantees.
  8. Please create the error log: https://forums.cubecart.com/topic/51550-how-to-create-the-error-log/ There may be clues to what is happening.
  9. Please verify the following: Using an external database utility (such as phpMyAdmin available in your hosting account), look at the table CubeCart_customer, 'phone' and 'mobile' columns. Does this strange content appear in the database? These columns hold up to 20 characters, while this strange content has more than 20 characters. So, I think some core code is getting confused. But, I cannot find "https://cubecart.com" in the core code.
  10. As you mentioned, if it was just this one customer record, I would ignore it (after deleting the bad data in admin). What is surprising, is that Foundation has a 'validator' that pattern matches the phone number entry against allowable characters - and everything but the 45 is not allowed.
  11. Yes. That data item is found in {$PRODUCT.use_stock_level}. The code sequence: {if $PRODUCT.use_stock_level}Extra language{/if} will need to be in template code (as opposed to the "Description" content of the product's data).
  12. You get thousands of log entries because, I would say, you have a very popular site. Most, if not all, I have seen fixed for CC6410 -- some issues are still open. I assume they will be closed before CC6410 is released. file.class.php:224 https://github.com/cubecart/v6/issues/3114 session.class.php:676 https://github.com/cubecart/v6/issues/3044 Although other places may contact CubeCart without this server variable. From: return strpos(($_SERVER['HTTP_USER_AGENT']), 'Trident') ? 'IEX' : htmlspecialchars($_SERVER['HTTP_USER_AGENT']); To: return strpos(($_SERVER['HTTP_USER_AGENT']??"fullsize"), 'Trident') ? 'IEX' : htmlspecialchars($_SERVER['HTTP_USER_AGENT']??"fullsize"); user.class.php:719 Same as above. From: $agent = strtolower($_SERVER['HTTP_USER_AGENT']); To: $agent = strtolower($_SERVER['HTTP_USER_AGENT']??"fullsize"); debug.class.php:260 Same as above. From: if (strstr(($_SERVER['HTTP_USER_AGENT']), 'W3C_Validator')) { To: if (strstr(($_SERVER['HTTP_USER_AGENT']??"fullsize"), 'W3C_Validator')) { I do not recall why I used "fullsize".
  13. There are files that are not part of an installation package: other skins (than "Foundation"), any modules, other languages (than en-GB), and files found in /images/cache/, /images/source/, and the /cache/ directories. The above will not be overwritten. Nor will the database be changed - if this restoration was not an upgrade to a newer version. So, the store having all of its imagery, modules, custom skins, etc, and the database having references to all of that -- after a restore, the store will look exactly like it did before. However, any customizations made to the core code that might affect what the store looks like, will be gone.
  14. As I follow the code, a comparison is made between the latest version available from CubeCart Corp. versus what you have installed. If there is a newer version available, there will be an Upgrade button that will have CubeCart replace all of itself with the latest version available. Otherwise, if the versions are the same (that is, if the installed version is already the latest version), or if CubeCart cannot determine if a newer version exists, there will be a Restore button to have CubeCart replace all of itself with the latest version available. In the case of an installation already at the latest version, a "Restore Current Version" is useful if, somehow, the code base has become so thoroughly modified that there is no hope of successfully removing some or all of those customizations. A clean code base is what will be installed. (The term "Restore" is less than ideal, in my opinion. I prefer "Force Repair to Latest Version".)
  15. If I look at: bear-ops-red-bolt-action-14-auto-knife-2.5-inch.html then click on the 'BEAR AND SON' breadcrumb, I get shown 'throwing knives'. Clicking on the 'Automatic Knives' breadcrumb, I get shown CubeCart's 404 response. This is similar to what is seen, and fixed by: https://github.com/cubecart/v6/issues/3128 However, I think this does not have anything to do with your shipping situation. (But it might???) I see that Per Category does offer a calculation (named USPS Shipping) at $0.00 -- supposedly from a setting in the product's main category (BEAR AND SON).
  16. Can you verify what I see when I visit www.wholesaleselfdefense.com? Well... using http:// gets me someplace weird, while using https:// gets me to a CubeCart-looking site.
  17. The Per Category module itself, or that there isn't a calculation from it that is offered to the customer?
  18. Even with having fixed the error - possibly caused by a parenthesis - using the latest "Change to" code shown earlier?
  19. You may have missed, or accidentally deleted, a closing parenthesis.
  20. Sorry, I forgot to add the magic sauce to the code to change to. Please reload this forum conversation to see the edits to the above post and make the change to the code again.
  21. As an experiment, please try this edit: In classes/request.class.php, find near lines 80-86: if ($this->_curl) { $this->_curl_options[CURLOPT_HEADER] = $this->_request_return_headers; $this->_curl_options[CURLOPT_RETURNTRANSFER] = $this->_request_return; $this->_curl_options[CURLOPT_VERBOSE] = false; $this->_curl_options[CURLOPT_FAILONERROR] = true; /*$this->_curl_options[CURLOPT_FOLLOWLOCATION] = true;*/ } Change to: if ($this->_curl) { $this->_curl_options[CURLOPT_HTTPHEADER] = array('User-Agent: CubeCart/'.CC_VERSION); $this->_curl_options[CURLOPT_HEADER] = $this->_request_return_headers; $this->_curl_options[CURLOPT_RETURNTRANSFER] = $this->_request_return; $this->_curl_options[CURLOPT_VERBOSE] = false; /* $this->_curl_options[CURLOPT_FAILONERROR] = true; */ /* $this->_curl_options[CURLOPT_FOLLOWLOCATION] = true; */ if (defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')){ $this->curl_options[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; } }
  22. Yes, that issue in the Github resolved to the Reviews of a product on the storefront. But I believe the underlying cause was that CubeCart was trying to get a resource from a third-party (Gravatar) when gathering all the data necessary to populate the page, and then PHP faulted when the attempted connection to that resource failed due to the server environment forcing (or prioritizing) IPV6 when that connection is not IPV6 compatible. In admin, after successfully logging in, the admin is taken directly to the Dashboard. When collecting the resources to show on the Dashboard, a call is made to Google and a call is made to the RSS feed for News & Announcements Latest Topics at Cubecart.com. Now supposing that you have successfully logged in, my question is why does CubeCart not remember that, making you log in again? As an experiment, before logging in, try going directly to someplace in admin that doesn't do much of anything. Such as: web_address/admin_file.php?_g=phpinfo where web_address and admin_file are specific to your site If you are not logged in, then after clicking the Log In button, you will be taken directly to the PHP Info screen (bypassing the Dashboard). If you do get to the PHP Info screen, then the source of the problem has been narrowed down.
  23. This is interesting: https://github.com/cubecart/v6/issues/438
  24. This has also been reported by @kurraglen: https://forums.cubecart.com/topic/58161-admin-area-showing-503-error/
  25. Please remind us what version of PHP is running. If the setup folder is still present, even if renamed, then have your browser ask for this page: web_address/setup_folder/info.php -- using the site's web address and the name of the setup folder (if still present). The top table will show the version, and also in the top table, the Server API. Is the third-party plugin "Attached Documents" present in CubeCart's /modules/plugins/ directory?
  • Create New...