Jump to content
Latest News: (loading..)

wildvettes

Members
  • Content count

    105
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by wildvettes

  1. I really wish I knew what was causing the issue and would appreciate any help you can provide. I have a completely stock OSC bootstrap with absolutely no mods or add-ons. I have right around 1000 products listed now and the issues seem to be getting far worse with time. Basically my site is so broken now that it is basically useless. UPDATE: I was able to remove the "navbar" module which is almost completely broken and replace it with the "buttons" module which at least enables the shopping cart to be accessed. www.wildvettes.com When the errors begin the home page url goes to www.wildvettes.com/# (this is the hover url action for the list and grid buttons) and when you click on any of the cart or account buttons on the "navbar" (currently disabled) then no drop-downs appear. If you use the breadcrumb to go back and forth between home and catalog it will eventually start working again until you click on a product and then it will almost certainly break again. (I actually just found out that the "sort" product by name and price option also breaks with "navbar" as well). They all seem to be connected to the same error. Using the sort button is a guaranteed break. The shopping cart has an issue that seems to relate to products having "attributes" that are added through the oscommerce admin panel under "product attributes". Others mentioned product attributes with {} could cause a problem but even products with just text have the same issues. The only special characters I have in any of the attributes are " / and (). When a product has attributes the item cannot be removed from the shopping cart using the red x remove button. It can only be removed by changing the quantity to 0 and refreshing it. Hover url looks like this "http://www.wildvettes.com/shopping_cart.php/products_id/617%7B2%7D83/action/remove_product" When you click the red x on these products it actually redirects to this url and then the red x doesn't even do that from that point forward. Also when any of these products with attributes are added to the cart if you click on the product or the picture instead of taking you back to the product's information page it redirects to the home page with the www.wildvettes.com/# url. Product example here. http://www.wildvettes.com/product_info.php/cPath/1_17_31/products_id/617 Example of a product that acts like normal in the cart without attributes. http://www.wildvettes.com/product_info.php/cPath/1_17_31/products_id/312 The highlight shows correct url on products without attributes when hovering but the highlight shows the %something after each product with attributes. I am assuming the %7B2%7D83 above relates to the individual attribute for the product. If I go to the url and manually remove the %7B2%7D83 it will display the proper cart message but doesn't actually remove the product with the attributes. I am assuming when you go to click on the product it attempts to load the 617%7B2%7D83 product but it doesn't exist so it directs back to the home page with #. The other thing that is occurring is when you get redirected to the home page as an error two things begin happening on the site and they seem to be directly related to each other and may have nothing to do with the shopping cart as I can replicate the problem without ever even using the shopping cart. The individual listings have popup pictures that no longer work. Instead of getting a hand over them they merely have a normal curser and they can be right clicked and opened on a separate page. WHEN this error occurs it coincides with the individual product listing categories "Grid/List" View buttons breaking. When the picture popups stop working the list and grid buttons merely redirect back to the home page with the url www.wildvettes.com/#. I can usually tell whether the photos are working before I click on listing because if it defaults to "list" view then everything is broken. If it defaults to "grid" then everything is working until it isn't. There doesn't seem to be any rhyme or reason to what causes the site to break and fix itself. I haven't been able to consistently reproduce the problem from certain listings. The one thing that does seem consistent is if you shop the store the photos popups will break and then you will not be able to switch from list to grid view until the site starts working properly again. The issue with the module "navbar" seems to directly coincide with the photo popup and grid/list issue leading me to believe they are all related. The shopping cart issue with the redirect and remove not working seem to be another individual issue. Any help would be greatly appreciated as I am really frustrated by this issue.
  2. You sir nailed it! Check out the test site now. The changes were yours in application_top.php and the other in html_output.php for the linking issue. www.lifitingpads.com/catalog/ You can now remove items with attributes from the shopping cart
  3. I think I'm going to revert all code changes and just make the one to html_output.php as it isn't generating any error logs on the new test site (mine is now and ipage is blaming the issue on the error log). If someone can refer me to where the "What's in My Shopping Cart?" Text is located I'm going to add a line of text below it saying "To remove an item from your cart change the quantity to "0" and click the refresh arrows." That should at least band-aid this until I can get it figured out. If I could just remove the red x all together that would also be great, but I don't know if that would require a lot of core code changes. Thanks!
  4. The new install of EDGE is from the link @burt supplied and the PHP version has been tried on 5.5, 5.6, and 7.0 with the same results.
  5. OK so before I have to go trying to migrate hosts does anyone have a work around for the remove from cart button not working for a Host that doesn't support {} when a product has attributes? My host has been zero help. It could be anything including dumping the entire cart. I just want the customer to be able to actually clear the cart when they make an error rather than just getting frustrated and leaving. I have tried all the urlencode options and I have done a fresh install of EDGE and the issue is present in all of them still.
  6. @burt I ran a bone stock install and it did the exact same thing. See the above post. So let's do this. I have the bone stock edge site with the same issues. What exactly should I do to fix that without any CORE CODE changes? I'm all ears.
  7. Of course they are . Well looks like I hit the Host lottery then!
  8. @Dan Cole No I am currently using Ipage and it has been 24 hours now without even an update to my ticket. Last night the "chat tech" kept trying to get me to give him my admin location and login information like he was going to fix the issue from my admin panel. I did see that post and wish there was some way to know which hosts won't work. I just wish I had known before getting hundreds of hours into this shop and have to probably spend more time trying to migrate and get my domains, ssl, sitelock etc moved over without eating more money.
  9. http://www.liftingpads.com/catalog/ clean fresh install: this product with attributes does the same thing. Clearly this is an issue with oscommerce and some web hosts and someone wouldn't know until they actually spent a bunch of time building a store only to find out they are going to lose customers over a shopping cart frustration. http://www.liftingpads.com/catalog/product_info.php?products_id=1
  10. @Gergely A brand new install of edge has the exact same error on my server. So new server or nothing? Is there a way to just get it to dump the entire cart?
  11. I would like to re-cap my issues again very easily for those searching and explain what specifically was done and what fixed what. So far the only issue not resolved is the remove from cart button although it does seem to be closer. 1. Problems with the Home Page "Navbar" dropdown, Problems with the "Grid/List" Buttons on product listing pages, Problems, Problems with the "Sort" dropdown on product listing pages, & Problems with the "ColorBox" image popups on each listing. These issues were all solved with this change to the Includes/Template_top.php Remove this line <script src="ext/jquery/jquery-1.11.1.min.js" async></script> Replace with this line <script src="ext/jquery/jquery-1.11.1.min.js"></script> 2. The "Remove From Cart" button in the shopping cart doesn't work when a product has "attributes". Also clicking on the product creates an error and takes you back to the home page instead of the product details page. I tried @ShaGGy's fix by changing the following in Shopping_cart.php (THIS DID NOT WORK FOR ME) Remove $products_name .= ' <td valign="top" align="center"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '">' . tep_image(DIR_WS_IMAGES . $products[$i]['image'], $products[$i]['name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a></td>' . ' <td valign="top"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '"><strong>' . $products[$i]['name'] . '</strong></a>'; Replace with $products_name .= ' <td valign="top" align="center"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . urlencode($products[$i]['id'])) . '">' . tep_image(DIR_WS_IMAGES . $products[$i]['image'], $products[$i]['name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a></td>' . ' <td valign="top"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . urlencode($products[$i]['id'])) . '"><strong>' . $products[$i]['name'] . '</strong></a>'; Remove $products_name .= '<br>' . tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'style="width: 65px;" min="0"', 'number') . tep_draw_hidden_field('products_id[]', $products[$i]['id']) . ' ' . tep_draw_button(CART_BUTTON_UPDATE, 'fa fa-refresh', NULL, NULL, NULL, 'btn-info btn-xs') . ' ' . tep_draw_button(CART_BUTTON_REMOVE, 'fa fa-remove', tep_href_link(FILENAME_SHOPPING_CART, 'products_id=' . $products[$i]['id'] . '&action=remove_product'), NULL, NULL, 'btn-danger btn-xs'); Replace with $products_name .= '<br>' . tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'style="width: 65px;" min="0"', 'number') . tep_draw_hidden_field('products_id[]', $products[$i]['id']) . ' ' . tep_draw_button(CART_BUTTON_UPDATE, 'fa fa-refresh', NULL, NULL, NULL, 'btn-info btn-xs') . ' ' . tep_draw_button(CART_BUTTON_REMOVE, 'fa fa-remove', tep_href_link(FILENAME_SHOPPING_CART, ' products_id=' . urlencode($products[$i]['id']) . '&action=remove_product'), NULL, NULL, 'btn-danger btn-xs'); I then tried @Harald Ponce de Leon's recommendation to change these in the catalog/includes/functions/html_output.php and catalog/admin/includes/functions/html_output.php, in the tep_href_link() function definition: (THIS FIXED THE PRODUCT LISTING LINK AND NOW THE "remove from cart" BUTTON REFRESHES AND SAYS THE ITEM HAS BEEN REMOVED FROM CART EVEN THOUGH IT IS STILL IN THE CART). Remove if (tep_not_null($parameters)) { $link .= $page . '?' . tep_output_string($parameters); $separator = '&'; } else { $link .= $page; $separator = '?'; } Replace with if (tep_not_null($parameters)) { $p = array(); $query = parse_str($parameters, $p); $parameters = http_build_query(filter_var($p, FILTER_CALLBACK, ['options' => 'urlencode'])); $link .= $page . '?' . tep_output_string($parameters); $separator = '&'; } else { $link .= $page; $separator = '?'; } I also tried this and it also DID NOT WORK. try this in both catalog/includes/functions/html_output.php and catalog/admin/includes/functions/html_output.php: Directly after the "global $.." line in the tep_href_link() function definition, add the following "if" statement: function tep_href_link(.....) { global $.....; if (tep_not_null($parameters)) { $p = array(); $query = parse_str($parameters, $p); $parameters = http_build_query(filter_var($p, FILTER_CALLBACK, ['options' => 'urlencode'])); } ....... } So that still leaves me with a non-working remove from cart button. :(
  12. Can you point me to a walk-through on doing the update? I have never done an update and migration before. Do you think that will solve the brackets problem also?
  13. I made the changes in that post and it had no impact. Here is my shopping_cart.php after the changes referenced in that post. <?php /* $Id$ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2010 osCommerce Released under the GNU General Public License */ require("includes/application_top.php"); if ($cart->count_contents() > 0) { include(DIR_WS_CLASSES . 'payment.php'); $payment_modules = new payment; } require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_SHOPPING_CART); $breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_SHOPPING_CART)); require(DIR_WS_INCLUDES . 'template_top.php'); ?> <div class="page-header"> <h1><?php echo HEADING_TITLE; ?></h1> </div> <?php if ($messageStack->size('product_action') > 0) { echo $messageStack->output('product_action'); } ?> <?php if ($cart->count_contents() > 0) { ?> <?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_SHOPPING_CART, 'action=update_product')); ?> <div class="contentContainer"> <div class="contentText"> <?php $any_out_of_stock = 0; $products = $cart->get_products(); for ($i=0, $n=sizeof($products); $i<$n; $i++) { // Push all attributes information in an array if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) { while (list($option, $value) = each($products[$i]['attributes'])) { echo tep_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $value); $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . (int)$products[$i]['id'] . "' and pa.options_id = '" . (int)$option . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . (int)$value . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . (int)$languages_id . "' and poval.language_id = '" . (int)$languages_id . "'"); $attributes_values = tep_db_fetch_array($attributes); $products[$i][$option]['products_options_name'] = $attributes_values['products_options_name']; $products[$i][$option]['options_values_id'] = $value; $products[$i][$option]['products_options_values_name'] = $attributes_values['products_options_values_name']; $products[$i][$option]['options_values_price'] = $attributes_values['options_values_price']; $products[$i][$option]['price_prefix'] = $attributes_values['price_prefix']; } } } ?> <table class="table table-striped table-condensed"> <tbody> <?php $products_name = NULL; for ($i=0, $n=sizeof($products); $i<$n; $i++) { $products_name .= '<tr>'; $products_name .= ' <td valign="top" align="center"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . urlencode($products[$i]['id'])) . '">' . tep_image(DIR_WS_IMAGES . $products[$i]['image'], $products[$i]['name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a></td>' . ' <td valign="top"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . urlencode($products[$i]['id'])) . '"><strong>' . $products[$i]['name'] . '</strong></a>'; if (STOCK_CHECK == 'true') { $stock_check = tep_check_stock($products[$i]['id'], $products[$i]['quantity']); if (tep_not_null($stock_check)) { $any_out_of_stock = 1; $products_name .= $stock_check; } } if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) { reset($products[$i]['attributes']); while (list($option, $value) = each($products[$i]['attributes'])) { $products_name .= '<br /><small><i> - ' . $products[$i][$option]['products_options_name'] . ' ' . $products[$i][$option]['products_options_values_name'] . '</i></small>'; } } $products_name .= '<br>' . tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'style="width: 65px;" min="0"', 'number') . tep_draw_hidden_field('products_id[]', $products[$i]['id']) . ' ' . tep_draw_button(NULL, 'fa fa-refresh', NULL, NULL, NULL, 'btn-info btn-xs') . ' ' . tep_draw_button(NULL, 'fa fa-remove', tep_href_link(FILENAME_SHOPPING_CART, ' products_id=' . urlencode($products[$i]['id']) . '&action=remove_product'), NULL, NULL, 'btn-danger btn-xs'); $products_name .= '</td>'; $products_name .= ' <td align="right" valign="top"><strong>' . $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']), $products[$i]['quantity']) . '</strong></td>' . '</tr>'; } echo $products_name; ?> </tbody> </table> <p class="text-right"><strong><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $currencies->format($cart->show_total()); ?></strong></p> <?php if ($any_out_of_stock == 1) { if (STOCK_ALLOW_CHECKOUT == 'true') { ?> <div class="alert alert-warning"><?php echo OUT_OF_STOCK_CAN_CHECKOUT; ?></div> <?php } else { ?> <div class="alert alert-danger"><?php echo OUT_OF_STOCK_CANT_CHECKOUT; ?></div> <?php } } ?> </div> <div class="buttonSet"> <div class="text-right"><?php echo tep_draw_button(IMAGE_BUTTON_CHECKOUT, 'fa fa-angle-right', tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'), 'primary', NULL, 'btn-success'); ?></div> </div> <?php $initialize_checkout_methods = $payment_modules->checkout_initialization_method(); if (!empty($initialize_checkout_methods)) { ?> <div class="clearfix"></div> <p class="text-right"><?php echo TEXT_ALTERNATIVE_CHECKOUT_METHODS; ?></p> <?php reset($initialize_checkout_methods); while (list(, $value) = each($initialize_checkout_methods)) { ?> <p class="text-right"><?php echo $value; ?></p> <?php } } ?> </div> </form> <?php } else { ?> <div class="alert alert-danger"> <?php echo TEXT_CART_EMPTY; ?> </div> <p class="text-right"><?php echo tep_draw_button(IMAGE_BUTTON_CONTINUE, 'fa fa-angle-right', tep_href_link(FILENAME_DEFAULT), 'primary', NULL, 'btn-danger'); ?></p> <?php } require(DIR_WS_INCLUDES . 'template_bottom.php'); require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
  14. http://www.wildvettes.com/shopping_cart.php/products_id/617{2}83/action/remove_product FYI when I copy and past the remove from cart url the above is what gets copied but the line automatically gets changed to http://www.wildvettes.com/shopping_cart.php/products_id/617%7B2%7D83/action/remove_product so it does look to be an issue with the brackets being auto adjusted. I couldn't find anything in search though.
  15. I went to a few of the "live" sites on this website and each of them seems to use some completely different URL when it comes to product sorting. One site would sort by price or name whether in grid or list. Mine tries to always force it back into list. I actually just tried the refresh on the grid list switch and it is the same thing. So it doesn't really seem to matter whether or not the user is actually doing something. It seems to just work once every 2-5 page loads.
  16. I can literally just refresh a product page and the image popup will go in and out of working. It can be 2 page refreshes up to 5 before it works again and then only works once before starting the cycle over again. Any idea why is would be so random? You think my host is the issue?
  17. The %7B2 represents the second line in the "products options" under admin and the %7D84 is the 84th line under "option values" in admin. I suspect there is some kind of an issue here with the URL. I feel like the error relating to going back to the product page would be to tell it to drop the %7B2%7D84 and merely go to the base product.info.php product ID number. Removing it from the cart seems to be more complicated though as it needs to know what to remove given the individual attributes. This has to be a specific issue to the stock bootstrap configuration.
  18. wildvettes

    Getting a Paypal IPN Error from Paypal

    I did a test sale on my site and at first I was using discount code on the order total and got an error that it was in the wrong format. I then applied it to the sub-total and it worked. I suspect this is an issue I will need to investigate further. After I did that and returned to my site I got this from paypal... Please check your server that handles PayPal Instant Payment Notifications (IPN). IPNs sent to the following URL(s) are failing: http://www.wildvettes.com/catalog/ext/modules/payment/paypal/standard_ipn.php If you do not recognize this URL, you may be using a service provider that is using IPN on your behalf. Please contact your service provider with the above information. If this problem continues, IPNs may be disabled for your account. Thank you for your prompt attention to this issue. My website direct link forwards to my /catalog so I'm guessing that at the very least the URL is wrong. How do I fix that? With paypal or in my module? Then after I went back to discounting in my sub-total I completed a test sale. Everything went through. I received an email from paypal, my "customer" received an email about their order, but I never received an email that the order had been placed. I'm guessing because of the IPN? I did get two more emails from paypal last night at different intervals... Email Title: PayPal IPN Invalid Process then $HTTP_POST_VARS: $HTTP_GET_VARS: This was the only thing in the email. Same issue causing everything? Also last thing on the order checkout page it does not show the item description for purchase on the paypal invoice. It only shows my site description... Any help you can provide for any of these issues would be greatly appreciated. Thank You!
  19. wildvettes

    [Addon] Generic Box

    Great thanks, I already got it working outside of the generic box, but this change will allow me to add another whole "Generic Box" and turn it on and off with https correct? I actually had a split between encrypted and non-encrypted content in the same box, so I added the whole code line into the template_bottom.php in an infoboxcontainer div and now it latches on the bottom of the generic box. Thanks for the great add-on!
  20. wildvettes

    [Addon] Generic Box

    Hi Jim, First thank you for the module...works great. The problem I'm trying to fix is related to ssl encryption. I am using this box for twitter and facebook feeds. Facebook offers the feed in encrypted format so it works perfectly at all times. My twitter feed is not available in an https format I have this code <?php if( $_SERVER['HTTPS'] != "on" ) { ?> <script src="http://widgets.twimg.com/j/2/widget.js"></script> <script> new TWTR.Widget({ version: 2, type: 'search', search: 'Corvette', interval: 6000, title: 'Corvette Tweets', subject: '', width: 'auto', height: 300, theme: { shell: { background: '#535454', color: '#ffffff' }, tweets: { background: '#050505', color: '#f2eff2', links: '#1985b5' } }, features: { scrollbar: true, loop: true, live: true, hashtags: true, timestamp: true, avatars: true, toptweets: true, behavior: 'default' } }).render().start(); </script> <?php } ?> It works as it is supposed to from my main page, but inserted into the generic box text box it doesn't turn off on https. Is there somewhere else in the coding I can place this to have it show up properly? Thank you in advance. :D
  21. wildvettes

    SiteMonitor

    I did, but actually it isn't running properly either... I ran it manually again and it merely keeps replicating the same results over and over. So at this point I don't know what isn't working right as every other add-on seems to work. Maybe just a compatibility issue between those two add-ons.
  22. wildvettes

    SiteMonitor

    I installed minsparx and my sitemonitor disappeared...found out it replaced the column_left.php so i went in and added sitemonitor back in and nothing...still gone. when I manually type in sitemonitor_admin.php I get the page to configure... when i manually type in sitemonitor.php It runs and does what it is supposed to... and yet on my admin toolbar...nada
  23. wildvettes

    [Contribution] Mindsparx Admin v5 for 2.3

    Quick Question...I had sitemonitor up and working prior to the mindsparx admin install. After the install my sitemonitor disappeared...so I checked my column_left and sure enough it was not there Now after adding it back into the column left it still will not show up. What am I doing wrong? I have completely re-installed the add-on and nada
  24. Only shows up on pages with subcategory textboxes content...is the issue with my install, or with the add-on coding? I know the rule of thumb with html errors is to begin at the very first error on the page and that error is being generated by subcategory textboxes and no other pages are resulting in errors, which leads me to believe that first error is generating the other 3. The problem is an extra </div></form>, but I'm not sure how to go back into the add-on and find where this portion is. It looks good to me but I'm a super novice, so I'm wondering if the order they are being placed in might be wrong? This is the problem spot according to html tidy.. 71. <div><form name="filter" action="index.php" method="get"><p align="right"><strong>Show:</strong> <input type="hidden" name="cPath" value="134_143_191" /><input type="hidden" name="sort" value="2a" /><select name="filter_id" onchange="this.form.submit()"><option value="" selected="selected">All Manufacturers</option><option value="25">Halltech</option><option value="11">LG Motorsports</option></select><tr><td><div class="ui-widget-content ui-corner-all infoBoxContents"><h1>01-04 Corvette C5 Z06 Air Intakes</h1> 72. 73. Changing out your Corvette's Air Intake is one of the best bang for your buck mods you can do to your 01-04 C5 Z06 Corvette. 74. <p> 75. <b>You'll see:</b> 76. 77. <ul> 78. <li> Improved throttle response!</li> 79. <li> Improved seat of the pants power!</li> 80. <li>Reduced 1/4 mile times!</li> 81. <li>Improved fuel economy! </li> 82. </ul> If you are looking for somewhere to start improving the performance of your C5 Z06, this is it.</div></td></tr></p></form></div> line 82 column 116 - Error: discarding unexpected </form> line 82 column 123 - Error: discarding unexpected </div> Is anyone else experiencing this problem with this add-on?
  25. wildvettes

    [add-on] Discount Code (support)

    I am running 2.3.1 and did the manual install instructions. The install on my admin worked under order total, but when I go to the module under catalog I get an error 404 page not found message. Any ideas? There was only one section of coding that didn't exactly match what I had, maybe due to another mod... <h2><?php echo TABLE_HEADING_COMMENTS; ?></h2> <div class="contentText"> <?php echo tep_draw_textarea_field('comments', 'soft', '60', '5', $comments); ?> </div> <?php mine didn't have that last <?php Could this be the problem?
×