Skip to content
This repository
Browse code

Update as of 6/7/2012

* Fixed various crashes of visual design editor
* Fixed some layouts that caused visual design editor toolbar disappearing, also fixed some confusing page type labels
* Eliminated "after commit callback" workaround from integration tests by implementing "transparent transactions" capability in integration testing framework
* Refactored admin authentication/authorization in RSS module. Removed program termination and covered the controllers with tests
* Removed HTML-report feature of copy-paste detector which never worked anyway (`dev/tests/static/framework/Inspection/CopyPasteDetector/html_report.xslt` and all related code)
* Github requests:
** [#19](#19) Implemented "soft" dependency between modules and performed several improvements in the related code, covered with tests
  • Loading branch information...
commit 93f38e9b3c74fb61df0da2ef5047aeca64a4356a 1 parent 99b4374
authored June 07, 2012

Showing 97 changed files with 1,613 additions and 1,241 deletions. Show diff stats Hide diff stats

  1. 10  CHANGELOG.markdown
  2. 19  app/Mage.php
  3. 4  app/code/core/Mage/Api2/view/adminhtml/layout.xml
  4. 9  app/code/core/Mage/Catalog/view/frontend/msrp.xml
  5. 18  app/code/core/Mage/Checkout/view/frontend/layout.xml
  6. 59  app/code/core/Mage/Core/Helper/Http.php
  7. 112  app/code/core/Mage/Core/Model/Config.php
  8. 193  app/code/core/Mage/Core/Model/Config/Module.php
  9. 4  app/code/core/Mage/Core/view/frontend/layout.xml
  10. 2  app/code/core/Mage/DesignEditor/view/frontend/layout.xml
  11. 4  app/code/core/Mage/ImportExport/Model/Export/Entity/Product.php
  12. 7  app/code/core/Mage/Install/Model/Observer.php
  13. 8  app/code/core/Mage/Install/etc/config.xml
  14. 26  app/code/core/Mage/Oauth/view/adminhtml/layout.xml
  15. 16  app/code/core/Mage/Oauth/view/frontend/layout.xml
  16. 3  app/code/core/Mage/Paypal/view/frontend/layout.xml
  17. 3  app/code/core/Mage/PaypalUk/view/frontend/layout.xml
  18. 10  app/code/core/Mage/Review/etc/config.xml
  19. 13  app/code/core/Mage/Review/view/frontend/layout.xml
  20. 4  app/code/core/Mage/Rss/Block/Catalog/New.php
  21. 25  app/code/core/Mage/Rss/Block/Catalog/NotifyStock.php
  22. 25  app/code/core/Mage/Rss/Block/Catalog/Review.php
  23. 20  app/code/core/Mage/Rss/Block/Order/New.php
  24. 59  app/code/core/Mage/Rss/Controller/AdminhtmlAbstract.php
  25. 72  app/code/core/Mage/Rss/Helper/Data.php
  26. 76  app/code/core/Mage/Rss/Model/Observer.php
  27. 51  app/code/core/Mage/Rss/Model/Session.php
  28. 119  app/code/core/Mage/Rss/controllers/CatalogController.php
  29. 57  app/code/core/Mage/Rss/controllers/IndexController.php
  30. 59  app/code/core/Mage/Rss/controllers/OrderController.php
  31. 18  app/code/core/Mage/Rss/etc/config.xml
  32. 26  app/code/core/Mage/Rss/view/frontend/layout.xml
  33. 10  app/code/core/Mage/Sales/view/frontend/layout.xml
  34. 2  app/design/frontend/default/iphone/Mage_Catalog/layout.xml
  35. 2  app/design/frontend/default/iphone/Mage_CatalogSearch/layout.xml
  36. 4  app/design/frontend/default/iphone/Mage_Checkout/layout.xml
  37. 2  app/design/frontend/default/iphone/Mage_Customer/layout.xml
  38. 2  app/design/frontend/default/iphone/Mage_Newsletter/layout.xml
  39. 2  app/design/frontend/default/iphone/Mage_Page/layout.xml
  40. 12  app/design/frontend/default/iphone/Mage_Review/layout.xml
  41. 20  app/design/frontend/default/iphone/Mage_Rss/layout.xml
  42. 42  app/design/frontend/default/iphone/Mage_Sales/layout.xml
  43. 8  app/design/frontend/default/iphone/Mage_Wishlist/layout.xml
  44. 2  app/design/frontend/default/modern/Mage_Catalog/layout.xml
  45. 2  app/design/frontend/default/modern/Mage_Checkout/layout.xml
  46. 2  app/design/frontend/default/modern/Mage_Customer/layout.xml
  47. 12  app/design/frontend/default/modern/Mage_Review/layout.xml
  48. 26  app/design/frontend/default/modern/Mage_Rss/layout.xml
  49. 10  app/design/frontend/default/modern/Mage_Sales/layout.xml
  50. 9  dev/tests/integration/etc/local-mysql.xml.dist
  51. 81  dev/tests/integration/framework/Magento/Test/Db/Adapter/Mysql.php
  52. 31  ...les/order_standard_commit_workaround.php → framework/Magento/Test/Db/Adapter/TransactionInterface.php}
  53. 4  dev/tests/integration/framework/Magento/Test/Listener/Annotation/Fixture.php
  54. 35  dev/tests/integration/framework/Magento/Test/Request.php
  55. 32  dev/tests/integration/framework/Magento/Test/TestCase/ControllerAbstract.php
  56. 106  dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Db/Adapter/TransactionInterfaceTest.php
  57. 26  dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/RequestTest.php
  58. 4  dev/tests/integration/testsuite/Mage/Adminhtml/controllers/Sales/OrderControllerTest.php
  59. 7  ...uite/Mage/{Sales/_files/transactions_commit_workaround.php → Catalog/_files/product_special_price.php}
  60. 2  dev/tests/integration/testsuite/Mage/Catalog/_files/products_new.php
  61. 2  dev/tests/integration/testsuite/Mage/Catalog/_files/two_products.php
  62. 2  dev/tests/integration/testsuite/Mage/Core/Model/_files/_layout_update.xml
  63. 2  dev/tests/integration/testsuite/Mage/Core/Model/_files/design/frontend/test/default/Mage_Core/layout.xml
  64. 4  dev/tests/integration/testsuite/Mage/Paypal/Model/IpnTest.php
  65. 2  dev/tests/integration/testsuite/Mage/Paypal/controllers/HostedproControllerTest.php
  66. 4  dev/tests/integration/testsuite/Mage/Paypal/controllers/PayflowControllerTest.php
  67. 2  dev/tests/integration/testsuite/Mage/Paypal/controllers/PayflowadvancedControllerTest.php
  68. 4  dev/tests/integration/testsuite/Mage/Paypal/controllers/StandardControllerTest.php
  69. 17  ...ests/integration/testsuite/Mage/{Sales/_files/order_commit_workaround.php → Review/_files/reviews.php}
  70. 70  dev/tests/integration/testsuite/Mage/Rss/Helper/DataTest.php
  71. 149  dev/tests/integration/testsuite/Mage/Rss/controllers/CatalogControllerTest.php
  72. 69  dev/tests/integration/testsuite/Mage/Rss/controllers/IndexControllerTest.php
  73. 82  dev/tests/integration/testsuite/Mage/Rss/controllers/OrderControllerTest.php
  74. 2  dev/tests/integration/testsuite/Mage/Sales/Model/AbstractTest.php
  75. 2  dev/tests/integration/testsuite/Mage/Sales/Model/Order/Payment/TransactionTest.php
  76. 1  dev/tests/integration/testsuite/Mage/Sales/_files/order.php
  77. 2  dev/tests/integration/testsuite/Mage/Wishlist/_files/wishlist.php
  78. 53  dev/tests/integration/testsuite/integrity/LayoutTest.php
  79. 5  dev/tests/integration/testsuite/integrity/modular/TemplateFilesTest.php
  80. 40  dev/tests/static/framework/Inspection/CopyPasteDetector/Command.php
  81. 98  dev/tests/static/framework/Inspection/CopyPasteDetector/html_report.xslt
  82. 24  dev/tests/static/framework/tests/unit/testsuite/Inspection/CopyPasteDetector/CommandTest.php
  83. 77  dev/tests/static/testsuite/Integrity/LayoutTest.php
  84. 11  dev/tests/static/testsuite/Legacy/LayoutTest.php
  85. 2  dev/tests/static/testsuite/Legacy/_files/obsolete_classes.php
  86. 3  dev/tests/static/testsuite/Legacy/_files/obsolete_constants.php
  87. 5  dev/tests/static/testsuite/Legacy/_files/obsolete_methods.php
  88. 1  dev/tests/static/testsuite/Php/_files/whitelist/core.txt
  89. 103  dev/tests/unit/testsuite/Mage/Core/Helper/HttpTest.php
  90. 105  dev/tests/unit/testsuite/Mage/Core/Model/Config/ModuleTest.php
  91. 43  dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_dependency_circular_input.xml
  92. 43  dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_dependency_circular_soft_input.xml
  93. 20  ...feed.phtml → dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_dependency_linear_input.xml
  94. 30  ...ommit_workaround.php → unit/testsuite/Mage/Core/Model/Config/_files/module_dependency_wrong_input.xml}
  95. 44  dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_filtered.xml
  96. 53  dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_input.xml
  97. 50  dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_sorted.xml
10  CHANGELOG.markdown
Source Rendered
... ...
@@ -1,3 +1,13 @@
  1
+Update as of 6/7/2012
  2
+=====================
  3
+* Fixed various crashes of visual design editor
  4
+* Fixed some layouts that caused visual design editor toolbar disappearing, also fixed some confusing page type labels
  5
+* Eliminated "after commit callback" workaround from integration tests by implementing "transparent transactions" capability in integration testing framework
  6
+* Refactored admin authentication/authorization in RSS module. Removed program termination and covered the controllers with tests
  7
+* Removed HTML-report feature of copy-paste detector which never worked anyway (`dev/tests/static/framework/Inspection/CopyPasteDetector/html_report.xslt` and all related code)
  8
+* Github requests:
  9
+** [#19](https://github.com/magento/magento2/pull/19) Implemented "soft" dependency between modules and performed several improvements in the related code, covered with tests
  10
+
1 11
 Update as of 5/31/2012
2 12
 ======================
3 13
 * Implemented backend authentication independent of `Mage_Adminhtml` module. Authentication can be disabled
19  app/Mage.php
@@ -659,25 +659,10 @@ public static function run($code = '', $type = 'store', $options = array())
659 659
             Magento_Profiler::stop('mage');
660 660
         } catch (Mage_Core_Model_Session_Exception $e) {
661 661
             header('Location: ' . self::getBaseUrl());
662  
-            die();
663 662
         } catch (Mage_Core_Model_Store_Exception $e) {
664  
-            require_once(self::getBaseDir() . DS . 'pub' . DS . 'errors' . DS . '404.php');
665  
-            die();
  663
+            require_once(self::getBaseDir() . '/pub/errors/404.php');
666 664
         } catch (Exception $e) {
667  
-            if (self::isInstalled() || self::$_isDownloader) {
668  
-                self::printException($e);
669  
-                exit();
670  
-            }
671  
-            try {
672  
-                self::dispatchEvent('mage_run_exception', array('exception' => $e));
673  
-                if (!headers_sent()) {
674  
-                    header('Location:' . self::getUrl('install'));
675  
-                } else {
676  
-                    self::printException($e);
677  
-                }
678  
-            } catch (Exception $ne) {
679  
-                self::printException($ne, $e->getMessage());
680  
-            }
  665
+            self::printException($e);
681 666
         }
682 667
     }
683 668
 
4  app/code/core/Mage/Api2/view/adminhtml/layout.xml
@@ -92,12 +92,12 @@
92 92
 
93 93
     <adminhtml_api2_role_grid>
94 94
         <remove name="root"/>
95  
-        <block type="Mage_Api2_Block_Adminhtml_Roles_Grid" name="api2_roles.grid" output="toHtml"/>
  95
+        <block type="Mage_Api2_Block_Adminhtml_Roles_Grid" name="api2_roles.grid" output="1"/>
96 96
     </adminhtml_api2_role_grid>
97 97
 
98 98
     <adminhtml_api2_role_usersgrid>
99 99
         <remove name="root"/>
100  
-        <block type="Mage_Api2_Block_Adminhtml_Roles_Tab_Users" name="adminhtml.role.edit.tab.users" output="toHtml"/>
  100
+        <block type="Mage_Api2_Block_Adminhtml_Roles_Tab_Users" name="adminhtml.role.edit.tab.users" output="1"/>
101 101
     </adminhtml_api2_role_usersgrid>
102 102
 
103 103
     <!-- admin acl users edit page -->
9  app/code/core/Mage/Catalog/view/frontend/msrp.xml
@@ -74,8 +74,7 @@ Default layout, loads most of the pages
74 74
         <update handle="MAP_popup" />
75 75
     </tag_customer_view>
76 76
 
77  
-    <MAP_popup translate="label">
78  
-        <label>Catalog MAP Popup</label>
  77
+    <MAP_popup>
79 78
         <reference name="head">
80 79
             <action method="addJs" ifconfig="sales/msrp/enabled"><file>Mage_Catalog::msrp.js</file></action>
81 80
         </reference>
@@ -83,8 +82,7 @@ Default layout, loads most of the pages
83 82
             <block type="Mage_Core_Block_Template" template="Mage_Catalog::msrp/popup.phtml" name="product.tooltip"/>
84 83
         </reference>
85 84
     </MAP_popup>
86  
-    <MAP_price_msrp_item translate="label">
87  
-        <label>Catalog MAP Price MSRP Item</label>
  85
+    <MAP_price_msrp_item>
88 86
         <reference name="catalog_product_price_template">
89 87
             <action method="addPriceBlockType"><type>msrp</type><block>Mage_Catalog_Block_Product_Price</block><template>product/price_msrp_item.phtml</template></action>
90 88
         </reference>
@@ -92,8 +90,7 @@ Default layout, loads most of the pages
92 90
             <action method="addPriceBlockType"><type>msrp</type><block>Mage_Catalog_Block_Product_Price</block><template>product/price_msrp_item.phtml</template></action>
93 91
         </reference>
94 92
     </MAP_price_msrp_item>
95  
-    <MAP_price_msrp_wishlist_item translate="label">
96  
-        <label>Catalog MAP Price MSRP Wishlist Item</label>
  93
+    <MAP_price_msrp_wishlist_item>
97 94
         <reference name="catalog_product_price_template">
98 95
             <action method="addPriceBlockType"><type>msrp</type><block>Mage_Catalog_Block_Product_Price</block><template>Mage_Wishlist::render/item/price_msrp_item.phtml</template></action>
99 96
         </reference>
18  app/code/core/Mage/Checkout/view/frontend/layout.xml
@@ -90,10 +90,10 @@ Default layout, loads most of the pages
90 90
     </checkout_cart_index>
91 91
 
92 92
     <checkout_cart_configure translate="label" type="page" parent="catalog_product_view">
93  
-        <label>Configure Cart Item</label>
  93
+        <label>Configure Cart Item (Any)</label>
94 94
         <update handle="catalog_product_view"/>
95 95
         <reference name="product.info">
96  
-            <block type="Mage_Checkout_Block_Cart_Item_Configure" name="checkout.cart.item.configure.block"></block>
  96
+            <block type="Mage_Checkout_Block_Cart_Item_Configure" name="checkout.cart.item.configure.block"/>
97 97
         </reference>
98 98
         <reference name="product.info.addtocart">
99 99
             <action method="setTemplate"><template>Mage_Checkout::cart/item/configure/updatecart.phtml</template></action>
@@ -104,17 +104,17 @@ Default layout, loads most of the pages
104 104
     </checkout_cart_configure>
105 105
 
106 106
     <checkout_cart_configure_type_downloadable translate="label" module="Mage_Downloadable" type="page" parent="checkout_cart_configure">
107  
-        <label>Configure Cart Item</label>
  107
+        <label>Configure Cart Item (Downloadable)</label>
108 108
         <update handle="catalog_product_view_type_downloadable"/>
109 109
     </checkout_cart_configure_type_downloadable>
110 110
 
111 111
     <checkout_cart_configure_type_configurable translate="label" module="Mage_Catalog" type="page" parent="checkout_cart_configure">
112  
-        <label>Configure Cart Item</label>
  112
+        <label>Configure Cart Item (Configurable)</label>
113 113
         <update handle="catalog_product_view_type_configurable"/>
114 114
     </checkout_cart_configure_type_configurable>
115 115
 
116 116
     <checkout_cart_configure_type_bundle translate="label" module="Mage_Bundle" type="page" parent="checkout_cart_configure">
117  
-        <label>Configure Bundle Cart Item</label>
  117
+        <label>Configure Cart Item (Bundle)</label>
118 118
         <update handle="catalog_product_view_type_bundle"/>
119 119
         <reference name="product.info.addtocart.bundle">
120 120
             <action method="setTemplate"><template>Mage_Checkout::cart/item/configure/updatecart.phtml</template></action>
@@ -434,12 +434,4 @@ One page checkout order review block
434 434
             <block type="Mage_Checkout_Block_Onepage_Failure" name="checkout.failure" template="onepage/failure.phtml"/>
435 435
         </reference>
436 436
     </checkout_onepage_failure>
437  
-
438  
-    <checkout_onepage_savepayment translate="label">
439  
-        <label>One Page Checkout Save Payment</label>
440  
-    </checkout_onepage_savepayment>
441  
-
442  
-    <checkout_onepage_reorder translate="label">
443  
-        <label>One Page Checkout Reorder</label>
444  
-    </checkout_onepage_reorder>
445 437
 </layout>
59  app/code/core/Mage/Core/Helper/Http.php
@@ -43,63 +43,60 @@ class Mage_Core_Helper_Http extends Mage_Core_Helper_Abstract
43 43
     protected $_remoteAddr;
44 44
 
45 45
     /**
46  
-     * Validate and retrieve user and password from HTTP
  46
+     * Extract "login" and "password" credentials from HTTP-request
47 47
      *
  48
+     * Returns plain array with 2 items: login and password respectively
  49
+     *
  50
+     * @param Zend_Controller_Request_Http $request
48 51
      * @return array
49 52
      */
50  
-    public function authValidate($headers = null)
  53
+    public function getHttpAuthCredentials(Zend_Controller_Request_Http $request)
51 54
     {
52  
-        if(!is_null($headers)) {
53  
-            $_SERVER = $headers;
54  
-        }
55  
-
  55
+        $server = $request->getServer();
56 56
         $user = '';
57 57
         $pass = '';
58 58
 
59  
-        // moshe's fix for CGI
60  
-        if (empty($_SERVER['HTTP_AUTHORIZATION'])) {
61  
-            foreach ($_SERVER as $k=>$v) {
62  
-                if (substr($k, -18)==='HTTP_AUTHORIZATION' && !empty($v)) {
63  
-                    $_SERVER['HTTP_AUTHORIZATION'] = $v;
  59
+        if (empty($server['HTTP_AUTHORIZATION'])) {
  60
+            foreach ($server as $k => $v) {
  61
+                if (substr($k, -18) === 'HTTP_AUTHORIZATION' && !empty($v)) {
  62
+                    $server['HTTP_AUTHORIZATION'] = $v;
64 63
                     break;
65 64
                 }
66 65
             }
67 66
         }
68 67
 
69  
-        if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
70  
-            $user = $_SERVER['PHP_AUTH_USER'];
71  
-            $pass = $_SERVER['PHP_AUTH_PW'];
  68
+        if (isset($server['PHP_AUTH_USER']) && isset($server['PHP_AUTH_PW'])) {
  69
+            $user = $server['PHP_AUTH_USER'];
  70
+            $pass = $server['PHP_AUTH_PW'];
72 71
         }
73  
-        //  IIS Note::  For HTTP Authentication to work with IIS,
74  
-        // the PHP directive cgi.rfc2616_headers must be set to 0 (the default value).
75  
-        elseif (!empty($_SERVER['HTTP_AUTHORIZATION'])) {
76  
-            $auth = $_SERVER['HTTP_AUTHORIZATION'];
  72
+        /**
  73
+         * IIS Note: for HTTP authentication to work with IIS,
  74
+         * the PHP directive cgi.rfc2616_headers must be set to 0 (the default value).
  75
+         */
  76
+        elseif (!empty($server['HTTP_AUTHORIZATION'])) {
  77
+            $auth = $server['HTTP_AUTHORIZATION'];
77 78
             list($user, $pass) = explode(':', base64_decode(substr($auth, strpos($auth, " ") + 1)));
78 79
         }
79  
-        elseif (!empty($_SERVER['Authorization'])) {
80  
-            $auth = $_SERVER['Authorization'];
  80
+        elseif (!empty($server['Authorization'])) {
  81
+            $auth = $server['Authorization'];
81 82
             list($user, $pass) = explode(':', base64_decode(substr($auth, strpos($auth, " ") + 1)));
82 83
         }
83 84
 
84  
-        if (!$user || !$pass) {
85  
-            $this->authFailed();
86  
-        }
87  
-
88 85
         return array($user, $pass);
89 86
     }
90 87
 
91 88
     /**
92  
-     * Send auth failed Headers and exit
  89
+     * Set "auth failed" headers to the specified response object
93 90
      *
  91
+     * @param Zend_Controller_Response_Http $response
  92
+     * @param string $realm
94 93
      */
95  
-    public function authFailed()
  94
+    public function failHttpAuthentication(Zend_Controller_Response_Http $response, $realm)
96 95
     {
97  
-        Mage::app()->getResponse()
98  
-            ->setHeader('HTTP/1.1','401 Unauthorized')
99  
-            ->setHeader('WWW-Authenticate','Basic realm="RSS Feeds"')
  96
+        $response->setHeader('HTTP/1.1', '401 Unauthorized')
  97
+            ->setHeader('WWW-Authenticate', 'Basic realm="' . $realm . '"')
100 98
             ->setBody('<h1>401 Unauthorized</h1>')
101  
-            ->sendResponse();
102  
-        exit;
  99
+        ;
103 100
     }
104 101
 
105 102
     /**
112  app/code/core/Mage/Core/Model/Config.php
@@ -753,21 +753,6 @@ public function addAllowedModules($module)
753 753
     }
754 754
 
755 755
     /**
756  
-     * Define if module is allowed
757  
-     *
758  
-     * @param  string $moduleName
759  
-     * @return bool
760  
-     */
761  
-    protected function _isAllowedModule($moduleName)
762  
-    {
763  
-        if (empty($this->_allowedModules)) {
764  
-            return true;
765  
-        } else {
766  
-            return in_array($moduleName, $this->_allowedModules);
767  
-        }
768  
-    }
769  
-
770  
-    /**
771 756
      * Load declared modules configuration
772 757
      *
773 758
      * @return  Mage_Core_Model_Config
@@ -776,57 +761,18 @@ protected function _loadDeclaredModules()
776 761
     {
777 762
         $moduleFiles = $this->_getDeclaredModuleFiles();
778 763
         if (!$moduleFiles) {
779  
-            return ;
  764
+            return $this;
780 765
         }
781 766
 
782 767
         Magento_Profiler::start('load_modules_declaration');
783 768
 
784  
-        $unsortedConfig = new Mage_Core_Model_Config_Base();
785  
-        $unsortedConfig->loadString('<config/>');
786  
-        $fileConfig = new Mage_Core_Model_Config_Base();
787  
-
788  
-        // load modules declarations
789  
-        foreach ($moduleFiles as $file) {
790  
-            $fileConfig->loadFile($file);
  769
+        $unsortedConfig = new Mage_Core_Model_Config_Base('<config/>');
  770
+        foreach ($moduleFiles as $oneConfigFile) {
  771
+            $fileConfig = new Mage_Core_Model_Config_Base($oneConfigFile);
791 772
             $unsortedConfig->extend($fileConfig);
792 773
         }
793 774
 
794  
-        $moduleDepends = array();
795  
-        foreach ($unsortedConfig->getNode('modules')->children() as $moduleName => $moduleNode) {
796  
-            if (!$this->_isAllowedModule($moduleName)) {
797  
-                continue;
798  
-            }
799  
-
800  
-            $depends = array();
801  
-            if ($moduleNode->depends) {
802  
-                foreach ($moduleNode->depends->children() as $depend) {
803  
-                    $depends[$depend->getName()] = true;
804  
-                }
805  
-            }
806  
-            $moduleDepends[$moduleName] = array(
807  
-                'module'    => $moduleName,
808  
-                'depends'   => $depends,
809  
-                'active'    => ('true' === (string)$moduleNode->active ? true : false),
810  
-            );
811  
-        }
812  
-
813  
-        // check and sort module dependence
814  
-        $moduleDepends = $this->_sortModuleDepends($moduleDepends);
815  
-
816  
-        // create sorted config
817  
-        $sortedConfig = new Mage_Core_Model_Config_Base();
818  
-        $sortedConfig->loadString('<config><modules/></config>');
819  
-
820  
-        foreach ($unsortedConfig->getNode()->children() as $nodeName => $node) {
821  
-            if ($nodeName != 'modules') {
822  
-                $sortedConfig->getNode()->appendChild($node);
823  
-            }
824  
-        }
825  
-
826  
-        foreach ($moduleDepends as $moduleProp) {
827  
-            $node = $unsortedConfig->getNode('modules/'.$moduleProp['module']);
828  
-            $sortedConfig->getNode('modules')->appendChild($node);
829  
-        }
  775
+        $sortedConfig = new Mage_Core_Model_Config_Module($unsortedConfig, $this->_allowedModules);
830 776
 
831 777
         $this->extend($sortedConfig);
832 778
 
@@ -835,54 +781,6 @@ protected function _loadDeclaredModules()
835 781
     }
836 782
 
837 783
     /**
838  
-     * Sort modules and check depends
839  
-     *
840  
-     * @param array $modules
841  
-     * @return array
842  
-     */
843  
-    protected function _sortModuleDepends($modules)
844  
-    {
845  
-        foreach ($modules as $moduleName => $moduleProps) {
846  
-            $depends = $moduleProps['depends'];
847  
-            foreach ($moduleProps['depends'] as $depend => $true) {
848  
-                if ($moduleProps['active'] && ((!isset($modules[$depend])) || empty($modules[$depend]['active']))) {
849  
-                    Mage::throwException(
850  
-                        Mage::helper('Mage_Core_Helper_Data')->__('Module "%1$s" requires module "%2$s".', $moduleName, $depend)
851  
-                    );
852  
-                }
853  
-                $depends = array_merge($depends, $modules[$depend]['depends']);
854  
-            }
855  
-            $modules[$moduleName]['depends'] = $depends;
856  
-        }
857  
-        $modules = array_values($modules);
858  
-
859  
-        $size = count($modules) - 1;
860  
-        for ($i = $size; $i >= 0; $i--) {
861  
-            for ($j = $size; $i < $j; $j--) {
862  
-                if (isset($modules[$i]['depends'][$modules[$j]['module']])) {
863  
-                    $value       = $modules[$i];
864  
-                    $modules[$i] = $modules[$j];
865  
-                    $modules[$j] = $value;
866  
-                }
867  
-            }
868  
-        }
869  
-
870  
-        $definedModules = array();
871  
-        foreach ($modules as $moduleProp) {
872  
-            foreach ($moduleProp['depends'] as $dependModule => $true) {
873  
-                if (!isset($definedModules[$dependModule])) {
874  
-                    Mage::throwException(
875  
-                        Mage::helper('Mage_Core_Helper_Data')->__('Module "%1$s" cannot depend on "%2$s".', $moduleProp['module'], $dependModule)
876  
-                    );
877  
-                }
878  
-            }
879  
-            $definedModules[$moduleProp['module']] = true;
880  
-        }
881  
-
882  
-        return $modules;
883  
-    }
884  
-
885  
-    /**
886 784
      * Determine whether provided name begins from any available modules, according to namespaces priority
887 785
      * If matched, returns as the matched module "factory" name or a fully qualified module name
888 786
      *
193  app/code/core/Mage/Core/Model/Config/Module.php
... ...
@@ -0,0 +1,193 @@
  1
+<?php
  2
+/**
  3
+ * Magento
  4
+ *
  5
+ * NOTICE OF LICENSE
  6
+ *
  7
+ * This source file is subject to the Open Software License (OSL 3.0)
  8
+ * that is bundled with this package in the file LICENSE.txt.
  9
+ * It is also available through the world-wide-web at this URL:
  10
+ * http://opensource.org/licenses/osl-3.0.php
  11
+ * If you did not receive a copy of the license and are unable to
  12
+ * obtain it through the world-wide-web, please send an email
  13
+ * to license@magentocommerce.com so we can send you a copy immediately.
  14
+ *
  15
+ * DISCLAIMER
  16
+ *
  17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
  18
+ * versions in the future. If you wish to customize Magento for your
  19
+ * needs please refer to http://www.magentocommerce.com for more information.
  20
+ *
  21
+ * @category    Mage
  22
+ * @package     Mage_Core
  23
+ * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
  24
+ * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
  25
+ */
  26
+
  27
+/**
  28
+ * Configuration for modules availability and dependencies
  29
+ */
  30
+class Mage_Core_Model_Config_Module extends Mage_Core_Model_Config_Base
  31
+{
  32
+    /**
  33
+     * Types of dependencies between modules
  34
+     */
  35
+    const DEPENDENCY_TYPE_SOFT = 'soft';
  36
+    const DEPENDENCY_TYPE_HARD = 'hard';
  37
+
  38
+    /**
  39
+     * Constructor
  40
+     *
  41
+     * @param Mage_Core_Model_Config_Base $modulesConfig Modules configuration merged from the config files
  42
+     * @param array $allowedModules When not empty, defines modules to be taken into account
  43
+     */
  44
+    public function __construct(Mage_Core_Model_Config_Base $modulesConfig, array $allowedModules = array())
  45
+    {
  46
+        // initialize empty modules configuration
  47
+        parent::__construct('<config><modules/></config>');
  48
+
  49
+        $moduleDependencies = $this->_loadModuleDependencies($modulesConfig, $allowedModules);
  50
+
  51
+        $this->_checkModuleRequirements($moduleDependencies);
  52
+
  53
+        $moduleDependencies = $this->_sortModuleDependencies($moduleDependencies);
  54
+
  55
+        // create sorted configuration
  56
+        foreach ($modulesConfig->getNode()->children() as $nodeName => $node) {
  57
+            if ($nodeName != 'modules') {
  58
+                $this->getNode()->appendChild($node);
  59
+            }
  60
+        }
  61
+        foreach ($moduleDependencies as $moduleInfo) {
  62
+            $node = $modulesConfig->getNode('modules/' . $moduleInfo['module']);
  63
+            $this->getNode('modules')->appendChild($node);
  64
+        }
  65
+    }
  66
+
  67
+    /**
  68
+     * Load dependencies for active & allowed modules into an array structure
  69
+     *
  70
+     * @param Mage_Core_Model_Config_Base $modulesConfig
  71
+     * @param array $allowedModules
  72
+     * @return array
  73
+     */
  74
+    protected function _loadModuleDependencies(Mage_Core_Model_Config_Base $modulesConfig, array $allowedModules)
  75
+    {
  76
+        $result = array();
  77
+        foreach ($modulesConfig->getNode('modules')->children() as $moduleName => $moduleNode) {
  78
+            $isModuleActive = 'true' === (string)$moduleNode->active;
  79
+            $isModuleAllowed = empty($allowedModules) || in_array($moduleName, $allowedModules);
  80
+            if (!$isModuleActive || !$isModuleAllowed) {
  81
+                continue;
  82
+            }
  83
+            $dependencies = array();
  84
+            if ($moduleNode->depends) {
  85
+                /** @var $dependencyNode Varien_Simplexml_Element */
  86
+                foreach ($moduleNode->depends->children() as $dependencyNode) {
  87
+                    $dependencyModuleName = $dependencyNode->getName();
  88
+                    $dependencies[$dependencyModuleName] = $this->_getDependencyType($dependencyNode);
  89
+                }
  90
+            }
  91
+            $result[$moduleName] = array(
  92
+                'module'       => $moduleName,
  93
+                'dependencies' => $dependencies,
  94
+            );
  95
+        }
  96
+        return $result;
  97
+    }
  98
+
  99
+    /**
  100
+     * Determine dependency type from XML node that defines module dependency
  101
+     *
  102
+     * @param Varien_Simplexml_Element $dependencyNode
  103
+     * @return string
  104
+     * @throws UnexpectedValueException
  105
+     */
  106
+    protected function _getDependencyType(Varien_Simplexml_Element $dependencyNode)
  107
+    {
  108
+        $result = $dependencyNode->getAttribute('type') ?: self::DEPENDENCY_TYPE_HARD;
  109
+        if (!in_array($result, array(self::DEPENDENCY_TYPE_HARD, self::DEPENDENCY_TYPE_SOFT))) {
  110
+            $dependencyNodeXml = trim($dependencyNode->asNiceXml());
  111
+            throw new UnexpectedValueException(
  112
+                "Unknown module dependency type '$result' in declaration '$dependencyNodeXml'."
  113
+            );
  114
+        }
  115
+        return $result;
  116
+    }
  117
+
  118
+    /**
  119
+     * Check whether module requirements are fulfilled
  120
+     *
  121
+     * @param array $moduleDependencies
  122
+     * @throws Magento_Exception
  123
+     */
  124
+    protected function _checkModuleRequirements(array $moduleDependencies)
  125
+    {
  126
+        foreach ($moduleDependencies as $moduleName => $moduleInfo) {
  127
+            foreach ($moduleInfo['dependencies'] as $relatedModuleName => $dependencyType) {
  128
+                $relatedModuleActive = isset($moduleDependencies[$relatedModuleName]);
  129
+                if (!$relatedModuleActive && $dependencyType == self::DEPENDENCY_TYPE_HARD) {
  130
+                    throw new Magento_Exception("Module '$moduleName' requires module '$relatedModuleName'.");
  131
+                }
  132
+            }
  133
+        }
  134
+    }
  135
+
  136
+    /**
  137
+     * Sort modules until dependent modules go after ones they depend on
  138
+     *
  139
+     * @param array $moduleDependencies
  140
+     * @return array
  141
+     */
  142
+    protected function _sortModuleDependencies(array $moduleDependencies)
  143
+    {
  144
+        // add indirect dependencies
  145
+        foreach ($moduleDependencies as $moduleName => &$moduleInfo) {
  146
+            $moduleInfo['dependencies'] = $this->_getAllDependencies($moduleDependencies, $moduleName);
  147
+        }
  148
+        unset($moduleInfo);
  149
+
  150
+        // "bubble sort" modules until dependent modules go after ones they depend on
  151
+        $moduleDependencies = array_values($moduleDependencies);
  152
+        $size = count($moduleDependencies) - 1;
  153
+        for ($i = $size; $i >= 0; $i--) {
  154
+            for ($j = $size; $i < $j; $j--) {
  155
+                if (isset($moduleDependencies[$i]['dependencies'][$moduleDependencies[$j]['module']])) {
  156
+                    $tempValue              = $moduleDependencies[$i];
  157
+                    $moduleDependencies[$i] = $moduleDependencies[$j];
  158
+                    $moduleDependencies[$j] = $tempValue;
  159
+                }
  160
+            }
  161
+        }
  162
+
  163
+        return $moduleDependencies;
  164
+    }
  165
+
  166
+    /**
  167
+     * Recursively compute all dependencies and detect circular ones
  168
+     *
  169
+     * @param array $moduleDependencies
  170
+     * @param string $moduleName
  171
+     * @param array $usedModules Keep track of used modules to detect circular dependencies
  172
+     * @return array
  173
+     * @throws Magento_Exception
  174
+     */
  175
+    protected function _getAllDependencies(array $moduleDependencies, $moduleName, $usedModules = array())
  176
+    {
  177
+        $usedModules[] = $moduleName;
  178
+        $result = $moduleDependencies[$moduleName]['dependencies'];
  179
+        foreach (array_keys($result) as $relatedModuleName) {
  180
+            if (in_array($relatedModuleName, $usedModules)) {
  181
+                throw new Magento_Exception(
  182
+                    "Module '$moduleName' cannot depend on '$relatedModuleName' since it creates circular dependency."
  183
+                );
  184
+            }
  185
+            if (empty($moduleDependencies[$relatedModuleName])) {
  186
+                continue;
  187
+            }
  188
+            $relatedDependencies = $this->_getAllDependencies($moduleDependencies, $relatedModuleName, $usedModules);
  189
+            $result = array_merge($result, $relatedDependencies);
  190
+        }
  191
+        return $result;
  192
+    }
  193
+}
4  app/code/core/Mage/Core/view/frontend/layout.xml
@@ -30,8 +30,4 @@
30 30
     <default>
31 31
         <block name="formkey" type="Mage_Core_Block_Template" template="Mage_Core::formkey.phtml" />
32 32
     </default>
33  
-
34  
-    <calendar translate="label">
35  
-        <label>Calendar</label>
36  
-    </calendar>
37 33
 </layout>
2  app/code/core/Mage/DesignEditor/view/frontend/layout.xml
@@ -27,7 +27,6 @@
27 27
 -->
28 28
 <layout>
29 29
     <design_editor_toolbar>
30  
-        <label>Design Editor Toolbar</label>
31 30
         <reference name="head">
32 31
             <action method="addJs"><file>jquery/jquery-1.7.1.min.js</file></action>
33 32
             <action method="addJs"><file>mage/jquery-no-conflict.js</file></action>
@@ -53,7 +52,6 @@
53 52
     </design_editor_toolbar>
54 53
 
55 54
     <design_editor_page>
56  
-        <label>Design Editor Page Blocks Management Page</label>
57 55
         <reference name="root">
58 56
             <action method="setTemplate"><template>Mage_DesignEditor::page.phtml</template></action>
59 57
             <block type="Mage_Page_Block_Html_Head" name="head" as="head"/>
4  app/code/core/Mage/ImportExport/Model/Export/Entity/Product.php
@@ -792,7 +792,9 @@ public function export()
792 792
                         $dataRow[self::COL_TYPE]     = null;
793 793
                     } else {
794 794
                         $dataRow[self::COL_STORE] = null;
795  
-                        $dataRow += $stockItemRows[$productId];
  795
+                        if (isset($stockItemRows[$productId])) {
  796
+                            array_merge($dataRow, $stockItemRows[$productId]);
  797
+                        }
796 798
                     }
797 799
 
798 800
                     $this->_updateDataWithCategoryColumns($dataRow, $rowCategories, $productId);
7  app/code/core/Mage/Install/Model/Observer.php
@@ -40,11 +40,4 @@ public function bindLocale($observer)
40 40
         }
41 41
         return $this;
42 42
     }
43  
-
44  
-    public function installFailure($observer)
45  
-    {
46  
-        echo "<h2>There was a problem proceeding with Magento installation.</h2>";
47  
-        echo "<p>Please contact developers with error messages on this page.</p>";
48  
-        echo Mage::printException($observer->getEvent()->getException());
49  
-    }
50 43
 }
8  app/code/core/Mage/Install/etc/config.xml
@@ -65,14 +65,6 @@
65 65
                     </checkConnection>
66 66
                 </observers>
67 67
             </controller_action_predispatch>
68  
-            <mage_run_exception>
69  
-                <observers>
70  
-                    <install_failure>
71  
-                        <class>Mage_Install_Model_Observer</class>
72  
-                        <method>installFailure</method>
73  
-                    </install_failure>
74  
-                </observers>
75  
-            </mage_run_exception>
76 68
             <core_locale_set_locale>
77 69
                 <observers>
78 70
                     <bind_locale>
26  app/code/core/Mage/Oauth/view/adminhtml/layout.xml
@@ -35,7 +35,7 @@
35 35
 
36 36
     <adminhtml_oauth_consumer_grid>
37 37
         <remove name="root"/>
38  
-        <block type="Mage_Oauth_Block_Adminhtml_Oauth_Consumer_Grid" name="oauth_consumer.grid" output="toHtml"/>
  38
+        <block type="Mage_Oauth_Block_Adminhtml_Oauth_Consumer_Grid" name="oauth_consumer.grid" output="1"/>
39 39
     </adminhtml_oauth_consumer_grid>
40 40
 
41 41
     <adminhtml_oauth_consumer_new>
@@ -64,7 +64,7 @@
64 64
 
65 65
     <adminhtml_oauth_admin_token_grid>
66 66
         <remove name="root"/>
67  
-        <block type="Mage_Oauth_Block_Adminhtml_Oauth_Admin_Token_Grid" name="oauth_admin_token.grid" output="toHtml"/>
  67
+        <block type="Mage_Oauth_Block_Adminhtml_Oauth_Admin_Token_Grid" name="oauth_admin_token.grid" output="1"/>
68 68
     </adminhtml_oauth_admin_token_grid>
69 69
     <!-- EOF My Applications -->
70 70
 
@@ -116,7 +116,7 @@
116 116
 
117 117
     <oauth_root_handle_simple>
118 118
         <remove name="js_cookie" />
119  
-        <block type="Mage_Adminhtml_Block_Page" name="root" output="toHtml" template="Mage_Oauth::empty.phtml">
  119
+        <block type="Mage_Adminhtml_Block_Page" name="root" output="1" template="Mage_Oauth::empty.phtml">
120 120
             <block type="Mage_Adminhtml_Block_Page_Head" name="head" as="head" template="Mage_Oauth::authorize/head-simple.phtml">
121 121
                 <action method="addCss"><name>Mage_Oauth::css/oauth-simple.css</name></action>
122 122
             </block>
@@ -126,18 +126,16 @@
126 126
 
127 127
     <!-- Authorize -->
128 128
     <!--Handle for simple pages-->
129  
-    <adminhtml_oauth_authorize_index translate="label">
  129
+    <adminhtml_oauth_authorize_index>
130 130
         <update handle="oauth_root_handle"/>
131  
-        <label>OAuth authorization for admin</label>
132 131
         <reference name="content">
133 132
             <block type="Mage_Oauth_Block_Adminhtml_Oauth_Authorize" name="oauth.authorize.form" template="authorize/form/login.phtml"/>
134 133
             <block type="Mage_Oauth_Block_Adminhtml_Oauth_Authorize_Button" name="oauth.authorize.button" template="authorize/button.phtml" />
135 134
         </reference>
136 135
     </adminhtml_oauth_authorize_index>
137 136
 
138  
-    <adminhtml_oauth_authorize_simple translate="label">
  137
+    <adminhtml_oauth_authorize_simple>
139 138
         <update handle="oauth_root_handle_simple"/>
140  
-        <label>OAuth authorization simple for admin</label>
141 139
         <reference name="content">
142 140
             <block type="Mage_Oauth_Block_Adminhtml_Oauth_Authorize" name="oauth.authorize.form" template="authorize/form/login-simple.phtml"/>
143 141
             <block type="Mage_Oauth_Block_Adminhtml_Oauth_Authorize_Button" name="oauth.authorize.button" template="authorize/button-simple.phtml" />
@@ -146,17 +144,15 @@
146 144
     <!-- EOF Authorize -->
147 145
 
148 146
     <!-- Confirm Authorization -->
149  
-    <adminhtml_oauth_authorize_confirm translate="label">
  147
+    <adminhtml_oauth_authorize_confirm>
150 148
         <update handle="oauth_root_handle"/>
151  
-        <label>Confirm token authorization for admin</label>
152 149
         <reference name="content">
153 150
             <block type="Mage_Core_Block_Template" name="oauth.authorize.confirm" template="Mage_Oauth::authorize/confirm.phtml" />
154 151
         </reference>
155 152
     </adminhtml_oauth_authorize_confirm>
156 153
 
157  
-    <adminhtml_oauth_authorize_confirmsimple translate="label">
  154
+    <adminhtml_oauth_authorize_confirmsimple>
158 155
         <update handle="oauth_root_handle_simple"/>
159  
-        <label>Confirm token authorization Pop Up for admin</label>
160 156
         <reference name="content">
161 157
             <block type="Mage_Core_Block_Template" name="oauth.authorize.confirm" template="Mage_Oauth::authorize/confirm-simple.phtml" />
162 158
         </reference>
@@ -164,17 +160,15 @@
164 160
     <!-- EOF Confirm Authorization -->
165 161
 
166 162
     <!-- Reject Authorization -->
167  
-    <adminhtml_oauth_authorize_reject translate="label">
  163
+    <adminhtml_oauth_authorize_reject>
168 164
         <update handle="oauth_root_handle"/>
169  
-        <label>Reject token authorization for admin</label>
170 165
         <reference name="content">
171 166
             <block type="Mage_Core_Block_Template" name="oauth.authorize.reject" template="Mage_Oauth::authorize/reject.phtml" />
172 167
         </reference>
173 168
     </adminhtml_oauth_authorize_reject>
174 169
 
175  
-    <adminhtml_oauth_authorize_rejectsimple translate="label">
  170
+    <adminhtml_oauth_authorize_rejectsimple>
176 171
         <update handle="oauth_root_handle_simple"/>
177  
-        <label>Reject token authorization Pop Up for admin</label>
178 172
         <reference name="content">
179 173
             <block type="Mage_Core_Block_Template" name="oauth.authorize.reject" template="Mage_Oauth::authorize/reject-simple.phtml" />
180 174
         </reference>
@@ -189,6 +183,6 @@
189 183
 
190 184
     <adminhtml_oauth_authorizedtokens_grid>
191 185
         <remove name="root"/>
192  
-        <block type="Mage_Oauth_Block_Adminhtml_Oauth_AuthorizedTokens_Grid" name="oauth_authorizedTokens.grid" output="toHtml"/>
  186
+        <block type="Mage_Oauth_Block_Adminhtml_Oauth_AuthorizedTokens_Grid" name="oauth_authorizedTokens.grid" output="1"/>
193 187
     </adminhtml_oauth_authorizedtokens_grid>
194 188
 </layout>
16  app/code/core/Mage/Oauth/view/frontend/layout.xml
@@ -50,7 +50,7 @@
50 50
 
51 51
     <oauth_root_handle_simple>
52 52
         <remove name="js_cookie" />
53  
-        <block type="Mage_Page_Block_Html" name="root" output="toHtml" template="empty.phtml">
  53
+        <block type="Mage_Page_Block_Html" name="root" output="1" template="empty.phtml">
54 54
             <block type="Mage_Page_Block_Html_Head" name="head" as="head" template="Mage_Oauth::authorize/head-simple.phtml">
55 55
                 <action method="addCss"><stylesheet>Mage_Oauth::css/oauth-simple.css</stylesheet></action>
56 56
             </block>
@@ -59,7 +59,7 @@
59 59
     </oauth_root_handle_simple>
60 60
 
61 61
     <!-- Authorization -->
62  
-    <oauth_authorize_index translate="label">
  62
+    <oauth_authorize_index translate="label" type="page">
63 63
         <update handle="oauth_root_handle"/>
64 64
         <label>Oauth authorization for customer</label>
65 65
         <reference name="content">
@@ -68,7 +68,7 @@
68 68
         </reference>
69 69
     </oauth_authorize_index>
70 70
 
71  
-    <oauth_authorize_simple translate="label">
  71
+    <oauth_authorize_simple translate="label" type="page" parent="default">
72 72
         <update handle="oauth_root_handle_simple"/>
73 73
         <remove name="header"/>
74 74
         <label>Oauth authorization Pop Up for customer</label>
@@ -80,7 +80,7 @@
80 80
     <!-- EOF Authorization -->
81 81
 
82 82
     <!-- Confirm Authorization -->
83  
-    <oauth_authorize_confirm translate="label">
  83
+    <oauth_authorize_confirm translate="label" type="page" parent="default">
84 84
         <update handle="oauth_root_handle"/>
85 85
         <label>Confirm Oauth token authorization</label>
86 86
         <reference name="content">
@@ -88,7 +88,7 @@
88 88
         </reference>
89 89
     </oauth_authorize_confirm>
90 90
 
91  
-    <oauth_authorize_confirmsimple translate="label">
  91
+    <oauth_authorize_confirmsimple translate="label" type="page">
92 92
         <update handle="oauth_root_handle_simple"/>
93 93
         <label>Confirm Oauth token authorization (Simple)</label>
94 94
         <remove name="header"/>
@@ -99,7 +99,7 @@
99 99
     <!-- EOF Confirm Authorization -->
100 100
 
101 101
     <!-- Reject Authorization -->
102  
-    <oauth_authorize_reject translate="label">
  102
+    <oauth_authorize_reject translate="label" type="page">
103 103
         <update handle="oauth_root_handle"/>
104 104
         <label>Reject Oauth token authorization</label>
105 105
         <reference name="content">
@@ -107,7 +107,7 @@
107 107
         </reference>
108 108
     </oauth_authorize_reject>
109 109
 
110  
-    <oauth_authorize_rejectsimple translate="label">
  110
+    <oauth_authorize_rejectsimple translate="label" type="page" parent="default">
111 111
         <update handle="oauth_root_handle_simple"/>
112 112
         <label>Reject Oauth token authorization (Simple)</label>
113 113
         <remove name="header"/>
@@ -128,7 +128,7 @@
128 128
         </reference>
129 129
     </customer_account>
130 130
 
131  
-    <oauth_customer_token_index translate="label">
  131
+    <oauth_customer_token_index translate="label" type="page" parent="default">
132 132
         <label>Customer My Account My OAuth Applications</label>
133 133
         <update handle="customer_account"/>
134 134
         <reference name="my.account.wrapper">
3  app/code/core/Mage/Paypal/view/frontend/layout.xml
@@ -209,8 +209,7 @@ Available logo types can be assigned with action="setLogoType":
209 209
         </block>
210 210
     </paypal_standard_redirect>
211 211
 
212  
-    <SHORTCUT_popup translate="label">
213  
-        <label>Paypal Shortcut Popup</label>
  212
+    <SHORTCUT_popup>
214 213
         <reference name="product.tooltip">
215 214
             <container name="product.info.addtocart.paypal.wrapper" label="PayPal Express Checkout Shortcut Wrapper" htmlTag="div">
216 215
                 <block type="Mage_Paypal_Block_Express_Shortcut" name="product.info.addtocart.paypal" template="express/shortcut.phtml">
3  app/code/core/Mage/PaypalUk/view/frontend/layout.xml
@@ -136,8 +136,7 @@
136 136
         <update handle="SHORTCUT_uk_popup" />
137 137
     </checkout_onepage_failure>
138 138
 
139  
-    <SHORTCUT_uk_popup translate="label">
140  
-        <label>PaypalUk Shortcut Popup</label>
  139
+    <SHORTCUT_uk_popup>
141 140
         <reference name="product.tooltip">
142 141
             <container name="product.info.addtocart.paypaluk.wrapper" label="PayPal Express Checkout (Payflow Edition) Shortcut Wrapper" htmlTag="div">
143 142
                 <block type="Mage_PaypalUk_Block_Express_Shortcut" name="product.info.addtocart.paypaluk" template="Mage_Paypal::express/shortcut.phtml">
10  app/code/core/Mage/Review/etc/config.xml
@@ -71,16 +71,6 @@
71 71
                 </args>
72 72
             </review>
73 73
         </routers>
74  
-        <events>
75  
-            <review_save_after>
76  
-                <observers>
77  
-                    <rss>
78  
-                        <class>Mage_Rss_Model_Observer</class>
79  
-                        <method>reviewSaveAfter</method>
80  
-                    </rss>
81  
-                </observers>
82  
-            </review_save_after>
83  
-        </events>
84 74
         <translate>
85 75
             <modules>
86 76
                 <Mage_Review>
13  app/code/core/Mage/Review/view/frontend/layout.xml
@@ -49,19 +49,6 @@ Customer account home dashboard layout
49 49
 
50 50
     </customer_account_index>
51 51
 
52  
-
53  
-<!--
54  
-Product reviews page (?)
55  
--->
56  
-
57  
-    <reviews translate="label">
58  
-        <label>Review</label>
59  
-        <!-- Mage_Review -->
60  
-        <reference name="root">
61  
-            <action method="setTemplate"><template>2columns-left.phtml</template></action>
62  
-        </reference>
63  
-    </reviews>
64  
-
65 52
 <!--
66 53
 Product reviews page
67 54
 -->
4  app/code/core/Mage/Rss/Block/Catalog/New.php
@@ -92,11 +92,11 @@ protected function _toHtml()
92 92
                 )
93 93
             )
94 94
             ->addAttributeToSort('news_from_date','desc')
95  
-            ->addAttributeToSelect(array('name', 'short_description', 'description', 'thumbnail'), 'inner')
  95
+            ->addAttributeToSelect(array('name', 'short_description', 'description'), 'inner')
96 96
             ->addAttributeToSelect(
97 97
                 array(
98 98
                     'price', 'special_price', 'special_from_date', 'special_to_date',
99  
-                    'msrp_enabled', 'msrp_display_actual_price_type', 'msrp'
  99
+                    'msrp_enabled', 'msrp_display_actual_price_type', 'msrp', 'thumbnail'
100 100
                 ),
101 101
                 'left'
102 102
             )
25  app/code/core/Mage/Rss/Block/Catalog/NotifyStock.php
@@ -31,31 +31,8 @@
31 31
  * @package    Mage_Rss
32 32
  * @author     Magento Core Team <core@magentocommerce.com>
33 33
  */
34  
-class Mage_Rss_Block_Catalog_NotifyStock extends Mage_Rss_Block_Abstract
  34
+class Mage_Rss_Block_Catalog_NotifyStock extends Mage_Core_Block_Abstract
35 35
 {
36  
-
37  
-    /**
38  
-     * Cache tag constant for feed notify stock
39  
-     *
40  
-     * @var string
41  
-     */
42  
-    const CACHE_TAG = 'block_html_rss_catalog_notifystock';
43  
-
44  
-    /**
45  
-     * Constructor
46  
-     *
47  
-     * @return null
48  
-     */
49  
-    protected function _construct()
50  
-    {
51  
-        $this->setCacheTags(array(self::CACHE_TAG));
52  
-        /*
53  
-        * setting cache to save the rss for 10 minutes
54  
-        */
55  
-        $this->setCacheKey('rss_catalog_notifystock');
56  
-        $this->setCacheLifetime(600);
57  
-    }
58  
-
59 36
     /**
60 37
      * Render RSS
61 38
      *
25  app/code/core/Mage/Rss/Block/Catalog/Review.php
@@ -31,31 +31,8 @@
31 31
  * @package    Mage_Rss
32 32
  * @author     Magento Core Team <core@magentocommerce.com>
33 33
  */
34  
-class Mage_Rss_Block_Catalog_Review extends Mage_Rss_Block_Abstract
  34
+class Mage_Rss_Block_Catalog_Review extends Mage_Core_Block_Abstract
35 35
 {
36  
-
37  
-    /**
38  
-     * Cache tag constant for feed reviews
39  
-     *
40  
-     * @var string
41  
-     */
42  
-    const CACHE_TAG = 'block_html_rss_catalog_review';
43  
-
44  
-    /**
45  
-     * Initialize cache
46  
-     *
47  
-     * @return null
48  
-     */
49  
-    protected function _construct()
50  
-    {
51  
-        $this->setCacheTags(array(self::CACHE_TAG));
52  
-        /*
53  
-        * setting cache to save the rss for 10 minutes
54  
-        */
55  
-        $this->setCacheKey('rss_catalog_review');
56  
-        $this->setCacheLifetime(600);
57  
-    }
58  
-
59 36
     /**
60 37
      * Render XML response
61 38
      *
20  app/code/core/Mage/Rss/Block/Order/New.php
@@ -31,26 +31,8 @@
31 31
  * @package    Mage_Rss
32 32
  * @author     Magento Core Team <core@magentocommerce.com>
33 33
  */
34  
-class Mage_Rss_Block_Order_New extends Mage_Core_Block_Template
  34
+class Mage_Rss_Block_Order_New extends Mage_Core_Block_Abstract
35 35
 {
36  
-
37  
-    /**
38  
-     * Cache tag constant for feed new orders
39  
-     *
40  
-     * @var string
41  
-     */
42  
-    const CACHE_TAG = 'block_html_rss_order_new';
43  
-
44  
-    protected function _construct()
45  
-    {
46  
-        $this->setCacheTags(array(self::CACHE_TAG));
47  
-        /*
48  
-        * setting cache to save the rss for 10 minutes
49  
-        */
50  
-        $this->setCacheKey('rss_order_new');
51  
-        $this->setCacheLifetime(600);
52  
-    }
53  
-
54 36
     protected function _toHtml()
55 37
     {
56 38
         $order = Mage::getModel('Mage_Sales_Model_Order');
59  app/code/core/Mage/Rss/Controller/AdminhtmlAbstract.php
... ...
@@ -1,59 +0,0 @@
1  
-<?php
2  
-/**
3  
- * Magento
4  
- *
5  
- * NOTICE OF LICENSE
6  
- *
7  
- * This source file is subject to the Open Software License (OSL 3.0)
8  
- * that is bundled with this package in the file LICENSE.txt.
9  
- * It is also available through the world-wide-web at this URL:
10  
- * http://opensource.org/licenses/osl-3.0.php
11  
- * If you did not receive a copy of the license and are unable to
12  
- * obtain it through the world-wide-web, please send an email
13  
- * to license@magentocommerce.com so we can send you a copy immediately.
14  
- *
15  
- * DISCLAIMER
16  
- *
17  
- * Do not edit or add to this file if you wish to upgrade Magento to newer
18  
- * versions in the future. If you wish to customize Magento for your
19  
- * needs please refer to http://www.magentocommerce.com for more information.
20  
- *
21  
- * @category    Mage
22  
- * @package     Mage_Rss
23  
- * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24  
- * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)