Showing ideas with status Investigating.
Show all ideas
Status:
Investigating
Submitted on
08-30-2016
12:32 PM
Submitted by
apiuser
on
08-30-2016
12:32 PM
Feature request from Pakkapao, posted on GitHub Jul 31, 2015
Hi,
This is a feature request to have alternative method for adding attributes to the product template. Currently, the only way to add them is drag&drop which we couldn't do it via mobile.
I have an idea showing list of available groups when long press attributes.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:32 PM
Submitted by
apiuser
on
08-30-2016
12:32 PM
Feature request from owenhaynes, posted on GitHub Oct 26, 2015
If you have more then one root category the following endpoint only ever returns one.
Have 2 root categories (default and test root) the following is returned
GET /rest/V1/categories
{"id":2,"parent_id":1,"name":"Default Category","is_active":true,"position":1,"level":1,"product_count":0,"children_data":[{"id":3,"parent_id":2,"name":"Cat 1","is_active":true,"position":1,"level":2,"product_count":0,"children_data":[{"id":4,"parent_id":3,"name":"Cat 1 sub","is_active":true,"position":1,"level":3,"product_count":0,"children_data":[{"id":5,"parent_id":4,"name":"Cat 1 sub sub","is_active":true,"position":1,"level":4,"product_count":1,"children_data":[]}]}]}]}
should this end point not return an array so that all the root categories are listed?
This is very similar to #2096, as I guess he was only using root categories
... View more
Status:
Investigating
Submitted on
08-30-2016
12:32 PM
Submitted by
apiuser
on
08-30-2016
12:32 PM
Feature request from barbarich-p, posted on GitHub Oct 26, 2015
Hello,
I found a bug on discount calculation.
File app/code/Magento/SalesRule/Model/RulesApplier.php Line 143
$qty = $this->validatorUtility->getItemQty($item, $rule);
deeper -
public function getItemQty($item, $rule)
{
$qty = $item->getTotalQty();
$discountQty = $rule->getDiscountQty();
return $discountQty ? min($qty, $discountQty) : $qty;
}
Line 157 - $this->validatorUtility->minFix($discountData, $item, $qty);
go deeper -
File app/code/Magento/SalesRule/Model/Utility.php
$discountAmount = min($itemDiscountAmount + $discountData->getAmount(), $itemPrice * $qty);
As a result, if some rule with field DiscountQty is applied after a rule without this field, the second one redefines the discount of the first one.
I wrote a blog post with more details about the issue here - https://blog.amasty.com/little-known-discount-issue-in-magento-and-how-to-fix-it/
This bug comes from Magento 1, and also you can reproduce this issue at all Magento 1.4 + versions
... View more
Status:
Investigating
Submitted on
08-30-2016
12:32 PM
Submitted by
apiuser
on
08-30-2016
12:32 PM
Feature request from mage2pro, posted on GitHub Nov 13, 2015
For example, displaying the SKU to the customers would be unnecessary for some Virtual products (software, support, repair, consulting).
... View more
Status:
Investigating
Submitted on
08-30-2016
12:31 PM
Submitted by
apiuser
on
08-30-2016
12:31 PM
Feature request from mc388, posted on GitHub Nov 27, 2015
Hi,
I just installed magento 2 with sample data and try to search for a product. After starting the search, mysql has a query which now is running over 27 minutes and it is still running.
Here the query:
INSERT INTO `search_tmp_5658146c0b72c8_28632618` SELECT `main_select`.`entity_id`, MAX(score) AS `relevance` FROM (SELECT `search_index`.`entity_id`, ((0) + LEAST((MATCH (data_index) AGAINST ('back*' IN BOOLEAN MODE)), 1000000) * POW(2, search_weight)) AS `score` FROM `catalogsearch_fulltext_scope1` AS `search_index`
LEFT JOIN `catalog_eav_attribute` AS `cea` ON search_index.attribute_id = cea.attribute_id
LEFT JOIN `cataloginventory_stock_status` AS `stock_index` ON search_index.entity_id = stock_index.product_id AND stock_index.website_id = '1' WHERE (stock_index.stock_status = 1) AND (MATCH (data_index) AGAINST ('back*' IN BOOLEAN MODE))) AS `main_select` GROUP BY `entity_id` ORDER BY `relevance` DESC LIMIT 10000 /* statement may be truncated */
... View more
Status:
Investigating
Submitted on
08-30-2016
12:31 PM
Submitted by
apiuser
on
08-30-2016
12:31 PM
Feature request from webkul, posted on GitHub Dec 14, 2015
cloudflare / CDN issue - product grid does not load - We are getting a very random issue whenever we supply the cloudlare on our server magento2 catalog grid does not load also throw an error related to backbone.js in admin product add at browser console.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:31 PM
Submitted by
apiuser
on
08-30-2016
12:31 PM
Feature request from arunkasyakar, posted on GitHub Dec 04, 2015
i am trying to add shipment information for an order but i am getting internal error
URL(POST): http://MYHOST/rest/default/V1/shipment/
payload:
{
"entity": {
"billingAddressId": 24,
"customerId": 8,
"emailSent": 0,
"orderId": 12,
"packages": [
{
"extensionAttributes": {}
}
],
"shippingAddressId": 23,
"storeId": 1,
"items": [
{
"orderItemId": 20,
"qty": 1,
"extensionAttributes": {}
}
],
"extensionAttributes": {}
}
}
response:
{
"messages": {
"error": [
{
"code": 500,
"message": "Server internal error. See details in report api/266657385283"
}
]
}
}
api/266657385283:
s:200:"Fatal Error: 'Cannot instantiate interface Magento\Sales\Api\Data\ShipmentPackageInterface' in '/var/www/html/MYPROJECT/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php' on line 73";
... View more
Status:
Investigating
Submitted on
08-30-2016
12:31 PM
Submitted by
apiuser
on
08-30-2016
12:31 PM
Feature request from keithbentrup, posted on GitHub Jan 19, 2016
Steps to reproduce
1) Install the reference store with a sample data
2) Configure js minification and deploy static assets
3) Visit a product page
Expected result:
Product page loads with product image and no js error in the js console
Actual result:
Product pages with no product image and a js error
Root cause:
JShrink munges lib/web/fotorama/fotorama.js. In my tests, JShrink 1.0.1 and JShrink 1.1.0 both munge the javascript when minifying.
This is a common problem with javascript minifiers. I've found yuicompressor to be much better, and when I minified with fotorama.js with yuicompressor, it worked.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:30 PM
Submitted by
apiuser
on
08-30-2016
12:30 PM
Feature request from fooman, posted on GitHub Feb 14, 2016
This code
private function load()
{
if ($this->packageModuleMap === null) {
$jsonData = $this->reader->getComposerJsonFiles()->toArray();
foreach ($this->componentRegistrar->getPaths(ComponentRegistrar::MODULE) as $moduleName => $moduleDir) {
$key = $moduleDir . '/composer.json';
assumes that the registered path also holds the composer.json file which is not necessarily the case (for example https://github.com/fooman/sameorderinvoicenumber-m2/tree/v2.0.2/src). I am hoping there is a way to query composer itself for all packages of type magento2-module.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:30 PM
Submitted by
apiuser
on
08-30-2016
12:30 PM
Feature request from stefandoorn, posted on GitHub Mar 16, 2016
I just stumbled into the fact that module-shipping requires zendframework/zend-http for its unit tests. So basically if I just want to do the tests of that module isolated (my module depends on that module again), I can't do that now as the requirements are not met.
So my proposal is that every module composer.json should specify the requirements needed to use that module stand-alone (the tests e.g.).
Probably has some impact, but it will improve module development imo.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:30 PM
Submitted by
apiuser
on
08-30-2016
12:30 PM
Feature request from wozniakm, posted on GitHub Mar 14, 2016
Steps to reproduce
Create configurable product
Call REST API to get products, for example GET /rest/V1/products?searchCriteria[page_size]=3
Expected result
Returned array should contain your added product with extension_attributes key inside
Actual result
The extension_attributes is not present
In ProductRepository there is a line $this->extensionAttributesJoinProcessor->process($collection); which calls method responsible for extension_attributes, but despite that they are not included into product. If you request product details by calling GET /rest/V1/products/:sku the extension_attributes array is present.
It really makes no sense to call API once to get products, then call API to get configurable product details and then, finally, call API to get values and labels for configurable options. Is there easier way?
... View more
Status:
Investigating
Submitted on
08-30-2016
12:30 PM
Submitted by
apiuser
on
08-30-2016
12:30 PM
Feature request from sameasterling, posted on GitHub Mar 26, 2016
if a configurable product has an only one variation, this variation should be preselected.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:30 PM
Submitted by
apiuser
on
08-30-2016
12:30 PM
Feature request from ruby10, posted on GitHub Feb 19, 2016
Here we have two scenarios to observer
1) order created for bundle-product which has value "separately" set for "Ship Bundle Items" field in it's settings : As shown in picture
If we create shipment record for child items via api "POST /V1/shipment/" it creating shipment record but with no data under "Items Shipped" block on shipment record, as shown in screenshot
Also , we are able to create shipment for entire bundle product perfectly , which should not be the case since we have opted "seperatey" for shipping in items settings.
2) order created for bundle-product which has value "together" set for "Ship Bundle Items" field:
The behavior is same here as it happening in scenario 1. Point to be noted here is for bundle product with "together" shipping setting, we should not be able to create shipments record for child items even if it is with blank data for "Items Shipment" record on shipment record.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:30 PM
Submitted by
apiuser
on
08-30-2016
12:30 PM
Feature request from ldusan84, posted on GitHub May 02, 2016
Steps to reproduce
Install Magento from develop branch.
Create a class that extends Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction .
Use that mass action from dropdown.
Expected result
No errors.
Actual result
PHP Fatal error: Call to a member function create() on null in /var/www/html/magento2/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php on line 54
There is a hidden dependency in https://github.com/magento/magento2/blob/develop/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php#L54
It is not obvious that the child class requires collectionFactory to be injected so it's not transparent which objects are needed for this class to work.
I tried to create a PR for this, by moving the collection factory to constructor, but the problem is that for example this class:
https://github.com/magento/magento2/blob/develop/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
Requires Magento\Sales\Model\ResourceModel\Order\Collection and this one:
https://github.com/magento/magento2/blob/develop/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
Requires Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory
These two don't have the same parent class or interface, so it seems that it's not possible to type hint.
Any thoughts?
... View more
Status:
Investigating
Submitted on
08-30-2016
12:30 PM
Submitted by
apiuser
on
08-30-2016
12:30 PM
Feature request from benchmarky, posted on GitHub May 14, 2016
Steps to reproduce
Create Simple Product, fill details and set price to $10.
Go to Advanced Settings > Advanced Pricing > Tier Price
Set Tier Price for customer group "NOT LOGGED IN", qty "1", price $15.
*point is to set tier pricing higher than regular price
Flush cache
Visit front end store
Expected result
See price for "NOT LOGGED IN" users as $15
Actual result
Price appears as $10 for "NOT LOGGED IN" users
--
This function is important due to the removal of the group pricing feature. For B2B stores this is a simple feature that would prevent the need for additional extensions for managing different pricing for different groups.
This would of course mean adjusting the logic of how pricing is shown in the front end, to only show that price and not do a crazy: $10, as low as $15 in the front end.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:30 PM
Submitted by
apiuser
on
08-30-2016
12:30 PM
Feature request from gamort, posted on GitHub Apr 20, 2016
The current documentation/implementation of composer allows for a large number of attack surfaces.
A "deployed" website[ie a website either installed using composer or a website which is installed from a downloaded zip file] should not have any need for the various development requirements - such as phpunit and other dev tools. Instead of requiring installers to remember to pass --no-dev to the commands - these options can be defined in the composer.json file [ie have a composer.json.dev and a composer.json.prod file - leave composer.json as it is in the github repository, but during the build process swap for the production/safer composer file].
By the same token, using the development version of vendor libraries adds yet more insecurity. A quick search for $_GET variables shows a large number of unsafe usages in the folder lusitanian/oauth/examples - with no fault to the library author. Examples and demo code do not need to be secure - it is expected that implementors would not deploy such code.
For the oath examples, they are protected by the htaccess files from direct access - however if Magento2 can be tricked into loading one that leads to security issues. Due to the reliance on the composer autoloading mechanisms such mischief is possible in theory.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:29 PM
Submitted by
apiuser
on
08-30-2016
12:29 PM
Feature request from bgkavinga, posted on GitHub May 23, 2016
In module-catalog/Model/Layer/Filter/AbstractFilter.php::isOptionReducesResults() checks whether the resulting option count is greater than products count. There could be an option that applies to all the products. Since this logic does not check equality, the option that applies to all the products in that category will not be shown.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:29 PM
Submitted by
apiuser
on
08-30-2016
12:29 PM
Feature request from kassner, posted on GitHub May 23, 2016
Hi,
I have an email template with this:
<strong>Comments:</strong> {{var comments|nl2br}}
So, if the user adds an HTML tag, it is not escaped in the email template. The thing is that is not possible to combine escape and nl2br at the same time. Is there a way to achieve this without a plugin?
Thanks!
... View more
Status:
Investigating
Submitted on
08-30-2016
12:29 PM
Submitted by
apiuser
on
08-30-2016
12:29 PM
Feature request from pynej, posted on GitHub Jun 03, 2016
If you set up multiple Magneto installs and varnish and get everything working. When you clear the Page Cache on one site it clears all magneto instances cache. The command passed to varnish should include a host header to allow the vcl file to filter ban's on that header.
This adds the current domain to the purge request.
--- vendor/magento/module-cache-invalidate/Model/PurgeCache.php.old 2016-06-03 14:14:45.320427000 -0400
+++ vendor/magento/module-cache-invalidate/Model/PurgeCache.php 2016-06-03 14:32:58.908971000 -0400
@@ -7,10 +7,12 @@
use Magento\Framework\Cache\InvalidateLogger;
use Magento\Framework\App\DeploymentConfig;
+use Magento\Framework\App\RequestInterface;
class PurgeCache
{
const HEADER_X_MAGENTO_TAGS_PATTERN = 'X-Magento-Tags-Pattern';
+ const HEADER_HOST = 'host';
/**
* @var \Magento\PageCache\Model\Cache\Server
@@ -28,6 +30,11 @@
private $logger;
/**
+ * @var RequestInterface
+ */
+ private $request;
+
+ /**
* Constructor
*
* @param \Magento\PageCache\Model\Cache\Server $cacheServer
@@ -37,11 +44,13 @@
public function __construct(
\Magento\PageCache\Model\Cache\Server $cacheServer,
\Magento\CacheInvalidate\Model\SocketFactory $socketAdapterFactory,
- InvalidateLogger $logger
+ InvalidateLogger $logger,
+ RequestInterface $request
) {
$this->cacheServer = $cacheServer;
$this->socketAdapterFactory = $socketAdapterFactory;
$this->logger = $logger;
+ $this->request = $request;
}
/**
@@ -55,7 +64,7 @@
{
$socketAdapter = $this->socketAdapterFactory->create();
$servers = $this->cacheServer->getUris();
- $headers = [self::HEADER_X_MAGENTO_TAGS_PATTERN => $tagsPattern];
+ $headers = [self::HEADER_X_MAGENTO_TAGS_PATTERN => $tagsPattern, self::HEADER_HOST => $this->request->getHttpHost()];
$socketAdapter->setOptions(['timeout' => 10]);
foreach ($servers as $server) {
try {
Then the vcl files can be updated to optionally filter on the domain.
--- vendor/magento/module-page-cache/etc/varnish4.vcl.old 2016-05-16 16:18:20.000000000 -0400
+++ vendor/magento/module-page-cache/etc/varnish4.vcl 2016-06-03 15:10:56.629687000 -0400
@@ -21,6 +21,8 @@
return (synth(400, "X-Magento-Tags-Pattern header required"));
}
ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
+ # or only for the current domain
+ # ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern + " && obj.http.X-Req-Host == " + req.http.host);
return (synth(200, "Purged"));
}
@@ -75,6 +77,8 @@
if (bereq.url ~ "\.js$" || beresp.http.content-type ~ "text") {
set beresp.do_gzip = true;
}
+
+ set beresp.http.X-Req-Host = bereq.http.host;
# cache only successfully responses and 404s
if (beresp.status != 200 && beresp.status != 404) {
@@ -123,4 +127,5 @@
unset resp.http.X-Varnish;
unset resp.http.Via;
unset resp.http.Link;
+ unset resp.http.X-Req-Host;
}
--- vendor/magento/module-page-cache/etc/varnish3.vcl.old 2016-05-16 16:18:20.000000000 -0400
+++ vendor/magento/module-page-cache/etc/varnish3.vcl 2016-06-03 15:05:46.033544000 -0400
@@ -28,6 +28,8 @@
error 400 "X-Magento-Tags-Pattern header required";
}
ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
+ # or only for the current domain
+ # ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern + " && obj.http.X-Req-Host == " + req.http.host);
error 200 "Purged";
}
@@ -85,6 +87,8 @@
set beresp.do_gzip = true;
}
+ set beresp.http.X-Req-Host = bereq.http.host;
+
# cache only successfully responses and 404s
if (beresp.status != 200 && beresp.status != 404) {
set beresp.ttl = 0s;
@@ -128,4 +132,5 @@
unset resp.http.X-Varnish;
unset resp.http.Via;
unset resp.http.Link;
+ unset resp.http.X-Req-Host;
}
In short this tell magento to pass the host name onto varnish they the user can choose to use this in the varnish config. In multi-domain sites it may cause more problems that it solves, but when running multiple sites on the same server one will not clear the cache of all others.
... View more
Status:
Investigating
Submitted on
08-30-2016
12:28 PM
Submitted by
apiuser
on
08-30-2016
12:28 PM
Feature request from flecxie, posted on GitHub Aug 03, 2016
I can't process KRW payments with Braintree on CE 2.1.0, getting the following error message in debug.log: Amount is an invalid format.
Steps to reproduce
Create Braintree Sandbox account + additional Korean Wong Merchant Account ID
Apply patch from https://github.com/magento/magento2/issues/5910 to get alternative Merchant Account ID's working
Configure Magento CE 2.1.0 store for alternative merchant ID, enable Braintree debugging & place test order for a large amount (I tried with ₩826,961.35 which is equivalent to ~700 USD)
Expected result
Success
Actual result
Fails with error below in debug.log:
'response' =>
array (
'success' => false,
'' . "\0" . '*' . "\0" . '_attributes' =>
array (
'errors' =>
Braintree\Error\ErrorCollection::__set_state(array(
'_errors' =>
Braintree\Error\ValidationErrorCollection::__set_state(array(
'_errors' =>
array (
),
'_nested' =>
array (
'transaction' =>
Braintree\Error\ValidationErrorCollection::__set_state(array(
'_errors' =>
array (
0 =>
Braintree\Error\Validation::__set_state(array(
'_attribute' => 'amount',
'_code' => '81503',
'_message' => 'Amount is an invalid format.',
)),
),
... View more