Magento – How to add upgrade SQL lines to extension

magento-1.9

I'm working on a custom Magento extension. I'm developing the extension at Magento version of 1.9.0.1.

So i have simple question.

I've created an extension and lately i've made some upgrades to it.
The first version of the extension was numbered: 1.0.0

Let me show you the config file of the extension:

<?xml version="1.0"?>
<config>
  <modules>
    <VivasIndustries_SmsNotification>
      <version>1.0.0</version>
    </VivasIndustries_SmsNotification>
  </modules>
  <global>
    <models>
        <smsnotification>
            <class>VivasIndustries_SmsNotification_Model</class>
            <resourceModel>vivasindustries_smsnotification_resource</resourceModel>
        </smsnotification>
        <vivasindustries_smsnotification_resource>
        <class>VivasIndustries_SmsNotification_Model_Resource</class>
        <entities>
            <smsnotification>
            <table>VivasIndustries_SmsNotification</table>
            </smsnotification>
            <smsnotificationhistory>
            <table>VivasIndustries_SmsHistory</table>
            </smsnotificationhistory>
        </entities>
        </vivasindustries_smsnotification_resource>
    </models>
    <resources>
        <smsnotification_setup>
            <setup>
                <module>VivasIndustries_SmsNotification</module>
            </setup>
            <connection>
                 <use>core_setup</use>
             </connection>
        </smsnotification_setup>
        <smsnotification_read>
            <connection>
                <use>core_read</use>
            </connection>
        </smsnotification_read>
        <smsnotification_write>
            <connection>
                <use>core_write</use>
            </connection>
        </smsnotification_write>
    </resources>    
    <events>
    <checkout_type_onepage_save_order_after> <!-- identifier of the event we want to catch -->
        <observers>
          <checkout_type_onepage_save_order_after_smsprice_handler> <!-- identifier of the event handler -->
            <type>model</type> <!-- class method call type; valid are model, object and singleton -->
            <class>smsnotification/newordertotalobserver</class> <!-- observers class alias -->
            <method>saveSmspriceTotal</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </checkout_type_onepage_save_order_after_smsprice_handler>
        </observers>
      </checkout_type_onepage_save_order_after>  
    <checkout_type_multishipping_create_orders_single> <!-- identifier of the event we want to catch -->
        <observers>     
          <checkout_type_multishipping_create_orders_single_smsprice_handler> <!-- identifier of the event handler -->
            <type>model</type> <!-- class method call type; valid are model, object and singleton -->
            <class>smsnotification/newordertotalobserver</class> <!-- observers class alias -->
            <method>saveSmspriceTotalForMultishipping</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </checkout_type_multishipping_create_orders_single_smsprice_handler>      
        </observers>
      </checkout_type_multishipping_create_orders_single>     
        <sales_order_save_after>
            <observers>
                <vivasindustries_smsnotification>
                    <class>smsnotification/observer</class>
                    <method>orderSaved</method>
                </vivasindustries_smsnotification>
            </observers>
        </sales_order_save_after>
    </events>
     <sales>
        <quote>
            <totals>                
                <smsprice_total>
                    <class>smsnotification/quote_address_total_smsprice</class>
                    <after>subtotal,freeshipping,tax_subtotal,shipping</after>
                    <before>grand_total</before>
                </smsprice_total> 
            </totals>
        </quote>
            <order_invoice>
                <totals>                
                <smsprice_total>
                    <class>smsnotification/order_invoice_total_smsprice</class>
                    <after>subtotal,freeshipping,tax_subtotal,shipping</after>
                    <before>grand_total</before>
                </smsprice_total> 
                </totals>
            </order_invoice>
            <order_creditmemo>
                <totals>                
                <smsprice_total>
                    <class>percentpayment/order_creditmemo_total_smsprice</class>
                    <after>subtotal,freeshipping,tax_subtotal,shipping</after>
                    <before>grand_total</before>
                </smsprice_total> 
                </totals>
            </order_creditmemo>
    </sales>    
    <helpers>
        <smsnotification>
            <class>VivasIndustries_SmsNotification_Helper</class>
        </smsnotification>
    </helpers>
    <blocks>
        <smsnotification>
             <class>VivasIndustries_SmsNotification_Block</class>
        </smsnotification>
    </blocks>
  </global>
  <adminhtml>
    <acl>
        <resources>
            <all>
                <title>Allow Everything</title>
            </all>
            <admin>
                <children>
                    <system>
                        <children>
                            <config>
                                <children>
                                    <vivas>
                                        <title>Vivas - All</title>
                                    </vivas>
                                </children>
                            </config>
                        </children>
                    </system>
                </children>
            </admin>
        </resources>
    </acl>
    <layout>
        <updates>
            <smsnotification>
                <file>smsnotification.xml</file>
            </smsnotification>
        </updates>
    </layout>   
    </adminhtml>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <VivasIndustries_SmsNotification before="Mage_Adminhtml">VivasIndustries_SmsNotification_Adminhtml</VivasIndustries_SmsNotification>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
    <default>
    <vivas>
        <smspricegroup>                
            <smsprice_name>SMS Notification</smsprice_name>
            <smsprice_fee>0.5</smsprice_fee>            
        </smspricegroup>      
    </vivas>
    </default>
</config>  

And the sql installer file located – /app/code/community/VivasIndustries/SmsNotification/sql/smsnotification_setup/mysql4-install-1.0.0.php contains:

<?php
$installer=$this;
$installer->startSetup();

$installer->run("
CREATE TABLE IF NOT EXISTS `VivasIndustries_SmsNotification` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `state` varchar(500) NOT NULL,
  `smstext` varchar(500) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `VivasIndustries_SmsHistory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `receiver` varchar(500) NOT NULL,
  `phone` varchar(500) NOT NULL,
  `email` varchar(500) NOT NULL,
  `smstext` text NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    ");
$installer->endSetup();
?>

But after the upgrade i've made i have to add this think to MySQL:

$installer->addAttribute("quote_address", "smsprice_total", array("type"=>"varchar"));
$installer->addAttribute("order", "smsprice_total", array("type"=>"varchar"));

So how can i create an upgrade file and how can this extension understand that it has an upgrade?

I am not even sure i'm giving my question right.

P.S.
I'll export the whole MySQL database of the Magento to search for matches: smsprice_total so i can be sure they are created.

Thanks!

Best Answer

There's a great article by Inchoo on installer and updater scripts: http://inchoo.net/magento/magento-install-install-upgrade-data-and-data-upgrade-scripts/

It comes down to adding a new file upgrade-1.0.0-1.1.0.php and chancing the version number in the config.xml from 1.0.0 to 1.1.0

Related Topic