Exemplo n.º 1
0
 function save(&$element)
 {
     if (empty($element->click_id)) {
         if (empty($element->click_created)) {
             $element->click_created = time();
         }
         if (empty($element->click_ip)) {
             $element->click_ip = hikashop_getIP();
         }
         if (empty($element->click_referer)) {
             if (!empty($_SERVER['HTTP_REFERER']) && preg_match('#^https?://.*#i', $_SERVER['HTTP_REFERER'])) {
                 $element->click_referer = str_replace(array('"', '<', '>', "'"), '', @$_SERVER['HTTP_REFERER']);
             }
         }
     }
     return parent::save($element);
 }
Exemplo n.º 2
0
 function onAfterOrderUpdate(&$order, &$send_email)
 {
     if (!empty($order->order_id)) {
         $history = new stdClass();
         $history->history_order_id = $order->order_id;
         $history->history_created = time();
         $history->history_ip = hikashop_getIP();
         $history->history_user_id = hikashop_loadUser();
         if (empty($order->order_status)) {
             $class = hikashop_get('class.order');
             $old = $class->get($order->order_id);
             $order->order_status = $old->order_status;
         }
         $history->history_new_status = $order->order_status;
         if (!empty($order->history)) {
             foreach (get_object_vars($order->history) as $k => $v) {
                 $history->{$k} = $v;
             }
         }
         $historyClass = hikashop_get('class.history');
         $historyClass->save($history);
     }
     return true;
 }
Exemplo n.º 3
0
    function onPaymentNotification(&$statuses)
    {
        $vars = array();
        $data = array();
        $filter = JFilterInput::getInstance();
        foreach ($_POST as $key => $value) {
            $key = $filter->clean($key);
            if (preg_match("#^[0-9a-z_-]{1,30}\$#i", $key) && !preg_match("#^cmd\$#i", $key)) {
                $value = JRequest::getString($key);
                $vars[$key] = $value;
                $data[] = $key . '=' . urlencode($value);
            }
        }
        $data = implode('&', $data) . '&cmd=_notify-validate';
        $order_id = (int) @$vars['cartId'];
        $dbOrder = $this->getOrder($order_id);
        if (empty($dbOrder)) {
            echo "Could not load any order for your notification " . @$vars['cartId'];
            return false;
        }
        $this->loadPaymentParams($dbOrder);
        if (empty($this->payment_params)) {
            return false;
        }
        if ($this->payment_params->debug) {
            echo print_r($vars, true) . "\n\n\n";
            echo print_r($dbOrder, true) . "\n\n\n";
        }
        $this->loadOrderData($dbOrder);
        if (@$vars['instId'] != $this->payment_params->instid) {
            return false;
        }
        $url = HIKASHOP_LIVE . 'administrator/index.php?option=com_hikashop&ctrl=order&task=edit&order_id=' . $order_id;
        $order_text = "\r\n" . JText::sprintf('NOTIFICATION_OF_ORDER_ON_WEBSITE', hikashop_encode($dbOrder), HIKASHOP_LIVE);
        $order_text .= "\r\n" . str_replace('<br/>', "\r\n", JText::sprintf('ACCESS_ORDER_WITH_LINK', $url));
        $hostError = -1;
        $ip = hikashop_getIP();
        if (!empty($element->payment_params->hostname)) {
            // \.outbound\.wp3\.rbsworldpay\.com
            $hostname = gethostbyaddr($ip);
            if (preg_match('#' . $this->payment_params->hostname . '#i', $hostname)) {
                $hostError = 0;
            } else {
                $hostError = 1;
            }
        }
        if ($hostError < 0 && !empty($this->payment_params->ips)) {
            $ips = str_replace(array('.', '*', ','), array('\\.', '[0-9]+', '|'), $this->payment_params->ips);
            if (!empty($ips)) {
                if (preg_match('#(' . implode('|', $ips) . ')#', $ip)) {
                    $hostError = 0;
                } else {
                    $hostError = 1;
                }
            }
        }
        if ($hostError > 0) {
            $email = new stdClass();
            $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Worldpay Business Gateway') . ' ' . JText::sprintf('IP_NOT_VALID', hikashop_encode($dbOrder));
            $body = str_replace('<br/>', "\r\n", JText::sprintf('NOTIFICATION_REFUSED_FROM_IP', 'Worldpay Business Gateway', $ip, 'See Hostname / IPs defined in configuration')) . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-rbsworldpay-error#ip') . $order_text;
            $email->body = $body;
            $this->modifyOrder($order_id, $this->payment_params->invalid_status, false, $email);
            JError::raiseError(403, JText::_('Access Forbidden'));
            return false;
        }
        switch ($vars['transStatus']) {
            case 'Y':
                break;
            default:
                $email = new stdClass();
                $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Worldpay Business Gateway', $vars['transStatus'], $dbOrder->order_number);
                $body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Worldpay Business Gateway', $vars['payment_status'])) . ' ' . JText::_('STATUS_NOT_CHANGED') . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-rbsworldpay-error#status') . $order_text;
                $email->body = $body;
                $this->modifyOrder($order_id, $this->payment_params->invalid_status, false, $email);
                if ($this->payment_params->debug) {
                    echo 'payment ' . $vars['transStatus'] . "\n\n\n";
                    echo '[OK]';
                }
                $dbg = ob_get_clean();
                $return_url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&ctrl=order&task=cancel_order&order_id=' . $order_id . $this->url_itemid;
                echo '<meta http-equiv="refresh" content="5;url=' . $return_url . '" />
		<style>
		.pageHeading {
			font-family: Verdana, Arial, sans-serif;
			font-size: 20px;
			font-weight: bold;
			color: #9a9a9a;
		}

		.main {
			font-family: Verdana, Arial, sans-serif;
			font-size: 11px;
			line-height: 1.5;
		}
		</style>

		<p class="pageHeading">' . JText::sprintf('TRANSACTION_PROCESSING_ERROR', $vars['transStatus']) . '</p>

		<form action="' . $return_url . '" method="post">
			<div align="center">
				<input name="submit" type="submit" class="btn" value="' . JText::_('GO_BACK_TO_SHOP') . '" />
				</div>
		</form>

		<p>&nbsp;</p>

		<WPDISPLAY ITEM=banner>';
                ob_start();
                if ($this->payment_params->debug) {
                    echo $dbg;
                }
                return false;
        }
        $history = new stdClass();
        $email = new stdClass();
        $history->notified = 0;
        $history->amount = @$vars['amount'] . @$vars['currency'];
        $history->data = '';
        $price_check = round($dbOrder->order_full_price, (int) $this->currency->currency_locale['int_frac_digits']);
        if ($price_check != @$vars['amount'] || $this->currency->currency_code != @$vars['currency']) {
            $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Worldpay Business Gateway') . JText::_('INVALID_AMOUNT');
            $body = str_replace('<br/>', "\r\n", JText::sprintf('AMOUNT_RECEIVED_DIFFERENT_FROM_ORDER', 'Worldpay Business Gateway', $history->amount, $price_check . $this->currency->currency_code)) . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-rbsworldpay-error#amount') . $order_text;
            $email->body = $body;
            $this->modifyOrder($order_id, $this->payment_params->invalid_status, $history, $email);
            return false;
        }
        switch ($vars['transStatus']) {
            case 'Y':
                $payment_status = 'Authenticated';
                $order_status = $this->payment_params->verified_status;
                $history->notified = 1;
                break;
            default:
                $payment_status = 'Unknown';
                $order_status = $this->payment_params->invalid_status;
                $order_text = JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-rbsworldpay-error#pending') . "\r\n\r\n" . $order_text;
        }
        $mail_status = $statuses[$order->order_status];
        $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Worldpay Business Gateway', $payment_status, $dbOrder->order_number);
        $body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Worldpay Business Gateway', $order_status)) . ' ' . JText::sprintf('ORDER_STATUS_CHANGED', $mail_status) . "\r\n\r\n" . $order_text;
        $email->body = $body;
        $this->modifyOrder($order_id, $order_status, $history, $email);
        $return_url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&ctrl=checkout&task=after_end&order_id=' . $order->order_id . $this->url_itemid;
        if ($this->payment_params->debug) {
            echo '[OK]';
        }
        $dbg = ob_get_clean();
        echo '<meta http-equiv="refresh" content="5;url=' . $return_url . '" />
<style>
.pageHeading {
	font-family: Verdana, Arial, sans-serif;
	font-size: 20px;
	font-weight: bold;
	color: #9a9a9a;
}

.main {
	font-family: Verdana, Arial, sans-serif;
	font-size: 11px;
	line-height: 1.5;
}
</style>

<p class="pageHeading">' . JText::_('THANK_YOU_FOR_PURCHASE') . '</p>

<form action="' . $return_url . '" method="post">
	<div align="center">
		<input name="submit" type="submit" class="btn" value="' . JText::_('GO_BACK_TO_SHOP') . '" />
		</div>
</form>

<p>&nbsp;</p>

<WPDISPLAY ITEM=banner>';
        ob_start();
        if ($element->payment_params->debug) {
            echo $dbg;
        }
        return true;
    }
Exemplo n.º 4
0
                    }
                } else {
                    $hika_useless[$i] = 0;
                    $hika_useful[$i] = 0;
                    if ($useful_style == "helpful") {
                        if ($useful_rating == 1) {
                            echo JText::_('HIKASHOP_NO_USEFUL');
                        }
                    }
                }
                ?>
							</div>
						</td>
						<?php 
                if ($useful_rating == 1) {
                    if ($row->hide == 0 && $elt[$i]->already_vote == 0 && $elt[$i]->vote_user_id != $hikashop_vote_user_id && $elt[$i]->vote_user_id != hikashop_getIP()) {
                        ?>
								<?php 
                        if ($useful_style == "thumbs") {
                            ?>
									<td class="hika_comment_listing_useful_p ui-corner-all">
										<?php 
                            echo $hika_useful[$i];
                            ?>
									</td>
								<?php 
                        }
                        ?>
								<td class="hika_comment_listing_useful" title="Useful" onclick="hikashop_vote_useful(<?php 
                        echo $elt[$i]->vote_id;
                        ?>
Exemplo n.º 5
0
 function onPaymentNotification(&$statuses)
 {
     $vars = array();
     $data = array();
     $filter = JFilterInput::getInstance();
     foreach ($_POST as $key => $value) {
         $key = $filter->clean($key);
         $value = JRequest::getString($key);
         $vars[$key] = $value;
     }
     $order_id = (int) @$vars['transaction_id'];
     $dbOrder = $this->getOrder($order_id);
     if (!empty($dbOrder)) {
         $order->old_status->order_status = $dbOrder->order_status;
         $url = HIKASHOP_LIVE . 'administrator/index.php?option=com_hikashop&ctrl=order&task=edit&order_id=' . $order_id;
         $order_text = "\r\n" . JText::sprintf('NOTIFICATION_OF_ORDER_ON_WEBSITE', $dbOrder->order_number, HIKASHOP_LIVE);
         $order_text .= "\r\n" . str_replace('<br/>', "\r\n", JText::sprintf('ACCESS_ORDER_WITH_LINK', $url));
     } else {
         echo "Could not load any order for your notification " . $order_id;
         return false;
     }
     $this->loadPaymentParams($dbOrder);
     if ($this->payment_params->debug) {
         echo print_r($dbOrder, true) . "\n\n\n";
     }
     if (empty($this->payment_params)) {
         return false;
     }
     $this->loadOrderData($dbOrder);
     if (!$this->payment_params->notification) {
         return false;
     }
     $vars['calculated_md5sig'] = strtoupper(md5(@$this->payment_params->merchant_id . @$vars['transaction_id'] . strtoupper(md5($this->payment_params->secret_word)) . @$vars['mb_amount'] . @$vars['mb_currency'] . @$vars['status']));
     if ($this->payment_params->debug) {
         echo print_r($vars, true) . "\n\n\n";
     }
     $mailer = JFactory::getMailer();
     $config =& hikashop_config();
     $sender = array($config->get('from_email'), $config->get('from_name'));
     $mailer->setSender($sender);
     $mailer->addRecipient(explode(',', $config->get('payment_notification_email')));
     if (!empty($this->payment_params->ips)) {
         $ip = hikashop_getIP();
         $ips = str_replace(array('.', '*', ','), array('\\.', '[0-9]+', '|'), $this->payment_params->ips);
         if (!preg_match('#(' . implode('|', $ips) . ')#', $ip)) {
             $mailer->setSubject(JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Moneybookers') . ' ' . JText::sprintf('IP_NOT_VALID', $dbOrder->order_number));
             $body = str_replace('<br/>', "\r\n", JText::sprintf('NOTIFICATION_REFUSED_FROM_IP', 'Moneybookers', $ip, implode("\r\n", $this->payment_params->ips))) . "\r\n\r\n" . $order_text;
             $mailer->setBody($body);
             $mailer->Send();
             JError::raiseError(403, JText::_('Access Forbidden'));
             return false;
         }
     }
     if (@$vars['md5sig'] != $vars['calculated_md5sig']) {
         $mailer->setSubject(JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Moneybookers') . 'invalid response');
         $body = JText::sprintf("Hello,\r\n A Moneybookers notification was refused because the response from the Moneybookers server was invalid") . "\r\n\r\n" . $order_text;
         $mailer->setBody($body);
         $mailer->Send();
         if ($this->payment_params->debug) {
             echo 'invalid response' . "\n\n\n";
         }
         return false;
     }
     $vars['status'] = (int) @$vars['status'];
     if (!in_array($vars['status'], array(0, 2))) {
         if ($vars['status'] == -1) {
             $vars['payment_status'] = 'Cancelled';
         } elseif ($vars['status'] == -2) {
             $vars['payment_status'] = 'Failed';
         } elseif ($vars['status'] == -3) {
             $vars['payment_status'] = 'Chargeback';
         } else {
             $vars['payment_status'] = 'Unknown';
         }
         $body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Moneybookers', $vars['payment_status'])) . ' ' . JText::_('STATUS_NOT_CHANGED') . "\r\n\r\n" . $order_text;
         $mailer->setSubject(JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Moneybookers', $vars['payment_status'], $dbOrder->order_number));
         $mailer->setBody($body);
         $mailer->Send();
         if ($element->payment_params->debug) {
             echo 'payment with code ' . @$vars['status'] . (!empty($vars['failed_reason_code']) ? ' : ' . @$vars['failed_reason_code'] : '') . "\n\n\n";
         }
         return false;
     }
     $this->modifyOrder($order_id, $vars['status'], true, true);
     return true;
 }
Exemplo n.º 6
0
            if ($row->useful_style == 'helpful') {
                echo JText::sprintf('HIKA_FIND_IT_HELPFUL', $hika_useful, $elt->total_vote_useful);
            }
        } else {
            $hika_useless = 0;
            $hika_useful = 0;
            if ($row->useful_style == 'helpful' && $row->useful_rating == 1) {
                echo JText::_('HIKASHOP_NO_USEFUL');
            }
        }
        ?>
</div>
		</td>
<?php 
        if ($row->useful_rating == 1) {
            if ($row->hide == 0 && $elt->already_vote == 0 && $elt->vote_user_id != hikashop_loadUser() && $elt->vote_user_id != hikashop_getIP()) {
                if ($row->useful_style == 'thumbs') {
                    ?>
		<td class="hika_comment_listing_useful_p"><?php 
                    echo $hika_useful;
                    ?>
</td>
<?php 
                }
                ?>
		<td class="hika_comment_listing_useful" title="<?php 
                echo JText::_('HIKA_USEFUL');
                ?>
" onclick="hikashop_vote_useful(<?php 
                echo $elt->vote_id;
                ?>
Exemplo n.º 7
0
 function onPaymentNotification(&$statuses)
 {
     $vars = array();
     $data = array();
     $filter = JFilterInput::getInstance();
     foreach ($_POST as $key => $value) {
         $key = $filter->clean($key);
         $value = JRequest::getString($key);
         $vars[$key] = $value;
     }
     $order_id = (int) @$vars['divers'];
     $dbOrder = $this->getOrder($order_id);
     if (!empty($dbOrder)) {
         $url = HIKASHOP_LIVE . 'administrator/index.php?option=com_hikashop&ctrl=order&task=edit&order_id=' . $order->order_id;
         $order_text = "\r\n" . JText::sprintf('NOTIFICATION_OF_ORDER_ON_WEBSITE', $dbOrder->order_number, HIKASHOP_LIVE);
         $order_text .= "\r\n" . str_replace('<br/>', "\r\n", JText::sprintf('ACCESS_ORDER_WITH_LINK', $url));
     } else {
         echo "Could not load any order for your notification " . @$vars['divers'];
         return false;
     }
     $this->loadPaymentParams($dbOrder);
     if (empty($this->payment_params)) {
         return false;
     }
     $this->loadOrderData($dbOrder);
     if ($this->payment_params->debug) {
         echo print_r($vars, true) . "\n\n\n";
         echo print_r($dbOrder, true) . "\n\n\n";
     }
     if (!empty($this->payment_params->ips)) {
         $ip = hikashop_getIP();
         $ips = str_replace(array('.', '*', ','), array('\\.', '[0-9]+', '|'), $this->payment_params->ips);
         if (!preg_match('#(' . implode('|', $ips) . ')#', $ip)) {
             $body = str_replace('<br/>', "\r\n", JText::sprintf('NOTIFICATION_REFUSED_FROM_IP', 'Bluepaid', $ip, implode("\r\n", $this->payment_params->ips))) . "\r\n\r\n" . $order_text;
             $email = new stdClass();
             $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Bluepaid') . ' ' . JText::sprintf('IP_NOT_VALID', $dbOrder->order_number);
             $email->body = $body;
             $this->modifyOrder($order_id, $this->payment_params->invalid_status, false, $email);
             JError::raiseError(403, JText::_('Access Forbidden'));
             return false;
         }
     }
     if ($vars['secure_key'] != @$this->payment_params->secure_key) {
         $body = JText::sprintf("Hello,\r\n A Bluepaid notification was refused because the response from the Bluepaid server was invalid") . "\r\n\r\n" . $order_text;
         $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Bluepaid') . 'invalid response';
         $email->body = $body;
         $this->modifyOrder($order_id, $this->payment_params->invalid_status, false, $email);
         if ($element->payment_params->debug) {
             echo 'invalid response' . "\n\n\n";
         }
         return false;
     }
     $vars['status'] = strtolower(@$vars['etat']);
     if (!in_array($vars['status'], array("attente", "ok"))) {
         if ($vars['status'] == "annu") {
             $vars['payment_status'] = 'Cancelled';
         } elseif ($vars['status'] == "ko") {
             $vars['payment_status'] = 'Failed';
         } else {
             $vars['payment_status'] = 'Unknown';
         }
         $body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Bluepaid', $vars['payment_status'])) . ' ' . JText::_('STATUS_NOT_CHANGED') . "\r\n\r\n" . $order_text;
         $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Bluepaid', $vars['payment_status'], $dbOrder->order_number);
         $email->body = $body;
         $this->modifyOrder($order_id, null, false, $email);
         if ($element->payment_params->debug) {
             echo 'payment with code ' . @$vars['status'] . (!empty($vars['failed_reason_code']) ? ' : ' . @$vars['failed_reason_code'] : '') . "\n\n\n";
         }
         return false;
     }
     $history = new stdClass();
     $history->notified = 0;
     $history->amount = @$vars['montant'] . @$vars['devise'];
     $history->data = ob_get_clean();
     $price_check = round($dbOrder->order_full_price, (int) $this->currency->currency_locale['int_frac_digits']) . $this->currency->currency_code;
     if ($price_check != @$vars['montant'] . @$vars['devise']) {
         $mailer->setSubject(JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Bluepaid') . JText::_('INVALID_AMOUNT'));
         $body = str_replace('<br/>', "\r\n", JText::sprintf('AMOUNT_RECEIVED_DIFFERENT_FROM_ORDER', 'Bluepaid', $order->history->amount, $price_check)) . "\r\n\r\n" . $order_text;
         $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Bluepaid') . JText::_('INVALID_AMOUNT');
         $email->body = $body;
         $this->modifyOrder($order_id, $this->payment_params->invalid_status, $history, $email);
         return false;
     }
     if ($vars['status'] == "ok") {
         $order_status = $this->payment_params->verified_status;
         $vars['payment_status'] = 'Accepted';
     } else {
         $order_status = $this->payment_params->pending_status;
         $order_text = "Payment is pending\r\n\r\n" . $order_text;
         $vars['payment_status'] = 'Pending';
     }
     $config =& hikashop_config();
     if ($config->get('order_confirmed_status', 'confirmed') == $order_status) {
         $history->notified = 1;
     }
     $body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Bluepaid', $vars['payment_status'])) . ' ' . JText::sprintf('ORDER_STATUS_CHANGED', $statuses[$order->order_status]) . "\r\n\r\n" . $order_text;
     $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Bluepaid', $vars['payment_status'], $dbOrder->order_number);
     $email->body = $body;
     $this->modifyOrder($order_id, $order_status, $history, $email);
     return true;
 }
Exemplo n.º 8
0
 function getZone()
 {
     $app = JFactory::getApplication();
     $zone = $app->getUserState(HIKASHOP_COMPONENT . '.zone_id', 0);
     if (empty($zone)) {
         $geoClass = hikashop_get('class.geolocation');
         $this->geolocation = $geoClass->getIPLocation(hikashop_getIP());
         if (!empty($this->geolocation)) {
             $geolocation_country_code = $this->geolocation->countryCode;
             $db = JFactory::getDBO();
             $db->setQuery('SELECT * FROM ' . hikashop_table('zone') . ' WHERE zone_code_2 =' . $db->Quote($geolocation_country_code) . ' AND zone_type=\'country\'  AND zone_published=1');
             $zones = $db->loadObjectList();
             if (!empty($zones)) {
                 $states = array();
                 $countries = array();
                 foreach ($zones as $zone) {
                     if ($zone->zone_type == 'state') {
                         $states[] = $zone;
                     } else {
                         $countries[] = $zone;
                     }
                 }
                 if (!empty($states)) {
                     if (empty($countries)) {
                         $zone = $states[0]->zone_id;
                     } else {
                         $child_namekeys = array();
                         foreach ($states as $state) {
                             $child_namekeys[] = $db->Quote($state->zone_namekey);
                         }
                         $parent_namekeys = array();
                         foreach ($countries as $country) {
                             $parent_namekeys[] = $db->Quote($country->zone_namekey);
                         }
                         $db->setQuery('SELECT zone_child_namekey FROM ' . hikashop_table('zone_link') . ' WHERE zone_parent_namekey IN (' . implode(',', $parent_namekeys) . ') AND zone_child_namekey IN (' . implode(',', $child_namekeys) . ')');
                         $link = $db->loadResult();
                         if (empty($link)) {
                             $zone = $countries[0]->zone_id;
                         } else {
                             foreach ($states as $state) {
                                 if ($state->zone_namekey == $link) {
                                     $zone = $state->zone_id;
                                 }
                             }
                         }
                     }
                 } else {
                     $zone = $countries[0]->zone_id;
                 }
             }
             if (empty($zone)) {
                 $db->setQuery('SELECT zone_id FROM ' . hikashop_table('zone') . ' WHERE 	zone_code_2=' . $db->Quote($geolocation_country_code) . ' AND zone_published=1');
                 $zone = $db->loadResult();
             }
             if (!empty($zone)) {
                 $app->setUserState(HIKASHOP_COMPONENT . '.zone_id', $zone);
             }
         }
     }
     return $zone;
 }
Exemplo n.º 9
0
Arquivo: vote.php Projeto: rodhoff/MNW
 function save(&$element)
 {
     $this->app = Jfactory::getApplication();
     $this->config = hikashop_config();
     $dispatcher = JDispatcher::getInstance();
     $db = JFactory::getDBO();
     if (isset($element->vote_ref_id) || !$this->app->isAdmin()) {
         $this->checkVote($element);
     }
     if (!empty($this->error['code'])) {
         return false;
     }
     $element->vote_date = time();
     if (!$this->app->isAdmin()) {
         $element->vote_ip = hikashop_getIP();
         if (!empty($element->vote_comment) && !$this->config->get('published_comment', '1')) {
             $element->vote_published = 0;
         } else {
             $element->vote_published = 1;
         }
     }
     $oldElement = new stdClass();
     if ($this->app->isAdmin()) {
         if ($element->vote_id != '0') {
             $query = 'SELECT * FROM ' . hikashop_table('vote') . ' WHERE vote_id = ' . (int) $element->vote_id;
             $db->setQuery($query);
             $result = $db->loadObject();
             if (!empty($result)) {
                 $oldElement = $result;
                 if (!isset($element->vote_ref_id)) {
                     $published = $element->vote_published;
                     $element = clone $result;
                     $element->vote_published = $published;
                 }
                 $element->vote_type = $result->vote_type;
             } else {
                 $this->error = array('code' => '505018', 'message' => JText::_('HIKA_VOTE_MISSING_ENTRY'));
                 return false;
             }
         }
     } elseif ($element->vote_rating != 0 && !in_array($this->config->get('enable_status_vote', 'nothing'), array('nothing', 'comment', 'both'))) {
         //If it is only a rating
         $result = $this->getUserRating($element->vote_type, $element->vote_ref_id, $element->vote_user_id);
         if (!empty($result)) {
             $element->vote_id = $result->vote_id;
             $element->vote_published = $result->vote_published;
             $oldElement = $result;
         } else {
             $element->vote_id = 0;
         }
     } else {
         $element->vote_id = 0;
     }
     $new = false;
     if ($element->vote_id == 0) {
         $new = true;
     }
     if ($new) {
         $dispatcher->trigger('onBeforeVoteCreate', array(&$oldElement, &$do, &$element));
     } else {
         $dispatcher->trigger('onBeforeVoteUpdate', array(&$oldElement, &$do, &$element));
     }
     $success = parent::save($element);
     if (!$success) {
         $this->error = array('code' => '505016', 'message' => JText::_('HIKA_VOTE_ERROR_SAVING_DATA'));
         return false;
     }
     $return_data = array('average' => 0, 'total' => 0);
     if ($element->vote_type != 'product') {
         $db = JFactory::getDBO();
         $query = 'SELECT AVG(v.vote_rating) AS average, COUNT(v.vote_id) AS total FROM ' . hikashop_table('vote') . ' AS v ' . ' WHERE vote_ref_id = ' . (int) $element->vote_ref_id . ' AND vote_type = ' . $db->Quote($element->vote_type) . ' AND v.vote_rating != 0';
         $db->setQuery($query);
         $data = $db->loadObject();
         if ($data->total == 0) {
             $return_data['average'] = $element->vote_rating;
             $return_data['total'] = 1;
         } else {
             if (!$new) {
                 $return_data['average'] = ($data->total * $data->average - $oldElement->vote_rating + $element->vote_rating) / $data->total;
                 $return_data['total'] = $data->total;
             } else {
                 $return_data['average'] = ($data->total * $data->average + $element->vote_rating) / ($data->total + 1);
                 $return_data['total'] = $data->total++;
             }
         }
     }
     if (!$new) {
         $dispatcher->trigger('onAfterVoteCreate', array(&$element, &$return_data));
         $this->error = array('code' => '1', 'message' => JText::_('VOTE_UPDATED'));
     } else {
         $dispatcher->trigger('onAfterVoteUpdate', array(&$element, &$return_data));
         $this->error = array('code' => '2', 'message' => JText::_('THANK_FOR_VOTE'));
     }
     $itemClass = hikashop_get('class.' . $element->vote_type);
     if ($itemClass === null) {
         return true;
     }
     if (is_object($itemClass) && !empty($itemClass)) {
         $data = $itemClass->get($element->vote_ref_id);
         if (isset($data->alias)) {
             unset($data->alias);
         }
     } else {
         $data = new stdClass();
     }
     if ($element->vote_rating == 0) {
         return false;
     }
     if ($element->vote_type == 'product') {
         $newValues = $this->updateAverage($element, $oldElement, $data);
         $return_data = array('average' => $newValues->product_average_score, 'total' => $newValues->product_total_vote);
     }
     $this->values = $return_data;
     $success = $itemClass->save($data);
     if (!$success) {
         $this->error = array('code' => '505013', 'message' => JText::_('HIKA_VOTE_ERROR_SAVING_ITEM_DATA'));
         return false;
     }
     return true;
 }
Exemplo n.º 10
0
 function onAfterStoreUser($user, $isnew, $success, $msg)
 {
     if ($success === false) {
         return false;
     }
     $app = JFactory::getApplication();
     if ($app->isAdmin() || !$isnew) {
         return true;
     }
     $partner_id = JRequest::getCmd('hikashop_affiliate', 0, 'cookie');
     if (empty($partner_id)) {
         return true;
     }
     if (!(include_once rtrim(JPATH_ADMINISTRATOR, DS) . DS . 'components' . DS . 'com_hikashop' . DS . 'helpers' . DS . 'helper.php')) {
         return true;
     }
     $partner_id = hikashop_decode($partner_id, 'partner');
     $userClass = hikashop_get('class.user');
     $partner = $userClass->get($partner_id);
     if (empty($partner->user_partner_activated)) {
         return true;
     }
     $config =& hikashop_config();
     if (empty($partner->user_params->user_custom_fee)) {
         $partner->user_params->partner_lead_fee = $config->get('partner_lead_fee', 0);
         $partner->user_params->partner_fee_currency = $config->get('partner_currency', 1);
     } else {
         $partner->user_params->partner_lead_fee = $partner->user_params->user_partner_lead_fee;
     }
     if (!$config->get('allow_currency_selection', 0) || empty($partner->user_currency_id)) {
         $partner->user_currency_id = $config->get('partner_currency', 1);
     }
     if (bccomp($partner->user_params->partner_lead_fee, 0, 5) && $partner->user_currency_id != $partner->user_params->partner_fee_currency) {
         $partner->user_params->partner_lead_fee = $this->_convert($partner->user_params->partner_lead_fee, $partner->user_params->partner_fee_currency, $partner->user_currency_id);
     }
     $ip = hikashop_getIP();
     $clickClass = hikashop_get('class.click');
     $latest = $clickClass->getLatest($partner_id, $ip, $config->get('lead_min_delay', 24));
     if ($config->get('add_partner_to_user_account', 0) || empty($latest) && bccomp($partner->user_params->partner_lead_fee, 0, 5)) {
         $userDataInDb = $userClass->get($user['id'], 'cms');
         $userData = new stdClass();
         $userData->user_id = @$userDataInDb->user_id;
         $userData->user_cms_id = $user['id'];
         $userData->user_partner_id = $partner_id;
         $userData->user_partner_price = @$partner->user_params->partner_lead_fee;
         $userData->user_partner_currency_id = $partner->user_currency_id;
         $userClass->save($userData);
     }
     return true;
 }
Exemplo n.º 11
0
 function listing()
 {
     $doc = JFactory::getDocument();
     $doc->addScript(HIKASHOP_JS . 'vote.js');
     $class = hikashop_get('class.vote');
     $class->loadJS();
     $db = JFactory::getDBO();
     $config = hikashop_config();
     $type_item = JRequest::getCmd('ctrl');
     $ctrl_param = $this->params->get('main_ctrl', '');
     if (!empty($ctrl_param)) {
         $type_item = $ctrl_param;
     }
     $row = new stdClass();
     $elts = null;
     $hikashop_vote_con_req_list = $config->get('show_listing_comment', 0);
     $comment_to_show = $config->get('number_comment_product');
     $useful_rating = $config->get('useful_rating', 0);
     $useful_style = $config->get('vote_useful_style');
     $vote_comment_sort = $config->get('vote_comment_sort');
     $access_useful = $config->get('register_note_comment', 0);
     $show_comment_date = $config->get('show_comment_date', 0);
     $vote_comment_sort_frontend = $config->get('vote_comment_sort_frontend', 0);
     $hikashop_vote_user_id = hikashop_loadUser();
     if (!empty($this->params)) {
         JRequest::setVar('productlayout', $this->params->get('productlayout', 'show_default'));
     } else {
         JRequest::setVar('productlayout', 'show_default');
     }
     $hide = 1;
     //already voted !!
     if ($access_useful == 1 && !empty($hikashop_vote_user_id) || $access_useful == 0) {
         $hide = 0;
     }
     if ($config->get('enable_status_vote', 0) == 'comment' || $config->get('enable_status_vote', 0) == 'two' || $config->get('enable_status_vote', 0) == 'both') {
         $comment_enabled = 1;
     } else {
         $comment_enabled = 0;
     }
     if ($comment_enabled == 1) {
         if (!empty($this->params)) {
             $hikashop_vote_ref_id = $this->params->get('vote_ref_id');
             if (empty($hikashop_vote_ref_id)) {
                 $hikashop_vote_ref_id = $this->params->get('product_id');
             }
         } else {
             $hikashop_vote_ref_id = hikashop_getCID();
         }
         $i = 1;
         $app = JFactory::getApplication();
         $pageInfo = new stdClass();
         $pageInfo->filter = new stdClass();
         $pageInfo->filter->order = new stdClass();
         $pageInfo->limit = new stdClass();
         $pageInfo->elements = new stdClass();
         $pageInfo->limit->start = $app->getUserStateFromRequest($this->paramBase . '.limitstart', 'limitstart', 0, 'int');
         $app->setUserState($this->paramBase . '.list_limit', $comment_to_show);
         $oldValue = $app->getUserState($this->paramBase . '.list_limit');
         if (empty($oldValue)) {
             $oldValue = $app->getCfg('list_limit');
         }
         $pageInfo->limit->value = $comment_to_show;
         $app->setUserState($this->paramBase . '.list_limit', $comment_to_show);
         if ($oldValue != $pageInfo->limit->value) {
             $pageInfo->limit->start = 0;
             $app->setUserState($this->paramBase . '.limitstart', 0);
         }
         if ($hikashop_vote_con_req_list == 1 && $hikashop_vote_user_id != "" || $hikashop_vote_con_req_list == 0) {
             // if log needed and user logged in or log not needed
             $where = ' WHERE vote_published = 1 AND vote_type = ' . $db->quote($type_item) . ' AND vote_ref_id = ' . (int) $hikashop_vote_ref_id . ' AND vote_comment != \'\'';
             $order = ' ORDER BY `vote_useful` DESC, `vote_date` ASC';
             if ($vote_comment_sort == "date") {
                 $order = ' ORDER BY `vote_date` ASC';
             } elseif ($vote_comment_sort == "date_desc") {
                 $order = ' ORDER BY `vote_date` DESC';
             }
             $sort_comments = JRequest::getString('sort_comment', '');
             if ($sort_comments == "date") {
                 $order = ' ORDER BY `vote_date` ASC';
             } else {
                 if ($sort_comments == "date_desc") {
                     $order = ' ORDER BY `vote_date` DESC';
                 } else {
                     if ($sort_comments == "helpful") {
                         $order = ' ORDER BY `vote_useful` DESC, `vote_date` ASC';
                     }
                 }
             }
             $query = 'FROM `#__hikashop_vote` AS hika_vote LEFT JOIN `#__hikashop_user` AS hika_user ON hika_vote.vote_user_id=hika_user.user_id LEFT JOIN `#__users`AS users ON hika_user.user_cms_id=users.id ' . $where . '';
             $db->setQuery('SELECT COUNT(*) ' . $query);
             $total = $db->loadResult();
             if ($total < $pageInfo->limit->start) {
                 $pageInfo->limit->start = 0;
             }
             $limit = ' LIMIT ' . (int) $pageInfo->limit->start . ',' . (int) $pageInfo->limit->value . '';
             $db->setQuery('SELECT * ' . $query . $order . $limit);
             $scores = $db->loadObjectList();
             $elts = array();
             foreach ($scores as $hikashop_vote) {
                 $elts[$i] = clone $hikashop_vote;
                 $elts[$i]->total_vote_useful = 0;
                 //know the total of useful vote for this post
                 $query = 'SELECT count(vote_user_id) FROM ' . hikashop_table('vote_user') . ' WHERE vote_user_id = ' . (int) $elts[$i]->vote_id . '';
                 $db->setQuery($query);
                 $elts[$i]->total_vote_useful = $db->loadResult();
                 $elts[$i]->already_vote = 0;
                 //know if the user already vote for this post
                 if (empty($hikashop_vote_user_id)) {
                     $hikashop_vote_user_id = hikashop_getIP();
                 }
                 $query = 'SELECT vote_user_useful FROM ' . hikashop_table('vote_user') . ' WHERE vote_user_id = ' . (int) $elts[$i]->vote_id . ' AND vote_user_user_id = ' . $db->quote($hikashop_vote_user_id) . '';
                 $db->setQuery($query);
                 $elts[$i]->already_vote = $db->loadResult();
                 if (!empty($hikashop_vote->vote_comment) && $type_item) {
                     $purchased = '';
                     $query = 'SELECT order_id FROM ' . hikashop_table('order') . ' WHERE order_user_id = ' . $db->quote($hikashop_vote->vote_user_id) . '';
                     $db->setQuery($query);
                     if (!HIKASHOP_J25) {
                         $order_ids = $db->loadResultArray();
                     } else {
                         $order_ids = $db->loadColumn();
                     }
                     if (!empty($order_ids)) {
                         $query = 'SELECT product_id FROM ' . hikashop_table('product') . ' WHERE product_parent_id = ' . (int) $hikashop_vote_ref_id . '';
                         $db->setQuery($query);
                         if (!HIKASHOP_J25) {
                             $product_ids = $db->loadResultArray();
                         } else {
                             $product_ids = $db->loadColumn();
                         }
                         if (empty($product_ids)) {
                             $product_ids = array(0 => 0);
                             //if the article has no variants
                         }
                         $query = 'SELECT order_product_id FROM ' . hikashop_table('order_product') . ' WHERE order_id IN (' . implode(',', $order_ids) . ') AND product_id = ' . (int) $hikashop_vote_ref_id . ' OR product_id IN (' . implode(',', $product_ids) . ')';
                         $db->setQuery($query);
                         $result = $db->loadResult();
                         if (!empty($result)) {
                             $purchased = 1;
                         }
                     }
                     $elts[$i]->purchased = $purchased;
                 }
                 if ($elts[$i]->vote_useful > 10) {
                     $row->top_ranked = $elts[$i]->vote_id;
                 }
                 $i++;
             }
             $pageInfo->elements->total = $total;
             jimport('joomla.html.pagination');
             $pagination = hikashop_get('helper.pagination', $pageInfo->elements->total, $pageInfo->limit->start, $pageInfo->limit->value);
             $pagination->hikaSuffix = '';
             $this->assignRef('pagination', $pagination);
             $this->assignRef('pageInfo', $pageInfo);
         }
         $row->comment_to_show = $i;
     }
     $row->hikashop_vote_con_req_list = $hikashop_vote_con_req_list;
     $row->useful_rating = $useful_rating;
     $row->comment_enabled = $comment_enabled;
     $row->show_comment_date = $show_comment_date;
     $row->vote_comment_sort_frontend = $vote_comment_sort_frontend;
     $row->vote_star_number = $config->get('vote_star_number');
     $row->hide = $hide;
     $row->useful_style = $useful_style;
     $this->assignRef('rows', $row);
     $this->assignRef('elts', $elts);
 }
Exemplo n.º 12
0
 function saveFrontend(&$element)
 {
     $db = JFactory::getDBO();
     $config = hikashop_config();
     $user_ip = hikashop_getIP();
     $date = time();
     if (empty($element->user_id) || (int) $element->user_id == 0) {
         $element->user_id = $user_ip;
     }
     if (empty($element->vote_type)) {
         $element->vote_type = 'product';
     }
     JPluginHelper::importPlugin('hikashop');
     $dispatcher = JDispatcher::getInstance();
     $do = true;
     $currentElement = new stdClass();
     $dispatcher->trigger('onBeforeVoteCreate', array(&$element, &$do, &$currentElement));
     if (!$do) {
         return false;
     }
     $vElement = new stdClass();
     $vElement->vote_ref_id = (int) $element->vote_ref_id;
     $vElement->vote_type = strip_tags($element->vote_type);
     $vElement->vote_user_id = strip_tags($element->user_id);
     $vElement->vote_pseudo = strip_tags(@$element->pseudo_comment);
     $vElement->vote_ip = strip_tags($user_ip);
     $vElement->vote_email = strip_tags(@$element->email_comment);
     $vElement->vote_date = $date;
     $comment_by_person_by_product = $config->get('comment_by_person_by_product');
     $send_email = $config->get('email_each_comment');
     $vote_if_bought = $config->get('access_vote', 0) == 'buyed';
     if ($vote_if_bought == 1 && $vElement->vote_type == 'product') {
         $purchased = $this->hasBought($vElement->vote_ref_id, $element->user_id);
     }
     if ($element->hikashop_vote_type == 'useful') {
         $useful = JRequest::getVar('value', 0, 'default', 'int');
         $vote_id = JRequest::getVar('hikashop_vote_id', 0, 'default', 'int');
         $element->user_id = JRequest::getVar('hikashop_vote_user_id', 0, 'default', 'int');
         if (empty($element->user_id)) {
             $element->user_id = $user_ip;
         }
         $already_vote = 0;
         $useful_old = 0;
         $query = 'SELECT vote_user_useful FROM ' . hikashop_table('vote_user') . ' WHERE vote_user_id = ' . (int) $vote_id . ' AND vote_user_user_id = ' . $db->quote($element->user_id) . '';
         $db->setQuery($query);
         $already_vote = $db->loadResult();
         if ($already_vote > 0) {
             echo '2';
             exit;
         }
         $voteClass = hikashop_get('class.vote');
         $results = $voteClass->get((int) $vote_id);
         $useful_old = $results->vote_useful;
         if ($useful == 1) {
             $useful_new = $useful_old + 1;
         } else {
             $useful_new = $useful_old - 1;
         }
         $vElement->vote_id = (int) $vote_id;
         $vElement->vote_useful = strip_tags($useful_new);
         $useful = new stdClass();
         $useful->vote_id = (int) $vote_id;
         $useful->vote_useful = (int) $useful_new;
         $updated = parent::save($useful);
         if ($updated) {
             $dispatcher->trigger('onAfterVoteUpdate', array(&$element, $useful));
             $query = 'INSERT INTO ' . hikashop_table('vote_user') . ' (vote_user_id,vote_user_user_id,vote_user_useful) VALUES (' . (int) $vote_id . ',' . $db->quote($element->user_id) . ',1)';
             $db->setQuery($query);
             $db->query();
             if ($db->getAffectedRows() > 0) {
                 echo '1';
             }
         }
         exit;
     }
     if ($vote_if_bought && !$purchased) {
         echo '3';
         exit;
     }
     if ($vElement->vote_type == 'product') {
         $typeClass = hikashop_get('class.product');
         $results = $typeClass->get($vElement->vote_ref_id);
         $hikashop_vote_average_score = $results->product_average_score;
         $hikashop_vote_total_score = $results->product_total_vote;
     } else {
         if (!isset($currentElement->average_score) || !isset($currentElement->total_vote)) {
             echo '4';
             exit;
         }
         $hikashop_vote_average_score = $currentElement->average_score;
         $hikashop_vote_total_score = $currentElement->total_vote;
     }
     $hikashop_vote_total_score_new = $hikashop_vote_total_score + 1;
     $hikashop_vote_average_score_new = ($hikashop_vote_average_score * $hikashop_vote_total_score + $element->vote) / $hikashop_vote_total_score_new;
     $vote_id = '';
     $vote_old = '';
     $filters = array('vote_type = ' . $db->quote($vElement->vote_type), 'vote_ref_id = ' . (int) $vElement->vote_ref_id, 'vote_rating != 0');
     if (empty($element->user_id) || $element->user_id == $user_ip) {
         $filters[] = 'vote_ip = ' . $db->quote($user_ip);
         $filters[] = 'vote_user_id = \'\'';
     } else {
         $filters[] = 'vote_user_id = ' . $db->quote($element->user_id);
     }
     $query = 'SELECT * FROM ' . hikashop_table('vote') . ' WHERE ' . implode(' AND ', $filters);
     $db->setQuery($query);
     $result = $db->loadObject();
     if (!empty($result)) {
         $vote_id = $result->vote_id;
         $vote_old = $result->vote_rating;
         $published = $result->vote_published;
     }
     $nb_comment = $this->commentPassed($vElement->vote_type, $vElement->vote_ref_id, $element->user_id);
     $vote_mode = $config->get('enable_status_vote', 0);
     if ($element->hikashop_vote_type == 'vote') {
         $vElement->vote_rating = strip_tags($element->vote);
         $vElement->vote_comment = '';
         if (!empty($vote_id)) {
             $vElement->vote_id = $vote_id;
             if (!empty($hikashop_vote_total_score)) {
                 $hikashop_vote_average_score_new = ($hikashop_vote_average_score * $hikashop_vote_total_score - $vote_old + $element->vote) / $hikashop_vote_total_score;
             }
             $updated = parent::save($vElement);
             if ($updated && $published == 1) {
                 if ($vElement->vote_type == 'product') {
                     $type = new stdClass();
                     $type->product_id = (int) $vElement->vote_ref_id;
                     $type->product_average_score = $hikashop_vote_average_score_new;
                     $type->product_total_vote = (int) $hikashop_vote_total_score;
                     $typeClass->save($type, true);
                 }
                 $element->average_score = $hikashop_vote_average_score_new;
                 $element->total_vote = (int) $hikashop_vote_total_score;
                 $dispatcher->trigger('onAfterVoteUpdate', array(&$element));
             }
             echo '1';
         } else {
             $inserted = parent::save($vElement);
             if ($inserted) {
                 if ($vElement->vote_type == 'product') {
                     $type = new stdClass();
                     $type->product_id = (int) $vElement->vote_ref_id;
                     $type->product_average_score = $hikashop_vote_average_score_new;
                     $type->product_total_vote = (int) $hikashop_vote_total_score_new;
                     $typeClass->save($type, true);
                 }
                 $element->average_score = $hikashop_vote_average_score_new;
                 $element->total_vote = (int) $hikashop_vote_total_score_new;
                 $dispatcher->trigger('onAfterVoteUpdate', array(&$element));
             }
             echo '2';
         }
         exit;
     }
     jimport('joomla.filter.filterinput');
     $safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
     $config = hikashop_config();
     $vElement->vote_published = $config->get('published_comment', 0);
     if ($element->hikashop_vote_type == 'both') {
         $vElement->vote_rating = strip_tags($element->vote);
         $vElement->vote_comment = $safeHtmlFilter->clean($element->comment, 'string');
         if ($nb_comment < $comment_by_person_by_product) {
             $inserted = parent::save($vElement);
             if ($inserted) {
                 if ($vElement->vote_type == 'product' && $vElement->vote_published) {
                     $type = new stdClass();
                     $type->product_id = (int) $vElement->vote_ref_id;
                     $type->product_average_score = $hikashop_vote_average_score_new;
                     $type->product_total_vote = (int) $hikashop_vote_total_score_new;
                     $typeClass->save($type, true);
                 }
                 $element->average_score = $hikashop_vote_average_score_new;
                 $element->total_vote = (int) $hikashop_vote_total_score;
                 $dispatcher->trigger('onAfterVoteUpdate', array(&$element));
                 if (!empty($send_email)) {
                     $vote_id = $db->insertid();
                     $this->sendNotifComment($vote_id, strip_tags($element->comment), (int) $vElement->vote_ref_id, (int) $element->user_id, strip_tags($element->pseudo_comment), strip_tags($element->email_comment), $vElement->vote_type);
                 }
                 echo '1';
             } else {
                 echo '0';
             }
         } else {
             echo '2';
         }
         exit;
     }
     if ($element->hikashop_vote_type == 'comment') {
         $vElement->vote_rating = '0';
         $vElement->vote_comment = $safeHtmlFilter->clean($element->comment, 'string');
         if ($nb_comment < $comment_by_person_by_product) {
             $inserted = parent::save($vElement);
             $vote_id = 0;
             if ($inserted) {
                 $dispatcher->trigger('onAfterVoteUpdate', array(&$element));
                 if ($send_email != '') {
                     $vote_id = $db->insertid();
                     $this->sendNotifComment($vote_id, strip_tags($element->comment), (int) $vElement->vote_ref_id, (int) $element->user_id, strip_tags($element->pseudo_comment), strip_tags($element->email_comment), $vElement->vote_type);
                 }
                 echo '1';
             } else {
                 echo '0';
             }
         } else {
             echo '2';
         }
     }
     exit;
 }
Exemplo n.º 13
0
 function _checkLogin()
 {
     if (count($this->controllers) == 1) {
         $user = JFactory::getUser();
         $app = JFactory::getApplication();
         $user_id = $app->getUserState(HIKASHOP_COMPONENT . '.user_id');
         if ($user->guest && empty($user_id)) {
             $found = $this->_getStep('login');
             if ($found !== false) {
                 JRequest::setVar('step', $found);
                 JRequest::setVar('previous', 0);
                 unset($_REQUEST['previous']);
                 $this->step();
                 return false;
             } else {
                 $userData = new stdClass();
                 $userData->user_created_ip = hikashop_getIP();
                 $class = hikashop_get('class.user');
                 $userData->user_id = $class->save($userData);
                 $app->setUserState(HIKASHOP_COMPONENT . '.user_id', $userData->user_id);
             }
         }
     }
     return true;
 }
Exemplo n.º 14
0
		</td>
	</tr>
	<tr>
		<td class="key">
			<label for="data[vote][vote_ip]">
				<?php 
echo JText::_('HIKA_IP');
?>
			</label>
		</td>
		<td>
			<input type="text" size="100" name="data[vote][vote_ip]" value="<?php 
if ($newItem == true) {
    echo "\"";
} elseif (!isset($row->vote_ip)) {
    echo hikashop_getIP() . "\"";
} else {
    echo @$row->vote_ip . "\" disabled=\"disabled\"";
}
?>
" />
		</td>
	</tr>
	<tr>
		<td class="key">
			<label for="data[vote][vote_email]">
				<?php 
echo JText::_('HIKA_EMAIL');
?>
			</label>
		</td>
 /**
  * To make order  when order is updated
  */
 function onAfterOrderUpdate(&$order, &$send_email)
 {
     $order_type = isset($order->order_type) ? $order->order_type : $order->old->order_type;
     if ($order_type != 'sale' || empty($order->order_status)) {
         return;
     }
     // To check the type of the order. if EMC params is empty, no method envoimoinscher has been used
     if (!isset($order->order_shipping_params->EMC_params)) {
         return;
     }
     if (!$this->init()) {
         return false;
     }
     $config = hikashop_config();
     $order_confirmed_status = $config->get('order_confirmed_status', 'confirmed');
     $invoice_order_statuses = explode(',', $config->get('invoice_order_statuses', 'confirmed,shipped'));
     if (empty($invoice_order_statuses)) {
         $invoice_order_statuses = array('confirmed', 'shipped');
     }
     //if order status is "created" we do anything
     if ($order->order_status != $order_confirmed_status && !in_array($order->order_status, $invoice_order_statuses)) {
         return;
     }
     $order_shipping_params = isset($order->order_shipping_params) ? $order->order_shipping_params : $order->old->order_shipping_params;
     if (is_string($order_shipping_params)) {
         $order_shipping_params = unserialize($order_shipping_params);
     }
     /*
      * test if makeOrder has already been done once
      * if there was an error with one, we can't redo
      * we can improve this so we can redo those who had an error with the makeOrder
      */
     $ref_exist = false;
     foreach ($order_shipping_params->EMC_params as $value) {
         if (!empty($value['reference'])) {
             $ref_exist = true;
         }
     }
     if ($ref_exist == true) {
         return;
     }
     $db = JFactory::getDBO();
     $orderClass = hikashop_get('class.order');
     $fullOrder = $orderClass->loadFullOrder($order->order_id, true, false);
     // we group products by warehouse and shipping method
     //
     $tab_products = array();
     foreach ($fullOrder->order_shipping_params->EMC_params as $key => $value) {
         $data = array('products' => array());
         foreach ($fullOrder->products as $k => $product) {
             if ($product->order_product_shipping_method != 'envoimoinscher') {
                 continue;
             }
             if ($key == $product->order_product_shipping_id) {
                 $ids_products = explode('@', $product->order_product_shipping_id);
                 $warehouse_id = $ids_products[1];
                 $data['products'][] = $product;
             }
         }
         if (!empty($data['products'])) {
             $data['warehouse_id'] = $warehouse_id;
             $data['shipping_id'] = $ids_products[0];
             $tab_products[] = $data;
         }
     }
     // Get the destination country
     //
     $czone_code_to = @$fullOrder->shipping_address->address_country;
     $query = 'SELECT zone_id, zone_code_2 FROM ' . hikashop_table('zone') . ' WHERE zone_name_english = ' . $db->Quote($czone_code_to);
     $db->setQuery($query);
     $czone = $db->loadObject();
     $country_to = $czone->zone_code_2;
     if ($country_to == 'FX') {
         $country_to = 'FR';
     }
     $user_address_title = $fullOrder->shipping_address->address_title;
     $key = 'HIKA_TITLE_' . strtoupper($user_address_title);
     if ($key != JText::_($key)) {
         $user_address_title = JText::_($key);
     }
     $email = @$fullOrder->customer->user_email;
     $phone = @$fullOrder->shipping_address->address_telephone;
     // for each group we collect all informations to send the request makeOrder
     //
     foreach ($tab_products as $key => $value) {
         $shipping_ids = explode('-', $value['shipping_id']);
         $this->pluginParams($shipping_ids[0]);
         // check if option make order is disabled
         if ($this->plugin_params->make_order == 0) {
             continue;
         }
         // receiver informations
         if ($this->plugin_params->destination_type == 'res' || $this->plugin_params->destination_type == 'auto' && empty($fullOrder->shipping_address->address_company)) {
             $user_type = 'particulier';
         } else {
             $user_type = 'entreprise';
         }
         if (empty($email) || empty($phone)) {
             return;
         }
         $to = array('pays' => $country_to, 'code_postal' => $fullOrder->shipping_address->address_post_code, 'type' => $user_type, 'ville' => $fullOrder->shipping_address->address_city, 'adresse' => $fullOrder->shipping_address->address_street, 'civilite' => $user_address_title, 'prenom' => $fullOrder->shipping_address->address_firstname, 'nom' => $fullOrder->shipping_address->address_lastname, 'email' => $email, 'tel' => $phone);
         // sender informations
         $admin_address_title = $this->plugin_params->sender_civility;
         $key = 'HIKA_TITLE_' . strtoupper($admin_address_title);
         if ($key != JText::_($key)) {
             $admin_address_title = JText::_($key);
         }
         $czone_code_from = @$this->plugin_params->sender_country;
         $query = 'SELECT zone_id, zone_code_2 FROM ' . hikashop_table('zone') . ' WHERE zone_namekey = ' . $db->Quote($czone_code_from);
         $db->setQuery($query);
         $czone = $db->loadObject();
         $country_from = $czone->zone_code_2;
         if ($country_from == 'FX') {
             $country_from = 'FR';
         }
         $from = array('pays' => $country_from, 'code_postal' => $this->plugin_params->sender_postcode, 'type' => $this->plugin_params->type, 'ville' => $this->plugin_params->sender_city, 'adresse' => $this->plugin_params->sender_address, 'civilite' => $admin_address_title, 'prenom' => $this->plugin_params->sender_firstname, 'nom' => $this->plugin_params->sender_lastname, 'email' => $this->plugin_params->sender_email, 'tel' => $this->plugin_params->sender_phone);
         if ($this->plugin_params->type == 'entreprise') {
             $from['societe'] = $this->plugin_params->sender_company;
         }
         $code = (int) $this->plugin_params->product_category;
         $shipping = explode(' / ', $shipping_ids[1]);
         $service = $shipping[1];
         $shipping = $value['shipping_id'] . '@' . $value['warehouse_id'];
         // We get the drop off point, pick up and code for the shipping method
         foreach ($fullOrder->order_shipping_params->EMC_params as $k => $v) {
             if ($k == $shipping) {
                 $dropoff = explode('<br/>', $v['drop_off']);
                 $pickup = explode('<br/>', $v['pick_up']);
                 $ope = $v['code'];
             }
         }
         $sending_type = strtolower($this->plugin_params->sending_type);
         $collection = $dropoff[0];
         $delivery = $pickup[0];
         // >rray that contains informations about sending
         $quotInfo = array('collecte' => date('Y-m-d'), 'delai' => 'aucun', 'code_contenu' => $code, 'type_emballage.emballage' => 1, 'operateur' => $ope, 'raison' => 'sale', 'service' => $service, 'collection_type' => $collection, 'delivery_type' => $delivery, 'depot.pointrelais' => '', 'retrait.pointrelais' => '', $sending_type . '.description' => '');
         // if there is drop off or pick up point
         if ($collection == 'POST_OFFICE' || $collection == 'DROPOFF_POINT') {
             $quotInfo['depot.pointrelais'] = $dropoff[2];
         }
         if ($delivery == 'PICKUP_POINT') {
             $quotInfo['retrait.pointrelais'] = $pickup[2];
         }
         // the availability for the collection of the package by the carrier, compulsory for some offers
         if (isset($this->plugin_params->start_availability) && !empty($this->plugin_params->start_availability)) {
             $quotInfo['disponibilite.HDE'] = $this->plugin_params->start_availability;
         }
         if (isset($this->plugin_params->end_availability) && !empty($this->plugin_params->end_availability)) {
             $quotInfo['disponibilite.HLE'] = $this->plugin_params->end_availability;
         }
         foreach ($value['products'] as $product) {
             $quotInfo[$sending_type . '.description'] .= '  ' . $product->order_product_name;
         }
         $productClass = hikashop_get('class.product');
         $newOrder = new stdClass();
         // To create a new array order to use the function getData before makeOrder
         // It must be structured in the same way. We set in the array just the necessary data
         //
         foreach ($value['products'] as $p) {
             $product = $productClass->get($p->product_id);
             if ($product->product_parent_id != 0) {
                 // Processing variant product
                 //
                 $parent = $productClass->get($product->product_parent_id);
                 $newProduct = $parent;
                 $newProduct->variants = array(0 => $product);
                 if ($product->product_width == 0 && $product->product_length == 0) {
                     $product->product_width = $parent->product_width;
                     $product->product_length = $parent->product_length;
                     $product->product_height = $parent->product_height;
                 }
                 $product->cart_product_quantity = (int) $p->order_product_quantity;
                 $product->product_weight_orig = $parent->product_weight;
                 $product->product_weight_unit_orig = $parent->product_weight_unit;
                 $product->product_dimension_unit_orig = $parent->product_dimension_unit;
                 //
                 $price = new stdClass();
                 $price->unit_price = new stdClass();
                 $price->unit_price->price_value_with_tax = $p->order_product_price + $p->order_product_tax;
                 //
                 $product->prices = array(0 => $price);
                 //
                 $newOrder->products[] = $newProduct;
             } else {
                 // Processing main product
                 //
                 $product->cart_product_quantity = (int) $p->order_product_quantity;
                 $product->product_weight_orig = $product->product_weight;
                 $product->product_weight_unit_orig = $product->product_weight_unit;
                 $product->product_dimension_unit_orig = $product->product_dimension_unit;
                 //
                 $price = new stdClass();
                 $price->unit_price = new stdClass();
                 $price->unit_price->price_value_with_tax = $p->order_product_price + $p->order_product_tax;
                 //
                 $product->prices = array(0 => $price);
                 //
                 $newOrder->products[] = $product;
             }
         }
         /*
          * makeOrder = true in order not to get receiver and sender infos because we already did it
          * and for the makeOrder we have to give more informations
          */
         $data = $this->getData(null, $this, $newOrder, $sending_type, true);
         $total_price = (int) $data[0]["price"];
         unset($data[0]);
         $quotInfo[$sending_type . '.valeur'] = $total_price;
         $cotCl = new Env_Quotation(array('user' => $this->plugin_params->emc_login, 'pass' => $this->plugin_params->emc_password, 'key' => $this->plugin_params->api_key));
         $cotCl->setEnv($this->plugin_params->environment);
         $config = hikashop_config();
         $contentCl->setPlatformParams('hikashop', $config->get('version'), $config->get('version'));
         $cotCl->setPerson('expediteur', $from);
         $cotCl->setPerson('destinataire', $to);
         $cotCl->setType($sending_type, $data);
         /*
          * for shipments to the international we have to send more informations for each product
          * we call the function setProforma of the library for this
          */
         if ($country_to != $country_from) {
             $infos_products = array();
             $i = 1;
             foreach ($newOrder->products as $product) {
                 if (isset($product->variants)) {
                     $nb = $product->variants[0]->cart_product_quantity;
                     $price = $product->variants[0]->prices[0]->unit_price->price_value_with_tax;
                     $weight = $product->variants[0]->product_weight_orig;
                 } else {
                     $nb = $product->cart_product_quantity;
                     $price = $product->prices[0]->unit_price->price_value_with_tax;
                     $weight = $product->product_weight_orig;
                 }
                 $infos_products[$i++] = array('description_en' => $product->product_name, 'description_fr' => $product->product_name, 'nombr' => $nb, 'valeur' => $price, 'origine' => $country_from, 'poids' => $weight);
             }
             $cotCl->setProforma($infos_products);
         }
         // send request to make order !!
         $orderPassed = $cotCl->makeOrder($quotInfo, true);
         if (!$cotCl->curlError && !$cotCl->respError) {
             if ($orderPassed) {
                 // we add reference to order_shipping_params
                 $fullOrder->order_shipping_params->EMC_params[$shipping]['reference'] = $cotCl->order['ref'];
                 $update_order = new stdClass();
                 $update_order->order_id = $fullOrder->order_id;
                 $update_order->order_shipping_params = $fullOrder->order_shipping_params;
                 $orderClass->save($update_order);
             }
             /*else {
             			echo "The shipment was not properly executed. An error has occurred .";
             		}*/
         } elseif ($cotCl->respError) {
             // The request is invalid, we add message to order history
             $update_history = new stdClass();
             $update_history->history_order_id = $fullOrder->order_id;
             $update_history->history_created = time();
             $update_history->history_notified = 0;
             $update_history->history_ip = hikashop_getIP();
             $update_history->history_reason = 'EnvoiMoinsCher Error';
             $update_history->history_data = '';
             foreach ($cotCl->respErrorsList as $m => $message) {
                 $update_history->history_data .= $message['message'] . '<br/>';
             }
             $historyClass = hikashop_get('class.history');
             $historyClass->save($update_history);
         } else {
             // An error while sending the request, add message to order history
             //
             $update_history = new stdClass();
             $update_history->history_order_id = $fullOrder->order_id;
             $update_history->history_created = time();
             $update_history->history_notified = 0;
             $update_history->history_ip = hikashop_getIP();
             $update_history->history_reason = 'EnvoiMoinsCher Error';
             $update_history->history_data = $cotCl->curlErrorText;
             $historyClass = hikashop_get('class.history');
             $historyClass->save($update_history);
         }
     }
 }
Exemplo n.º 16
0
 function onPaymentNotification(&$statuses)
 {
     $vars = array();
     $data = array();
     $filter = JFilterInput::getInstance();
     foreach ($_REQUEST as $key => $value) {
         $key = $filter->clean($key);
         if (preg_match('#^[0-9a-z_-]{1,30}$#i', $key) && !preg_match('#^cmd$#i', $key)) {
             $value = JRequest::getString($key);
             $vars[$key] = $value;
             $data[] = $key . '=' . urlencode($value);
         }
     }
     $data = implode('&', $data) . '&cmd=_notify-validate';
     $dbOrder = $this->getOrder((int) @$vars['invoice']);
     $this->loadPaymentParams($dbOrder);
     if (empty($this->payment_params)) {
         return false;
     }
     $this->loadOrderData($dbOrder);
     if (!$this->payment_params->notification) {
         return false;
     }
     if ($this->payment_params->debug) {
         echo print_r($vars, true) . "\r\n\r\n";
     }
     if (empty($dbOrder)) {
         echo 'Could not load any order for your notification ' . @$vars['invoice'];
         return false;
     }
     if ($this->payment_params->debug) {
         echo print_r($dbOrder, true) . "\r\n\r\n";
     }
     $order_id = $dbOrder->order_id;
     $url = HIKASHOP_LIVE . 'administrator/index.php?option=com_hikashop&ctrl=order&task=edit&order_id=' . $order_id;
     $order_text = "\r\n" . JText::sprintf('NOTIFICATION_OF_ORDER_ON_WEBSITE', $dbOrder->order_number, HIKASHOP_LIVE);
     $order_text .= "\r\n" . str_replace('<br/>', "\r\n", JText::sprintf('ACCESS_ORDER_WITH_LINK', $url));
     if (!empty($this->payment_params->ips)) {
         $ip = hikashop_getIP();
         $ips = str_replace(array('.', '*', ','), array('\\.', '[0-9]+', '|'), $this->payment_params->ips);
         if (!preg_match('#(' . implode('|', $ips) . ')#', $ip)) {
             $email = new stdClass();
             $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paypal') . ' ' . JText::sprintf('IP_NOT_VALID', $dbOrder->order_number);
             $email->body = str_replace('<br/>', "\r\n", JText::sprintf('NOTIFICATION_REFUSED_FROM_IP', 'Paypal', $ip, implode("\r\n", $this->payment_params->ips))) . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-paypal-error#ip') . $order_text;
             $action = false;
             $this->modifyOrder($action, null, null, $email);
             JError::raiseError(403, JText::_('Access Forbidden'));
             return false;
         }
     }
     if (empty($this->payment_params->url)) {
         $this->payment_params->url = 'https://www.paypal.com/cgi-bin/webscr';
     }
     $url = parse_url($this->payment_params->url);
     if (!isset($url['query'])) {
         $url['query'] = '';
     }
     if (!isset($url['port'])) {
         if (!empty($url['scheme']) && in_array($url['scheme'], array('https', 'ssl'))) {
             $url['port'] = 443;
         } else {
             $url['port'] = 80;
         }
     }
     if (!empty($url['scheme']) && in_array($url['scheme'], array('https', 'ssl'))) {
         $url['host_socket'] = 'ssl://' . $url['host'];
     } else {
         $url['host_socket'] = $url['host'];
     }
     if ($this->payment_params->debug) {
         echo print_r($url, true) . "\r\n\r\n";
     }
     $fp = fsockopen($url['host_socket'], $url['port'], $errno, $errstr, 30);
     if (!$fp) {
         $email = new stdClass();
         $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paypal') . ' ' . JText::sprintf('PAYPAL_CONNECTION_FAILED', $dbOrder->order_number);
         $email->body = str_replace('<br/>', "\r\n", JText::sprintf('NOTIFICATION_REFUSED_NO_CONNECTION', 'Paypal')) . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-paypal-error#connection') . $order_text;
         $action = false;
         $this->modifyOrder($action, null, null, $email);
         JError::raiseError(403, JText::_('Access Forbidden'));
         return false;
     }
     $uri = $url['path'] . ($url['query'] != '' ? '?' . $url['query'] : '');
     $header = 'POST ' . $uri . ' HTTP/1.1' . "\r\n" . 'User-Agent: PHP/' . phpversion() . "\r\n" . 'Referer: ' . hikashop_currentURL() . "\r\n" . 'Server: ' . $_SERVER['SERVER_SOFTWARE'] . "\r\n" . 'Host: ' . $url['host'] . "\r\n" . 'Content-Type: application/x-www-form-urlencoded' . "\r\n" . 'Content-Length: ' . strlen($data) . "\r\n" . 'Accept: */' . '*' . "\r\n" . 'Connection: close' . "\r\n\r\n";
     fwrite($fp, $header . $data);
     $response = '';
     while (!feof($fp)) {
         $response .= fgets($fp, 1024);
     }
     fclose($fp);
     if ($this->payment_params->debug) {
         echo print_r($header, true) . "\r\n\r\n";
         echo print_r($data, true) . "\r\n\r\n";
         echo print_r($response, true) . "\r\n\r\n";
     }
     $response = substr($response, strpos($response, "\r\n\r\n") + strlen("\r\n\r\n"));
     $verified = preg_match('#VERIFIED#i', $response);
     if (!$verified) {
         $email = new stdClass();
         if (preg_match('#INVALID#i', $response)) {
             $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paypal') . 'invalid transaction';
             $email->body = JText::sprintf("Hello,\r\n A paypal notification was refused because it could not be verified by the paypal server") . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-paypal-error#invalidtnx') . $order_text;
             if ($this->payment_params->debug) {
                 echo 'invalid transaction' . "\n\n\n";
             }
         } else {
             $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paypal') . 'invalid response';
             $email->body = JText::sprintf("Hello,\r\n A paypal notification was refused because the response from the paypal server was invalid") . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-paypal-error#invalidresponse') . $order_text;
             if ($this->payment_params->debug) {
                 echo 'invalid response' . "\n\n\n";
             }
         }
         $action = false;
         $this->modifyOrder($action, null, null, $email);
         return false;
     }
     $completed = preg_match('#Completed#i', $vars['payment_status']);
     $pending = preg_match('#Pending#i', $vars['payment_status']);
     if (!$completed && !$pending) {
         $email = new stdClass();
         $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Paypal', $vars['payment_status'], $dbOrder->order_number);
         $email->body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Paypal', $vars['payment_status'])) . ' ' . JText::_('STATUS_NOT_CHANGED') . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-paypal-error#status') . $order_text;
         $action = false;
         $this->modifyOrder($action, null, null, $email);
         if ($this->payment_params->debug) {
             echo 'payment ' . $vars['payment_status'] . "\r\n\r\n";
         }
         return false;
     }
     echo 'PayPal transaction id: ' . $vars['txn_id'] . "\r\n\r\n";
     $history = new stdClass();
     $history->notified = 0;
     $history->amount = @$vars['mc_gross'] . @$vars['mc_currency'];
     $history->data = ob_get_clean();
     $price_check = round($dbOrder->order_full_price, (int) $this->currency->currency_locale['int_frac_digits']);
     if ($price_check != @$vars['mc_gross'] || $this->currency->currency_code != @$vars['mc_currency']) {
         $email = new stdClass();
         $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paypal') . JText::_('INVALID_AMOUNT');
         $email->body = str_replace('<br/>', "\r\n", JText::sprintf('AMOUNT_RECEIVED_DIFFERENT_FROM_ORDER', 'Paypal', $history->amount, $price_check . $this->currency->currency_code)) . "\r\n\r\n" . JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-paypal-error#amount') . $order_text;
         $this->modifyOrder($order_id, $this->payment_params->invalid_status, $history, $email);
         return false;
     }
     if (strtolower(@$vars['receiver_email']) != strtolower($this->payment_params->email) && strtolower(@$vars['business']) != strtolower($this->payment_params->email)) {
         $email = new stdClass();
         $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paypal') . 'wrong receiver';
         $email->body = str_replace('<br/>', "\r\n", 'The money was sent to the wrong PayPal account, likely due to the customer trying to cheat.' . "\r\n" . 'Notification receiver: ' . @$vars['receiver_email'] . "\r\n" . 'Notification business: ' . @$vars['business'] . "\r\n" . 'Your paypal address: ' . $this->payment_params->email . "\r\n" . $order_text);
         $this->modifyOrder($order_id, $this->payment_params->invalid_status, $history, $email);
         return false;
     }
     if ($completed) {
         $order_status = $this->payment_params->verified_status;
     } else {
         $order_status = $this->payment_params->pending_status;
         $order_text = JText::sprintf('CHECK_DOCUMENTATION', HIKASHOP_HELPURL . 'payment-paypal-error#pending') . "\r\n\r\n" . $order_text;
     }
     if ($dbOrder->order_status == $order_status) {
         return true;
     }
     $config =& hikashop_config();
     if ($config->get('order_confirmed_status', 'confirmed') == $order_status) {
         $history->notified = 1;
     }
     $email = new stdClass();
     $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Paypal', $vars['payment_status'], $dbOrder->order_number);
     $email->body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Paypal', $vars['payment_status'])) . ' ' . JText::sprintf('ORDER_STATUS_CHANGED', $order_status) . "\r\n\r\n" . $order_text;
     $this->modifyOrder($order_id, $order_status, $history, $email);
     return true;
 }
Exemplo n.º 17
0
 function save(&$order)
 {
     $new = false;
     $config =& hikashop_config();
     if (empty($order->order_id)) {
         if (!is_object($order)) {
             $order = new stdClass();
         }
         $order->order_created = time();
         if (empty($order->order_type)) {
             $order->order_type = 'sale';
         }
         $order->order_ip = hikashop_getIP();
         $order->old = new stdClass();
         if (empty($order->order_status)) {
             $order->order_status = $config->get('order_created_status', 'pending');
         }
         if (empty($order->order_currency_id)) {
             $order->order_currency_id = hikashop_getCurrency();
         }
         if (defined('MULTISITES_ID')) {
             $order->order_site_id = MULTISITES_ID;
         }
         $new = true;
     } else {
         if (empty($order->old)) {
             $order->old = $this->get($order->order_id);
         }
     }
     $order->order_modified = time();
     JPluginHelper::importPlugin('hikashop');
     JPluginHelper::importPlugin('hikashoppayment');
     JPluginHelper::importPlugin('hikashopshipping');
     $dispatcher = JDispatcher::getInstance();
     $order_type = '';
     if (!empty($order->old->order_type)) {
         $order_type = $order->old->order_type;
     }
     if (!empty($order->order_type)) {
         $order_type = $order->order_type;
     }
     $recalculate = false;
     if (!empty($order->product)) {
         $do = true;
         $dispatcher->trigger('onBeforeOrderProductsUpdate', array(&$order, &$do));
         if (!$do) {
             return false;
         }
         $productClass = hikashop_get('class.order_product');
         if (is_array($order->product)) {
             foreach ($order->product as $product) {
                 $productClass->update($product);
             }
         } else {
             $productClass->update($order->product);
         }
         $recalculate = true;
     }
     if (!$new && (isset($order->order_shipping_price) || isset($order->order_payment_price) || isset($order->order_discount_price))) {
         if (isset($order->order_shipping_tax_namekey) || isset($order->order_discount_tax_namekey) || isset($order->order_payment_tax_namekey)) {
             if (!empty($order->old->order_tax_info)) {
                 $order->order_tax_info = $order->old->order_tax_info;
                 foreach ($order->order_tax_info as $k => $tax) {
                     if (isset($order->order_shipping_tax_namekey) && $tax->tax_namekey == $order->order_shipping_tax_namekey) {
                         $order->order_tax_info[$k]->tax_amount_for_shipping = @$order->order_shipping_tax;
                         unset($order->order_shipping_tax_namekey);
                     } elseif (isset($order->order_tax_info[$k]->tax_amount_for_shipping)) {
                         unset($order->order_tax_info[$k]->tax_amount_for_shipping);
                     }
                     if (isset($order->order_payment_tax_namekey) && $tax->tax_namekey == $order->order_payment_tax_namekey) {
                         $order->order_tax_info[$k]->tax_amount_for_payment = @$order->order_payment_tax;
                         unset($order->order_payment_tax_namekey);
                     } elseif (isset($order->order_tax_info[$k]->tax_amount_for_payment)) {
                         unset($order->order_tax_info[$k]->tax_amount_for_payment);
                     }
                     if (isset($order->order_discount_tax_namekey) && $tax->tax_namekey == $order->order_discount_tax_namekey) {
                         $order->order_tax_info[$k]->tax_amount_for_coupon = @$order->order_discount_tax;
                         unset($order->order_discount_tax_namekey);
                     } elseif (isset($order->order_tax_info[$k]->tax_amount_for_coupon)) {
                         unset($order->order_tax_info[$k]->tax_amount_for_coupon);
                     }
                 }
             }
             if (isset($order->order_shipping_tax_namekey)) {
                 $order->order_tax_info[$order->order_shipping_tax_namekey] = new stdClass();
                 $order->order_tax_info[$order->order_shipping_tax_namekey]->tax_namekey = $order->order_shipping_tax_namekey;
                 $order->order_tax_info[$order->order_shipping_tax_namekey]->tax_amount_for_shipping = @$order->order_shipping_tax;
                 unset($order->order_shipping_tax_namekey);
             }
             if (isset($order->order_payment_tax_namekey)) {
                 $order->order_tax_info[$order->order_payment_tax_namekey] = new stdClass();
                 $order->order_tax_info[$order->order_payment_tax_namekey]->tax_namekey = $order->order_payment_tax_namekey;
                 $order->order_tax_info[$order->order_payment_tax_namekey]->tax_amount_for_payment = @$order->order_payment_tax;
                 unset($order->order_payment_tax_namekey);
             }
             if (isset($order->order_discount_tax_namekey)) {
                 $order->order_tax_info[$order->order_discount_tax_namekey] = new stdClass();
                 $order->order_tax_info[$order->order_discount_tax_namekey]->tax_namekey = $order->order_discount_tax_namekey;
                 $order->order_tax_info[$order->order_discount_tax_namekey]->tax_amount_for_coupon = @$order->order_discount_tax;
                 unset($order->order_discount_tax_namekey);
             }
         }
         $recalculate = true;
     }
     if ($recalculate) {
         $this->recalculateFullPrice($order);
     }
     $do = true;
     if ($new) {
         $dispatcher->trigger('onBeforeOrderCreate', array(&$order, &$do));
     } else {
         $dispatcher->trigger('onBeforeOrderUpdate', array(&$order, &$do));
     }
     if ($do) {
         if (isset($order->value)) {
             unset($order->value);
         }
         if (isset($order->order_current_lgid)) {
             unset($order->order_current_lgid);
         }
         if (isset($order->order_current_locale)) {
             unset($order->order_current_locale);
         }
         if (isset($order->mail_status)) {
             unset($order->mail_status);
         }
         if (isset($order->order_tax_info) && !is_string($order->order_tax_info)) {
             $order->order_tax_info = serialize($order->order_tax_info);
         }
         if (isset($order->order_currency_info) && !is_string($order->order_currency_info)) {
             $order->order_currency_info = serialize($order->order_currency_info);
         }
         if (isset($order->order_shipping_params) && !is_string($order->order_shipping_params)) {
             $order->order_shipping_params = serialize($order->order_shipping_params);
         }
         if (isset($order->order_payment_params) && !is_string($order->order_payment_params)) {
             $order->order_payment_params = serialize($order->order_payment_params);
         }
         if ($config->get('update_stock_after_confirm') && isset($order->order_status) && isset($order->old->order_status) && $order_type == 'sale') {
             $invoice_statuses = $config->get('invoice_order_statuses', 'confirmed,shipped');
             if (empty($invoice_statuses)) {
                 $invoice_statuses = 'confirmed,shipped';
             }
             $invoice_order_statuses = explode(',', $invoice_statuses);
             if ($order->old->order_status == 'created' && in_array($order->order_status, $invoice_order_statuses)) {
                 $this->loadProducts($order);
                 if (!empty($order->products)) {
                     $productClass = hikashop_get('class.order_product');
                     foreach ($order->products as $product) {
                         $product->change = 'minus';
                         $productClass->update($product);
                         unset($product->change);
                     }
                 }
             } elseif (in_array($order->old->order_status, $invoice_order_statuses) && $order->order_status == 'created') {
                 $this->loadProducts($order);
                 if (!empty($order->products)) {
                     $productClass = hikashop_get('class.order_product');
                     foreach ($order->products as $product) {
                         $product->change = 'plus';
                         $productClass->update($product);
                         unset($product->change);
                     }
                 }
             }
         }
         if (isset($order->order_status) && $order_type == 'sale') {
             $this->capturePayment($order, 0);
         }
         if (!empty($order->order_status) && empty($order->order_invoice_id) && empty($order->old->order_invoice_id) && $order_type == 'sale') {
             $valid_statuses = explode(',', $config->get('invoice_order_statuses', 'confirmed,shipped'));
             if (empty($valid_statuses)) {
                 $valid_statuses = array('confirmed', 'shipped');
             }
             $excludeFreeOrders = $config->get('invoice_exclude_free_orders', 0);
             if (isset($order->order_full_price)) {
                 $total = $order->order_full_price;
             } elseif (isset($order->old->order_full_price)) {
                 $total = $order->old->order_full_price;
             } else {
                 $total = 0;
             }
             //new order for example
             if (in_array($order->order_status, $valid_statuses) && ($total > 0 || !$excludeFreeOrders)) {
                 $query = 'SELECT MAX(a.order_invoice_id)+1 FROM ' . hikashop_table('order') . ' AS a WHERE a.order_type = \'sale\'';
                 $resetFrequency = $config->get('invoice_reset_frequency', '');
                 if (!empty($resetFrequency)) {
                     $y = (int) date('Y');
                     $m = 1;
                     $d = 1;
                     if ($resetFrequency == 'month') {
                         $m = (int) date('m');
                     }
                     if (strpos($resetFrequency, '/') !== false) {
                         list($d, $m) = explode('/', $resetFrequency, 2);
                         if ($d == '*') {
                             $d = (int) date('d');
                         } else {
                             $d = (int) $d;
                         }
                         if ($m == '*') {
                             $m = (int) date('m');
                         } else {
                             $m = (int) $m;
                         }
                         if ($d <= 0) {
                             $d = 1;
                         }
                         if ($m <= 0) {
                             $m = 1;
                         }
                     }
                     $query .= ' AND a.order_invoice_created >= ' . mktime(0, 0, 0, $m, $d, $y);
                 }
                 $this->database->setQuery($query);
                 $order->order_invoice_id = $this->database->loadResult();
                 if (empty($order->order_invoice_id)) {
                     $order->order_invoice_id = 1;
                 }
                 $order->order_invoice_number = hikashop_encode($order, 'invoice');
                 $order->order_invoice_created = time();
             }
         }
         if (empty($order->old)) {
             unset($order->old);
         }
         $order->order_id = parent::save($order);
         if (isset($order->order_tax_info) && is_string($order->order_tax_info)) {
             $order->order_tax_info = unserialize($order->order_tax_info);
         }
         if (isset($order->order_payment_params) && is_string($order->order_payment_params)) {
             $order->order_payment_params = unserialize($order->order_payment_params);
         }
         if (isset($order->order_shipping_params) && is_string($order->order_shipping_params)) {
             $order->order_shipping_params = unserialize($order->order_shipping_params);
         }
         if (!empty($order->order_id)) {
             $productClass = hikashop_get('class.order_product');
             if ($new && empty($order->order_number)) {
                 $order->order_number = hikashop_encode($order);
                 $updateOrder = new stdClass();
                 $updateOrder->order_id = $order->order_id;
                 $updateOrder->order_number = $order->order_number;
                 $config =& hikashop_config();
                 $valid_statuses = explode(',', $config->get('invoice_order_statuses', 'confirmed,shipped'));
                 if (empty($valid_statuses)) {
                     $valid_statuses = array('confirmed', 'shipped');
                 }
                 $created_status = $config->get('order_created_status', 'created');
                 if (in_array($created_status, $valid_statuses)) {
                     $order->order_invoice_id = $order->order_id;
                     $order->order_invoice_number = $order->order_number;
                     $order->order_invoice_created = time();
                     $updateOrder->order_invoice_id = $order->order_invoice_id;
                     $updateOrder->order_invoice_number = $order->order_invoice_number;
                 }
                 parent::save($updateOrder);
             }
             if (!empty($order->cart->products)) {
                 foreach ($order->cart->products as $k => $p) {
                     $order->cart->products[$k]->order_id = $order->order_id;
                 }
                 if ($config->get('update_stock_after_confirm') && $order->order_status == 'created') {
                     foreach ($order->cart->products as $k => $product) {
                         $order->cart->products[$k]->no_update_qty = true;
                     }
                 }
                 $productClass->save($order->cart->products);
                 if ($config->get('update_stock_after_confirm') && $order->order_status == 'created') {
                     foreach ($order->cart->products as $k => $product) {
                         unset($order->cart->products[$k]->no_update_qty);
                     }
                 }
                 if (!empty($order->order_discount_code) && $order_type == 'sale') {
                     $query = 'UPDATE ' . hikashop_table('discount') . ' SET discount_used_times=discount_used_times+1 WHERE discount_code=' . $this->database->Quote($order->order_discount_code) . ' AND discount_type=\'coupon\' LIMIT 1';
                     $this->database->setQuery($query);
                     $this->database->query();
                 }
                 if (!empty($order->cart->additional)) {
                     foreach ($order->cart->additional as $k => $p) {
                         $order->cart->additional[$k]->product_id = 0;
                         $order->cart->additional[$k]->order_product_quantity = 0;
                         if (!empty($p->name)) {
                             $order->cart->additional[$k]->order_product_name = $p->name;
                         }
                         $order->cart->additional[$k]->order_product_code = 'order additional';
                         if (!empty($p->value)) {
                             $order->cart->additional[$k]->order_product_options = $p->value;
                         }
                         if (!empty($p->price_value)) {
                             $order->cart->additional[$k]->order_product_price = $p->price_value;
                         }
                         $order->cart->additional[$k]->order_id = $order->order_id;
                     }
                     $productClass->save($order->cart->additional);
                 }
             } elseif (!empty($order->order_status) && !empty($order->old)) {
                 $update = $config->get('update_stock_after_confirm');
                 $config =& hikashop_config();
                 $cancelled_order_status = explode(',', $config->get('cancelled_order_status'));
                 $invoice_order_statuses = explode(',', $config->get('invoice_order_statuses', 'confirmed,shipped'));
                 if (empty($invoice_order_statuses)) {
                     $invoice_order_statuses = array('confirmed', 'shipped');
                 }
                 if (!empty($order->order_status) && in_array($order->order_status, $cancelled_order_status) && (empty($order->old->order_status) || !in_array($order->old->order_status, $cancelled_order_status))) {
                     if ($order_type == 'sale' && (in_array($order->order_status, $cancelled_order_status) && (in_array($order->old->order_status, $invoice_order_statuses) || !$update && $order->old->order_status == 'created'))) {
                         $productClass->cancelProductReservation($order->order_id);
                     }
                     if (!isset($order->order_discount_code)) {
                         $code = @$order->old->order_discount_code;
                     } else {
                         $code = $order->order_discount_code;
                     }
                     if (!empty($code) && $order_type == 'sale') {
                         $query = 'UPDATE ' . hikashop_table('discount') . ' SET discount_used_times=discount_used_times-1 WHERE discount_code=' . $this->database->Quote($code) . ' AND discount_type=\'coupon\' LIMIT 1';
                         $this->database->setQuery($query);
                         $this->database->query();
                     }
                 }
                 if (!empty($order->order_status) && !in_array($order->order_status, $cancelled_order_status) && !empty($order->old->order_status) && in_array($order->old->order_status, $cancelled_order_status)) {
                     if ($order_type == 'sale' && (in_array($order->old->order_status, $cancelled_order_status) && (in_array($order->order_status, $invoice_order_statuses) || !$update && $order->order_status == 'created'))) {
                         $productClass->resetProductReservation($order->order_id);
                     }
                     if (!isset($order->order_discount_code)) {
                         $code = @$order->old->order_discount_code;
                     } else {
                         $code = $order->order_discount_code;
                     }
                     if (!empty($code) && $order_type == 'sale') {
                         $query = 'UPDATE ' . hikashop_table('discount') . ' SET discount_used_times = discount_used_times + 1 WHERE discount_code=' . $this->database->Quote($code) . ' AND discount_type=\'coupon\' LIMIT 1';
                         $this->database->setQuery($query);
                         $this->database->query();
                     }
                 }
             }
             if ($new) {
                 $send_email = $this->sendEmailAfterOrderCreation;
                 $dispatcher->trigger('onAfterOrderCreate', array(&$order, &$send_email));
                 if ($send_email) {
                     $this->loadOrderNotification($order, 'order_creation_notification');
                     $mail = hikashop_get('class.mail');
                     if (!empty($order->mail->dst_email)) {
                         $mail->sendMail($order->mail);
                     }
                     $this->mail_success =& $mail->mail_success;
                     $config =& hikashop_config();
                     $emails = $config->get('order_creation_notification_email');
                     if (!empty($emails)) {
                         $mail = hikashop_get('class.mail');
                         if (!empty($order->customer)) {
                             $user_email = $order->customer->user_email;
                             $user_name = $order->customer->name;
                         } else {
                             $order->customer = new stdClass();
                         }
                         $order->customer->user_email = explode(',', $emails);
                         $order->customer->name = ' ';
                         $this->loadOrderNotification($order, 'order_admin_notification');
                         $order->mail->subject = trim($order->mail->subject);
                         if (empty($order->mail->subject)) {
                             $order->mail->subject = JText::sprintf('NEW_ORDER_SUBJECT', $order->order_number, HIKASHOP_LIVE);
                         }
                         if (!empty($user_email)) {
                             $mail->mailer->addReplyTo(array($user_email, $user_name));
                         }
                         if (!empty($order->mail->dst_email)) {
                             $mail->sendMail($order->mail);
                         }
                         if (!empty($user_email)) {
                             $order->customer->user_email = $user_email;
                             $order->customer->name = $user_name;
                         }
                     }
                 }
             } else {
                 $send_email = @$order->history->history_notified;
                 $dispatcher->trigger('onAfterOrderUpdate', array(&$order, &$send_email));
                 if ($send_email) {
                     if (empty($order->mail) && isset($order->order_status)) {
                         $this->loadOrderNotification($order, 'order_status_notification');
                     } else {
                         $order->mail->data =& $order;
                         $order->mail->mail_name = 'order_status_notification';
                     }
                     if (!empty($order->mail)) {
                         $mail = hikashop_get('class.mail');
                         if (!empty($order->mail->dst_email)) {
                             $mail->sendMail($order->mail);
                         }
                         $this->mail_success =& $mail->mail_success;
                     }
                 }
             }
         }
         return $order->order_id;
     }
     return false;
 }
Exemplo n.º 18
0
    function googleDirectCall($accounts, &$order, $currencyInfo)
    {
        $found = false;
        foreach ($accounts as $a) {
            if ($a->currency == $currencyInfo->currency_code && !empty($a->account_id)) {
                $account = $a->account_id;
                if (!preg_match('/UA-[0-9]{2,12}-[0-9]{1}/', $account)) {
                    continue;
                }
                $found = true;
                break;
            }
        }
        if (!$found) {
            return false;
        }
        $ip = hikashop_getIP();
        $uuid = round(rand() / getrandmax() * 0x7fffffff);
        $jconf = JFactory::getConfig();
        if (HIKASHOP_J30) {
            $siteName = $jconf->get('sitename');
        } else {
            $siteName = $jconf->getValue('config.sitename');
        }
        $data = array('v' => 1, 'tid' => $account, 'cid' => $uuid, 't' => 'transaction', 'ti' => $order->order_id, 'ta' => $siteName, 'tr' => round($order->order_full_price, 2), 'tt' => round($order->order_subtotal_no_vat + $order->order_shipping_tax + $order->order_discount_tax, 2), 'ts' => round($order->order_shipping_price, 2), 'cu' => $currencyInfo->currency_code);
        $this->googleDirectCallHit($data);
        foreach ($order->products as $product) {
            $data = array('v' => 1, 'tid' => $account, 'cid' => $uuid, 't' => 'item', 'ti' => $order->order_id, 'in' => strip_tags($product->order_product_name), 'ip' => $product->order_product_price + $product->order_product_tax, 'iq' => $product->order_product_quantity, 'ic' => $product->order_product_code, 'iv' => '', 'cu' => $currencyInfo->currency_code);
            $this->googleDirectCallHit($data);
        }
        if ($this->params->get('debug_mode')) {
            $data = 'Send transaction by direct call
IP: ' . $ip . '
URL: ' . hikashop_currentURL();
            $this->writeToLog($data);
        }
        return true;
    }
Exemplo n.º 19
0
 function cron()
 {
     $time = time();
     $config =& hikashop_config();
     $firstMessage = JText::sprintf('CRON_TRIGGERED', hikashop_getDate(time()));
     $this->messages[] = $firstMessage;
     if ($this->report) {
         hikashop_display($firstMessage, 'info');
     }
     if ($config->get('cron_next') > $time) {
         if ($config->get('cron_next') > $time + $config->get('cron_frequency')) {
             $newConfig = new stdClass();
             $newConfig->cron_next = $time + $config->get('cron_frequency');
             $config->save($newConfig);
         }
         $nottime = JText::sprintf('CRON_NEXT', hikashop_getDate($config->get('cron_next')));
         $this->messages[] = $nottime;
         if ($this->report) {
             hikashop_display($nottime, 'info');
         }
         $sendreport = $config->get('cron_sendreport');
         if ($sendreport == 1) {
             $mailer = hikashop_get('class.mail');
             $data = new stdClass();
             $data->report = implode('<br/>', $this->messages);
             $data->detailreport = '';
             $mail = $mailer->get('cron_report', $data);
             $mail->subject = JText::_($mail->subject);
             $receiverString = $config->get('cron_sendto');
             $receivers = explode(',', $receiverString);
             if (!empty($receivers)) {
                 foreach ($receivers as $oneReceiver) {
                     $mail->dst_email = $oneReceiver;
                     $mailer->sendMail($mail);
                 }
             }
         }
         return false;
     }
     $newConfig = new stdClass();
     $newConfig->cron_next = $config->get('cron_next') + $config->get('cron_frequency');
     if ($newConfig->cron_next <= $time || $newConfig->cron_next > $time + $config->get('cron_frequency')) {
         $newConfig->cron_next = $time + $config->get('cron_frequency');
     }
     $newConfig->cron_last = $time;
     $newConfig->cron_fromip = hikashop_getIP();
     $config->save($newConfig);
     JPluginHelper::importPlugin('hikashoppayment');
     JPluginHelper::importPlugin('hikashopshipping');
     JPluginHelper::importPlugin('hikashop');
     $dispatcher = JDispatcher::getInstance();
     $resultsTrigger = array();
     $dispatcher->trigger('onHikashopCronTrigger', array(&$resultsTrigger));
     if ($this->report) {
         foreach ($resultsTrigger as $message) {
             hikashop_display($message, 'info');
         }
     }
     $this->detailMessages = $resultsTrigger;
     return true;
 }
Exemplo n.º 20
0
Arquivo: user.php Projeto: rodhoff/MNW
 function register(&$checkout, $page = 'checkout', $redirect = true)
 {
     $config =& hikashop_config();
     $app = JFactory::getApplication();
     $user = clone JFactory::getUser();
     $authorize = JFactory::getACL();
     $simplified = $config->get('simplified_registration', 0);
     jimport('joomla.application.component.helper');
     $params = JComponentHelper::getParams('com_users');
     $display = $config->get('display_method', 0);
     if (!hikashop_level(1)) {
         $display = 0;
     }
     if ($display == 1) {
         $simplified = explode(',', $simplified);
         if ($page == 'checkout') {
             $formData = JRequest::getVar('data', array(), '', 'array');
             if (in_array(@$formData['register']['registration_method'], $simplified)) {
                 $simplified = $formData['register']['registration_method'];
             } else {
                 $simplified = array_shift($simplified);
             }
         } elseif ($page == 'user') {
             $simplified = array_shift($simplified);
         }
     }
     if ($simplified != 2) {
         if ($params->get('allowUserRegistration') == '0') {
             JError::raiseError(403, JText::_('Access Forbidden'));
             return false;
         }
         $newUsertype = $params->get('new_usertype');
         if (!$newUsertype) {
             if (!HIKASHOP_J16) {
                 $newUsertype = 'Registered';
             } else {
                 $newUsertype = 2;
             }
         }
         $userGroupRegistration = $config->get('user_group_registration', '');
         if (HIKASHOP_J16 && !empty($userGroupRegistration) && (int) $userGroupRegistration > 0) {
             $newUsertype = (int) $userGroupRegistration;
         }
     }
     $fieldClass = hikashop_get('class.field');
     $old = null;
     $this->registerData = $fieldClass->getInput('register', $old, !@$checkout->cart_update);
     $userData = $fieldClass->getInput('user', $old, !@$checkout->cart_update);
     if ($config->get('address_on_registration', 1)) {
         $addressData = $fieldClass->getInput('address', $old, !@$checkout->cart_update);
     } else {
         $addressData = new stdClass();
     }
     if ($this->registerData === false || $addressData === false || $userData === false) {
         return false;
     }
     if (empty($this->registerData->name)) {
         $this->registerData->name = @$addressData->address_firstname . (!empty($addressData->address_middle_name) ? ' ' . $addressData->address_middle_name : '') . (!empty($addressData->address_lastname) ? ' ' . $addressData->address_lastname : '');
         if (empty($this->registerData->name) && !empty($this->registerData->email)) {
             $parts = explode('@', $this->registerData->email);
             $this->registerData->name = array_shift($parts);
         }
     }
     if ($simplified == 1) {
         $this->registerData->username = $this->registerData->email;
         jimport('joomla.user.helper');
         $this->registerData->password = JUserHelper::genRandomPassword();
         $this->registerData->password2 = $this->registerData->password;
     } else {
         if ($simplified == 3) {
             $this->registerData->username = $this->registerData->email;
         }
     }
     if (!empty($this->registerData->username)) {
         $safeHtmlFilter = JFilterInput::getInstance(null, null, 1, 1);
         $this->registerData->username = $safeHtmlFilter->clean($this->registerData->username, 'USERNAME');
     }
     if ($simplified == 0 || $simplified == 3) {
         if (empty($this->registerData->password)) {
             $app->enqueueMessage(JText::_('JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED'));
             return false;
         }
         $minimumLength = (int) $params->get('minimum_length');
         $minimumIntegers = (int) $params->get('minimum_integers');
         $minimumSymbols = (int) $params->get('minimum_symbols');
         $minimumUppercase = (int) $params->get('minimum_uppercase');
         $language = JFactory::getLanguage();
         $language->load('com_users', JPATH_SITE, $language->getTag(), true);
         if (!empty($minimumLength)) {
             if (strlen((string) $this->registerData->password) < $minimumLength) {
                 $app->enqueueMessage(JText::plural('COM_USERS_MSG_PASSWORD_TOO_SHORT_N', $minimumLength), 'warning');
                 return false;
             }
         }
         if (!empty($minimumIntegers)) {
             $nInts = preg_match_all('/[0-9]/', $this->registerData->password, $imatch);
             if ($nInts < $minimumIntegers) {
                 $app->enqueueMessage(JText::plural('COM_USERS_MSG_NOT_ENOUGH_INTEGERS_N', $minimumIntegers), 'warning');
                 return false;
             }
         }
         if (!empty($minimumSymbols)) {
             $nsymbols = preg_match_all('[\\W]', $this->registerData->password, $smatch);
             if ($nsymbols < $minimumSymbols) {
                 $app->enqueueMessage(JText::plural('COM_USERS_MSG_NOT_ENOUGH_SYMBOLS_N', $minimumSymbols), 'warning');
                 return false;
             }
         }
         if (!empty($minimumUppercase)) {
             $nUppercase = preg_match_all("/[A-Z]/", $this->registerData->password, $umatch);
             if ($nUppercase < $minimumUppercase) {
                 $app->enqueueMessage(JText::plural('COM_USERS_MSG_NOT_ENOUGH_UPPERCASE_LETTERS_N', $minimumUppercase), 'warning');
                 return false;
             }
         }
     }
     $data = array('name' => @$this->registerData->name, 'username' => @$this->registerData->username, 'email' => @$this->registerData->email, 'password' => @$this->registerData->password, 'password2' => @$this->registerData->password2);
     $_SESSION['hikashop_main_user_data'] = $data;
     if (!empty($addressData->address_vat)) {
         $vat = hikashop_get('helper.vat');
         if (!$vat->isValid($addressData)) {
             $app->enqueueMessage(JText::_('VAT_NUMBER_NOT_VALID'));
             return false;
         }
     }
     if ($simplified != 2) {
         if (HIKASHOP_J16) {
             $data['groups'] = array($newUsertype => $newUsertype);
         }
         if (HIKASHOP_J25) {
             $jconfig = JFactory::getConfig();
             if (HIKASHOP_J30) {
                 $locale = $jconfig->get('language');
             } else {
                 $locale = $jconfig->getValue('config.language');
             }
             $data['params'] = array('site_language' => $locale, 'language' => $locale);
         }
         if (HIKASHOP_J25) {
             $language = JFactory::getLanguage();
             $language->load('lib_joomla', JPATH_SITE);
         }
         if (!$user->bind($data, 'usertype')) {
             JError::raiseError(500, $user->getError());
         }
         $user->set('id', 0);
         if (!HIKASHOP_J16) {
             $user->set('usertype', $newUsertype);
             $user->set('gid', $authorize->get_group_id('', $newUsertype, 'ARO'));
         }
         $date = JFactory::getDate();
         if (HIKASHOP_J30) {
             $user->set('registerDate', $date->toSql());
         } else {
             $user->set('registerDate', $date->toMySQL());
         }
         $useractivation = $params->get('useractivation');
         if ($useractivation > 0) {
             jimport('joomla.user.helper');
             if (HIKASHOP_J30) {
                 $user->set('activation', JApplication::getHash(JUserHelper::genRandomPassword()));
             } else {
                 $user->set('activation', JUtility::getHash(JUserHelper::genRandomPassword()));
             }
             $user->set('block', '1');
         }
         if (!$user->save()) {
             JError::raiseWarning('', JText::_($user->getError()));
             return false;
         }
         $this->get(false);
         $newUser = $this->get($user->id, 'cms');
     }
     if (!empty($newUser)) {
         $userData->user_id = $newUser->user_id;
     } elseif (!empty($user->id)) {
         $userData->user_cms_id = $user->id;
     } else {
         $userData->user_email = $this->registerData->email;
     }
     if ($config->get('affiliate_registration', 0)) {
         if (JRequest::getInt('hikashop_affiliate_checkbox', 0)) {
             $userData->user_partner_activated = 1;
             $this->registerData->user_partner_activated = 1;
         }
     }
     if ($simplified == 2) {
         $this->database->setQuery('SELECT * FROM ' . hikashop_table('user') . ' WHERE user_email = ' . $this->database->Quote($userData->user_email));
         $userInDB = $this->database->loadObject();
         if (@$userInDB->user_cms_id) {
             JError::raiseWarning('', JText::_('EMAIL_ADDRESS_ALREADY_USED'));
             return false;
         }
         $this->user_id = 0;
         if (isset($userInDB->user_id)) {
             $this->user_id = $userInDB->user_id;
         }
         if ($this->user_id) {
             $userInDB->user_created_ip = hikashop_getIP();
             $this->save($userInDB);
         } else {
             $this->user_id = $this->save($userData);
         }
         $query = 'UPDATE ' . hikashop_table('address') . ' AS a SET a.address_published=0 WHERE a.address_user_id=' . (int) $this->user_id . ' and a.address_published=1';
         $this->database->setQuery($query);
         $this->database->query();
         $cartClass = hikashop_get('class.cart');
         $cart = $cartClass->loadCart();
         if (!is_object($cart)) {
             $cart = new stdClass();
         }
         $cart->user_id = $this->user_id;
         $cartClass->save($cart);
     } else {
         $this->user_id = $this->save($userData);
     }
     if ($config->get('address_on_registration', 1)) {
         if (isset($addressData->address_id)) {
             unset($addressData->address_id);
         }
         $this->registerData->user_id = $this->user_id;
         if (!empty($addressData)) {
             $addressData->address_user_id = $this->user_id;
             $addressClass = hikashop_get('class.address');
             $this->address_id = $addressClass->save($addressData);
         }
     }
     if ($simplified != 2) {
         $mailClass = hikashop_get('class.mail');
         $this->registerData->user_data =& $userData;
         $this->registerData->address_data =& $addressData;
         $this->registerData->password = preg_replace('/[\\x00-\\x1F\\x7F]/', '', @$this->registerData->password);
         //Disallow control chars in the email
         $this->registerData->active = $useractivation;
         $vars = urlencode(base64_encode(json_encode(array('passwd' => $this->registerData->password, 'username' => $this->registerData->username))));
         global $Itemid;
         $url = '';
         if (!empty($Itemid)) {
             $url = '&Itemid=' . $Itemid;
         }
         $this->registerData->activation_url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&ctrl=checkout&task=activate&activation=' . $user->get('activation') . '&infos=' . $vars . '&page=' . $page . '&id=' . $this->user_id . $url . '&lang=' . @$_GET['lang'];
         $this->registerData->partner_url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&ctrl=affiliate&task=show' . $url;
         $mail = $mailClass->get('user_account', $this->registerData);
         if (!empty($this->registerData->email)) {
             $mail->subject = JText::sprintf($mail->subject, @$this->registerData->name, HIKASHOP_LIVE);
             $mail->dst_email =& $this->registerData->email;
             if (!empty($this->registerData->name)) {
                 $mail->dst_name =& $this->registerData->name;
             } else {
                 $mail->dst_name = '';
             }
             $mailClass->sendMail($mail);
             $mailSent = $mailClass->mail_success;
             if ($params->get('mail_to_admin', '0')) {
                 $mail = $mailClass->get('user_account_admin_notification', $this->registerData);
                 $mail->subject = JText::sprintf($mail->subject, @$this->registerData->name, HIKASHOP_LIVE);
                 if (empty($mail->dst_email)) {
                     $mail->dst_email = explode(',', $config->get('from_email'));
                 }
                 $mailClass->sendMail($mail);
             }
         }
         if ($useractivation > 0 && $redirect) {
             $lang = JFactory::getLanguage();
             $lang->load('com_user', JPATH_SITE);
             if ($mailSent) {
                 $message = JText::_('HIKA_REG_COMPLETE_ACTIVATE');
                 $app->enqueueMessage($message);
                 if ($page == 'checkout') {
                     $message = JText::_('WHEN_CLICKING_ACTIVATION');
                     $app->enqueueMessage($message);
                 }
             } else {
                 $message = JText::_('HIKA_MAIL_ISSUE_ACTIVATION');
                 $app->enqueueMessage($message);
             }
             $locale = strtolower(substr($lang->get('tag'), 0, 2));
             $app->redirect(hikashop_completeLink('checkout&task=activate_page&lang=' . $locale, false, true));
         } elseif (file_exists(JPATH_ROOT . DS . 'components' . DS . 'com_comprofiler' . DS . 'comprofiler.php')) {
             $newUser = $this->get($this->user_id);
             $this->addAndConfirmUserInCB($newUser, $addressData);
         }
     }
     return true;
 }
Exemplo n.º 21
0
 function onPaymentNotification(&$statuses)
 {
     global $Itemid;
     $this->url_itemid = empty($Itemid) ? '' : '&Itemid=' . $Itemid;
     if (JRequest::getVar('pbx', '') == 'user') {
         $app = JFactory::getApplication();
         $t = JRequest::getVar('t', '');
         switch ($t) {
             case 'refuse':
                 $url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&ctrl=order&task=cancel_order' . $this->url_itemid;
                 break;
             case 'cancel':
                 $url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&ctrl=order&task=cancel_order' . $this->url_itemid;
                 break;
             case 'confirm':
             default:
                 $url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&ctrl=checkout&task=after_end' . $this->url_itemid;
                 break;
         }
         $app->redirect($url);
         return;
     }
     $method_id = JRequest::getInt('notif_id', 0);
     $this->pluginParams($method_id);
     $this->payment_params =& $this->plugin_params;
     if (empty($this->payment_params)) {
         exit;
     }
     if (!empty($this->payment_params->ips)) {
         $ip = hikashop_getIP();
         $valid = false;
         $ips = explode(';', $this->payment_params->ips);
         foreach ($ips as $i) {
             $i = trim($i);
             if ($i == $ip) {
                 $valid = true;
                 break;
             }
         }
         if (!$valid) {
             $email = new stdClass();
             $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paybox') . ' ' . JText::sprintf('IP_NOT_VALID', '');
             $email->body = str_replace('<br/>', "\r\n", JText::sprintf('NOTIFICATION_REFUSED_FROM_IP', 'Paybox', $ip, implode("\r\n", $ips)));
             $action = false;
             $this->modifyOrder($action, null, null, $email);
             JError::raiseError(403, JText::_('Access Forbidden'));
             exit;
         }
     }
     if (function_exists('openssl_pkey_get_public') && (!isset($this->payment_params->signature) || !empty($this->payment_params->signature))) {
         $signature = JRequest::getVar('sign', '');
         if (!empty($signature)) {
             $signature = base64_decode(urldecode($signature));
         }
         $p_mt = JRequest::getVar('mt', '');
         $p_ref = JRequest::getVar('ref', '');
         $p_auth = JRequest::getVar('auth', '');
         $p_err = JRequest::getVar('err', '');
         $sign_data = 'mt=' . rawurlencode($p_mt) . '&ref=' . rawurlencode($p_ref) . '&auth=' . rawurlencode($p_auth) . '&err' . rawurlencode($p_err);
         $pubkeyid = openssl_pkey_get_public(dirname(__FILE__) . DS . 'paybox_pubkey.pem');
         if ($pubkeyid !== false) {
             $sign = openssl_verify($sign_data, $signature, $pubkeyid);
             openssl_free_key($pubkeyid);
             if ($sign !== 1) {
                 $ip = hikashop_getIP();
                 $email = new stdClass();
                 $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paybox') . ' ' . JText::_('SIGN_NOT_VALID');
                 $email->body = str_replace('<br/>', "\r\n", JText::sprintf('NOTIFICATION_REFUSED_FROM_IP', 'Paybox', $ip, JText::_('SIGN_NOT_VALID')));
                 $action = false;
                 $this->modifyOrder($action, null, null, $email);
                 JError::raiseError(403, JText::_('Access Forbidden'));
                 exit;
             }
         }
     }
     $order_id = (int) JRequest::getInt('ref', 0);
     $dbOrder = $this->getOrder($order_id);
     if (empty($dbOrder)) {
         exit;
     }
     if ($method_id != $dbOrder->order_payment_id) {
         exit;
     }
     $this->loadOrderData($dbOrder);
     $pbx_auth = JRequest::getVar('auth', '');
     $pbx_err = JRequest::getVar('err', '99999');
     $pbx_mt = JRequest::getInt('mt', 0);
     $history = new stdClass();
     $email = new stdClass();
     $url = HIKASHOP_LIVE . 'administrator/index.php?option=com_hikashop&ctrl=order&task=edit&order_id=' . $order_id . $this->url_itemid;
     $order_text = "\r\n" . JText::sprintf('NOTIFICATION_OF_ORDER_ON_WEBSITE', $dbOrder->order_number, HIKASHOP_LIVE);
     $order_text .= "\r\n" . str_replace('<br/>', "\r\n", JText::sprintf('ACCESS_ORDER_WITH_LINK', $url));
     $history->notified = 0;
     $history->amount = $pbx_mt / 100;
     $history->data = ob_get_clean();
     $price_check = (int) ($dbOrder->order_full_price * 100);
     if ($pbx_mt != $price_check) {
         $email->subject = JText::sprintf('NOTIFICATION_REFUSED_FOR_THE_ORDER', 'Paybox') . JText::_('INVALID_AMOUNT');
         $email->body = str_replace('<br/>', "\r\n", JText::sprintf('AMOUNT_RECEIVED_DIFFERENT_FROM_ORDER', 'Paybox', $history->amount, $price_check / 100 . $this->currency->currency_code)) . "\r\n\r\n" . $order_text;
         $this->modifyOrder($order_id, $this->payment_params->invalid_status, $history, $email);
         exit;
     }
     $completed = (int) $pbx_err == 0 && $pbx_err == '00000';
     if (!$completed) {
         $order_status = $this->payment_params->invalid_status;
         $history->data .= "\n\n" . 'payment with code ' . $pbx_auth;
         $payment_status = 'cancel';
         $email->body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Paybox', $payment_status)) . ' ' . JText::_('STATUS_NOT_CHANGED') . "\r\n\r\n" . $order_text;
         $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Paybox', $payment_status, $dbOrder->order_number);
         $this->modifyOrder($order_id, $order_status, $history, $email);
         exit;
     }
     $history->notified = 1;
     $order_status = $this->payment_params->verified_status;
     $payment_status = 'Accepted';
     $email->body = str_replace('<br/>', "\r\n", JText::sprintf('PAYMENT_NOTIFICATION_STATUS', 'Paybox', $payment_status)) . ' ' . JText::sprintf('ORDER_STATUS_CHANGED', $statuses[$order_status]) . "\r\n\r\n" . $order_text;
     $email->subject = JText::sprintf('PAYMENT_NOTIFICATION_FOR_ORDER', 'Paybox', $payment_status, $dbOrder->order_number);
     $this->modifyOrder($order_id, $order_status, $history, $email);
     exit;
 }
Exemplo n.º 22
0
 function onAfterOrderUpdate(&$order, &$send_email)
 {
     $order_type = isset($order->order_type) ? $order->order_type : $order->old->order_type;
     if ($order_type != 'sale' || empty($order->order_status)) {
         return;
     }
     if (!isset($order->order_shipping_params->EMC_params)) {
         return;
     }
     if (!$this->init()) {
         return false;
     }
     $config = hikashop_config();
     $order_confirmed_status = $config->get('order_confirmed_status', 'confirmed');
     $invoice_order_statuses = explode(',', $config->get('invoice_order_statuses', 'confirmed,shipped'));
     if (empty($invoice_order_statuses)) {
         $invoice_order_statuses = array('confirmed', 'shipped');
     }
     if ($order->order_status != $order_confirmed_status && !in_array($order->order_status, $invoice_order_statuses)) {
         return;
     }
     $order_shipping_params = isset($order->order_shipping_params) ? $order->order_shipping_params : $order->old->order_shipping_params;
     if (is_string($order_shipping_params)) {
         $order_shipping_params = unserialize($order_shipping_params);
     }
     $ref_exist = false;
     foreach ($order_shipping_params->EMC_params as $value) {
         if (!empty($value['reference'])) {
             $ref_exist = true;
         }
     }
     if ($ref_exist == true) {
         return;
     }
     $db = JFactory::getDBO();
     $orderClass = hikashop_get('class.order');
     $fullOrder = $orderClass->loadFullOrder($order->order_id, true, false);
     $tab_products = array();
     foreach ($fullOrder->order_shipping_params->EMC_params as $key => $value) {
         $data = array('products' => array());
         foreach ($fullOrder->products as $k => $product) {
             if ($product->order_product_shipping_method != 'envoimoinscher') {
                 continue;
             }
             if ($key == $product->order_product_shipping_id) {
                 $ids_products = explode('@', $product->order_product_shipping_id);
                 $warehouse_id = $ids_products[1];
                 $data['products'][] = $product;
             }
         }
         if (!empty($data['products'])) {
             $data['warehouse_id'] = $warehouse_id;
             $data['shipping_id'] = $ids_products[0];
             $tab_products[] = $data;
         }
     }
     $czone_code_to = @$fullOrder->shipping_address->address_country;
     $query = 'SELECT zone_id, zone_code_2 FROM ' . hikashop_table('zone') . ' WHERE zone_name_english = ' . $db->Quote($czone_code_to);
     $db->setQuery($query);
     $czone = $db->loadObject();
     $country_to = $czone->zone_code_2;
     if ($country_to == 'FX') {
         $country_to = 'FR';
     }
     $user_address_title = $fullOrder->shipping_address->address_title;
     $key = 'HIKA_TITLE_' . strtoupper($user_address_title);
     if ($key != JText::_($key)) {
         $user_address_title = JText::_($key);
     }
     $email = @$fullOrder->customer->user_email;
     $phone = @$fullOrder->shipping_address->address_telephone;
     foreach ($tab_products as $key => $value) {
         $shipping_ids = explode('-', $value['shipping_id']);
         $this->pluginParams($shipping_ids[0]);
         if ($this->plugin_params->make_order == 0) {
             continue;
         }
         if ($this->plugin_params->destination_type == 'res' || $this->plugin_params->destination_type == 'auto' && empty($fullOrder->shipping_address->address_company)) {
             $user_type = 'particulier';
         } else {
             $user_type = 'entreprise';
         }
         if (empty($email) || empty($phone)) {
             return;
         }
         $to = array('pays' => $country_to, 'code_postal' => $fullOrder->shipping_address->address_post_code, 'type' => $user_type, 'ville' => $fullOrder->shipping_address->address_city, 'adresse' => $fullOrder->shipping_address->address_street, 'civilite' => $user_address_title, 'prenom' => $fullOrder->shipping_address->address_firstname, 'nom' => $fullOrder->shipping_address->address_lastname, 'email' => $email, 'tel' => $phone);
         $admin_address_title = $this->plugin_params->sender_civility;
         $key = 'HIKA_TITLE_' . strtoupper($admin_address_title);
         if ($key != JText::_($key)) {
             $admin_address_title = JText::_($key);
         }
         $czone_code_from = @$this->plugin_params->sender_country;
         $query = 'SELECT zone_id, zone_code_2 FROM ' . hikashop_table('zone') . ' WHERE zone_namekey = ' . $db->Quote($czone_code_from);
         $db->setQuery($query);
         $czone = $db->loadObject();
         $country_from = $czone->zone_code_2;
         if ($country_from == 'FX') {
             $country_from = 'FR';
         }
         $from = array('pays' => $country_from, 'code_postal' => $this->plugin_params->sender_postcode, 'type' => $this->plugin_params->type, 'ville' => $this->plugin_params->sender_city, 'adresse' => $this->plugin_params->sender_address, 'civilite' => $admin_address_title, 'prenom' => $this->plugin_params->sender_firstname, 'nom' => $this->plugin_params->sender_lastname, 'email' => $this->plugin_params->sender_email, 'tel' => $this->plugin_params->sender_phone);
         if ($this->plugin_params->type == 'entreprise') {
             $from['societe'] = $this->plugin_params->sender_company;
         }
         $code = (int) $this->plugin_params->product_category;
         $shipping = explode(' / ', $shipping_ids[1]);
         $service = $shipping[1];
         $shipping = $value['shipping_id'] . '@' . $value['warehouse_id'];
         foreach ($fullOrder->order_shipping_params->EMC_params as $k => $v) {
             if ($k == $shipping) {
                 $dropoff = explode('<br/>', $v['drop_off']);
                 $pickup = explode('<br/>', $v['pick_up']);
                 $ope = $v['code'];
             }
         }
         $sending_type = strtolower($this->plugin_params->sending_type);
         $collection = $dropoff[0];
         $delivery = $pickup[0];
         $quotInfo = array('collecte' => date('Y-m-d'), 'delai' => 'aucun', 'code_contenu' => $code, 'type_emballage.emballage' => 1, 'operateur' => $ope, 'raison' => 'sale', 'service' => $service, 'collection_type' => $collection, 'delivery_type' => $delivery, 'depot.pointrelais' => '', 'retrait.pointrelais' => '', $sending_type . '.description' => '');
         if ($collection == 'POST_OFFICE' || $collection == 'DROPOFF_POINT') {
             $quotInfo['depot.pointrelais'] = $dropoff[2];
         }
         if ($delivery == 'PICKUP_POINT') {
             $quotInfo['retrait.pointrelais'] = $pickup[2];
         }
         if (isset($this->plugin_params->start_availability) && !empty($this->plugin_params->start_availability)) {
             $quotInfo['disponibilite.HDE'] = $this->plugin_params->start_availability;
         }
         if (isset($this->plugin_params->end_availability) && !empty($this->plugin_params->end_availability)) {
             $quotInfo['disponibilite.HLE'] = $this->plugin_params->end_availability;
         }
         foreach ($value['products'] as $product) {
             $quotInfo[$sending_type . '.description'] .= '  ' . $product->order_product_name;
         }
         $productClass = hikashop_get('class.product');
         $newOrder = new stdClass();
         $i = 0;
         foreach ($value['products'] as $p) {
             $product = $productClass->get($p->product_id);
             if ($product->product_parent_id != 0) {
                 $parent = $productClass->get($product->product_parent_id);
                 $newOrder->products[$i] = $parent;
                 $newOrder->products[$i]->variants[0] = $product;
                 if ($product->product_width == 0 && $product->product_length == 0) {
                     $product->product_width = $parent->product_width;
                     $product->product_length = $parent->product_length;
                     $product->product_height = $parent->product_height;
                 }
                 $product->cart_product_quantity = $p->order_product_quantity;
                 $product->product_weight_orig = $parent->product_weight;
                 $product->product_weight_unit_orig = $parent->product_weight_unit;
                 $product->product_dimension_unit_orig = $parent->product_dimension_unit;
                 $product->prices[0] = new stdClass();
                 $product->prices[0]->unit_price = new stdClass();
                 $product->prices[0]->unit_price->price_value_with_tax = $p->order_product_price + $p->order_product_tax;
             } else {
                 $newOrder->products[$i] = $product;
                 $newOrder->products[$i]->cart_product_quantity = $p->order_product_quantity;
                 $newOrder->products[$i]->product_weight_orig = $newOrder->products[$i]->product_weight;
                 $newOrder->products[$i]->product_weight_unit_orig = $newOrder->products[$i]->product_weight_unit;
                 $newOrder->products[$i]->product_dimension_unit_orig = $newOrder->products[$i]->product_dimension_unit;
                 $newOrder->products[$i]->prices[0] = new stdClass();
                 $newOrder->products[$i]->prices[0]->unit_price = new stdClass();
                 $newOrder->products[$i]->prices[0]->unit_price->price_value_with_tax = $p->order_product_price + $p->order_product_tax;
             }
             $i++;
         }
         $data = $this->getData(null, $this, $newOrder, $sending_type, true);
         $total_price = (int) $data[0]["price"];
         unset($data[0]);
         $quotInfo[$sending_type . '.valeur'] = $total_price;
         $cotCl = new Env_Quotation(array('user' => $this->plugin_params->emc_login, 'pass' => $this->plugin_params->emc_password, 'key' => $this->plugin_params->api_key));
         $cotCl->setEnv($this->plugin_params->environment);
         $config = hikashop_config();
         $contentCl->setPlatformParams('hikashop', $config->get('version'), $config->get('version'));
         $cotCl->setPerson('expediteur', $from);
         $cotCl->setPerson('destinataire', $to);
         $cotCl->setType($sending_type, $data);
         if ($country_to != $country_from) {
             $infos_products = array();
             $i = 1;
             foreach ($newOrder->products as $product) {
                 $infos_products[$i] = array();
                 if (isset($product->variants)) {
                     $nb = $product->variants[0]->cart_product_quantity;
                     $price = $product->variants[0]->prices[0]->unit_price->price_value_with_tax;
                     $weight = $product->variants[0]->product_weight_orig;
                 } else {
                     $nb = $product->cart_product_quantity;
                     $price = $product->prices[0]->unit_price->price_value_with_tax;
                     $weight = $product->product_weight_orig;
                 }
                 $infos_products[$i]["description_en"] = $product->product_name;
                 $infos_products[$i]["description_fr"] = $product->product_name;
                 $infos_products[$i]["nombre"] = $nb;
                 $infos_products[$i]["valeur"] = $price;
                 $infos_products[$i]["origine"] = $country_from;
                 $infos_products[$i]["poids"] = $weight;
                 $i++;
             }
             $cotCl->setProforma($infos_products);
         }
         $orderPassed = $cotCl->makeOrder($quotInfo, true);
         if (!$cotCl->curlError && !$cotCl->respError) {
             if ($orderPassed) {
                 $fullOrder->order_shipping_params->EMC_params[$shipping]['reference'] = $cotCl->order['ref'];
                 $update_order = new stdClass();
                 $update_order->order_id = $fullOrder->order_id;
                 $update_order->order_shipping_params = $fullOrder->order_shipping_params;
                 $orderClass->save($update_order);
             }
         } elseif ($cotCl->respError) {
             $update_history = new stdClass();
             $update_history->history_order_id = $fullOrder->order_id;
             $update_history->history_created = time();
             $update_history->history_notified = 0;
             $update_history->history_ip = hikashop_getIP();
             $update_history->history_reason = 'EnvoiMoinsCher Error';
             $update_history->history_data = '';
             foreach ($cotCl->respErrorsList as $m => $message) {
                 $update_history->history_data .= $message['message'] . '<br/>';
             }
             $historyClass = hikashop_get('class.history');
             $historyClass->save($update_history);
         } else {
             $update_history = new stdClass();
             $update_history->history_order_id = $fullOrder->order_id;
             $update_history->history_created = time();
             $update_history->history_notified = 0;
             $update_history->history_ip = hikashop_getIP();
             $update_history->history_reason = 'EnvoiMoinsCher Error';
             $update_history->history_data = $cotCl->curlErrorText;
             $historyClass = hikashop_get('class.history');
             $historyClass->save($update_history);
         }
     }
 }