Прилетело тут недавно обновление ЖШ и у меня все перестало работать
Но по порядку - при покупке на сайте товара генерируется ключ активации, который пишется в письме. Также к письму прикладывается файл с этими ключами. Все это организованно в двух файлах:
1. Генерация ключей в файле /components/com_jshopping/tables/order.php:
function getAllItems(){
if (!isset($this->items)){
$jshopConfig = JSFactory::getConfig();
$query = "SELECT OI.* FROM `#__jshopping_order_item` as OI WHERE OI.order_id=".(int)$this->order_id;
$this->_db->setQuery($query);
$this->items = $this->_db->loadObjectList();
foreach($this->items as $k=>$v){
$this->items[$k]->_qty_unit = '';
$this->items[$k]->delivery_time = '';
$depend_attr = unserialize($this->items[$k]->attributes);
foreach ($attributes as $key => $val) {
if (array_key_exists($val->attr_id, $depend_attr) && in_array($val->value_id, $depend_attr)) {
$this->items[$k]->attributes_values[$val->attr_id] = $val->{'name_ru-RU'};
}
}
$key = unserialize($this->items[$k]->freeattributes);
$key = $key[1];
if($this->items[$k]->attributes_values[3] != ''){
$this->items[$k]->product_hash = md5(
$this->items[$k]->attributes_values[3] .
$key .
$this->items[$k]->attributes_values[2]
);
}else {
$this->items[$k]->product_hash = md5(
$this->items[$k]->attributes_values[1] .
$key .
$this->items[$k]->attributes_values[2]
);
}
}
if ($jshopConfig->display_delivery_time_for_product_in_order_mail){
$deliverytimes = JSFactory::getAllDeliveryTime();
foreach($this->items as $k=>$v){
if (isset($deliverytimes[$v->delivery_times_id])) {
$this->items[$k]->delivery_time = $deliverytimes[$v->delivery_times_id];
}
}
}
}
return $this->items;
}
2. Приложение файла к письму в фале /components/com_jshopping/models/ordermail.php:
public function sendMail($type, $recipient, $message, $vendor = null){
$app = JFactory::getApplication();
$jshopConfig = JSFactory::getConfig();
$dispatcher = JDispatcher::getInstance();
$mailfrom = $app->getCfg('mailfrom');
$fromname = $app->getCfg('fromname');
$pdfsend = $this->getPdfSend();
$manuallysend = $this->getManuallysend();
$subject = $this->getSubjectMail($type, $this->order);
$pdfsendtype = $this->getPdfSendType($type);
$mailer = JFactory::getMailer();
$mailer->setSender(array($mailfrom, $fromname));
$mailer->addRecipient($recipient);
$mailer->setSubject($subject);
$mailer->setBody($message);
/* for attach file*/
$user = JFactory::getUser($this->order->user_id);
$file = tempnam(sys_get_temp_dir(), '');
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$root = $doc->createElement('ActiveKeys');
$root->setAttribute('UserLogin', $user->username);
foreach ($this->order->products as $prod) {
$el = $doc->createElement('key');
$el->setAttribute('Name', $prod->attributes_values[2]);
$el->setAttribute('AvailProductExternalVersion', $prod->attributes_values[1]);
$el->setAttribute('ActiveKey', $prod->product_hash);
$root->appendChild($el);
}
$doc->appendChild($root);
$xmlData = $doc->saveXML();
file_put_contents($file, $xmlData);
if ($this->order->order_status == 6) {
error_reporting(E_ALL);
$mailer->addAttachment($file, "{$user->username}_ModPlus ActiveKeys.xml");
}
/*end of attach file*/
if ($pdfsendtype){
$mailer->addAttachment($jshopConfig->pdf_orders_path."/".$this->order->pdf_file);
}
$mailer->isHTML(true);
$dispatcher->trigger($this->getSendMailTriggerType($type),
array(&$mailer, &$this->order, &$manuallysend, &$pdfsend, &$vendor, &$this->vendors_send_message, &$this->vendor_send_order));
return $mailer->Send();
}
После обновления данные коды неверно генерируют ключ. А судя по тому, что в письме файл выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<ActiveKeys UserLogin="Modis">
<key Name="" AvailProductExternalVersion="" ActiveKey="293c3f5a41c6640b7543ab6928c034c3"/>
</ActiveKeys>
я прихожу к выводу, что не работает получение значений атрибутов у товара:
foreach ($this->order->products as $prod) {
$el = $doc->createElement('key');
$el->setAttribute('Name', $prod->attributes_values[2]);
$el->setAttribute('AvailProductExternalVersion', $prod->attributes_values[1]);
$el->setAttribute('ActiveKey', $prod->product_hash);
$root->appendChild($el);
Что поменялось? Куда копать и что искать? Как получить значения атрибутов?