The problem is in Mage_Eav_Model_Entity_Attribute_Backend_Time_Created::beforeSave
. This line ends up swapping the month and day:
$zendDate = Mage::app()->getLocale()->utcDate(null, $date, true, $this->_getFormat($date));
This happens to just about all entity types including products and customers, and happens during creation and normal save events, in both CE >= 1.8.x and EE >= 1.13.x.
Override this model in your own module, and replace the beforeSave
method with this:
public function beforeSave($object)
{
$attributeCode = $this->getAttribute()->getAttributeCode();
$date = $object->getData($attributeCode);
if (is_null($date)) {
if ($object->isObjectNew()) {
$object->setData($attributeCode, Varien_Date::now());
}
} else {
// ADD THIS
$date = strtotime($date);
// convert to UTC
$zendDate = Mage::app()->getLocale()->utcDate(null, $date, true, $this->_getFormat($date));
$object->setData($attributeCode, $zendDate->getIso());
}
return $this;
}
This also needs to be corrected on the way out of the database. Replace afterLoad
with this:
public function afterLoad($object)
{
$attributeCode = $this->getAttribute()->getAttributeCode();
$date = $object->getData($attributeCode);
// ADD THIS
if (!is_null($date)) {
$date = strtotime($date);
}
$zendDate = Mage::app()->getLocale()->storeDate(null, $date, true, $this->_getFormat($date));
$object->setData($attributeCode, $zendDate->getIso());
parent::afterLoad($object);
return $this;
}
Edit: Here is an example of how to override this class.
<global>
<models>
<eav>
<rewrite>
<entity_attribute_backend_time_created>Mycompany_Mymodule_Model_Eav_Entity_Attribute_Backend_Time_Created</entity_attribute_backend_time_created>
</rewrite>
</eav>
</models>
</global>
Then create the file app\code\local\Mycompany\Mymodule\Model\Eav\Entity\Attribute\Backend\Time\Created.php
You can show the products alerts statistics in admin for all customers using collection like
protected function _prepareCollection()
{
$productsTable = Mage::getSingleton('core/resource')->getTableName('catalog/product');
$c = Mage::getModel('productalert/stock')->getCollection();
$c->getSelect()
->columns(array('cnt' => 'count(*)', 'last_d'=>'MAX(add_date)', 'first_d'=>'MIN(add_date)'))
->joinInner(array('e'=> $productsTable), 'e.entity_id = product_id', array('sku'))
->where('send_count=0')
->group(array('website_id', 'product_id'))
;
$this->setCollection($c);
return parent::_prepareCollection();
}
It's form the free alerts extension.
Best Answer
Assuming, magentos modularization is good on this extension (
Mage_ProductAlert
), no they are never deleted. If you search the module fordelete
you get a few results in theUnsubscribeController
- when the customer deletes manually.Automatically I can not find anything.
And while reading the code I found a bug:
This success message should be
You will no longer recieve price alerts.
because the code deletes them all, not only for one product :D