Version Notes
Minor bug fixed
Download this release
Release Info
| Developer | WebCreta |
| Extension | Webcreta_OutofStockSubscription |
| Version | 0.1.0 |
| Comparing to | |
| See all releases | |
Version 0.1.0
- app/code/local/Webcreta/OutofStockSubscription/Block/Adminhtml/Subcriber.php +13 -0
- app/code/local/Webcreta/OutofStockSubscription/Block/Adminhtml/Subcriber/Grid.php +103 -0
- app/code/local/Webcreta/OutofStockSubscription/Helper/Data.php +13 -0
- app/code/local/Webcreta/OutofStockSubscription/Model/Info.php +44 -0
- app/code/local/Webcreta/OutofStockSubscription/Model/Mysql4/Info.php +76 -0
- app/code/local/Webcreta/OutofStockSubscription/Model/Mysql4/Subscriber.php +9 -0
- app/code/local/Webcreta/OutofStockSubscription/Model/Mysql4/Subscriber/Collection.php +30 -0
- app/code/local/Webcreta/OutofStockSubscription/Model/Observer.php +111 -0
- app/code/local/Webcreta/OutofStockSubscription/Model/Subscriber.php +12 -0
- app/code/local/Webcreta/OutofStockSubscription/controllers/Adminhtml/SubscriberController.php +61 -0
- app/code/local/Webcreta/OutofStockSubscription/controllers/IndexController.php +36 -0
- app/code/local/Webcreta/OutofStockSubscription/etc/config.xml +155 -0
- app/code/local/Webcreta/OutofStockSubscription/etc/system.xml +44 -0
- app/code/local/Webcreta/OutofStockSubscription/sql/outofstocksubscription_setup/mysql4-install-0.1.0.php +28 -0
- app/design/adminhtml/default/default/template/outofstocksubscription/widget/grid.phtml +244 -0
- app/design/frontend/base/default/layout/outofstocksubscription.xml +10 -0
- app/design/frontend/base/default/template/outofstocksubscription/catalog/product/view.phtml +226 -0
- app/etc/modules/Webcreta_OutofStockSubscription.xml +13 -0
- app/locale/en_US/template/email/outofstock_subscription.html +30 -0
- doc/OutofStockSubscription.pdf +0 -0
- package.xml +34 -0
app/code/local/Webcreta/OutofStockSubscription/Block/Adminhtml/Subcriber.php
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Webcreta_OutofStockSubscription_Block_Adminhtml_Subcriber extends Mage_Adminhtml_Block_Widget_Grid_Container
|
| 4 |
+
{
|
| 5 |
+
public function __construct()
|
| 6 |
+
{
|
| 7 |
+
$this->_blockGroup = 'outofstocksubscription';
|
| 8 |
+
$this->_controller = 'adminhtml_subcriber';
|
| 9 |
+
$this->_headerText = Mage::helper('outofstocksubscription')->__('Out of Stock Subscribers');
|
| 10 |
+
parent::__construct();
|
| 11 |
+
$this->_removeButton('add');
|
| 12 |
+
}
|
| 13 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/Block/Adminhtml/Subcriber/Grid.php
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Webcreta_OutofStockSubscription_Block_Adminhtml_Subcriber_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
| 4 |
+
{
|
| 5 |
+
public function __construct()
|
| 6 |
+
{
|
| 7 |
+
parent::__construct();
|
| 8 |
+
$this->setId('subcribersGrid');
|
| 9 |
+
$this->setUseAjax(true);
|
| 10 |
+
$this->setDefaultSort('id');
|
| 11 |
+
$this->setDefaultDir('DESC');
|
| 12 |
+
$this->setSaveParametersInSession(true);
|
| 13 |
+
|
| 14 |
+
$this->setTemplate('outofstocksubscription/widget/grid.phtml');
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
protected function _prepareCollection()
|
| 18 |
+
{
|
| 19 |
+
/*$collection = Mage::getModel('catalog/product')->getCollection()
|
| 20 |
+
->addAttributeToSelect('name')
|
| 21 |
+
->addAttributeToSelect('supplier')
|
| 22 |
+
->addAttributeToSelect('supplier_sku')
|
| 23 |
+
->joinField('email',
|
| 24 |
+
'outofstocksubscription_info',
|
| 25 |
+
'email',
|
| 26 |
+
'product_id=entity_id')
|
| 27 |
+
//->join(array('table_alias'=>'outofstocksubscription_info'), 'e.entity_id = table_alias.product_id', array('table_alias.email'));
|
| 28 |
+
;
|
| 29 |
+
*/
|
| 30 |
+
$collection = Mage::getResourceModel('outofstocksubscription/subscriber_collection');
|
| 31 |
+
//echo $collection->getSelect();
|
| 32 |
+
$this->setCollection($collection);
|
| 33 |
+
//$this->getCollection()->getSelect()->joinRight(array('table_alias'=>'outofstocksubscription_info'), 'e.entity_id = table_alias.product_id', array('table_alias.email'));
|
| 34 |
+
|
| 35 |
+
parent::_prepareCollection();
|
| 36 |
+
//echo $this->getCollection()->getSelect();
|
| 37 |
+
return $this;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
protected function _prepareColumns()
|
| 41 |
+
{
|
| 42 |
+
$this->addColumn('email', array(
|
| 43 |
+
'header' => Mage::helper('outofstocksubscription')->__('Email'),
|
| 44 |
+
'width' => '100px',
|
| 45 |
+
'index' => 'email',
|
| 46 |
+
));
|
| 47 |
+
|
| 48 |
+
$this->addColumn('product_id', array(
|
| 49 |
+
'header' => Mage::helper('outofstocksubscription')->__('Product ID'),
|
| 50 |
+
'width' => '50px',
|
| 51 |
+
'index' => 'product_id',
|
| 52 |
+
'type' => 'number'
|
| 53 |
+
));
|
| 54 |
+
|
| 55 |
+
$this->addColumn('sku', array(
|
| 56 |
+
'header' => Mage::helper('outofstocksubscription')->__('SKU'),
|
| 57 |
+
'width' => '100px',
|
| 58 |
+
'index' => 'sku',
|
| 59 |
+
));
|
| 60 |
+
|
| 61 |
+
$this->addColumn('product_name', array(
|
| 62 |
+
'header' => Mage::helper('outofstocksubscription')->__('Product Name'),
|
| 63 |
+
'width' => '100px',
|
| 64 |
+
'index' => 'product_id',
|
| 65 |
+
));
|
| 66 |
+
|
| 67 |
+
$this->addColumn('date', array(
|
| 68 |
+
'header' => Mage::helper('outofstocksubscription')->__('Subscribed On'),
|
| 69 |
+
'index' => 'date',
|
| 70 |
+
'type' => 'datetime',
|
| 71 |
+
'width' => '100px',
|
| 72 |
+
));
|
| 73 |
+
|
| 74 |
+
$this->addColumn('action', array(
|
| 75 |
+
'header' => Mage::helper('outofstocksubscription')->__('Action'),
|
| 76 |
+
'width' => '50px',
|
| 77 |
+
'index' => 'id',
|
| 78 |
+
'filter' => false,
|
| 79 |
+
'sortable' => false,
|
| 80 |
+
));
|
| 81 |
+
|
| 82 |
+
/*$this->addColumn('action',
|
| 83 |
+
array(
|
| 84 |
+
'header' => Mage::helper('outofstocksubscription')->__('Action'),
|
| 85 |
+
'width' => '50px',
|
| 86 |
+
'type' => 'action',
|
| 87 |
+
'getter' => 'getId',
|
| 88 |
+
'actions' => array(
|
| 89 |
+
array(
|
| 90 |
+
'caption' => Mage::helper('outofstocksubscription')->__('Delete'),
|
| 91 |
+
'url' => array(
|
| 92 |
+
'base'=>'outofstocksubscription/adminhtml_subscriber/delete'
|
| 93 |
+
),
|
| 94 |
+
'field' => 'id'
|
| 95 |
+
)
|
| 96 |
+
),
|
| 97 |
+
'filter' => false,
|
| 98 |
+
'sortable' => false,
|
| 99 |
+
));*/
|
| 100 |
+
|
| 101 |
+
return parent::_prepareColumns();
|
| 102 |
+
}
|
| 103 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/Helper/Data.php
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* @category Webcreta
|
| 4 |
+
* @package Webcreta_OutofStockSubscription
|
| 5 |
+
*/
|
| 6 |
+
|
| 7 |
+
/**
|
| 8 |
+
* Out of Stock Subscription data helper
|
| 9 |
+
*/
|
| 10 |
+
class Webcreta_OutofStockSubscription_Helper_Data extends Mage_Core_Helper_Abstract
|
| 11 |
+
{
|
| 12 |
+
|
| 13 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/Model/Info.php
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Webcreta_OutofStockSubscription_Model_Info extends Mage_Core_Model_Abstract
|
| 4 |
+
{
|
| 5 |
+
protected function _construct()
|
| 6 |
+
{
|
| 7 |
+
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
public function saveSubscrition($productId, $email)
|
| 11 |
+
{
|
| 12 |
+
Mage::getResourceSingleton('outofstocksubscription/info')->saveSubscrition($productId, $email);
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
public function deleteSubscrition($id)
|
| 16 |
+
{
|
| 17 |
+
Mage::getResourceSingleton('outofstocksubscription/info')->deleteSubscrition($id);
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
public function getProducts()
|
| 21 |
+
{
|
| 22 |
+
return Mage::getResourceSingleton('outofstocksubscription/info')->getProducts();
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
public function saveProductAttributesInfo($productId, $supplier, $supplierSku)
|
| 26 |
+
{
|
| 27 |
+
Mage::getResourceSingleton('outofstocksubscription/info')->saveProductAttributesInfo($productId, $supplier, $supplierSku);
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
public function getSupplierAttributeId()
|
| 31 |
+
{
|
| 32 |
+
return Mage::getResourceSingleton('outofstocksubscription/info')->getSupplierAttributeId();
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
public function getSupplierValues($supplierAttributeId)
|
| 36 |
+
{
|
| 37 |
+
return Mage::getResourceSingleton('outofstocksubscription/info')->getSupplierValues($supplierAttributeId);
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
public function getCollection()
|
| 41 |
+
{
|
| 42 |
+
return Mage::getResourceSingleton('outofstocksubscription/info')->getCollection();
|
| 43 |
+
}
|
| 44 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/Model/Mysql4/Info.php
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Webcreta_OutofStockSubscription_Model_Mysql4_Info extends Mage_Core_Model_Mysql4_Abstract
|
| 4 |
+
{
|
| 5 |
+
protected function _construct()
|
| 6 |
+
{
|
| 7 |
+
$this->_init('core/store', 'store_id');
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
public function saveSubscrition($productId, $email)
|
| 11 |
+
{
|
| 12 |
+
$write = $this->_getWriteAdapter();
|
| 13 |
+
$read = $this->_getReadAdapter();
|
| 14 |
+
|
| 15 |
+
$select = $read->select()
|
| 16 |
+
->from($this->getTable('outofstocksubscription/info'))
|
| 17 |
+
->where("product_id = ".$productId." AND email = '".$email."'");
|
| 18 |
+
$result = $read->fetchRow($select);
|
| 19 |
+
|
| 20 |
+
if (!isset($result['id'])) {
|
| 21 |
+
$write->insert($this->getTable('outofstocksubscription/info'), array('product_id'=>$productId, 'email'=>$email, 'date'=>date('Y-m-d H:i:s')));
|
| 22 |
+
}
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
public function deleteSubscrition($id)
|
| 26 |
+
{
|
| 27 |
+
if ($id)
|
| 28 |
+
{
|
| 29 |
+
$write = $this->_getWriteAdapter();
|
| 30 |
+
$write->delete($this->getTable('outofstocksubscription/info'), 'id='.$id);
|
| 31 |
+
}
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
public function getProducts()
|
| 35 |
+
{
|
| 36 |
+
$read = $this->_getReadAdapter();
|
| 37 |
+
|
| 38 |
+
$select = "SELECT DISTINCT(product_id) FROM ".$this->getTable('outofstocksubscription/info');
|
| 39 |
+
|
| 40 |
+
return $read->fetchAll($select);
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
public function getSubscriptions($productId)
|
| 44 |
+
{
|
| 45 |
+
$read = $this->_getReadAdapter();
|
| 46 |
+
|
| 47 |
+
$select = $read->select()
|
| 48 |
+
->from($this->getTable('outofstocksubscription/info'))
|
| 49 |
+
->where("product_id = ".$productId);
|
| 50 |
+
|
| 51 |
+
return $read->fetchAll($select);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
public function deleteSubscription($id)
|
| 55 |
+
{
|
| 56 |
+
$write = $this->_getWriteAdapter();
|
| 57 |
+
$write->delete($this->getTable('outofstocksubscription/info'), 'id='.$id);
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
public function getAttributeId()
|
| 61 |
+
{
|
| 62 |
+
$read = $this->_getReadAdapter();
|
| 63 |
+
|
| 64 |
+
$select = $read->select()
|
| 65 |
+
->from('eav_entity_type', 'entity_type_id')
|
| 66 |
+
->where("entity_type_code = 'catalog_product'");
|
| 67 |
+
$entityTypeId = $read->fetchOne($select);
|
| 68 |
+
if (!$entityTypeId) {
|
| 69 |
+
$entityTypeId = 4;
|
| 70 |
+
}
|
| 71 |
+
$select = $read->select()
|
| 72 |
+
->from('eav_attribute', 'attribute_id')
|
| 73 |
+
->where("entity_type_id = ".$entityTypeId." AND attribute_code = 'name'");
|
| 74 |
+
return $read->fetchOne($select);
|
| 75 |
+
}
|
| 76 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/Model/Mysql4/Subscriber.php
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Webcreta_OutofStockSubscription_Model_Mysql4_Subscriber extends Mage_Core_Model_Mysql4_Abstract
|
| 4 |
+
{
|
| 5 |
+
protected function _construct()
|
| 6 |
+
{
|
| 7 |
+
$this->_init('outofstocksubscription/info', 'id');
|
| 8 |
+
}
|
| 9 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/Model/Mysql4/Subscriber/Collection.php
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Webcreta
|
| 5 |
+
* @package Webcreta_OutofStockSubscription
|
| 6 |
+
*/
|
| 7 |
+
class Webcreta_OutofStockSubscription_Model_Mysql4_Subscriber_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
| 8 |
+
{
|
| 9 |
+
/**
|
| 10 |
+
* Initialize collection
|
| 11 |
+
*
|
| 12 |
+
*/
|
| 13 |
+
protected function _construct()
|
| 14 |
+
{
|
| 15 |
+
$this->_init('outofstocksubscription/subscriber');
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
protected function _initSelect()
|
| 19 |
+
{
|
| 20 |
+
parent::_initSelect();
|
| 21 |
+
//$attributeId = Mage::getResourceSingleton('outofstocksubscription/info')->getAttributeId();
|
| 22 |
+
$this->getSelect()->join(array("cpe" => 'catalog_product_entity'), 'main_table.product_id=cpe.entity_id', array('sku'=>'cpe.sku'));
|
| 23 |
+
//$this->getSelect()->join(array("cpev" => 'catalog_product_entity_varchar'), 'cpe.entity_id=cpev.entity_id', array('value'=>'cpev.value'));
|
| 24 |
+
//$this->getSelect()->where("cpev.attribute_id=".$attributeId);
|
| 25 |
+
|
| 26 |
+
//$this->getSelect()->group("con.ticket_id");
|
| 27 |
+
//$this->getSelect()->order("con.comment_date DESC");
|
| 28 |
+
//exit($this->getSelect());
|
| 29 |
+
}
|
| 30 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/Model/Observer.php
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Webcreta
|
| 5 |
+
* @package Webcreta_OutofStockSubscription
|
| 6 |
+
*/
|
| 7 |
+
class Webcreta_OutofStockSubscription_Model_Observer
|
| 8 |
+
{
|
| 9 |
+
const OUTOFSTOCKSUBSCRIPTION_MAIL_TEMPLATE = 'outofstock_subscription';
|
| 10 |
+
|
| 11 |
+
public function sendEmailToOutofStockSubscription($observer)
|
| 12 |
+
{
|
| 13 |
+
$product = $observer->getEvent()->getProduct();
|
| 14 |
+
|
| 15 |
+
if ($product) {
|
| 16 |
+
if ($product->getStockItem()) {
|
| 17 |
+
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
|
| 18 |
+
|
| 19 |
+
//$isInStock = $product->getStockItem()->getIsInStock();
|
| 20 |
+
$isInStock = $stockItem->getIsInStock();
|
| 21 |
+
|
| 22 |
+
if ($isInStock>=1) {
|
| 23 |
+
$subscriptions = Mage::getResourceModel('outofstocksubscription/info')->getSubscriptions($product->getId());
|
| 24 |
+
if (count($subscriptions) > 0) {
|
| 25 |
+
|
| 26 |
+
//$prodUrl = $product->getProductUrl();
|
| 27 |
+
$prodUrl = Mage::getBaseUrl();
|
| 28 |
+
$prodUrl = str_replace("/index.php", "", $prodUrl);
|
| 29 |
+
$prodUrl = $prodUrl.$product->getData('url_path');
|
| 30 |
+
|
| 31 |
+
$storeId = Mage::app()->getStore()->getId();
|
| 32 |
+
|
| 33 |
+
// get email template
|
| 34 |
+
$emailTemplate = Mage::getStoreConfig('outofstocksubscription/mail/template', $storeId);
|
| 35 |
+
if (!is_numeric($emailTemplate)) {
|
| 36 |
+
$emailTemplate = self::OUTOFSTOCKSUBSCRIPTION_MAIL_TEMPLATE;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
$translate = Mage::getSingleton('core/translate');
|
| 40 |
+
|
| 41 |
+
foreach ($subscriptions as $subscription) {
|
| 42 |
+
|
| 43 |
+
$translate->setTranslateInline(false);
|
| 44 |
+
Mage::getModel('core/email_template')
|
| 45 |
+
->setDesignConfig(array('area'=>'frontend', 'store'=>$storeId))
|
| 46 |
+
->sendTransactional(
|
| 47 |
+
$emailTemplate,
|
| 48 |
+
'support',
|
| 49 |
+
$subscription['email'],
|
| 50 |
+
'',
|
| 51 |
+
array(
|
| 52 |
+
'product' => $product->getName(),
|
| 53 |
+
'product_url' => $prodUrl,
|
| 54 |
+
));
|
| 55 |
+
$translate->setTranslateInline(true);
|
| 56 |
+
|
| 57 |
+
Mage::getResourceModel('outofstocksubscription/info')->deleteSubscription($subscription['id']);
|
| 58 |
+
}
|
| 59 |
+
}
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
}
|
| 63 |
+
//return $this;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
public function cancelOrderItem($observer)
|
| 67 |
+
{
|
| 68 |
+
$item = $observer->getEvent()->getItem();
|
| 69 |
+
|
| 70 |
+
$productId = $item->getProductId();
|
| 71 |
+
if ($productId) {
|
| 72 |
+
$subscriptions = Mage::getResourceModel('outofstocksubscription/info')->getSubscriptions($productId);
|
| 73 |
+
if (count($subscriptions) > 0) {
|
| 74 |
+
|
| 75 |
+
$product = Mage::getModel('catalog/product')->load($productId);
|
| 76 |
+
$prodUrl = Mage::getBaseUrl();
|
| 77 |
+
$prodUrl = str_replace("/index.php", "", $prodUrl);
|
| 78 |
+
$prodUrl = $prodUrl.$product->getData('url_path');
|
| 79 |
+
|
| 80 |
+
$storeId = Mage::app()->getStore()->getId();
|
| 81 |
+
|
| 82 |
+
// get email template
|
| 83 |
+
$emailTemplate = Mage::getStoreConfig('outofstocksubscription/mail/template', $storeId);
|
| 84 |
+
if (!is_numeric($emailTemplate)) {
|
| 85 |
+
$emailTemplate = self::OUTOFSTOCKSUBSCRIPTION_MAIL_TEMPLATE;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
$translate = Mage::getSingleton('core/translate');
|
| 89 |
+
|
| 90 |
+
foreach ($subscriptions as $subscription) {
|
| 91 |
+
|
| 92 |
+
$translate->setTranslateInline(false);
|
| 93 |
+
Mage::getModel('core/email_template')
|
| 94 |
+
->setDesignConfig(array('area'=>'frontend', 'store'=>$storeId))
|
| 95 |
+
->sendTransactional(
|
| 96 |
+
$emailTemplate,
|
| 97 |
+
'support',
|
| 98 |
+
$subscription['email'],
|
| 99 |
+
'',
|
| 100 |
+
array(
|
| 101 |
+
'product' => $product->getName(),
|
| 102 |
+
'product_url' => $prodUrl,
|
| 103 |
+
));
|
| 104 |
+
$translate->setTranslateInline(true);
|
| 105 |
+
|
| 106 |
+
Mage::getResourceModel('outofstocksubscription/info')->deleteSubscription($subscription['id']);
|
| 107 |
+
}
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
}
|
| 111 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/Model/Subscriber.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Webcreta_OutofStockSubscription_Model_Subscriber extends Mage_Core_Model_Abstract
|
| 4 |
+
{
|
| 5 |
+
/**
|
| 6 |
+
* Init model
|
| 7 |
+
*/
|
| 8 |
+
protected function _construct()
|
| 9 |
+
{
|
| 10 |
+
$this->_init('outofstocksubscription/info');
|
| 11 |
+
}
|
| 12 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/controllers/Adminhtml/SubscriberController.php
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Out of Stock Subscriber controller
|
| 5 |
+
*
|
| 6 |
+
* @category Webcreta
|
| 7 |
+
* @package Webcreta_OutofStockSubscription
|
| 8 |
+
*/
|
| 9 |
+
class Webcreta_OutofStockSubscription_Adminhtml_SubscriberController extends Mage_Adminhtml_Controller_Action
|
| 10 |
+
{
|
| 11 |
+
public function _initAction()
|
| 12 |
+
{
|
| 13 |
+
$this->loadLayout()
|
| 14 |
+
->_addBreadcrumb(Mage::helper('adminhtml')->__('Out of Stock Subscribers'), Mage::helper('adminhtml')->__('Out of Stock Subscribers'));
|
| 15 |
+
return $this;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
public function indexAction()
|
| 19 |
+
{
|
| 20 |
+
if ($this->getRequest()->getQuery('ajax')) {
|
| 21 |
+
$this->_forward('grid');
|
| 22 |
+
return;
|
| 23 |
+
}
|
| 24 |
+
$this->loadLayout();
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* Set active menu item
|
| 28 |
+
*/
|
| 29 |
+
$this->_setActiveMenu('outofstocksubscription');
|
| 30 |
+
|
| 31 |
+
$this->_addContent(
|
| 32 |
+
$this->getLayout()->createBlock('outofstocksubscription/adminhtml_subcriber')
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
/**
|
| 36 |
+
* Add breadcrumb item
|
| 37 |
+
*/
|
| 38 |
+
$this->_addBreadcrumb(Mage::helper('outofstocksubscription')->__('Out of Stock Subscribers'), Mage::helper('outofstocksubscription')->__('Out of Stock Subscribers'));
|
| 39 |
+
|
| 40 |
+
$this->renderLayout();
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
public function gridAction()
|
| 44 |
+
{
|
| 45 |
+
$this->loadLayout();
|
| 46 |
+
$this->getResponse()->setBody($this->getLayout()->createBlock('outofstocksubscription/adminhtml_subcriber_grid')->toHtml());
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
public function deleteAction()
|
| 50 |
+
{
|
| 51 |
+
$id = (int) $this->getRequest()->getParam('id');
|
| 52 |
+
Mage::getSingleton('outofstocksubscription/info')->deleteSubscrition($id);
|
| 53 |
+
$this->_getSession()->addSuccess($this->__('The subscription has been deleted.'));
|
| 54 |
+
$this->_redirect('*/*/');
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
protected function _isAllowed()
|
| 58 |
+
{
|
| 59 |
+
return Mage::getSingleton('admin/session')->isAllowed('outofstocksubscription');
|
| 60 |
+
}
|
| 61 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/controllers/IndexController.php
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Out of Stock Subscription index controller
|
| 5 |
+
*
|
| 6 |
+
* @category Webcreta
|
| 7 |
+
* @package Webcreta_OutofStockSubscription
|
| 8 |
+
*/
|
| 9 |
+
class Webcreta_OutofStockSubscription_IndexController extends Mage_Core_Controller_Front_Action
|
| 10 |
+
{
|
| 11 |
+
public function indexAction()
|
| 12 |
+
{
|
| 13 |
+
$productId = $this->getRequest()->getPost('product');
|
| 14 |
+
$email = $this->getRequest()->getPost('subscription_email');
|
| 15 |
+
if ($email && $productId) {
|
| 16 |
+
|
| 17 |
+
Mage::getModel('outofstocksubscription/info')->saveSubscrition($productId, $email);
|
| 18 |
+
|
| 19 |
+
$this->_getSession()->addSuccess($this->__('Subscription added successfully.'));
|
| 20 |
+
|
| 21 |
+
$product = Mage::getModel('catalog/product')->load($productId);
|
| 22 |
+
//$product->getProductUrl();
|
| 23 |
+
$url = $product->getData('url_path');
|
| 24 |
+
//$this->_redirect('catalog/product/view', array('id'=>$productId));
|
| 25 |
+
$this->_redirect($url);
|
| 26 |
+
}
|
| 27 |
+
else {
|
| 28 |
+
$this->_redirect('');
|
| 29 |
+
}
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
protected function _getSession()
|
| 33 |
+
{
|
| 34 |
+
return Mage::getSingleton('checkout/session');
|
| 35 |
+
}
|
| 36 |
+
}
|
app/code/local/Webcreta/OutofStockSubscription/etc/config.xml
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Webcreta_OutofStockSubscription>
|
| 5 |
+
<version>0.1.0</version>
|
| 6 |
+
</Webcreta_OutofStockSubscription>
|
| 7 |
+
</modules>
|
| 8 |
+
|
| 9 |
+
<global>
|
| 10 |
+
<blocks>
|
| 11 |
+
<outofstocksubscription>
|
| 12 |
+
<class>Webcreta_OutofStockSubscription_Block</class>
|
| 13 |
+
</outofstocksubscription>
|
| 14 |
+
</blocks>
|
| 15 |
+
<helpers>
|
| 16 |
+
<outofstocksubscription>
|
| 17 |
+
<class>Webcreta_OutofStockSubscription_Helper</class>
|
| 18 |
+
</outofstocksubscription>
|
| 19 |
+
</helpers>
|
| 20 |
+
<models>
|
| 21 |
+
<outofstocksubscription>
|
| 22 |
+
<class>Webcreta_OutofStockSubscription_Model</class>
|
| 23 |
+
<resourceModel>outofstocksubscription_mysql4</resourceModel>
|
| 24 |
+
</outofstocksubscription>
|
| 25 |
+
<outofstocksubscription_mysql4>
|
| 26 |
+
<class>Webcreta_OutofStockSubscription_Model_Mysql4</class>
|
| 27 |
+
<entities>
|
| 28 |
+
<info>
|
| 29 |
+
<table>outofstocksubscription_info</table>
|
| 30 |
+
</info>
|
| 31 |
+
</entities>
|
| 32 |
+
</outofstocksubscription_mysql4>
|
| 33 |
+
</models>
|
| 34 |
+
<resources>
|
| 35 |
+
<outofstocksubscription_setup>
|
| 36 |
+
<setup>
|
| 37 |
+
<module>Webcreta_OutofStockSubscription</module>
|
| 38 |
+
</setup>
|
| 39 |
+
<connection>
|
| 40 |
+
<use>core_setup</use>
|
| 41 |
+
</connection>
|
| 42 |
+
</outofstocksubscription_setup>
|
| 43 |
+
<outofstocksubscription_write>
|
| 44 |
+
<connection>
|
| 45 |
+
<use>core_write</use>
|
| 46 |
+
</connection>
|
| 47 |
+
</outofstocksubscription_write>
|
| 48 |
+
<outofstocksubscription_read>
|
| 49 |
+
<connection>
|
| 50 |
+
<use>core_read</use>
|
| 51 |
+
</connection>
|
| 52 |
+
</outofstocksubscription_read>
|
| 53 |
+
</resources>
|
| 54 |
+
<events>
|
| 55 |
+
<catalog_product_save_after>
|
| 56 |
+
<observers>
|
| 57 |
+
<outofstocksubscription_inventory>
|
| 58 |
+
<class>outofstocksubscription/observer</class>
|
| 59 |
+
<method>sendEmailToOutofStockSubscription</method>
|
| 60 |
+
</outofstocksubscription_inventory>
|
| 61 |
+
</observers>
|
| 62 |
+
</catalog_product_save_after>
|
| 63 |
+
<sales_order_item_cancel>
|
| 64 |
+
<observers>
|
| 65 |
+
<outofstocksubscription_order_cancel>
|
| 66 |
+
<class>outofstocksubscription/observer</class>
|
| 67 |
+
<method>cancelOrderItem</method>
|
| 68 |
+
</outofstocksubscription_order_cancel>
|
| 69 |
+
</observers>
|
| 70 |
+
</sales_order_item_cancel>
|
| 71 |
+
</events>
|
| 72 |
+
<template>
|
| 73 |
+
<email>
|
| 74 |
+
<outofstock_subscription translate="label" module="outofstocksubscription">
|
| 75 |
+
<label>Out of Stock Subscription</label>
|
| 76 |
+
<file>outofstock_subscription.html</file>
|
| 77 |
+
<type>html</type>
|
| 78 |
+
</outofstock_subscription>
|
| 79 |
+
</email>
|
| 80 |
+
</template>
|
| 81 |
+
</global>
|
| 82 |
+
|
| 83 |
+
<frontend>
|
| 84 |
+
<routers>
|
| 85 |
+
<outofstocksubscription>
|
| 86 |
+
<use>standard</use>
|
| 87 |
+
<args>
|
| 88 |
+
<module>Webcreta_OutofStockSubscription</module>
|
| 89 |
+
<frontName>outofstocksubscription</frontName>
|
| 90 |
+
</args>
|
| 91 |
+
</outofstocksubscription>
|
| 92 |
+
</routers>
|
| 93 |
+
<layout>
|
| 94 |
+
<updates>
|
| 95 |
+
<outofstocksubscription>
|
| 96 |
+
<file>outofstocksubscription.xml</file>
|
| 97 |
+
</outofstocksubscription>
|
| 98 |
+
</updates>
|
| 99 |
+
</layout>
|
| 100 |
+
</frontend>
|
| 101 |
+
|
| 102 |
+
<admin>
|
| 103 |
+
<routers>
|
| 104 |
+
<outofstocksubscription>
|
| 105 |
+
<use>admin</use>
|
| 106 |
+
<args>
|
| 107 |
+
<module>Webcreta_OutofStockSubscription</module>
|
| 108 |
+
<frontName>outofstocksubscription</frontName>
|
| 109 |
+
</args>
|
| 110 |
+
</outofstocksubscription>
|
| 111 |
+
</routers>
|
| 112 |
+
</admin>
|
| 113 |
+
|
| 114 |
+
<default>
|
| 115 |
+
<outofstocksubscription>
|
| 116 |
+
<mail>
|
| 117 |
+
<active>1</active>
|
| 118 |
+
</mail>
|
| 119 |
+
</outofstocksubscription>
|
| 120 |
+
</default>
|
| 121 |
+
|
| 122 |
+
<adminhtml>
|
| 123 |
+
<menu>
|
| 124 |
+
<outofstocksubscription translate="title" module="outofstocksubscription">
|
| 125 |
+
<title>Subscribers</title>
|
| 126 |
+
<sort_order>130</sort_order>
|
| 127 |
+
<action>outofstocksubscription/adminhtml_subscriber</action>
|
| 128 |
+
</outofstocksubscription>
|
| 129 |
+
</menu>
|
| 130 |
+
<acl>
|
| 131 |
+
<resources>
|
| 132 |
+
<admin translate="title" module="adminhtml">
|
| 133 |
+
<children>
|
| 134 |
+
<outofstocksubscription>
|
| 135 |
+
<title>Subscribers</title>
|
| 136 |
+
</outofstocksubscription>
|
| 137 |
+
<system>
|
| 138 |
+
<children>
|
| 139 |
+
<config>
|
| 140 |
+
<children>
|
| 141 |
+
<outofstocksubscription translate="title">
|
| 142 |
+
<title>Out of Stock Subscription</title>
|
| 143 |
+
<sort_order>200</sort_order>
|
| 144 |
+
</outofstocksubscription>
|
| 145 |
+
</children>
|
| 146 |
+
</config>
|
| 147 |
+
</children>
|
| 148 |
+
</system>
|
| 149 |
+
</children>
|
| 150 |
+
</admin>
|
| 151 |
+
</resources>
|
| 152 |
+
</acl>
|
| 153 |
+
</adminhtml>
|
| 154 |
+
|
| 155 |
+
</config>
|
app/code/local/Webcreta/OutofStockSubscription/etc/system.xml
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<sections>
|
| 4 |
+
<outofstocksubscription translate="label" module="outofstocksubscription">
|
| 5 |
+
<label>Out of Stock Subscription</label>
|
| 6 |
+
<tab>catalog</tab>
|
| 7 |
+
<frontend_type>text</frontend_type>
|
| 8 |
+
<sort_order>200</sort_order>
|
| 9 |
+
<show_in_default>1</show_in_default>
|
| 10 |
+
<show_in_website>1</show_in_website>
|
| 11 |
+
<show_in_store>1</show_in_store>
|
| 12 |
+
<groups>
|
| 13 |
+
<mail translate="label">
|
| 14 |
+
<label>Out of Stock Subscription</label>
|
| 15 |
+
<frontend_type>text</frontend_type>
|
| 16 |
+
<sort_order>5</sort_order>
|
| 17 |
+
<show_in_default>1</show_in_default>
|
| 18 |
+
<show_in_website>1</show_in_website>
|
| 19 |
+
<show_in_store>1</show_in_store>
|
| 20 |
+
<fields>
|
| 21 |
+
<active translate="label">
|
| 22 |
+
<label>Enabled</label>
|
| 23 |
+
<frontend_type>select</frontend_type>
|
| 24 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 25 |
+
<sort_order>1</sort_order>
|
| 26 |
+
<show_in_default>1</show_in_default>
|
| 27 |
+
<show_in_website>1</show_in_website>
|
| 28 |
+
<show_in_store>1</show_in_store>
|
| 29 |
+
</active>
|
| 30 |
+
<template translate="label">
|
| 31 |
+
<label>Email Template</label>
|
| 32 |
+
<frontend_type>select</frontend_type>
|
| 33 |
+
<source_model>adminhtml/system_config_source_email_template</source_model>
|
| 34 |
+
<sort_order>2</sort_order>
|
| 35 |
+
<show_in_default>1</show_in_default>
|
| 36 |
+
<show_in_website>1</show_in_website>
|
| 37 |
+
<show_in_store>1</show_in_store>
|
| 38 |
+
</template>
|
| 39 |
+
</fields>
|
| 40 |
+
</mail>
|
| 41 |
+
</groups>
|
| 42 |
+
</outofstocksubscription>
|
| 43 |
+
</sections>
|
| 44 |
+
</config>
|
app/code/local/Webcreta/OutofStockSubscription/sql/outofstocksubscription_setup/mysql4-install-0.1.0.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* @category Webcreta
|
| 4 |
+
* @package Webcreta_OutofStockSubscription
|
| 5 |
+
*/
|
| 6 |
+
|
| 7 |
+
$installer = $this;
|
| 8 |
+
/* @var $installer Mage_Core_Model_Resource_Setup */
|
| 9 |
+
|
| 10 |
+
$installer->startSetup();
|
| 11 |
+
|
| 12 |
+
$installer->run("
|
| 13 |
+
|
| 14 |
+
-- DROP TABLE IF EXISTS `{$this->getTable('outofstocksubscription_info')}`;
|
| 15 |
+
CREATE TABLE `{$this->getTable('outofstocksubscription_info')}` (
|
| 16 |
+
`id` INTEGER unsigned NOT NULL auto_increment,
|
| 17 |
+
`product_id` INTEGER unsigned NOT NULL,
|
| 18 |
+
`email` TEXT NOT NULL default '',
|
| 19 |
+
`is_active` ENUM('0','1') NOT NULL DEFAULT '0',
|
| 20 |
+
`date` DATETIME default '0000-00-00 00:00:00',
|
| 21 |
+
PRIMARY KEY (`id`),
|
| 22 |
+
KEY `FK_OUTOFSTOCKSUBSCRIPTION_PRODUCT_ID` (`product_id`),
|
| 23 |
+
CONSTRAINT `FK_OUTOFSTOCKSUBSCRIPTION_PRODUCT_ID` FOREIGN KEY (`product_id`) REFERENCES `{$this->getTable('catalog_product_entity')}` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE
|
| 24 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
|
| 25 |
+
|
| 26 |
+
");
|
| 27 |
+
|
| 28 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/template/outofstocksubscription/widget/grid.phtml
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/afl-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 design
|
| 22 |
+
* @package default_default
|
| 23 |
+
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
|
| 24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
?>
|
| 27 |
+
<?php
|
| 28 |
+
/**
|
| 29 |
+
* Template for Mage_Adminhtml_Block_Widget_Grid
|
| 30 |
+
*
|
| 31 |
+
* getId()
|
| 32 |
+
* getCollection()
|
| 33 |
+
* getColumns()
|
| 34 |
+
* getPagerVisibility()
|
| 35 |
+
* getVarNamePage()
|
| 36 |
+
*/
|
| 37 |
+
$numColumns = sizeof($this->getColumns());
|
| 38 |
+
?>
|
| 39 |
+
<?php if($this->getCollection()): ?>
|
| 40 |
+
<?php if($this->canDisplayContainer()): ?>
|
| 41 |
+
<?php if($this->getGridHeader()): ?>
|
| 42 |
+
<div class="content-header">
|
| 43 |
+
<table cellspacing="0">
|
| 44 |
+
<tr>
|
| 45 |
+
<td style="width:50%;"><h2><?php echo $this->getGridHeader(); ?></h2></td>
|
| 46 |
+
</tr>
|
| 47 |
+
</table>
|
| 48 |
+
</div>
|
| 49 |
+
<?php endif ?>
|
| 50 |
+
|
| 51 |
+
<div id="<?php echo $this->getId() ?>">
|
| 52 |
+
<?php else: ?>
|
| 53 |
+
<?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
|
| 54 |
+
<?php endif; ?>
|
| 55 |
+
<?php if($this->getPagerVisibility() || $this->getExportTypes() || $this->getFilterVisibility()): ?>
|
| 56 |
+
<table cellspacing="0" class="actions">
|
| 57 |
+
<tr>
|
| 58 |
+
<?php if($this->getPagerVisibility()): ?>
|
| 59 |
+
<td class="pager">
|
| 60 |
+
<?php echo $this->__('Page') ?>
|
| 61 |
+
|
| 62 |
+
<?php $_curPage = $this->getCollection()->getCurPage() ?>
|
| 63 |
+
<?php $_lastPage = $this->getCollection()->getLastPageNumber() ?>
|
| 64 |
+
<?php if($_curPage>1): ?>
|
| 65 |
+
<a href="#" title="<?php echo $this->__('Previous page') ?>" onclick="<?php echo $this->getJsObjectName() ?>.setPage('<?php echo ($_curPage-1) ?>');return false;"><img src="<?php echo $this->getSkinUrl('images/pager_arrow_left.gif') ?>" alt="Go to Previous page" class="arrow"/></a>
|
| 66 |
+
<?php else: ?>
|
| 67 |
+
<img src="<?php echo $this->getSkinUrl('images/pager_arrow_left_off.gif') ?>" alt="Go to Previous page" class="arrow"/>
|
| 68 |
+
<?php endif; ?>
|
| 69 |
+
|
| 70 |
+
<input type="text" name="<?php echo $this->getVarNamePage() ?>" value="<?php echo $_curPage ?>" class="input-text page" onkeypress="<?php echo $this->getJsObjectName() ?>.inputPage(event, '<?php echo $_lastPage ?>')"/>
|
| 71 |
+
|
| 72 |
+
<?php if($_curPage < $_lastPage): ?>
|
| 73 |
+
<a href="#" title="<?php echo $this->__('Next page') ?>" onclick="<?php echo $this->getJsObjectName() ?>.setPage('<?php echo ($_curPage+1) ?>');return false;"><img src="<?php echo $this->getSkinUrl('images/pager_arrow_right.gif') ?>" alt="Go to Next page" class="arrow"/></a>
|
| 74 |
+
<?php else: ?>
|
| 75 |
+
<img src="<?php echo $this->getSkinUrl('images/pager_arrow_right_off.gif') ?>" alt="Go to Previous page" class="arrow"/>
|
| 76 |
+
<?php endif; ?>
|
| 77 |
+
|
| 78 |
+
<?php echo $this->__('of %s pages', $this->getCollection()->getLastPageNumber()) ?>
|
| 79 |
+
<span class="separator">|</span>
|
| 80 |
+
<?php echo $this->__('View') ?>
|
| 81 |
+
<select name="<?php echo $this->getVarNameLimit() ?>" onchange="<?php echo $this->getJsObjectName() ?>.loadByElement(this)">
|
| 82 |
+
<option value="20"<?php if($this->getCollection()->getPageSize()==20): ?> selected="selected"<?php endif; ?>>20</option>
|
| 83 |
+
<option value="30"<?php if($this->getCollection()->getPageSize()==30): ?> selected="selected"<?php endif; ?>>30</option>
|
| 84 |
+
<option value="50"<?php if($this->getCollection()->getPageSize()==50): ?> selected="selected"<?php endif; ?>>50</option>
|
| 85 |
+
<option value="100"<?php if($this->getCollection()->getPageSize()==100): ?> selected="selected"<?php endif; ?>>100</option>
|
| 86 |
+
<option value="200"<?php if($this->getCollection()->getPageSize()==200): ?> selected="selected"<?php endif; ?>>200</option>
|
| 87 |
+
</select>
|
| 88 |
+
<?php echo $this->__('per page') ?><span class="separator">|</span>
|
| 89 |
+
<?php echo $this->__('Total %d records found', $this->getCollection()->getSize()) ?>
|
| 90 |
+
<span id="<?php echo $this->getHtmlId() ?>-total-count" class="no-display"><?php echo $this->getCollection()->getSize() ?></span>
|
| 91 |
+
<?php if($this->getRssLists()): ?>
|
| 92 |
+
<?php foreach ($this->getRssLists() as $_rss): ?>
|
| 93 |
+
<span class="separator">|</span><a href="<?php echo $_rss->getUrl() ?>" class="link-feed"><?php echo $_rss->getLabel() ?></a>
|
| 94 |
+
<?php endforeach ?>
|
| 95 |
+
<?php endif; ?>
|
| 96 |
+
</td>
|
| 97 |
+
<?php endif ?>
|
| 98 |
+
<?php if($this->getExportTypes()): ?>
|
| 99 |
+
<td class="export a-right">
|
| 100 |
+
<img src="<?php echo $this->getSkinUrl('images/icon_export.gif') ?>" alt="" class="v-middle"/> <?php echo $this->__('Export to:') ?>
|
| 101 |
+
<select name="<?php echo $this->getId() ?>_export" id="<?php echo $this->getId() ?>_export" style="width:8em;">
|
| 102 |
+
<?php foreach ($this->getExportTypes() as $_type): ?>
|
| 103 |
+
<option value="<?php echo $_type->getUrl() ?>"><?php echo $_type->getLabel() ?></option>
|
| 104 |
+
<?php endforeach; ?>
|
| 105 |
+
</select>
|
| 106 |
+
<?php echo $this->getExportButtonHtml() ?>
|
| 107 |
+
</td>
|
| 108 |
+
<?php endif; ?>
|
| 109 |
+
<td class="filter-actions a-right">
|
| 110 |
+
<?php echo $this->getMainButtonsHtml() ?>
|
| 111 |
+
</td>
|
| 112 |
+
</tr>
|
| 113 |
+
</table>
|
| 114 |
+
<?php endif; ?>
|
| 115 |
+
<?php if($this->getMassactionBlock()->isAvailable()): ?>
|
| 116 |
+
<?php echo $this->getMassactionBlockHtml() ?>
|
| 117 |
+
<?php endif ?>
|
| 118 |
+
<div class="grid">
|
| 119 |
+
<div class="hor-scroll">
|
| 120 |
+
<table cellspacing="0" class="data" id="<?php echo $this->getId() ?>_table">
|
| 121 |
+
<?php foreach ($this->getColumns() as $_column): ?>
|
| 122 |
+
<col <?php echo $_column->getHtmlProperty() ?> />
|
| 123 |
+
<?php if ($_column->getEditable() && !$_column->getEditOnly()) : ?>
|
| 124 |
+
<col <?php echo $_column->getHtmlProperty() ?> />
|
| 125 |
+
<?php endif ?>
|
| 126 |
+
<?php endforeach; ?>
|
| 127 |
+
<?php if ($this->getHeadersVisibility() || $this->getFilterVisibility()): ?>
|
| 128 |
+
<thead>
|
| 129 |
+
<?php if ($this->getHeadersVisibility()): ?>
|
| 130 |
+
<tr class="headings">
|
| 131 |
+
<?php foreach ($this->getColumns() as $_column): ?>
|
| 132 |
+
<th<?php echo $_column->getHeaderHtmlProperty() ?>><span class="nobr"><?php echo $_column->getHeaderHtml() ?></span></th>
|
| 133 |
+
<?php endforeach; ?>
|
| 134 |
+
</tr>
|
| 135 |
+
<?php endif; ?>
|
| 136 |
+
<?php if ($this->getFilterVisibility()): ?>
|
| 137 |
+
<tr class="filter">
|
| 138 |
+
<?php $i=0;foreach ($this->getColumns() as $_column): ?>
|
| 139 |
+
<th<?php echo $_column->getHeaderHtmlProperty() ?>><?php echo $_column->getFilterHtml() ?></th>
|
| 140 |
+
<?php endforeach; ?>
|
| 141 |
+
</tr>
|
| 142 |
+
<?php endif ?>
|
| 143 |
+
</thead>
|
| 144 |
+
<?php endif; ?>
|
| 145 |
+
<?php if ($this->getCountTotals()): ?>
|
| 146 |
+
<tfoot>
|
| 147 |
+
<tr class="totals">
|
| 148 |
+
<?php foreach ($this->getColumns() as $_column): ?>
|
| 149 |
+
<th class="<?php echo $_column->getCssProperty() ?>"><?php echo ($_column->hasTotalsLabel()) ? $_column->getTotalsLabel() : $_column->getRowField($_column->getGrid()->getTotals()) ?> </th>
|
| 150 |
+
<?php endforeach; ?>
|
| 151 |
+
</tr>
|
| 152 |
+
</tfoot>
|
| 153 |
+
<?php endif; ?>
|
| 154 |
+
|
| 155 |
+
<tbody>
|
| 156 |
+
<?php if (($this->getCollection()->getSize()>0) && (!$this->getIsCollapsed())): ?>
|
| 157 |
+
<?php foreach ($this->getCollection() as $_index=>$_item): ?>
|
| 158 |
+
<tr title="<?php //echo $this->getRowUrl($_item) ?>"<?php if ($_class = $this->getRowClass($_item)):?> class="<?php echo $_class; ?>"<?php endif;?> >
|
| 159 |
+
<?php $i=0;foreach ($this->getColumns() as $_column): ?>
|
| 160 |
+
|
| 161 |
+
<?php if ($this->shouldRenderCell($_item, $_column)):?>
|
| 162 |
+
<?php $_rowspan = $this->getRowspan($_item, $_column);?>
|
| 163 |
+
<td <?php echo ($_rowspan ? 'rowspan="' . $_rowspan . '" ' : '') ?>class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i==$numColumns?'last':'' ?>">
|
| 164 |
+
<?php if ($i==4): ?>
|
| 165 |
+
<?php $_productId = $_column->getRowField($_item) ?>
|
| 166 |
+
<?php $_product = Mage::getModel('catalog/product')->load($_productId) ?>
|
| 167 |
+
<?php echo $_product->getName() ?>
|
| 168 |
+
<?php elseif ($i!=6): ?>
|
| 169 |
+
<?php echo (($_html = $_column->getRowField($_item)) != '' ? $_html : ' ') ?>
|
| 170 |
+
<?php else: ?>
|
| 171 |
+
<?php $_id = (($_html = $_column->getRowField($_item)) != '' ? $_html : ' ') ?>
|
| 172 |
+
<a href="<?php echo $this->getUrl('outofstocksubscription/adminhtml_subscriber/delete', array('id'=>$_id)); ?>" onclick="return deleteSubscription();"><?php echo $this->__('Delete') ?></a>
|
| 173 |
+
<?php endif; ?>
|
| 174 |
+
</td>
|
| 175 |
+
<?php if ($this->shouldRenderEmptyCell($_item, $_column)):?>
|
| 176 |
+
<td colspan="<?php echo $this->getEmptyCellColspan($_item)?>" class="last"><?php echo $this->getEmptyCellLabel()?></td>
|
| 177 |
+
<?php endif;?>
|
| 178 |
+
<?php endif;?>
|
| 179 |
+
|
| 180 |
+
<?php endforeach; ?>
|
| 181 |
+
</tr>
|
| 182 |
+
<?php if ($_multipleRows = $this->getMultipleRows($_item)):?>
|
| 183 |
+
<?php foreach ($_multipleRows as $_i):?>
|
| 184 |
+
<tr>
|
| 185 |
+
<?php $i=0;foreach ($this->getMultipleRowColumns($_i) as $_column): ?>
|
| 186 |
+
<td class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i==$numColumns-1?'last':'' ?>">
|
| 187 |
+
<?php echo (($_html = $_column->getRowField($_i)) != '' ? $_html : ' ') ?>
|
| 188 |
+
</td>
|
| 189 |
+
<?php endforeach; ?>
|
| 190 |
+
</tr>
|
| 191 |
+
<?php endforeach;?>
|
| 192 |
+
<?php endif;?>
|
| 193 |
+
|
| 194 |
+
<?php if ($this->shouldRenderSubTotal($_item)): ?>
|
| 195 |
+
<tr class="subtotals">
|
| 196 |
+
<?php $i = 0; foreach ($this->getSubTotalColumns() as $_column): ?>
|
| 197 |
+
<td class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i == $numColumns ? 'last' : '' ?>">
|
| 198 |
+
<?php echo ($_column->hasSubtotalsLabel() ? $_column->getSubtotalsLabel() :
|
| 199 |
+
$_column->getRowField($this->getSubTotalItem($_item))
|
| 200 |
+
);
|
| 201 |
+
?>
|
| 202 |
+
</td>
|
| 203 |
+
<?php endforeach; ?>
|
| 204 |
+
</tr>
|
| 205 |
+
<?php endif; ?>
|
| 206 |
+
<?php endforeach; ?>
|
| 207 |
+
<?php elseif ($this->getEmptyText()): ?>
|
| 208 |
+
<tr>
|
| 209 |
+
<td class="empty-text <?php echo $this->getEmptyTextClass() ?>" colspan="100"><?php echo $this->getEmptyText() ?></td>
|
| 210 |
+
</tr>
|
| 211 |
+
<?php endif; ?>
|
| 212 |
+
</tbody>
|
| 213 |
+
|
| 214 |
+
</table>
|
| 215 |
+
</div>
|
| 216 |
+
</div>
|
| 217 |
+
<?php if($this->canDisplayContainer()): ?>
|
| 218 |
+
</div>
|
| 219 |
+
<script type="text/javascript">
|
| 220 |
+
//<![CDATA[
|
| 221 |
+
<?php echo $this->getJsObjectName() ?> = new varienGrid('<?php echo $this->getId() ?>', '<?php echo $this->getGridUrl() ?>', '<?php echo $this->getVarNamePage() ?>', '<?php echo $this->getVarNameSort() ?>', '<?php echo $this->getVarNameDir() ?>', '<?php echo $this->getVarNameFilter() ?>');
|
| 222 |
+
<?php echo $this->getJsObjectName() ?>.useAjax = '<?php echo $this->getUseAjax() ?>';
|
| 223 |
+
<?php if($this->getRowClickCallback()): ?>
|
| 224 |
+
<?php echo $this->getJsObjectName() ?>.rowClickCallback = <?php echo $this->getRowClickCallback() ?>;
|
| 225 |
+
<?php endif; ?>
|
| 226 |
+
<?php if($this->getCheckboxCheckCallback()): ?>
|
| 227 |
+
<?php echo $this->getJsObjectName() ?>.checkboxCheckCallback = <?php echo $this->getCheckboxCheckCallback() ?>;
|
| 228 |
+
<?php endif; ?>
|
| 229 |
+
<?php if($this->getRowInitCallback()): ?>
|
| 230 |
+
<?php echo $this->getJsObjectName() ?>.initRowCallback = <?php echo $this->getRowInitCallback() ?>;
|
| 231 |
+
<?php echo $this->getJsObjectName() ?>.initGridRows();
|
| 232 |
+
<?php endif; ?>
|
| 233 |
+
<?php if($this->getMassactionBlock()->isAvailable()): ?>
|
| 234 |
+
<?php echo $this->getMassactionBlock()->getJavaScript() ?>
|
| 235 |
+
<?php endif ?>
|
| 236 |
+
//]]>
|
| 237 |
+
function deleteSubscription()
|
| 238 |
+
{
|
| 239 |
+
var msg = '<?php echo $this->__('Are you sure you want to delete?') ?>';
|
| 240 |
+
return confirm(msg);
|
| 241 |
+
}
|
| 242 |
+
</script>
|
| 243 |
+
<?php endif; ?>
|
| 244 |
+
<?php endif ?>
|
app/design/frontend/base/default/layout/outofstocksubscription.xml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout version="0.1.0">
|
| 3 |
+
<catalog_product_view>
|
| 4 |
+
<reference name="product.info">
|
| 5 |
+
<action method="setTemplate">
|
| 6 |
+
<template>outofstocksubscription/catalog/product/view.phtml</template>
|
| 7 |
+
</action>
|
| 8 |
+
</reference>
|
| 9 |
+
</catalog_product_view>
|
| 10 |
+
</layout>
|
app/design/frontend/base/default/template/outofstocksubscription/catalog/product/view.phtml
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/afl-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@magento.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.magento.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category design
|
| 22 |
+
* @package rwd_default
|
| 23 |
+
* @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
|
| 24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Product view template
|
| 29 |
+
*
|
| 30 |
+
* @see Mage_Catalog_Block_Product_View
|
| 31 |
+
* @see Mage_Review_Block_Product_View
|
| 32 |
+
*/
|
| 33 |
+
?>
|
| 34 |
+
<?php $_helper = $this->helper('catalog/output'); ?>
|
| 35 |
+
<?php $_product = $this->getProduct(); ?>
|
| 36 |
+
<script type="text/javascript">
|
| 37 |
+
var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
|
| 38 |
+
</script>
|
| 39 |
+
<div id="messages_product_view"><?php echo $this->getMessagesBlock()->toHtml() ?></div>
|
| 40 |
+
<div class="product-view">
|
| 41 |
+
<div class="product-essential">
|
| 42 |
+
<?php $_storeId = Mage::app()->getStore()->getId(); ?>
|
| 43 |
+
<?php $_isActive = Mage::getStoreConfig('outofstocksubscription/mail/active', $_storeId); ?>
|
| 44 |
+
<?php if(!$_product->isSaleable() && $_isActive): ?>
|
| 45 |
+
<?php $_url = $this->getUrl('outofstocksubscription') ?>
|
| 46 |
+
<?php else: ?>
|
| 47 |
+
<?php $_url = $this->getAddToCartUrl($_product); ?>
|
| 48 |
+
<?php endif; ?>
|
| 49 |
+
<form action="<?php echo $_url ?>" method="post" id="product_addtocart_form"<?php if($_product->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>>
|
| 50 |
+
<?php echo $this->getBlockHtml('formkey') ?>
|
| 51 |
+
<div class="no-display">
|
| 52 |
+
<input type="hidden" name="product" value="<?php echo $_product->getId() ?>" />
|
| 53 |
+
<input type="hidden" name="related_product" id="related-products-field" value="" />
|
| 54 |
+
</div>
|
| 55 |
+
|
| 56 |
+
<div class="product-img-box">
|
| 57 |
+
<div class="product-name">
|
| 58 |
+
<h1><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></h1>
|
| 59 |
+
</div>
|
| 60 |
+
<?php echo $this->getChildHtml('media') ?>
|
| 61 |
+
</div>
|
| 62 |
+
|
| 63 |
+
<div class="product-shop">
|
| 64 |
+
<div class="product-name">
|
| 65 |
+
<span class="h1"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></span>
|
| 66 |
+
</div>
|
| 67 |
+
|
| 68 |
+
<div class="price-info">
|
| 69 |
+
<?php echo $this->getPriceHtml($_product); ?>
|
| 70 |
+
<?php echo $this->getChildHtml('bundle_prices') ?>
|
| 71 |
+
<?php echo $this->getTierPriceHtml() ?>
|
| 72 |
+
</div>
|
| 73 |
+
|
| 74 |
+
<div class="extra-info">
|
| 75 |
+
<?php echo $this->getReviewsSummaryHtml($_product, 'default', false)?>
|
| 76 |
+
<?php echo $this->getChildHtml('product_type_availability'); ?>
|
| 77 |
+
</div>
|
| 78 |
+
|
| 79 |
+
<?php echo $this->getChildHtml('alert_urls') ?>
|
| 80 |
+
<?php if(!$_product->isSaleable() && $_isActive): ?>
|
| 81 |
+
<div class="product-options">
|
| 82 |
+
<table width="100%">
|
| 83 |
+
<tr>
|
| 84 |
+
<td colspan="2" style="padding-bottom:5px;">
|
| 85 |
+
<strong><?php echo $this->__('Product Out of Stock Subscription') ?></strong>
|
| 86 |
+
</td>
|
| 87 |
+
</tr>
|
| 88 |
+
<tr>
|
| 89 |
+
<td style="padding-bottom:5px;"><?php echo $this->__('Email') ?></td>
|
| 90 |
+
<td>
|
| 91 |
+
<input type="text" id="subscription_email" name="subscription_email" value="" style="width:200px;" class="input-text required-entry validate-email" />
|
| 92 |
+
</td>
|
| 93 |
+
</tr>
|
| 94 |
+
<tr>
|
| 95 |
+
<td> </td>
|
| 96 |
+
<td style="font-size:10px;">
|
| 97 |
+
(<?php echo $this->__("Notify me when this product is back in stock") ?>)
|
| 98 |
+
</td>
|
| 99 |
+
</tr>
|
| 100 |
+
<tr>
|
| 101 |
+
<td style=""> </td>
|
| 102 |
+
<td>
|
| 103 |
+
<button onclick="productAddToCartForm.submit();" class="button btn-cart" type="button"><span><span><?php echo $this->__('Subscribe') ?></span></span></button>
|
| 104 |
+
</td>
|
| 105 |
+
</tr>
|
| 106 |
+
</table>
|
| 107 |
+
</div>
|
| 108 |
+
<?php endif; ?>
|
| 109 |
+
<?php if ($_product->getShortDescription()):?>
|
| 110 |
+
<div class="short-description">
|
| 111 |
+
<div class="std"><?php echo $_helper->productAttribute($_product, nl2br($_product->getShortDescription()), 'short_description') ?></div>
|
| 112 |
+
</div>
|
| 113 |
+
<?php endif;?>
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
|
| 118 |
+
<?php echo $this->getChildHtml('other');?>
|
| 119 |
+
|
| 120 |
+
<?php if ($_product->isSaleable() && $this->hasOptions()):?>
|
| 121 |
+
<?php echo $this->getChildChildHtml('container1', '', true, true) ?>
|
| 122 |
+
<?php endif;?>
|
| 123 |
+
|
| 124 |
+
</div>
|
| 125 |
+
|
| 126 |
+
<div class="add-to-cart-wrapper">
|
| 127 |
+
<?php echo $this->getChildHtml('product_type_data') ?>
|
| 128 |
+
<?php echo $this->getChildHtml('extrahint') ?>
|
| 129 |
+
|
| 130 |
+
<?php if (!$this->hasOptions()):?>
|
| 131 |
+
<div class="add-to-box">
|
| 132 |
+
<?php if($_product->isSaleable()): ?>
|
| 133 |
+
<?php echo $this->getChildHtml('addtocart') ?>
|
| 134 |
+
<?php if( $this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?>
|
| 135 |
+
<span class="or"><?php echo $this->__('OR') ?></span>
|
| 136 |
+
<?php endif; ?>
|
| 137 |
+
<?php endif; ?>
|
| 138 |
+
<?php echo $this->getChildHtml('addto') ?>
|
| 139 |
+
<?php echo $this->getChildHtml('sharing') ?>
|
| 140 |
+
</div>
|
| 141 |
+
<?php echo $this->getChildHtml('extra_buttons') ?>
|
| 142 |
+
<?php elseif (!$_product->isSaleable()): ?>
|
| 143 |
+
<div class="add-to-box">
|
| 144 |
+
<?php echo $this->getChildHtml('addto') ?>
|
| 145 |
+
<?php echo $this->getChildHtml('sharing') ?>
|
| 146 |
+
</div>
|
| 147 |
+
<?php endif; ?>
|
| 148 |
+
</div>
|
| 149 |
+
|
| 150 |
+
<?php echo $this->getChildHtml('related_products') ?>
|
| 151 |
+
|
| 152 |
+
<div class="clearer"></div>
|
| 153 |
+
<?php if ($_product->isSaleable() && $this->hasOptions()):?>
|
| 154 |
+
<?php echo $this->getChildChildHtml('container2', '', true, true) ?>
|
| 155 |
+
<?php endif;?>
|
| 156 |
+
</form>
|
| 157 |
+
<script type="text/javascript">
|
| 158 |
+
//<![CDATA[
|
| 159 |
+
var productAddToCartForm = new VarienForm('product_addtocart_form');
|
| 160 |
+
productAddToCartForm.submit = function(button, url) {
|
| 161 |
+
if (this.validator.validate()) {
|
| 162 |
+
var form = this.form;
|
| 163 |
+
var oldUrl = form.action;
|
| 164 |
+
|
| 165 |
+
if (url) {
|
| 166 |
+
form.action = url;
|
| 167 |
+
}
|
| 168 |
+
var e = null;
|
| 169 |
+
try {
|
| 170 |
+
this.form.submit();
|
| 171 |
+
} catch (e) {
|
| 172 |
+
}
|
| 173 |
+
this.form.action = oldUrl;
|
| 174 |
+
if (e) {
|
| 175 |
+
throw e;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
if (button && button != 'undefined') {
|
| 179 |
+
button.disabled = true;
|
| 180 |
+
}
|
| 181 |
+
}
|
| 182 |
+
}.bind(productAddToCartForm);
|
| 183 |
+
|
| 184 |
+
productAddToCartForm.submitLight = function(button, url){
|
| 185 |
+
if(this.validator) {
|
| 186 |
+
var nv = Validation.methods;
|
| 187 |
+
delete Validation.methods['required-entry'];
|
| 188 |
+
delete Validation.methods['validate-one-required'];
|
| 189 |
+
delete Validation.methods['validate-one-required-by-name'];
|
| 190 |
+
// Remove custom datetime validators
|
| 191 |
+
for (var methodName in Validation.methods) {
|
| 192 |
+
if (methodName.match(/^validate-datetime-.*/i)) {
|
| 193 |
+
delete Validation.methods[methodName];
|
| 194 |
+
}
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
if (this.validator.validate()) {
|
| 198 |
+
if (url) {
|
| 199 |
+
this.form.action = url;
|
| 200 |
+
}
|
| 201 |
+
this.form.submit();
|
| 202 |
+
}
|
| 203 |
+
Object.extend(Validation.methods, nv);
|
| 204 |
+
}
|
| 205 |
+
}.bind(productAddToCartForm);
|
| 206 |
+
//]]>
|
| 207 |
+
</script>
|
| 208 |
+
</div>
|
| 209 |
+
|
| 210 |
+
<div class="product-collateral toggle-content tabs">
|
| 211 |
+
<?php if ($detailedInfoGroup = $this->getChildGroup('detailed_info', 'getChildHtml')):?>
|
| 212 |
+
<dl id="collateral-tabs" class="collateral-tabs">
|
| 213 |
+
<?php foreach ($detailedInfoGroup as $alias => $html):?>
|
| 214 |
+
<dt class="tab"><span><?php echo $this->escapeHtml($this->getChildData($alias, 'title')) ?></span></dt>
|
| 215 |
+
<dd class="tab-container">
|
| 216 |
+
<div class="tab-content"><?php echo $html ?></div>
|
| 217 |
+
</dd>
|
| 218 |
+
<?php endforeach;?>
|
| 219 |
+
</dl>
|
| 220 |
+
<?php endif; ?>
|
| 221 |
+
</div>
|
| 222 |
+
|
| 223 |
+
<?php echo $this->getChildHtml('upsell_products') ?>
|
| 224 |
+
<?php echo $this->getChildHtml('product_additional_data') ?>
|
| 225 |
+
|
| 226 |
+
</div>
|
app/etc/modules/Webcreta_OutofStockSubscription.xml
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Webcreta_OutofStockSubscription>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>local</codePool>
|
| 7 |
+
<depends>
|
| 8 |
+
<Mage_Catalog/>
|
| 9 |
+
<Mage_CatalogInventory/>
|
| 10 |
+
</depends>
|
| 11 |
+
</Webcreta_OutofStockSubscription>
|
| 12 |
+
</modules>
|
| 13 |
+
</config>
|
app/locale/en_US/template/email/outofstock_subscription.html
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!--@subject Out of Stock Subscription Mail @-->
|
| 2 |
+
|
| 3 |
+
<style type="text/css">
|
| 4 |
+
body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; }
|
| 5 |
+
</style>
|
| 6 |
+
<div style="font:11px/1.35em Verdana, Arial, Helvetica, sans-serif;">
|
| 7 |
+
<table cellspacing="0" cellpadding="0" border="0" width="98%" style="margin-top:10px; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; margin-bottom:10px;">
|
| 8 |
+
<tr>
|
| 9 |
+
<td valign="top">
|
| 10 |
+
<!-- [ header starts here] -->
|
| 11 |
+
<table cellspacing="0" cellpadding="0" border="0" width="650">
|
| 12 |
+
<tr>
|
| 13 |
+
<td valign="top">
|
| 14 |
+
<p><a href="{{store url=""}}" style="color:#1E7EC8;"><img src="{{skin url="images/logo_email.gif" _area='frontend'}}" alt="" border="0"/></a></p></td>
|
| 15 |
+
</tr>
|
| 16 |
+
</table>
|
| 17 |
+
|
| 18 |
+
<!-- [ middle starts here] -->
|
| 19 |
+
<p>Dear Customer,</p>
|
| 20 |
+
<p>
|
| 21 |
+
This is to inform you that the '{{var product}}' product is back in stock, so you can purchase this product now.
|
| 22 |
+
</p>
|
| 23 |
+
<p>
|
| 24 |
+
Click here to open <a href="{{var product_url}}">{{var product}}</a> product page.
|
| 25 |
+
</p>
|
| 26 |
+
|
| 27 |
+
</td>
|
| 28 |
+
</tr>
|
| 29 |
+
</table>
|
| 30 |
+
</div>
|
doc/OutofStockSubscription.pdf
ADDED
|
Binary file
|
package.xml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Webcreta_OutofStockSubscription</name>
|
| 4 |
+
<version>0.1.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>When a product is out of stock, the customer be able to request notification of availability 
|
| 10 |
+
entering an email address on the product detail page. The subscribers will be notified by email
|
| 11 |
+
when the product will be back in stock.</summary>
|
| 12 |
+
<description>When a product is out of stock, the customer be able to request notification of availability by 
|
| 13 |
+
entering an email address on the product detail page. The 
|
| 14 |
+
subscribers will be notified by email 
|
| 15 |
+
when the product will be back in stock.
|
| 16 |
+
For example, one of your products goes out of stock, in the product info page customer can see 
|
| 17 |
+
one new form that will allow to subscribe for newsletter. When the product quantity
|
| 18 |
+
will be 
|
| 19 |
+
changed, the customer will receive an email that will inform him that product is ready for 
|
| 20 |
+
ordering.
|
| 21 |
+
Also admin can see the list of subscribers at Magento backend, and could delete any subscriber 
|
| 22 |
+
from the list. Product wise filtering allows to see
|
| 23 |
+
which product is most subscribed by your 
|
| 24 |
+
customers. You can change the product stock notification email template from backend. And 
|
| 25 |
+
also allow to enable/disable the product out of stock subscription form at frontend product 
|
| 26 |
+
page</description>
|
| 27 |
+
<notes>Minor bug fixed</notes>
|
| 28 |
+
<authors><author><name>WebCreta</name><user>WebCreta</user><email>webcreta@gmail.com</email></author></authors>
|
| 29 |
+
<date>2016-11-16</date>
|
| 30 |
+
<time>05:45:12</time>
|
| 31 |
+
<contents><target name="magelocal"><dir name="Webcreta"><dir name="OutofStockSubscription"><dir name="Block"><dir name="Adminhtml"><dir name="Subcriber"><file name="Grid.php" hash="ab9a38c48d1bc3b6e6d72cc80a74156b"/></dir><file name="Subcriber.php" hash="a00f1b454b9438993d59f2bea3d0931f"/></dir></dir><dir name="Helper"><file name="Data.php" hash="b3fa8070a43a247555852acc9c55c358"/></dir><dir name="Model"><file name="Info.php" hash="79ff79329804db8fcf3f49f49fa99c14"/><dir name="Mysql4"><file name="Info.php" hash="d2bd997f7877dbd6f392dc08aa17923c"/><dir name="Subscriber"><file name="Collection.php" hash="42bae24d76a143264bf8e90bba6502d0"/></dir><file name="Subscriber.php" hash="f936f70379f307a37f61f680f68b0a42"/></dir><file name="Observer.php" hash="1e93e5185a6c61c5e00fda583401acd1"/><file name="Subscriber.php" hash="6276c4c4d2fb2415ab2dd89425fc45ca"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="SubscriberController.php" hash="44564d558f5c58edcc5b8bd59720a5e6"/></dir><file name="IndexController.php" hash="de0345eb94d2a730beaae36a838e9338"/></dir><dir name="etc"><file name="config.xml" hash="7b6df7a36c4bb1c9bfe8684a59e9b9f3"/><file name="system.xml" hash="d5be0ebee7493694e31971a602f1cdd9"/></dir><dir name="sql"><dir name="outofstocksubscription_setup"><file name="mysql4-install-0.1.0.php" hash="ae6ee71a5d32a317c3e02ed66fb5e56c"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="outofstocksubscription.xml" hash="e2c047ad07a8a4ed7fbd853c014de265"/></dir><dir name="template"><dir name="outofstocksubscription"><dir name="catalog"><dir name="product"><file name="view.phtml" hash="cfc92b8355830a534d64f049fa3ae3b3"/></dir></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="outofstocksubscription"><dir name="widget"><file name="grid.phtml" hash="ce924354c4c94be46de6789435e531b1"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Webcreta_OutofStockSubscription.xml" hash="957fffd2d58a543cc0460c4e6ecd33f7"/></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><file name="outofstock_subscription.html" hash="d179b8ac5ba5ce7786916d1b53149f8a"/></dir></dir></dir></target><target name="mage"><dir name="doc"><file name="OutofStockSubscription.pdf" hash="b62b3bab6984c7a7eeeea38c926e632f"/></dir></target></contents>
|
| 32 |
+
<compatible/>
|
| 33 |
+
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
| 34 |
+
</package>
|
