<?php
/**
 * @package admin
 * @copyright Copyright 2003-2006 Zen Cart Development Team
 * @copyright Portions Copyright 2003 osCommerce
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: orders.php 5426 2006-12-28 14:58:57Z drbyte $
 */
  
require('includes/application_top.php');

  require(
DIR_WS_CLASSES 'currencies.php');
  
$currencies = new currencies();

  include(
DIR_WS_CLASSES 'order.php');

  
// prepare order-status pulldown list
  
$orders_statuses = array();
  
$orders_status_array = array();
  
$orders_status $db->Execute("select orders_status_id, orders_status_name
                                 from " 
TABLE_ORDERS_STATUS "
                                 where language_id = '" 
. (int)$_SESSION['languages_id'] . "'");
  while (!
$orders_status->EOF) {
    
$orders_statuses[] = array('id' => $orders_status->fields['orders_status_id'],
                               
'text' => $orders_status->fields['orders_status_name'] . ' [' $orders_status->fields['orders_status_id'] . ']');
    
$orders_status_array[$orders_status->fields['orders_status_id']] = $orders_status->fields['orders_status_name'];
    
$orders_status->MoveNext();
  }

  
$action = (isset($_GET['action']) ? $_GET['action'] : '');

  if (isset(
$_GET['oID'])) {
    
$oID zen_db_prepare_input($_GET['oID']);

    
$orders $db->Execute("select orders_id from " TABLE_ORDERS "
                            where orders_id = '" 
. (int)$oID "'");
    
$order_exists true;
    if (
$orders->RecordCount() <= 0) {
      
$order_exists false;
      if (
$action != ''$messageStack->add(sprintf(ERROR_ORDER_DOES_NOT_EXIST$oID), 'error');
    }
  }

  if (
zen_not_null($action) && $order_exists == true) {
    switch (
$action) {
      case 
'edit':
      
// reset single download to on
        
if ($_GET['download_reset_on'] > 0) {
          
// adjust download_maxdays based on current date
          
$check_status $db->Execute("select customers_name, customers_email_address, orders_status,
                                      date_purchased from " 
TABLE_ORDERS "
                                      where orders_id = '" 
$_GET['oID'] . "'");
          
$zc_max_days date_diff($check_status->fields['date_purchased'], date('Y-m-d H:i:s'time())) + DOWNLOAD_MAX_DAYS;

          
$update_downloads_query "update " TABLE_ORDERS_PRODUCTS_DOWNLOAD " set download_maxdays='" $zc_max_days "', download_count='" DOWNLOAD_MAX_COUNT "' where orders_id='" $_GET['oID'] . "' and orders_products_download_id='" $_GET['download_reset_on'] . "'";
          
$db->Execute($update_downloads_query);
          unset(
$_GET['download_reset_on']);

          
$messageStack->add_session(SUCCESS_ORDER_UPDATED_DOWNLOAD_ON'success');
          
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        }
      
// reset single download to off
        
if ($_GET['download_reset_off'] > 0) {
          
// adjust download_maxdays based on current date
//          $update_downloads_query = "update " . TABLE_ORDERS_PRODUCTS_DOWNLOAD . " set download_maxdays='0', download_count='0' where orders_id='" . $_GET['oID'] . "' and orders_products_download_id='" . $_GET['download_reset_off'] . "'";
          
$update_downloads_query "update " TABLE_ORDERS_PRODUCTS_DOWNLOAD " set download_count='0' where orders_id='" $_GET['oID'] . "' and orders_products_download_id='" $_GET['download_reset_off'] . "'";
          unset(
$_GET['download_reset_off']);
          
$db->Execute($update_downloads_query);

          
$messageStack->add_session(SUCCESS_ORDER_UPDATED_DOWNLOAD_OFF'success');
          
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        }
      break;
      case 
'update_order':
        
// demo active test
        
if (zen_admin_demo()) {
          
$_GET['action']= '';
          
$messageStack->add_session(ERROR_ADMIN_DEMO'caution');
          
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        }
        
$oID zen_db_prepare_input($_GET['oID']);
        
$status zen_db_prepare_input($_POST['status']);
        
$comments zen_db_prepare_input($_POST['comments']);

        
$order_updated false;
        
$check_status $db->Execute("select customers_name, customers_email_address, orders_status,
                                      date_purchased from " 
TABLE_ORDERS "
                                      where orders_id = '" 
. (int)$oID "'");

        if ( (
$check_status->fields['orders_status'] != $status) || zen_not_null($comments)) {
          
$db->Execute("update " TABLE_ORDERS "
                        set orders_status = '" 
zen_db_input($status) . "', last_modified = now()
                        where orders_id = '" 
. (int)$oID "'");

          
$customer_notified '0';
          if (isset(
$_POST['notify']) && ($_POST['notify'] == 'on')) {
            
$notify_comments '';
            if (isset(
$_POST['notify_comments']) && ($_POST['notify_comments'] == 'on') && zen_not_null($comments)) {
              
$notify_comments EMAIL_TEXT_COMMENTS_UPDATE $comments "\n\n";
            }


//send emails
      
$message STORE_NAME "\n" EMAIL_SEPARATOR "\n" .
      
EMAIL_TEXT_ORDER_NUMBER ' ' $oID "\n\n" .
      
EMAIL_TEXT_INVOICE_URL ' ' zen_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO'order_id=' $oID'SSL') . "\n\n" .
      
EMAIL_TEXT_DATE_ORDERED ' ' zen_date_long($check_status->fields['date_purchased']) . "\n\n" .
      
strip_tags($notify_comments) .
      
EMAIL_TEXT_STATUS_UPDATED sprintf(EMAIL_TEXT_STATUS_LABEL$orders_status_array[$status] ) .
      
EMAIL_TEXT_STATUS_PLEASE_REPLY;

      
$html_msg['EMAIL_CUSTOMERS_NAME']    = $check_status->fields['customers_name'];
      
$html_msg['EMAIL_TEXT_ORDER_NUMBER'] = EMAIL_TEXT_ORDER_NUMBER ' ' $oID;
      
$html_msg['EMAIL_TEXT_INVOICE_URL']  = '<a href="' zen_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO'order_id=' $oID'SSL') .'">'.str_replace(':','',EMAIL_TEXT_INVOICE_URL).'</a>';
      
$html_msg['EMAIL_TEXT_DATE_ORDERED'] = EMAIL_TEXT_DATE_ORDERED ' ' zen_date_long($check_status->fields['date_purchased']);
      
$html_msg['EMAIL_TEXT_STATUS_COMMENTS'] = nl2br($notify_comments);
      
$html_msg['EMAIL_TEXT_STATUS_UPDATED'] = str_replace('\n',''EMAIL_TEXT_STATUS_UPDATED);
      
$html_msg['EMAIL_TEXT_STATUS_LABEL'] = str_replace('\n',''sprintf(EMAIL_TEXT_STATUS_LABEL$orders_status_array[$status] ));
      
$html_msg['EMAIL_TEXT_NEW_STATUS'] = $orders_status_array[$status];
      
$html_msg['EMAIL_TEXT_STATUS_PLEASE_REPLY'] = str_replace('\n',''EMAIL_TEXT_STATUS_PLEASE_REPLY);

            
zen_mail($check_status->fields['customers_name'], $check_status->fields['customers_email_address'], EMAIL_TEXT_SUBJECT ' #' $oID$messageSTORE_NAMEEMAIL_FROM$html_msg'order_status');

            
$customer_notified '1';
//send extra emails
            
if (SEND_EXTRA_ORDERS_STATUS_ADMIN_EMAILS_TO_STATUS == '1' and SEND_EXTRA_ORDERS_STATUS_ADMIN_EMAILS_TO != '') {
              
zen_mail(''SEND_EXTRA_ORDERS_STATUS_ADMIN_EMAILS_TOSEND_EXTRA_ORDERS_STATUS_ADMIN_EMAILS_TO_SUBJECT ' ' EMAIL_TEXT_SUBJECT ' #' $oID$messageSTORE_NAMEEMAIL_FROM$html_msg'order_status_extra');
            }
          }

          
$db->Execute("insert into " TABLE_ORDERS_STATUS_HISTORY "
                      (orders_id, orders_status_id, date_added, customer_notified, comments)
                      values ('" 
. (int)$oID "',
                      '" 
zen_db_input($status) . "',
                      now(),
                      '" 
zen_db_input($customer_notified) . "',
                      '" 
zen_db_input($comments)  . "')");

          
$order_updated true;
        }

        if (
$order_updated == true) {
         if (
$status == DOWNLOADS_ORDERS_STATUS_UPDATED_VALUE) {
            
// adjust download_maxdays based on current date
            
$zc_max_days date_diff($check_status->fields['date_purchased'], date('Y-m-d H:i:s'time())) + DOWNLOAD_MAX_DAYS;

            
$update_downloads_query "update " TABLE_ORDERS_PRODUCTS_DOWNLOAD " set download_maxdays='" $zc_max_days "', download_count='" DOWNLOAD_MAX_COUNT "' where orders_id='" . (int)$oID "'";
            
$db->Execute($update_downloads_query);
          }
          
$messageStack->add_session(SUCCESS_ORDER_UPDATED'success');
        } else {
          
$messageStack->add_session(WARNING_ORDER_NOT_UPDATED'warning');
        }

        
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        break;
      case 
'deleteconfirm':
        
// demo active test
        
if (zen_admin_demo()) {
          
$_GET['action']= '';
          
$messageStack->add_session(ERROR_ADMIN_DEMO'caution');
          
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('oID''action')), 'NONSSL'));
        }
        
$oID zen_db_prepare_input($_GET['oID']);

        
zen_remove_order($oID$_POST['restock']);

        
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('oID''action')), 'NONSSL'));
        break;
      case 
'delete_cvv':
        
$delete_cvv $db->Execute("update " TABLE_ORDERS " set cc_cvv = '" TEXT_DELETE_CVV_REPLACEMENT "' where orders_id = '" . (int)$_GET['oID'] . "'");
        
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        break;
      case 
'mask_cc':
        
$result  $db->Execute("select cc_number from " TABLE_ORDERS " where orders_id = '" . (int)$_GET['oID'] . "'");
        
$old_num $result->fields['cc_number'];
        
$new_num substr($old_num04) . str_repeat('*', (strlen($old_num) - 8)) . substr($old_num, -4);
        
$mask_cc $db->Execute("update " TABLE_ORDERS " set cc_number = '" $new_num "' where orders_id = '" . (int)$_GET['oID'] . "'");
        
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        break;

      case 
'doRefund':
        
$order = new order($oID);
        if (
$order->info['payment_module_code']) {
          if (
file_exists(DIR_FS_CATALOG_MODULES 'payment/' $order->info['payment_module_code'] . '.php')) {
            require_once(
DIR_FS_CATALOG_MODULES 'payment/' $order->info['payment_module_code'] . '.php');
            require_once(
DIR_FS_CATALOG_LANGUAGES $_SESSION['language'] . '/modules/payment/' $order->info['payment_module_code'] . '.php');
            
$module = new $order->info['payment_module_code'];
            if (
method_exists($module'_doRefund')) {
              
$module->_doRefund($oID);
            }
          }
        }
        
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        break;
      case 
'doAuth':
        
$order = new order($oID);
        if (
$order->info['payment_module_code']) {
          if (
file_exists(DIR_FS_CATALOG_MODULES 'payment/' $order->info['payment_module_code'] . '.php')) {
            require_once(
DIR_FS_CATALOG_MODULES 'payment/' $order->info['payment_module_code'] . '.php');
            require_once(
DIR_FS_CATALOG_LANGUAGES $_SESSION['language'] . '/modules/payment/' $order->info['payment_module_code'] . '.php');
            
$module = new $order->info['payment_module_code'];
            if (
method_exists($module'_doAuth')) {
              
$module->_doAuth($oID$order->info['total'], $order->info['currency']);
            }
          }
        }
        
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        break;
      case 
'doCapture':
        
$order = new order($oID);
        if (
$order->info['payment_module_code']) {
          if (
file_exists(DIR_FS_CATALOG_MODULES 'payment/' $order->info['payment_module_code'] . '.php')) {
            require_once(
DIR_FS_CATALOG_MODULES 'payment/' $order->info['payment_module_code'] . '.php');
            require_once(
DIR_FS_CATALOG_LANGUAGES $_SESSION['language'] . '/modules/payment/' $order->info['payment_module_code'] . '.php');
            
$module = new $order->info['payment_module_code'];
            if (
method_exists($module'_doCapt')) {
              
$module->_doCapt($oID'Complete'$order->info['total'], $order->info['currency']);
            }
          }
        }
        
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        break;
      case 
'doVoid':
        
$order = new order($oID);
        if (
$order->info['payment_module_code']) {
          if (
file_exists(DIR_FS_CATALOG_MODULES 'payment/' $order->info['payment_module_code'] . '.php')) {
            require_once(
DIR_FS_CATALOG_MODULES 'payment/' $order->info['payment_module_code'] . '.php');
            require_once(
DIR_FS_CATALOG_LANGUAGES $_SESSION['language'] . '/modules/payment/' $order->info['payment_module_code'] . '.php');
            
$module = new $order->info['payment_module_code'];
            if (
method_exists($module'_doVoid')) {
              
$module->_doVoid($oID);
            }
          }
        }
        
zen_redirect(zen_href_link(FILENAME_ORDERSzen_get_all_get_params(array('action')) . 'action=edit''NONSSL'));
        break;
    }
  }

/**
 * Handle XML output
 * 
 */
function convertChar($str){
  
$aryToConvert=array(  " & "=>" &amp; ",
                            
"&eacute;"=>"é",
                            
"&egrave;"=>"è",
                            
"&agrave;"=>"à",
                            
"&nbsp;"=>" "
                                
);
    foreach(
$aryToConvert as $s=>$r){
        
$str=str_ireplace($s,$r,$str);
    }
    return 
$str;
}
    
$order = new order($oID);
    
$charset=CHARSET;
    
$adr=zen_address_format($order->customer['format_id'], $order->customer1'''</line><line>');
    
$xmlProd=$xmlTot=$xml="";
    
//cleanup
    
foreach($order->totals as $key=>$total){
        
$txt=$total['text'];
        
$txt=str_replace('&nbsp;',' ',$txt);
        
//echo $txt;
        
$order->totals[$key]['text']=$txt;
    }
    
//cleanup delivery
    
foreach($order->delivery as $key=>$val){
        
$txt=convertChar($val);
        
$order->delivery[$key]=$val;
    }
    
//cleanup customer
    
foreach($order->customer as $key=>$val){
        
$txt=convertChar($val);
        
$order->customer[$key]=$val;
    }
    
//cleanup billing
    
foreach($order->billing as $key=>$val){
        
$txt=convertChar($val);
        
$order->billing[$key]=$val;
    }
    
//products
    
foreach($order->products as $key=>$prod){
        
$price=round($prod['price'],2);
        
$one=round($prod['onetime_charges'],2);
        
$final=round($prod['final_price'],2);
        
$tax=round($prod['tax'],2);
        
$xmlProd.=<<<XML
<product id="{$prod['id']}">
    <qty>
{$prod['qty']}</qty>
    <name>
{$prod['name']}</name>
    <tax>$tax</tax>
    <price>$price</price>
    <onetime_charges>$one</onetime_charges>
    <final_price>$final</final_price>
    <free>
{$prod['product_is_free']}</free>
</product>
XML;
    }
    
    
//totals
    
foreach($order->totals as $key=>$tot){
        list(
$cur$amnt)=explode(" ",$tot['text']);
        
$amnt=str_replace('\'','',$amnt);
        
$xmlTot.=<<<XML
<total class="{$tot['class']}">
    <title>
{$tot['title']}</title>
    <amount currency="$cur">$amnt</amount>
</total>
XML;
    }
    
    
$dt=$order->info['date_purchased'];
    list(
$date,$time)=explode(" ",$dt);
    list(
$Y,$M,$D)=explode("-",$date);
    list(
$h,$m,$s)=explode(":",$time);
    
$dt=<<<XML
    <literal> 
        <europe>$D.$M.$Y $h:$m:$s</europe>
        <us>$dt</us>
    </literal>
    <year>$Y</year>
    <month>$M</month>
    <day>$D</day>
    <hour>$h</hour>
    <min>$m</min>
    <sec>$s</sec>
XML;
    
header('content-type: text/xml');
    
$xml=<<<XML
<?xml version="1.0" encoding="$charset"?>
<!-- <?xml-stylesheet type="text/xsl" href="order.xsl" ?> -->
<DATA>
    <adresses>
        <adress type="delivery" id="
{$order->delivery['id']}">
            <name>
{$order->delivery['name']}</name>
            <company>
{$order->delivery['company']}</company>
            <adress>
{$order->delivery['street_address']}</adress>
            <cp>
{$order->delivery['postcode']}</cp>
            <suburb>
{$order->delivery['suburb']}</suburb>
            <city>
{$order->delivery['city']}</city>
            <state>
{$order->delivery['state']}</state>
            <country>
{$order->delivery['country']}</country>
            <phone>
{$order->delivery['telephone']}</phone>
            <email>
{$order->delivery['email_address']}</email>
            <format_id>
{$order->delivery['format_id']}</format_id>
        </adress>
        
        <adress type="billing">
            <name>
{$order->billing['name']}</name>
            <company>
{$order->billing['company']}</company>
            <adress>
{$order->billing['street_address']}</adress>
            <cp>
{$order->billing['postcode']}</cp>
            <suburb>
{$order->billing['suburb']}</suburb>
            <city>
{$order->billing['city']}</city>
            <state>
{$order->billing['state']}</state>
            <country>
{$order->billing['country']}</country>
            <phone>
{$order->billing['telephone']}</phone>
            <email>
{$order->billing['email_address']}</email>
            <format_id>
{$order->billing['format_id']}</format_id>
        </adress>
        
        <adress type="customer" id="
{$order->customer['id']}">
            <name>
{$order->customer['name']}</name>
            <company>
{$order->customer['company']}</company>
            <adress>
{$order->customer['street_address']}</adress>
            <cp>
{$order->customer['postcode']}</cp>
            <suburb>
{$order->customer['suburb']}</suburb>
            <city>
{$order->customer['city']}</city>
            <state>
{$order->customer['state']}</state>
            <country>
{$order->customer['country']}</country>
            <phone>
{$order->customer['telephone']}</phone>
            <email>
{$order->customer['email_address']}</email>
            <format_id>
{$order->customer['format_id']}</format_id>
        </adress>
    </adresses>
    <customer id="
{$order->customer['id']}">
        <adress>
            <line>$adr</line>
        </adress>
    </customer>
    <order id="$oID">
        <currency>
{$order->info['currency']}</currency>
        <payment code="
{$order->info['payment_module_code']}">{$order->info['payment_method']}</payment>
        <shipping code="
{$order->info['shipping_module_code']}">{$order->info['shipping_method']}</shipping>
        <coupon>
{$order->info['coupon_code']}</coupon>
        <date type="purchase">$dt</date>
        <total>
{$order->info['total']}</total>
        <customer_ip>
{$order->info['ip_address']}</customer_ip>
    </order>
    <totals>
        $xmlTot
    </totals>
    <products>
        $xmlProd
    </products>
</DATA>
XML;
$xsl = new XSLTProcessor();
$doc = new DOMDocument();
$doc->load('order.xsl');
$xsl->importStyleSheet($doc);
$doc->loadXML($xml);
$xml=$xsl->transformToXML($doc);
file_put_contents("odt/content.xml"$xml);
@
unlink('order.odt');
$createOdt="cd odt;zip -r ../order.odt *";
$out=shell_exec($createOdt);
header("location:order.odt");
exit();
//----------------------------------
?>