Why is product flat collection disabled in checkout / cart pages since CE / EE

Since CE / EE cart and checkout controllers have preDispatch method updated with the following changes:


which forces product collections to use EAV tables instead of catalog_product_flat_x one(s). Is the reason behind this known? There are no exact mentions of the change in release notes.

Override bloks and models in Magento is not working

I’m trying to override the function _prepareCollection in Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Super_Config_Grid class

    <?php class Ayasoftware_RequiredOptions_Block_Adminhtml_Catalog_Product_Edit_Tab_Super_Config_Grid extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Super_Config_Grid {      protected function _prepareCollection()     {          echo "testing if overridden ";         $  allowProductTypes = array();         foreach (Mage::helper('catalog/product_configuration')->getConfigurableAllowedTypes() as $  type) {             $  allowProductTypes[] = $  type->getName();         }          $  product = $  this->_getProduct();         $  collection = $  product->getCollection()             ->addAttributeToSelect('name')             ->addAttributeToSelect('sku')             ->addAttributeToSelect('attribute_set_id')             ->addAttributeToSelect('type_id')             ->addAttributeToSelect('price')             ->addFieldToFilter('attribute_set_id',$  product->getAttributeSetId())             ->addFieldToFilter('type_id', $  allowProductTypes)            // ->addFilterByRequiredOptions()             ->joinAttribute('name', 'catalog_product/name', 'entity_id', null, 'inner');          if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory')) {             Mage::getModel('cataloginventory/stock_item')->addCatalogInventoryToProductCollection($  collection);         }          foreach ($  product->getTypeInstance(true)->getUsedProductAttributes($  product) as $  attribute) {             $  collection->addAttributeToSelect($  attribute->getAttributeCode());             $  collection->addAttributeToFilter($  attribute->getAttributeCode(), array('notnull'=>1));         }          $  this->setCollection($  collection);          if ($  this->isReadonly()) {             $  collection->addFieldToFilter('entity_id', array('in' => $  this->_getSelectedProducts()));         }          parent::_prepareCollection();         return $  this;     } } 

in my config.xml I have this

    <?xml version="1.0"?> <config>     <modules>         <Ayasoftware_RequiredOptions>             <version>0.1.0</version>         </Ayasoftware_RequiredOptions>     </modules>     <global>         <helpers>             <requiredoptions>                 <class>Ayasoftware_RequiredOptions_Helper</class>             </requiredoptions>         </helpers>         <blocks>             <requiredoptions>                 <class>Ayasoftware_RequiredOptions_Block</class>             </requiredoptions>             <adminhtml>                 <rewrite>                     <catalog_product_edit_tab_super_config_grid>Ayasoftware_RequiredOptions_Block_Adminhtml_Catalog_Product_Edit_Tab_Super_Config_Grid</catalog_product_edit_tab_super_config_grid>                 </rewrite>             </adminhtml>         </blocks>         <models>             <requiredoptions>                 <class>Ayasoftware_RequiredOptions_Model</class>                 <resourceModel>requiredoptions_mysql4</resourceModel>             </requiredoptions>          </models>     </global> </config> 

the function _prepareCollection is overridden correctly, but still using the original function that does not filter by ->addFilterByRequiredOptions()

any idea how to fix this? was working fine in older versions.

Impact of programming errors in wishlist observer introduced in

The release of introduces two programming errors in the wishlist observer: in order to make the method Mage_Wishlist_Model_Observer::processAddToCart compatible with PHP 7.2, the two usages of count on a possible NULL value are replaced by empty while it should have been !empty.

This is the diff between and of the file app/code/core/Mage/Wishlist/Model/Observer.php:

--- a/app/code/core/Mage/Wishlist/Model/Observer.php +++ b/app/code/core/Mage/Wishlist/Model/Observer.php @@ -102,7 +102,7 @@ class Mage_Wishlist_Model_Observer extends Mage_Core_Model_Abstract              $  wishlistIds = array($  singleWishlistId);          }  -        if (count($  wishlistIds) && $  request->getParam('wishlist_next')){ +        if (empty($  wishlistIds) && $  request->getParam('wishlist_next')){              $  wishlistId = array_shift($  wishlistIds);               if (Mage::getSingleton('customer/session')->isLoggedIn()) { @@ -125,7 +125,7 @@ class Mage_Wishlist_Model_Observer extends Mage_Core_Model_Abstract              Mage::getSingleton('checkout/session')->setSingleWishlistId(null);          }  -        if ($  request->getParam('wishlist_next') && count($  urls)) { +        if ($  request->getParam('wishlist_next') && empty($  urls)) {              $  url = array_shift($  urls);              $  message = array_shift($  messages); 

the impact of this error is not clear to me: on the one hand the bodies of the if statements are executed exactly in wrong circumstances resulting in wishlist items not being deleted, incorrect/missing error messages in the session and redirects to NULL. But on the other hand, this logic is only triggered when the wishlist_next query parameter has a truthy value. However, I cannot find any place where wishlist_next query parameter is set.

So my question is: what is the real impact of these programming errors?