Page MenuHomeIn-Portal Phabricator

in-commerce
No OneTemporary

File Metadata

Created
Wed, Feb 26, 9:51 PM

in-commerce

This file is larger than 256 KB, so syntax highlighting was skipped.
Index: branches/5.2.x/units/affiliate_plans_items/affiliate_plans_items_config.php
===================================================================
--- branches/5.2.x/units/affiliate_plans_items/affiliate_plans_items_config.php (revision 14088)
+++ branches/5.2.x/units/affiliate_plans_items/affiliate_plans_items_config.php (revision 14089)
@@ -1,119 +1,126 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'api',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'AffiliatePlansItemsEventHandler','file'=>'affiliate_plans_items_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'AffiliatePlansItemsTagProcessor','file'=>'affiliate_plans_items_tag_processor.php','build_event'=>'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array(
Array(
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => '#PARENT#',
'HookToSpecial' => '',
'HookToEvent' => Array('OnAfterItemDelete'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnDeleteDiscountedItem',
),
),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'IDField' => 'AffiliateItemId',
'StatusField' => Array('Status'),
'TitleField' => 'Name',
'TableName' => TABLE_PREFIX.'AffiliatePlansItems',
'CalculatedFields' => Array(
'' => Array(
'ProductId' => 'p.ProductId',
'ItemName' => 'IF(p.Name IS NULL,c.Name,p.l1_Name)',
'SKU' => 'p.SKU',
'Weight' => 'p.Weight',
'CreatedOn' => 'p.CreatedOn',
'BackOrderDate' => 'p.BackOrderDate',
'Status' => 'p.Status',
'CategoryId' => 'c.CategoryId',
),
),
'ListSQLs' => Array( ''=>' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'Products p ON %1$s.ItemResourceId = p.ResourceId
LEFT JOIN '.TABLE_PREFIX.'Category c ON %1$s.ItemResourceId = c.ResourceId',
), // key - special, value - list select sql
'ItemSQLs' => Array( ''=>'SELECT * FROM %s',
),
'ForeignKey' => 'AffiliatePlanId',
'ParentTableKey' => 'AffiliatePlanId',
'ParentPrefix' => 'ap',
'AutoDelete' => true,
'AutoClone' => true,
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('ItemName' => 'asc'),
)
),
'Fields' => Array (
'AffiliateItemId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'AffiliatePlanId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'ItemResourceId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'ItemType' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array ( 1 => 'la_Product', 2 => 'la_Category', 0 => 'la_WholeOrder' ), 'not_null' => 1, 'default' => 1, ),
),
'VirtualFields' => Array(
- 'ProductId' => Array(),
- 'ItemName' => Array(),
- 'SKU' => Array(),
- 'Weight' => Array('type'=>'float', 'min_value_exc'=>0, 'formatter' => 'kFormatter', 'format' => '%0.2f'),
- 'CreatedOn' => Array('formatter' => 'kDateFormatter', 'default' => '#NOW#'),
- 'BackOrderDate' => Array('formatter' => 'kDateFormatter', 'default' => NULL),
+ 'ProductId' => Array('type' => 'int', 'default' => 0),
+ 'ItemName' => Array('type' => 'string', 'default' => ''),
+ 'SKU' => Array('type' => 'string', 'default' => ''),
+ 'Weight' => Array('type' => 'float', 'min_value_exc' => 0, 'formatter' => 'kFormatter', 'format' => '%0.2f', 'default' => NULL),
+ 'CreatedOn' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
+ 'BackOrderDate' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
+ 'Status' => Array (
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1,
+ 'default' => 2,
+ ),
+ 'CategoryId' => Array ('type' => 'int', 'default' => 0),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array('default'=>'icon16_entire_order.gif'),
'Fields' => Array(
'ItemType' => Array( 'title'=>'la_col_ItemType', 'data_block' => 'grid_checkbox_td' ),
),
),
'AffiliatePlansItems' => Array(
'Icons' => Array(
'default' => 'icon16_product.png',
0 => 'icon16_product_disabled.png',
1 => 'icon16_product.png',
2 => 'icon16_product_pending.png',
),
'Fields' => Array(
'ProductId' => Array( 'title'=>'la_col_Id', 'data_block' => 'grid_item_checkbox_td' ),
'ItemName' => Array( 'title'=>'la_col_ItemName' ),
'ItemType' => Array( 'title'=>'la_col_ItemType' ),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/gateways/gateways_config.php
===================================================================
--- branches/5.2.x/units/gateways/gateways_config.php (revision 14088)
+++ branches/5.2.x/units/gateways/gateways_config.php (revision 14089)
@@ -1,85 +1,85 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'gwf',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'GatewayEventHandler','file'=>'gw_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'GatewayTagProcessor','file'=>'gw_tag_processor.php','build_event'=>'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array(
Array(
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'pt',
'HookToSpecial' => '',
'HookToEvent' => Array( 'OnListBuild' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnCheckGateways',
),
Array(
'Mode' => hBEFORE,
'Conditional' => true,
'HookToPrefix' => 'pt',
'HookToSpecial' => '',
'HookToEvent' => Array( 'OnCreate', 'OnSave', 'OnUpdate', 'onPreSaveAndGoToTab', 'onPreSaveAndGo' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnSaveValues',
),
),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'IDField' => 'GWConfigFieldId',
'TableName' => TABLE_PREFIX.'GatewayConfigFields',
'ListSQLs' => Array (''=>'SELECT * FROM %s',
), // key - special, value - list select sql
'ItemSQLs' => Array( ''=>'SELECT * FROM %s',
),
'Fields' => Array (
'GWConfigFieldId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0, ),
- 'SystemFieldName' => Array('type' => 'string', 'not_null' => 1, 'default' => 0, ),
- 'FieldName' => Array('type' => 'string', 'required' => true, 'max_len' => 100, 'not_null' => 1, 'default' => 0, ),
- 'ElementType' => Array('type' => 'string', 'not_null' => 1, 'default' => 0, ),
+ 'SystemFieldName' => Array('type' => 'string', 'not_null' => 1, 'default' => '', ),
+ 'FieldName' => Array('type' => 'string', 'required' => true, 'max_len' => 100, 'not_null' => 1, 'default' => '', ),
+ 'ElementType' => Array('type' => 'string', 'not_null' => 1, 'default' => 'text', ),
'ValueList' => Array('type' => 'string', 'default' => NULL),
'GatewayId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0, ),
),
'VirtualFields' => Array (
- 'Value' => Array(),
+ 'Value' => Array('type' => 'string', 'default' => ''),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array(
'default' => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array(
'FieldName' => Array( 'title'=>'la_Fields' ),
'Value' => Array( 'title'=>'la_Value' ),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/sections/section_eh.php
===================================================================
--- branches/5.2.x/units/sections/section_eh.php (revision 14088)
+++ branches/5.2.x/units/sections/section_eh.php (revision 14089)
@@ -1,101 +1,101 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2010 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class InCommerceEventHandler extends kEventHandler {
/**
* [HOOK] Creates site domain editing tab
*
* @param kEvent $event
*/
function OnModifySiteDomainConfig(&$event)
{
$edit_tab_presets = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'EditTabPresets');
$edit_tab_presets['Default']['in-commerce'] = Array (
'title' => 'la_title_In-Commerce', 't' => 'in-commerce/site_domains/site_domain_edit', 'priority' => 2.1
);
$this->Application->setUnitOption($event->MasterEvent->Prefix, 'EditTabPresets', $edit_tab_presets);
$title_presets = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'TitlePresets');
$title_presets['site_domain_edit_in_commerce'] = Array (
'prefixes' => Array ('site-domain'), 'format' => "#site-domain_status# '#site-domain_titlefield#' - !la_title_In-Commerce!",
'toolbar_buttons' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'),
);
$this->Application->setUnitOption($event->MasterEvent->Prefix, 'TitlePresets', $title_presets);
$new_fields = Array (
'BillingCountry' => Array (
'type' => 'string', 'max_len' => 3,
'formatter' => 'kOptionsFormatter',
'options_sql' => ' SELECT IF(l%2$s_Name = "", l%3$s_Name, l%2$s_Name) AS Name, IsoCode
FROM ' . TABLE_PREFIX . 'CountryStates
WHERE Type = ' . DESTINATION_TYPE_COUNTRY . '
ORDER BY Name',
'option_key_field' => 'IsoCode', 'option_title_field' => 'Name',
'not_null' => 1, 'default' => ''
),
'ShippingCountry' => Array (
'type' => 'string', 'max_len' => 3,
'formatter' => 'kOptionsFormatter',
'options_sql' => ' SELECT IF(l%2$s_Name = "", l%3$s_Name, l%2$s_Name) AS Name, IsoCode
FROM ' . TABLE_PREFIX . 'CountryStates
WHERE Type = ' . DESTINATION_TYPE_COUNTRY . '
ORDER BY Name',
'option_key_field' => 'IsoCode', 'option_title_field' => 'Name',
'not_null' => 1, 'default' => ''
),
'PrimaryCurrencyId' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'Currencies WHERE Status = 1 ORDER BY ISO', 'option_key_field' => 'CurrencyId', 'option_title_field' => 'Name', 'use_phrases' => 1,
'not_null' => 1, 'default' => 0
),
'Currencies' => Array (
'type' => 'string', 'max_len' => 255,
'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'Currencies WHERE Status = 1 ORDER BY ISO', 'option_key_field' => 'CurrencyId', 'option_title_field' => 'Name', 'use_phrases' => 1,
'not_null' => 1, 'default' => ''
),
'PrimaryPaymentTypeId' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'PaymentTypes WHERE Status = 1 ORDER BY Name ASC', 'option_key_field' => 'PaymentTypeId', 'option_title_field' => 'Name',
'not_null' => 1, 'default' => 0
),
'PaymentTypes' => Array (
'type' => 'string', 'max_len' => 255,
'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'PaymentTypes WHERE Status = 1 ORDER BY Name ASC', 'option_key_field' => 'PaymentTypeId', 'option_title_field' => 'Name',
'not_null' => 1, 'default' => ''
),
);
$fields = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'Fields');
$this->Application->setUnitOption($event->MasterEvent->Prefix, 'Fields', array_merge_recursive2($fields, $new_fields));
$new_columns = Array (
'BillingCountry' => Array ('title' => 'la_col_BillingCountry', 'filter_block' => 'grid_options_filter', 'width' => 250, ),
'ShippingCountry' => Array ('title' => 'la_col_ShippingCountry', 'filter_block' => 'grid_options_filter', 'width' => 250, ),
'PrimaryCurrencyId' => Array ('title' => 'la_col_Currency', 'filter_block' => 'grid_options_filter', 'width' => 250, ),
'PrimaryPaymentTypeId' => Array ('title' => 'la_col_PaymentType', 'filter_block' => 'grid_options_filter', 'width' => 250, ),
);
$grids = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'Grids');
$grids['Default']['Fields'] = array_merge_recursive2($grids['Default']['Fields'], $new_columns);
$this->Application->setUnitOption($event->MasterEvent->Prefix, 'Grids', $grids);
- if (!$this->Application->isAdmin) {
+ if (!$this->Application->isAdmin && is_object($this->Application->siteDomain)) {
// re-configure object, because it's recalled before kUnitConfigReader::AfterConfigRead is called
$this->Application->siteDomain->defineFields();
}
}
}
Index: branches/5.2.x/units/pricing/pricing_config.php
===================================================================
--- branches/5.2.x/units/pricing/pricing_config.php (revision 14088)
+++ branches/5.2.x/units/pricing/pricing_config.php (revision 14089)
@@ -1,145 +1,145 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'pr',
'ItemClass' => Array ('class'=> 'kDBItem', 'file'=> '', 'build_event'=> 'OnItemBuild'),
'ListClass' => Array ('class'=> 'kDBList', 'file'=> '', 'build_event'=> 'OnListBuild'),
'EventHandlerClass' => Array ('class'=> 'PricingEventHandler', 'file'=> 'pricing_event_handler.php', 'build_event'=> 'OnBuild'),
'TagProcessorClass' => Array ('class'=> 'PricingTagProcessor', 'file'=> 'pricing_tag_processor.php', 'build_event'=> 'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array (
// for tangible products: pricings are always aranged before saveing product
Array (
'Mode' => hBEFORE,
'Conditional' => true,
'HookToPrefix' => '#PARENT#',
'HookToSpecial' => '',
'HookToEvent' => Array ('OnPreSave'),
'DoPrefix' => '',
'DoSpecial' => 'tang',
'DoEvent' => 'OnArrange',
),
),
'AggregateTags' => Array (
Array (
'AggregateTo' => '#PARENT#',
'AggregatedTagName' => 'Price',
'LocalTagName' => 'ProductPrice',
),
Array (
'AggregateTo' => '#PARENT#',
'AggregatedTagName' => 'ListPriceBrackets',
'LocalTagName' => 'Product_ListPriceBrackets',
),
Array (
'AggregateTo' => '#PARENT#',
'AggregatedTagName' => 'HasQuantityPricing',
'LocalTagName' => 'Product_HasQuantityPricing',
),
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'StatusField' => Array ('IsPrimary'),
'IDField' => 'PriceId',
'TableName' => TABLE_PREFIX.'ProductsPricing',
'ForeignKey' => 'ProductId',
'ParentTableKey' => 'ProductId',
'ParentPrefix' => 'p',
'AutoDelete' => true,
'AutoClone' => true,
'ListSQLs' => Array ( ''=> 'SELECT * FROM %s',
), // key - special, value - list select sql
'ItemSQLs' => Array ( ''=> 'SELECT * FROM %s',
),
'ListSortings' => Array (
'' => Array (
'Sorting' => Array ('MinQty' => 'asc'),
)
),
'Fields' => Array (
'PriceId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,),
'ProductId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
- 'MinQty' => Array ('type' => 'int', 'default' => 0),
- 'MaxQty' => Array ('type' => 'int', 'default' => 0),
+ 'MinQty' => Array ('type' => 'int', 'default' => null),
+ 'MaxQty' => Array ('type' => 'int', 'default' => null),
'Cost' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%.2f', 'default' => 0),
'Price' => Array ('type' => 'float', 'not_null' => 1, 'formatter' => 'kFormatter', 'min_value_inc' => 0, 'format' => '%.2f', 'default' => 0),
'Negotiated' => Array (
'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
- 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
- 'not_null' => 1, 'default' => 0,
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
+ 'default' => NULL,
),
- 'Points' => Array ('type' => 'int', 'default' => 0),
+ 'Points' => Array ('type' => 'int', 'default' => null),
'AccessDuration'=> Array ('type' => 'int', 'not_null' => 1, 'default' => 0,),
'AccessUnit' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (1 => 'la_opt_sec', 2 => 'la_opt_min', 3 => 'la_opt_hour', 4 => 'la_opt_day', 5 => 'la_opt_week', 6 => 'la_opt_month', 7 => 'la_opt_year'), 'not_null' => 1, 'default' => 0,),
'Description' => Array ('type' => 'string', 'max_len' => 255, 'default' => NULL),
'IsPrimary' => Array (
'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
- 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'GroupId' => Array ('type' => 'int', 'default' => 0, 'not_null' => 1),
// 'AccessRebillDate' => Array ('type'=> 'integer', 'min_value' => 0, 'max_value' => 31, 'not_null'=> '1', 'default'=>0),
// Customization healtheconomics.org
// 'DurationType' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (1 => 'la_opt_interval', 2 => 'la_opt_date'), 'not_null' => 1, 'default' => 1),
// 'AccessExpiration' => Array ('type' => 'int', 'formatter' => 'kDateFormatter'),
// Customization healtheconomics.org --
),
-
+
'VirtualFields' => Array (
),
'Grids' => Array (
/*
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array (
'MinQty' => Array ( 'title'=> 'la_col_MinQty', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter'),
'MaxQty' => Array ( 'title'=> 'la_col_MaxQty', 'filter_block' => 'grid_range_filter'),
'Price' => Array ( 'title'=> 'la_col_Price', 'filter_block' => 'grid_range_filter'),
'Points' => Array ( 'title'=> 'la_col_Points', 'filter_block' => 'grid_range_filter'),
'Cost' => Array ( 'title'=> 'la_col_Cost', 'filter_block' => 'grid_range_filter'),
'Negotiated' => Array ( 'title'=> 'la_col_Negotiated', 'data_block' => 'negotiated_td', 'filter_block' => 'grid_options_filter'),
),
),
*/
'Access' => Array (
'Icons' => Array ('default'=> 'icon16_pricing.gif', '0'=> 'icon16_pricing.gif', '1'=> 'icon16_pricing_primary.gif'),
'Fields' => Array (
'AccessDuration' => Array ( 'title'=> 'la_col_AccessDuration', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter'),
'AccessUnit' => Array ( 'title'=> 'la_col_AccessDurationUnit', 'filter_block' => 'grid_options_filter'),
'Description' => Array ( 'title'=> 'la_col_Description', 'filter_block' => 'grid_like_filter'),
'Price' => Array ( 'title'=> 'la_col_Price', 'filter_block' => 'grid_float_range_filter'),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/reports/reports_config.php
===================================================================
--- branches/5.2.x/units/reports/reports_config.php (revision 14088)
+++ branches/5.2.x/units/reports/reports_config.php (revision 14089)
@@ -1,150 +1,133 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'rep',
'ItemClass' => Array('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array('class' => 'ReportsEventHandler', 'file' => 'reports_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array('class' => 'ReportsTagProcessor', 'file' => 'reports_tag_processor.php', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'Hooks' => Array(
Array(
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'rep',
'HookToSpecial' => '*',
'HookToEvent' => Array('OnAfterConfigRead'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnUpdateConfig',
),
),
'IDField' => 'CategoryId',
'TitlePresets' => Array(
'default' => Array( 'new_status_labels' => Array('d' => '!la_title_Adding_Discount!'),
'edit_status_labels' => Array('d' => '!la_title_Editing_Discount!'),
'new_titlefield' => Array('d' => '!la_title_New_Discount!'),
),
'report_options' =>Array('format' => "!la_title_ReportOptions!"),
'report_results' =>Array('format' => "!la_title_ReportResults!"),
'report_chart' =>Array('format' => "!la_title_SalesReportChart!"),
),
'PermSection' => Array('main' => 'in-commerce:reports'),
'Sections' => Array(
'in-commerce:reports' => Array(
'parent' => 'in-commerce',
'icon' => 'in-commerce:sales_report',
'label' => 'la_tab_SaleReports',
'url' => Array('t' => 'in-commerce/reports/reports', 'pass' => 'm,rep', 'rep_event' => 'OnNew'),
'permissions' => Array('view', 'add'),
'priority' => 2,
'type' => stTREE,
),
),
- 'FilterMenu' => Array(
- 'Groups' => Array(
- Array('mode' => 'AND', 'filters' => Array(0,1,2), 'type' => WHERE_FILTER),
- Array('mode' => 'AND', 'filters' => Array(4,5,6), 'type' => WHERE_FILTER),
- ),
- 'Filters' => Array(
- 0 => Array('label' =>'la_Active', 'on_sql' => '', 'off_sql' => 'Status != 1' ),
- 1 => Array('label' => 'la_Pending', 'on_sql' => '', 'off_sql' => 'Status != 2' ),
- 2 => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => 'Status != 0' ),
- 3 => Array(),
- 4 => Array('label' => 'la_Flat', 'on_sql' => '', 'off_sql' => 'Type != 1' ),
- 5 => Array('label' => 'la_Percent', 'on_sql' => '', 'off_sql' => 'Type != 2' ),
- 6 => Array('label' => 'la_FreeShipping', 'on_sql' => '', 'off_sql' => 'Type != 3' ),
- )
- ),
-
'ListSQLs' => Array( '' => 'SELECT %1$s.* %2$s FROM %1$s',
), // key - special, value - list select sql
'ItemSQLs' => Array( '' => 'SELECT * FROM %1$s',
),
-
- 'ListSortings' => Array(
- '' => Array(
- 'Sorting' => Array('Name' => 'asc'),
- )
- ),
+ 'ListSortings' => Array (
+ '' => Array (
+ 'Sorting' => Array ('Name' => 'asc'),
+ )
+ ),
'CalculatedFields' => Array (
'' => Array (
'CategoryId' => '0',
),
),
'Fields' => Array(
),
'VirtualFields' => Array(
'ReportType' => array('formatter' => 'kOptionsFormatter', 'options' =>array(
12 => 'la_Overall',
1 => 'la_ByCategory',
2 => 'la_ByUser',
5 => 'la_byProduct'
),
'use_phrases' => 1, 'default' => 12,
),
'FromDateTime' => Array('formatter' => 'kDateFormatter', 'default' => '', 'filter_type' => 'range_from', 'filter_field' => 'OrderDate' ),
'ToDateTime' => Array('formatter' => 'kDateFormatter', 'default' => '', 'filter_type' => 'range_to', 'filter_field' => 'OrderDate', 'empty_time' => adodb_mktime(23,59,59) ),
'Recursive' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
'use_phrases' => 1, 'not_null' => 1, 'default' => 1,
),
'SkipEmpty' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
'use_phrases' => 1, 'not_null' => 1, 'default' => 1,
),
'CategoryId' => Array ('type' => 'int', 'default' => 0),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array(
'default' => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array(
'Name' => Array( 'title' => 'la_col_Name', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter'),
'Start' => Array( 'title' => 'la_col_Start', 'filter_block' => 'grid_date_range_filter'),
'End' => Array( 'title' => 'la_col_End', 'filter_block' => 'grid_date_range_filter'),
'GroupId' => Array( 'title' => 'la_col_Group', 'filter_block' => 'grid_options_filter'),
'Type' => Array( 'title' => 'la_col_Type', 'filter_block' => 'grid_options_filter'),
'Amount' => Array( 'title' => 'la_col_Amount', 'filter_block' => 'grid_float_range_filter'),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/files/files_config.php
===================================================================
--- branches/5.2.x/units/files/files_config.php (revision 14088)
+++ branches/5.2.x/units/files/files_config.php (revision 14089)
@@ -1,147 +1,144 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'file',
'ItemClass' => Array ('class' => 'FilesItem', 'file' => 'files.php', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'FilesEventHandler', 'file' => 'files_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'kDBTagProcessor', 'file' => '', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'AggregateTags' => Array (
Array (
'AggregateTo' => '#PARENT#',
'AggregatedTagName' => 'ListFiles',
'LocalTagName' => 'PrintList',
'LocalSpecial' => 'downl',
),
),
'Hooks' => Array (
/*Array (
'Mode' => hBEFORE,
'Conditional' => true,
'HookToPrefix' => 'p',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'onPreSave' ),
'DoPrefix' => 'pr',
'DoSpecial' => 'tang',
'DoEvent' => 'OnArrange',
),*/
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'StatusField' => Array ('Status', 'IsPrimary'),
'IDField' => 'FileId',
'TitleField' => 'Name',
'TableName' => TABLE_PREFIX.'ProductFiles',
'ForeignKey' => 'ProductId',
'ParentTableKey' => 'ProductId',
'ParentPrefix' => 'p',
'AutoDelete' => true,
'AutoClone' => true,
- 'ListSQLs' => Array ( '' => 'SELECT * FROM %s',
- ), // key - special, value - list select sql
- 'ItemSQLs' => Array ( '' => 'SELECT * FROM %s',
- ),
- 'FilterMenu' => Array (
- 'Groups' => Array (
- Array ('mode' => 'AND', 'filters' => Array ('show_active', 'show_disabled'), 'type' => WHERE_FILTER),
- ),
- 'Filters' => Array (
- 'show_active' => Array ('label' => 'la_Active', 'on_sql' => '', 'off_sql' => '%1$s.Status != 1' ),
- 'show_disabled' => Array ('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Status != 0' ),
- )
- ),
+ 'ListSQLs' => Array (
+ '' => 'SELECT * FROM %s',
+ ), // key - special, value - list select sql
+
+ 'ItemSQLs' => Array (
+ '' => 'SELECT * FROM %s',
+ ),
+
'ListSortings' => Array (
- '' => Array (
- 'ForcedSorting' => Array ('IsPrimary' => 'desc', 'Priority' => 'desc'),
- 'Sorting' => Array ('AddedOn' => 'desc', 'Version' => 'desc'),
- )
- ),
+ '' => Array (
+ 'ForcedSorting' => Array ('IsPrimary' => 'desc', 'Priority' => 'desc'),
+ 'Sorting' => Array ('AddedOn' => 'desc', 'Version' => 'desc'),
+ )
+ ),
+
'Fields' => Array (
'FileId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,),
'ProductId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,),
'Name' => Array ('type' => 'string', 'not_null' => '1', 'default' => ''),
'Version' => Array ('type' => 'string', 'not_null' => '1', 'default' => ''),
'FilePath' => Array ('type' => 'string', 'not_null' => '1', 'default' => ''),
'RealPath' => Array (
'type' => 'string',
'formatter' => 'kUploadFormatter',
'upload_dir' => ITEM_FILES_PATH, 'include_path' => 0,
'size_field' => 'Size', 'max_size' => 50000000,
'orig_name_field' => 'FilePath',
- 'content_type_field' => 'MIMEType',
- 'not_null' => 1, 'skip_empty' =>1, 'default' => '',
+ 'content_type_field' => 'MIMEType',
+ 'not_null' => 1, 'skip_empty' =>1, 'default' => '',
'error_msgs' => Array (
'bad_file_format' => '!la_error_InvalidFileFormat!',
'bad_file_size' => '!la_error_FileTooLarge!',
'cant_save_file' => '!la_error_cant_save_file!',
),
),
'Size' => Array (
'type' => 'int',
'formatter' => 'kFilesizeFormatter',
'not_null' => 1, 'default' => 0,
),
'Status' => Array (
'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
- 'options' => Array ( 0 => 'la_Disabled', 1 => 'la_Active', ), 'use_phrases' => 1,
- 'not_null' => 1, 'default' => 0,
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array ( 0 => 'la_Disabled', 1 => 'la_Active', ), 'use_phrases' => 1,
+ 'not_null' => 1, 'default' => 0,
),
'IsPrimary' => Array (
'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
- 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'Priority' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'AddedOn' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
- 'AddedById' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
+ 'AddedById' => Array ('type' => 'int', 'default' => NULL),
'MIMEType' => Array ('type' => 'string', 'not_null' => '1', 'default' => ''),
),
-
+
'VirtualFields' => Array (
-
+
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
'0_0' => 'icon16_disabled.png',
'0_1' => 'icon16_disabled.png',
'1_0' => 'icon16_item.png',
'1_1' => 'icon16_primary.png',
'module' => 'core',
),
'Fields' => Array (
'FileId' => Array ( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'module' => 'In-Portal', 'filter_block' => 'grid_range_filter'),
'Name' => Array ( 'title' => 'la_col_FileName', 'data_block' => 'file_caption_td', 'filter_block' => 'grid_like_filter'),
'FilePath' => Array ( 'title' => 'la_col_FilePath', 'filter_block' => 'grid_like_filter'),
'Version' => Array ( 'title' => 'la_col_Version', 'filter_block' => 'grid_like_filter'),
'Size' => Array ( 'title' => 'la_col_Size', 'filter_block' => 'grid_float_range_filter'),
'AddedOn' => Array ( 'title' => 'la_col_AddedOn', 'format' => '_regional_DateFormat', 'filter_block' => 'grid_date_range_filter'),
+ 'Status' => Array ( 'title' => 'la_col_Status', 'filter_block' => 'grid_options_filter'),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/affiliate_payments/affiliate_payments_config.php
===================================================================
--- branches/5.2.x/units/affiliate_payments/affiliate_payments_config.php (revision 14088)
+++ branches/5.2.x/units/affiliate_payments/affiliate_payments_config.php (revision 14089)
@@ -1,157 +1,157 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'apayments',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'AffiliatePaymentsEventHandler','file'=>'affiliate_payments_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'AffiliatePaymentsTagProcessor','file'=>'affiliate_payments_tag_processor.php','build_event'=>'OnBuild'),
'AutoLoad' => true,
'AggregateTags' => Array(
Array(
'AggregateTo' => 'ord',
'AggregatedTagName' => 'InitPaymentsList',
'LocalTagName' => 'InitList',
),
Array(
'AggregateTo' => 'ord',
'AggregatedTagName' => 'ListPayments',
'LocalTagName' => 'ListPayments',
),
Array(
'AggregateTo' => 'ord',
'AggregatedTagName' => 'PaymentsPaginationBar',
'LocalTagName' => 'PaginationBar',
),
Array(
'AggregateTo' => 'ord',
'AggregatedTagName' => 'PaymentsCount',
'LocalTagName' => 'TotalRecords',
),
),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'IDField' => 'AffiliatePaymentId',
'TitlePresets' => Array(
'default' => Array( 'new_status_labels' => Array('apayments'=>'!la_title_Adding_Affiliate_Payment!'),
'edit_status_labels' => Array('apayments'=>'!la_title_Editing_Affiliate_Payment!'),
'new_titlefield' => Array('apayments'=>'!la_title_New_Affiliate_Payment!'),
),
'payments_log' => Array('prefixes' => Array('apayments.log_List'), 'format' => "!la_title_AffiliatePayments!"),
),
'Sections' => Array(
'in-commerce:paymentlog' => Array(
'parent' => 'in-commerce',
'icon' => 'transactions',
'label' => 'la_tab_PaymentLog',
'url' => Array('t' => 'in-commerce/payments/payments_list', 'pass' => 'm'),
'permissions' => Array('view'),
'priority' => 6,
'type' => stTREE,
),
),
'TableName' => TABLE_PREFIX.'AffiliatePayments',
'ListSQLs' => Array(''=>' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON %1$s.AffiliateId = af.AffiliateId
LEFT JOIN '.TABLE_PREFIX.'PortalUser au ON af.PortalUserId = au.PortalUserId'),
'ItemSQLs' => Array(''=>' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON %1$s.AffiliateId = af.AffiliateId
LEFT JOIN '.TABLE_PREFIX.'PortalUser au ON af.PortalUserId = au.PortalUserId'),
'CalculatedFields' => Array(
'' => Array(
'PortalUserId' => 'af.PortalUserId',
),
'log' => Array(
'Username' => 'au.Login',
'PortalUserId' => 'af.PortalUserId',
),
),
'ForeignKey' => 'AffiliateId',
'ParentTableKey' => 'AffiliateId',
'ParentPrefix' => 'affil',
'AutoDelete' => true,
'AutoClone' => true,
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('PaymentDate' => 'desc'),
)
),
'Fields' => Array(
'AffiliatePaymentId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'AffiliateId' => Array('type'=>'int','formatter'=>'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), 'options' => Array(0 => 'lu_None'), 'left_sql'=>'SELECT %s FROM '.TABLE_PREFIX.'Affiliates af LEFT JOIN '.TABLE_PREFIX.'PortalUser pu ON pu.PortalUserId = af.PortalUserId WHERE `%s` = \'%s\'','left_key_field'=>'AffiliateId','left_title_field'=>'Login','not_null'=>1,'default'=>0),
'PaymentDate' => Array('type' => 'int', 'formatter'=>'kDateFormatter', 'default' => '#NOW#'),
'Amount' => Array('type' => 'double', 'formatter'=>'kFormatter', 'format'=>'%.02f', 'not_null' => '1', 'required'=>1, 'default' => '0.00'),
'Comment' => Array('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => NULL),
'PaymentReference' => Array('type' => 'string','not_null' => '1','default' => ''),
'PaymentTypeId' => Array('type' => 'int', 'formatter'=>'kOptionsFormatter', 'options_sql'=>'SELECT Name, PaymentTypeId FROM '.TABLE_PREFIX.'AffiliatePaymentTypes WHERE Status = 1 ORDER BY IsPrimary DESC, Priority DESC, Name ASC', 'option_key_field'=>'PaymentTypeId', 'option_title_field'=>'Name', 'not_null' => 1, 'default' => 0),
),
'VirtualFields' => Array(
- 'Username' => Array('type' => 'string'),
- 'PortalUserId' => Array('type' => 'int'),
+ 'Username' => Array('type' => 'string', 'default' => ''),
+ 'PortalUserId' => Array('type' => 'int', 'default' => 0),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array(
'default' => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array(
'AffiliatePaymentId'=> Array( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'PaymentDate' => Array( 'title' => 'la_col_PaymentDate', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
'Amount' => Array( 'title' => 'la_col_Amount', 'filter_block' => 'grid_float_range_filter'),
'Comment' => Array( 'title' => 'la_col_Comment', 'filter_block' => 'grid_like_filter', 'first_chars' => 50),
'PaymentTypeId' => Array( 'title' => 'la_col_PaymentType', 'filter_block' => 'grid_options_filter'),
'PaymentReference' => Array( 'title' => 'la_col_PaymentReference', 'filter_block' => 'grid_like_filter', 'first_chars' => 50),
),
),
'Log' => Array(
'Icons' => Array(
'default' => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array(
'AffiliatePaymentId'=> Array( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'Username' => Array( 'title' => 'la_col_Username', 'data_block' => 'grid_userlink_td', 'filter_block' => 'grid_like_filter'),
'PaymentDate' => Array( 'title' => 'la_col_PaymentDate', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
'Amount' => Array( 'title' => 'la_col_Amount', 'data_block' => 'grid_currency_td', 'filter_block' => 'grid_float_range_filter'),
'Comment' => Array( 'title' => 'la_col_Comment', 'filter_block' => 'grid_like_filter', 'first_chars' => 50),
'PaymentTypeId' => Array( 'title' => 'la_col_PaymentType', 'filter_block' => 'grid_options_filter'),
'PaymentReference' => Array( 'title' => 'la_col_PaymentReference', 'filter_block' => 'grid_like_filter', 'first_chars' => 50),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/shipping_quote_engines/usps.php
===================================================================
--- branches/5.2.x/units/shipping_quote_engines/usps.php (revision 14088)
+++ branches/5.2.x/units/shipping_quote_engines/usps.php (revision 14089)
@@ -1,1199 +1,1325 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
define('MODULE_SHIPPING_USPS_TEXT_TITLE', 'United States Postal Service');
define('MODULE_SHIPPING_USPS_TEXT_DESCRIPTION', 'You will need to have registered an account with USPS. Click <a target="_blank" href="https://secure.shippingapis.com/registration/"><strong>HERE</strong></a> for registration details. USPS expects you to use pounds as weight measure for your products.');
define('MODULE_SHIPPING_USPS_TEXT_ERROR', 'An error occured with the USPS shipping calculations.<br>If you prefer to use USPS as your shipping method, please contact the store owner.');
define('MODULE_SHIPPING_USPS_TEXT_DAY', 'Day');
define('MODULE_SHIPPING_USPS_TEXT_DAYS', 'Days');
define('MODULE_SHIPPING_USPS_TEXT_WEEKS', 'Weeks');
define('MODULE_SHIPPING_USPS_STATUS', 'True'); // Do you want to offer USPS shipping?
define('MODULE_SHIPPING_USPS_SERVER', 'production'); // An account at USPS is needed to use the Production server // production othervise value may be 'test'
define('MODULE_SHIPPING_USPS_HANDLING', '0'); // Handling fee for this shipping method
define('MODULE_SHIPPING_USPS_TAX_CLASS', '0'); // Use the following tax class on the shipping fee
define('MODULE_SHIPPING_USPS_ZONE', '0'); // If a zone is selected, only enable this shipping method for that zone.
define('MODULE_SHIPPING_USPS_SORT_ORDER', '0'); // Sort order of display.
define('MODULE_SHIPPING_USPS_TYPES', 'PRIORITY, PARCEL'); // EXPRESS, FIRST CLASS, BMP, MEDIA 'Select the domestic services to be offered:
define('MODULE_SHIPPING_USPS_TYPES_INTL', 'EXPRESS MAIL INTERNATIONAL (EMS), EXPRESS MAIL INT, EXPRESS MAIL INT FLAT RATE ENV, PRIORITY MAIL INT, PRIORITY MAIL INT FLAT RATE ENV, PRIORITY MAILINT FLAT RATE BOX, FIRST-CLASS MAIL INT');// 'GLOBAL EXPRESS, GLOBAL EXPRESS NON-DOC RECT, GLOBAL EXPRESS NON-DOC NON-RECT, Select the international services to be offered:
define('MODULE_SHIPPING_USPS_OPTIONS', 'Display weight, Display transit time'); //
//configuration values for insurance
define('MODULE_SHIPPING_USPS_INS1', '1.65');// 'US/Canada insurance for totals $.01-$50.00
define('MODULE_SHIPPING_USPS_INS2', '2.05');// 'US/Canada insurance for totals $50.01-$100
define('MODULE_SHIPPING_USPS_INS3', '2.45');// 'US/Canada insurance for totals $100.01-$200
define('MODULE_SHIPPING_USPS_INS4', '4.60');// 'US/Canada insurance for totals $200.01-$300
define('MODULE_SHIPPING_USPS_INS5', '.90');// 'US/Canada insurance for every $100 over $300 (add)
define('MODULE_SHIPPING_USPS_INS6', '2.40');// 'International insurance for totals $.01-$50.00
define('MODULE_SHIPPING_USPS_INS7', '3.30');// 'International insurance for totals $50.01-$100
define('MODULE_SHIPPING_USPS_INS8', '4.20');// 'International insurance for totals $100.01-$200
define('MODULE_SHIPPING_USPS_INS9', '5.10');// 'International insurance for totals $200.01-$300
define('MODULE_SHIPPING_USPS_INS10', '.90');// 'International insurance for every $100 over $300 (add)
define('MODULE_SHIPPING_USPS_INSURE', 'True');// 'Insure packages shipped by USPS?
define('MODULE_SHIPPING_USPS_INSURE_TAX', 'True');// 'Insure tax on packages shipped by USPS?
define('USPS_LOG_FILE', WRITEABLE .'/user_files/usps.log');
class USPS extends ShippingQuoteEngine
{
var $countries, $pounds, $ounces, $insurance_cost = 0, $shipping_origin_country, $store_first_name, $store_last_name, $company_name, $store_name, $store_address1, $store_address2, $store_city, $store_state, $store_zip5, $store_zip4, $store_phone, $usps_userid;
var $order = Array();
var $types = Array();
var $intl_types = Array();
function USPS()
{
parent::kBase();
// EXPRESS, FIRST CLASS, PRIORITY, PARCEL, BMP, MEDIA
$this->types = Array(
'EXPRESS' => 'Express Mail',
'FIRST CLASS' => 'First Class Mail',
'PRIORITY' => 'Priority Mail',
'PARCEL' => 'Parcel Post',
'BPM' => 'Bound Printed Matter',
'MEDIA' => 'Media Mail'
);
$this->intl_types = Array(
// 'GLOBAL EXPRESS' => 'Global Express Guaranteed',
// 'GLOBAL EXPRESS NON-DOC RECT' => 'Global Express Guaranteed Non-Document Rectangular',
// 'GLOBAL EXPRESS NON-DOC NON-RECT' => 'Global Express Guaranteed Non-Document Non-Rectangular',
'EXPRESS MAIL INT' => 'Express Mail International (EMS)',
'EXPRESS MAIL INT FLAT RATE ENV' => 'Express Mail International (EMS) Flat Rate Envelope',
'PRIORITY MAIL INT' => 'Priority Mail International',
'PRIORITY MAIL INT FLAT RATE ENV' => 'Priority Mail International Flat Rate Envelope',
'PRIORITY MAIL INT FLAT RATE BOX' => 'Priority Mail International Flat Rate Box',
'FIRST-CLASS MAIL INT' => 'First-Class Mail International'
);
// get 2-symbol country code
$country = $this->Application->ConfigValue('Comm_Shipping_Country');
if ($country != '') {
$this->shipping_origin_country = $this->GetUSPSCountry($country, '');
}
$contact_name = trim($this->_prepare_xml_param($this->Application->ConfigValue('Comm_Contacts_Name')));
$split_pos = strpos($contact_name, ' ');
if ($split_pos === false) {
$this->store_first_name = $contact_name;
$this->store_last_name = '';
} else {
$this->store_first_name = substr($contact_name, 0, $split_pos);
$this->store_last_name = trim(substr($contact_name, $split_pos));
}
$this->company_name = $this->_prepare_xml_param($this->Application->ConfigValue('Comm_CompanyName'));
$this->store_name = $this->_prepare_xml_param($this->Application->ConfigValue('Comm_StoreName'));
$this->store_address1 = $this->_prepare_xml_param($this->Application->ConfigValue('Comm_Shipping_AddressLine1'));
$this->store_address2 = $this->_prepare_xml_param($this->Application->ConfigValue('Comm_Shipping_AddressLine2'));
if ($this->store_address2 == '') {
$this->store_address2 = $this->store_address1;
$this->store_address1 = '';
}
$this->store_city = $this->_prepare_xml_param($this->Application->ConfigValue('Comm_Shipping_City'));
$this->store_state = $this->_prepare_xml_param($this->Application->ConfigValue('Comm_Shipping_State'));
$zip = $this->_prepare_xml_param($this->Application->ConfigValue('Comm_Shipping_ZIP'));
$this->store_zip5 = substr($zip, 0, 5);
$this->store_zip4 = trim(substr($zip, 6), '-');
$this->store_phone = $this->_prepare_xml_param($this->Application->ConfigValue('Comm_Contacts_Phone'));
// get username and password fron config.
$a_params = $this->LoadParams();
$this->usps_userid = $a_params['AccountLogin'];
// Note by Erik: DO NOT CHANGE THIS ARRAY. It's values are sent to USPS service and any changes may impact class main functionality.
$this->countries = array(
'AF' => 'Afghanistan',
'AL' => 'Albania',
'DZ' => 'Algeria',
'AD' => 'Andorra',
'AO' => 'Angola',
'AI' => 'Anguilla',
'AG' => 'Antigua and Barbuda',
'AR' => 'Argentina',
'AM' => 'Armenia',
'AW' => 'Aruba',
'AU' => 'Australia',
'AT' => 'Austria',
'AZ' => 'Azerbaijan',
'BS' => 'Bahamas',
'BH' => 'Bahrain',
'BD' => 'Bangladesh',
'BB' => 'Barbados',
'BY' => 'Belarus',
'BE' => 'Belgium',
'BZ' => 'Belize',
'BJ' => 'Benin',
'BM' => 'Bermuda',
'BT' => 'Bhutan',
'BO' => 'Bolivia',
'BA' => 'Bosnia-Herzegovina',
'BW' => 'Botswana',
'BR' => 'Brazil',
'VG' => 'British Virgin Islands',
'BN' => 'Brunei Darussalam',
'BG' => 'Bulgaria',
'BF' => 'Burkina Faso',
'MM' => 'Burma',
'BI' => 'Burundi',
'KH' => 'Cambodia',
'CM' => 'Cameroon',
'CA' => 'Canada',
'CV' => 'Cape Verde',
'KY' => 'Cayman Islands',
'CF' => 'Central African Republic',
'TD' => 'Chad',
'CL' => 'Chile',
'CN' => 'China',
'CX' => 'Christmas Island (Australia)',
'CC' => 'Cocos Island (Australia)',
'CO' => 'Colombia',
'KM' => 'Comoros',
'CG' => 'Congo (Brazzaville),Republic of the',
'ZR' => 'Congo, Democratic Republic of the',
'CK' => 'Cook Islands (New Zealand)',
'CR' => 'Costa Rica',
'CI' => 'Cote d\'Ivoire (Ivory Coast)',
'HR' => 'Croatia',
'CU' => 'Cuba',
'CY' => 'Cyprus',
'CZ' => 'Czech Republic',
'DK' => 'Denmark',
'DJ' => 'Djibouti',
'DM' => 'Dominica',
'DO' => 'Dominican Republic',
'TP' => 'East Timor (Indonesia)',
'EC' => 'Ecuador',
'EG' => 'Egypt',
'SV' => 'El Salvador',
'GQ' => 'Equatorial Guinea',
'ER' => 'Eritrea',
'EE' => 'Estonia',
'ET' => 'Ethiopia',
'FK' => 'Falkland Islands',
'FO' => 'Faroe Islands',
'FJ' => 'Fiji',
'FI' => 'Finland',
'FR' => 'France',
'GF' => 'French Guiana',
'PF' => 'French Polynesia',
'GA' => 'Gabon',
'GM' => 'Gambia',
'GE' => 'Georgia, Republic of',
'DE' => 'Germany',
'GH' => 'Ghana',
'GI' => 'Gibraltar',
'GB' => 'Great Britain and Northern Ireland',
'GR' => 'Greece',
'GL' => 'Greenland',
'GD' => 'Grenada',
'GP' => 'Guadeloupe',
'GT' => 'Guatemala',
'GN' => 'Guinea',
'GW' => 'Guinea-Bissau',
'GY' => 'Guyana',
'HT' => 'Haiti',
'HN' => 'Honduras',
'HK' => 'Hong Kong',
'HU' => 'Hungary',
'IS' => 'Iceland',
'IN' => 'India',
'ID' => 'Indonesia',
'IR' => 'Iran',
'IQ' => 'Iraq',
'IE' => 'Ireland',
'IL' => 'Israel',
'IT' => 'Italy',
'JM' => 'Jamaica',
'JP' => 'Japan',
'JO' => 'Jordan',
'KZ' => 'Kazakhstan',
'KE' => 'Kenya',
'KI' => 'Kiribati',
'KW' => 'Kuwait',
'KG' => 'Kyrgyzstan',
'LA' => 'Laos',
'LV' => 'Latvia',
'LB' => 'Lebanon',
'LS' => 'Lesotho',
'LR' => 'Liberia',
'LY' => 'Libya',
'LI' => 'Liechtenstein',
'LT' => 'Lithuania',
'LU' => 'Luxembourg',
'MO' => 'Macao',
'MK' => 'Macedonia, Republic of',
'MG' => 'Madagascar',
'MW' => 'Malawi',
'MY' => 'Malaysia',
'MV' => 'Maldives',
'ML' => 'Mali',
'MT' => 'Malta',
'MQ' => 'Martinique',
'MR' => 'Mauritania',
'MU' => 'Mauritius',
'YT' => 'Mayotte (France)',
'MX' => 'Mexico',
'MD' => 'Moldova',
'MC' => 'Monaco (France)',
'MN' => 'Mongolia',
'MS' => 'Montserrat',
'MA' => 'Morocco',
'MZ' => 'Mozambique',
'NA' => 'Namibia',
'NR' => 'Nauru',
'NP' => 'Nepal',
'NL' => 'Netherlands',
'AN' => 'Netherlands Antilles',
'NC' => 'New Caledonia',
'NZ' => 'New Zealand',
'NI' => 'Nicaragua',
'NE' => 'Niger',
'NG' => 'Nigeria',
'KP' => 'North Korea (Korea, Democratic People\'s Republic of)',
'NO' => 'Norway',
'OM' => 'Oman',
'PK' => 'Pakistan',
'PA' => 'Panama',
'PG' => 'Papua New Guinea',
'PY' => 'Paraguay',
'PE' => 'Peru',
'PH' => 'Philippines',
'PN' => 'Pitcairn Island',
'PL' => 'Poland',
'PT' => 'Portugal',
'QA' => 'Qatar',
'RE' => 'Reunion',
'RO' => 'Romania',
'RU' => 'Russia',
'RW' => 'Rwanda',
'SH' => 'Saint Helena',
'KN' => 'Saint Kitts (St. Christopher and Nevis)',
'LC' => 'Saint Lucia',
'PM' => 'Saint Pierre and Miquelon',
'VC' => 'Saint Vincent and the Grenadines',
'SM' => 'San Marino',
'ST' => 'Sao Tome and Principe',
'SA' => 'Saudi Arabia',
'SN' => 'Senegal',
'YU' => 'Serbia-Montenegro',
'SC' => 'Seychelles',
'SL' => 'Sierra Leone',
'SG' => 'Singapore',
'SK' => 'Slovak Republic',
'SI' => 'Slovenia',
'SB' => 'Solomon Islands',
'SO' => 'Somalia',
'ZA' => 'South Africa',
'GS' => 'South Georgia (Falkland Islands)',
'KR' => 'South Korea (Korea, Republic of)',
'ES' => 'Spain',
'LK' => 'Sri Lanka',
'SD' => 'Sudan',
'SR' => 'Suriname',
'SZ' => 'Swaziland',
'SE' => 'Sweden',
'CH' => 'Switzerland',
'SY' => 'Syrian Arab Republic',
'TW' => 'Taiwan',
'TJ' => 'Tajikistan',
'TZ' => 'Tanzania',
'TH' => 'Thailand',
'TG' => 'Togo',
'TK' => 'Tokelau (Union) Group (Western Samoa)',
'TO' => 'Tonga',
'TT' => 'Trinidad and Tobago',
'TN' => 'Tunisia',
'TR' => 'Turkey',
'TM' => 'Turkmenistan',
'TC' => 'Turks and Caicos Islands',
'TV' => 'Tuvalu',
'UG' => 'Uganda',
'UA' => 'Ukraine',
'AE' => 'United Arab Emirates',
'UY' => 'Uruguay',
'UZ' => 'Uzbekistan',
'VU' => 'Vanuatu',
'VA' => 'Vatican City',
'VE' => 'Venezuela',
'VN' => 'Vietnam',
'WF' => 'Wallis and Futuna Islands',
'WS' => 'Western Samoa',
'YE' => 'Yemen',
'ZM' => 'Zambia',
'ZW' => 'Zimbabwe'
);
$this->countryinsure = array(
'AF' => 0,
'AL' => 0,
'DZ' => 2185,
'AD' => 5000,
'AO' => 0,
'AI' => 415,
'AG' => 60,
'AR' => 5000,
'AM' => 1350,
'AW' => 830,
'AU' => 3370,
'AT' => 5000,
'AZ' => 5000,
'BS' => 2795,
'BH' => 0,
'BD' => 5000,
'BB' => 220,
'BY' => 1323,
'BE' => 5000,
'BZ' => 1600,
'BJ' => 170,
'BM' => 440,
'BT' => 440,
'BO' => 0,
'BA' => 5000,
'BW' => 145,
'BR' => 5000,
'VG' => 165,
'BN' => 4405,
'BG' => 1030,
'BF' => 530,
'MM' => 4045,
'BI' => 790,
'KH' => 0,
'CM' => 5000,
'CA' => 675,
'CV' => 0,
'KY' => 0,
'CF' => 4405,
'TD' => 440,
'CL' => 0,
'CN' => 1130,
'CX' => 3370,
'CC' => 3370,
'CO' => 0,
'KM' => 690,
'CG' => 1685,
'ZR' => 0,
'CK' => 980,
'CR' => 0,
'CI' => 5000,
'HR' => 5000,
'CU' => 0,
'CY' => 5000,
'CZ' => 5000,
'DK' => 5000,
'DJ' => 880,
'DM' => 0,
'DO' => 0,
'TP' => 0,
'EC' => 0,
'EG' => 1685,
'SV' => 0,
'GQ' => 0,
'ER' => 0,
'EE' => 2020,
'ET' => 1000,
'FK' => 510,
'FO' => 5000,
'FJ' => 600,
'FI' => 5000,
'FR' => 5000,
'GF' => 5000,
'PF' => 1015,
'GA' => 485,
'GM' => 2575,
'GE' => 1350,
'DE' => 5000,
'GH' => 5000,
'GI' => 5000,
'GB' => 857,
'GR' => 5000,
'GL' => 5000,
'GD' => 350,
'GP' => 5000,
'GT' => 0,
'GN' => 875,
'GW' => 21,
'GY' => 10,
'HT' => 0,
'HN' => 0,
'HK' => 5000,
'HU' => 5000,
'IS' => 5000,
'IN' => 2265,
'ID' => 0,
'IR' => 0,
'IQ' => 0,
'IE' => 5000,
'IL' => 0,
'IT' => 5000,
'JM' => 0,
'JP' => 5000,
'JO' => 0,
'KZ' => 5000,
'KE' => 815,
'KI' => 0,
'KW' => 1765,
'KG' => 1350,
'LA' => 0,
'LV' => 1350,
'LB' => 440,
'LS' => 440,
'LR' => 440,
'LY' => 0,
'LI' => 5000,
'LT' => 5000,
'LU' => 5000,
'MO' => 4262,
'MK' => 2200,
'MG' => 675,
'MW' => 50,
'MY' => 1320,
'MV' => 0,
'ML' => 950,
'MT' => 5000,
'MQ' => 5000,
'MR' => 635,
'MU' => 270,
'YT' => 5000,
'MX' => 0,
'MD' => 1350,
'MC' => 5000,
'MN' => 440,
'MS' => 2200,
'MA' => 5000,
'MZ' => 0,
'NA' => 4405,
'NR' => 220,
'NP' => 0,
'NL' => 5000,
'AN' => 830,
'NC' => 1615,
'NZ' => 980,
'NI' => 440,
'NE' => 810,
'NG' => 205,
'KP' => 0,
'NO' => 0,
'OM' => 575,
'PK' => 270,
'PA' => 0,
'PG' => 445,
'PY' => 0,
'PE' => 0,
'PH' => 270,
'PN' => 0,
'PL' => 1350,
'PT' => 5000,
'QA' => 2515,
'RE' => 5000,
'RO' => 5000,
'RU' => 5000,
'RW' => 0,
'SH' => 170,
'KN' => 210,
'LC' => 400,
'PM' => 5000,
'VC' => 130,
'SM' => 5000,
'ST' => 440,
'SA' => 0,
'SN' => 865,
'YU' => 5000,
'SC' => 0,
'SL' => 0,
'SG' => 4580,
'SK' => 5000,
'SI' => 4400,
'SB' => 0,
'SO' => 440,
'ZA' => 1760,
'GS' => 510,
'KR' => 5000,
'ES' => 5000,
'LK' => 35,
'SD' => 0,
'SR' => 535,
'SZ' => 560,
'SE' => 5000,
'CH' => 5000,
'SY' => 3080,
'TW' => 1350,
'TJ' => 1350,
'TZ' => 230,
'TH' => 1350,
'TG' => 2190,
'TK' => 295,
'TO' => 515,
'TT' => 930,
'TN' => 2200,
'TR' => 880,
'TM' => 675,
'TC' => 0,
'TV' => 4715,
'UG' => 0,
'UA' => 5000,
'AE' => 5000,
'UY' => 0,
'UZ' => 5000,
'VU' => 0,
'VA' => 5000,
'VE' => 0,
'VN' => 0,
'WF' => 1615,
'WS' => 295,
'YE' => 0,
'ZM' => 540,
'ZW' => 600,
'US' => 5000
);
}
function SetInsurance()
{
$this->insurance_cost = 0;
// Insurance module by Kevin Shelton
// divide the value of the order among the packages based on the order total or subtotal depending on whether or not you have configured to insure tax
$shipping_weight = $this->order['ShippingWeight'];
$shipping_num_boxes = $this->order['ShippingNumBoxes'];
$costperpkg = $this->order['SubTotal'] / $shipping_num_boxes;
// retrieve the maximum allowed insurance for the destination country and if the package value exceeds it then set package value to the maximum allowed
$maxins = $this->countryinsure[$this->order['ShippingCountry']];
if ($costperpkg > $maxins) $costperpkg = $maxins;
// if insurance not allowed for destination or insurance is turned off add nothing to shipping cost
if (($maxins == 0) || (MODULE_SHIPPING_USPS_INSURE == 'False')) {
$insurance = 0;
}
// US and Canada share the same insurance calculation (though not the same maximum)
else if (($this->order['ShippingCountry'] == 'US') || ($this->order['ShippingCountry'] == 'CA'))
{
if ($costperpkg<=50) {
$insurance=MODULE_SHIPPING_USPS_INS1;
}
else if ($costperpkg<=100) {
$insurance=MODULE_SHIPPING_USPS_INS2;
}
else if ($costperpkg<=200) {
$insurance=MODULE_SHIPPING_USPS_INS3;
}
else if ($costperpkg<=300) {
$insurance=MODULE_SHIPPING_USPS_INS4;
}
else {
$insurance = MODULE_SHIPPING_USPS_INS4 + ((ceil($costperpkg/100) -3) * MODULE_SHIPPING_USPS_INS5);
}
}
// if insurance allowed and is not US or Canada then calculate international insurance
else {
if ($costperpkg<=50) {
$insurance=MODULE_SHIPPING_USPS_INS6;
}
else if ($costperpkg<=100) {
$insurance=MODULE_SHIPPING_USPS_INS7;
}
else if ($costperpkg<=200) {
$insurance=MODULE_SHIPPING_USPS_INS8;
}
else if ($costperpkg<=300) {
$insurance=MODULE_SHIPPING_USPS_INS9;
}
else {
$insurance = MODULE_SHIPPING_USPS_INS9 + ((ceil($costperpkg/100) - 3) * MODULE_SHIPPING_USPS_INS10);
}
}
// usps doesnt accept zero weight
$shipping_weight = ($shipping_weight < 0.1 ? 0.1 : $shipping_weight);
$shipping_pounds = floor ($shipping_weight);
$shipping_ounces = round(16 * ($shipping_weight - floor($shipping_weight)));
$this->_setWeight($shipping_pounds, $shipping_ounces);
// Added by Kevin Chen (kkchen@uci.edu); Fixes the Parcel Post Bug July 1, 2004
// Refer to http://www.usps.com/webtools/htm/Domestic-Rates.htm documentation
// Thanks Ryan
if($shipping_pounds > 35 || ($shipping_pounds == 0 && $shipping_ounces < 6)){
$this->_setMachinable('False');
}
else{
$this->_setMachinable('True');
}
$this->insurance_cost = $insurance;
// End Kevin Chen July 1, 2004
}
function _setService($service)
{
$this->service = $service;
}
function _setWeight($pounds, $ounces=0)
{
$this->pounds = $pounds;
$this->ounces = $ounces;
}
function _setContainer($container)
{
$this->container = $container;
}
function _setSize($size)
{
$this->size = $size;
}
function _setMachinable($machinable)
{
$this->machinable = $machinable;
}
function PhoneClean($phone)
{
$res = preg_replace('/[(]|[)]|[\-]|[ ]|[#]|[\.]|[a-z](.*)|[A-Z](.*)/g', '', $phone);
if ( strlen($res) > 10 ) {
$res = substr($res, 0, 10);
}
return $res != '' ? $res : $phone;
}
function GetQuote($method = '')
{
if ( isset($this->types[$method]) || in_array($method, $this->intl_types)) {
$this->_setService($method);
}
$this -> _setContainer('None');
$this -> _setSize('REGULAR');
$this -> SetInsurance(); // ???
if ($this->order['ShippingCountry'] == $this->shipping_origin_country) {
$request='<?xml version="1.0"?>';
// PASSWORD="'.$this->usps_password.'"
$request.= '<RateV3Request USERID="'.$this->usps_userid.'">';
$services_count = 0;
if (isset($this->service)) {
$this->types = array($this->service => $this->types[$this->service]);
}
$dest_zip = str_replace(' ', '', $this->order['ShippingZip']);
$dest_zip = substr($dest_zip, 0, 5);
reset($this->types);
$allowed_types = explode(", ", MODULE_SHIPPING_USPS_TYPES);
while (list($key, $value) = each($this->types))
{
if ( !in_array($key, $allowed_types) ) continue;
$request .= '<Package ID="'.$services_count.'">'.
'<Service>'.$key.'</Service>'.
'<ZipOrigination>'.$this->store_zip5.'</ZipOrigination>'.
'<ZipDestination>'.$dest_zip.'</ZipDestination>'.
'<Pounds>'.$this->pounds.'</Pounds>'.
'<Ounces>'.$this->ounces.'</Ounces>'.
'<Size>'.$this->size.'</Size>'.
'<Machinable>'.$this->machinable.'</Machinable>'.
'</Package>';
$services_count++;
}
$request .= '</RateV3Request>';
$api_query = 'RateV3';
}
else {
$request = '<IntlRateRequest USERID="'.$this->usps_userid.'">'.
'<Package ID="0">'.
'<Pounds>'.$this->pounds.'</Pounds>'.
'<Ounces>'.$this->ounces.'</Ounces>'.
'<MailType>Package</MailType>'.
'<Country>'.$this->countries[$this->order['ShippingCountry']].'</Country>'.
'</Package>'.
'</IntlRateRequest>';
$api_query = 'IntlRate';
}
$request = 'API='.$api_query.'&XML=' . urlencode($request);
$body = $this->PostQuery($request);
$body = str_replace(chr(146), '', $body); // for bad `
// check for errors
if (strpos($body, '<Error>') !== false) {
$errors = Array ();
preg_match_all('/<Number>(.*?)<\/Number>/s', $body, $error_numbers);
preg_match_all('/<Description>(.*?)<\/Description>/s', $body, $error_descriptions);
foreach ($error_numbers[1] as $index => $error_number) {
$errors[$index] = $error_descriptions[1][$index];
if ($this->Application->isDebugMode()) {
$errors[$index] .= ' (' . $error_number . ')';
}
}
$errors = array_unique($errors); // we may have same errors on many packages, so don't show duplicates
return Array('error' => implode('<br/>', $errors));
}
// parse response
$xml_helper =& $this->Application->recallObject('kXMLHelper');
/* @var $xml_helper kXMLHelper */
$root_node =& $xml_helper->Parse($body);
/* @var $root_node kXMLNode */
$rates = Array();
// Domestic shipping
if ($this->order['ShippingCountry'] == $this->shipping_origin_country) {
$i = 0;
$postage_node =& $root_node->FindChild('Package');
do {
// $parcel_node =& $postage_node->firstChild;
$service = $postage_node->FindChildValue('MailService');
if ( $service != '' ) {
$i++;
$rates[$i] = Array();
$rates[$i]['Title'] = $service;
$rates[$i]['Rate'] = $this->insurance_cost + $postage_node->FindChildValue('Rate');
}
}
while ( $postage_node =& $postage_node->NextSibling());
}
else {
// for International Rates !!!
$allowed_types = array();
foreach( explode(", ", MODULE_SHIPPING_USPS_TYPES_INTL) as $value ) {
$allowed_types[$value] = $this->intl_types[$value];
}
$i = 0;
$service_node =& $root_node->FindChild('Service');
do {
$service = trim($service_node->FindChildValue('SvcDescription'));
if( !in_array($service, $allowed_types) ) continue;
$i++;
if ( $service_node->FindChildValue('MaxWeight') >= $this->pounds ) {
$rates[$i] = Array();
$rates[$i]['Title'] = $service;
$rates[$i]['MaxDimensions'] = $service_node->FindChildValue('MaxDimensions');
$rates[$i]['MaxWeight'] = $service_node->FindChildValue('MaxWeight');
$rates[$i]['SvcCommitments'] = $service_node->FindChildValue('SvcCommitments');
$rates[$i]['Rate'] = $this->insurance_cost + $service_node->FindChildValue('Postage');
}
}
while ( $service_node =& $service_node->NextSibling());
}
// print_r($rates);
// die('here');
return $rates;
}
function PostOrder()
{
$request='';
$base_request = '';
$this->SetInsurance();
// $this->order['ShippingCountry'] = $this->GetUSPSCountry($this->order['ShippingCountry']);
// Domestic Order
if ($this->order['ShippingCountry'] == $this->shipping_origin_country) {
// $dest_zip = str_replace(' ', '', $this->order['ShippingZip5']);
$this->order['ShippingZip5'] = substr($this->order['ShippingZip5'], 0, 5);
$WeightInOunces = floor($this->pounds * 16 + $this->ounces);
$base_request ='
<Option>1</Option>
<ImageParameters></ImageParameters>
<FromName>'.$this->store_name.'</FromName>
<FromFirm>'.$this->company_name.'</FromFirm>
<FromAddress1>'.$this->store_address1.'</FromAddress1>
<FromAddress2>'.$this->store_address2.'</FromAddress2>
<FromCity>'.$this->store_city.'</FromCity>
<FromState>'.$this->store_state.'</FromState>
<FromZip5>'.$this->store_zip5.'</FromZip5>
<FromZip4>'.$this->store_zip4.'</FromZip4>
<ToName>'.$this->order['FirstName'].' '.$this->order['LastName'].'</ToName>
<ToFirm>'.$this->order['ShippingCompany'].'</ToFirm>
<ToAddress1>'.$this->order['ShippingAddress2'].'</ToAddress1>
<ToAddress2>'.$this->order['ShippingAddress1'].'</ToAddress2>
<ToCity>'.$this->order['ShippingCity'].'</ToCity>
<ToState>'.$this->order['ShippingState'].'</ToState>
<ToZip5>'.$this->order['ShippingZip5'].'</ToZip5>
<ToZip4>'.$this->order['ShippingZip4'].'</ToZip4>
<WeightInOunces>'.$WeightInOunces.'</WeightInOunces>
<ServiceType>'.$this->order['ShippingService'].'</ServiceType>
<ImageType>PDF</ImageType>
<LabelDate>'.date('m/d/Y',time()).'</LabelDate>
<CustomerRefNo></CustomerRefNo>
<AddressServiceRequested></AddressServiceRequested>
<SenderName></SenderName><SenderEMail></SenderEMail>
<RecipientName></RecipientName>
<RecipientEMail></RecipientEMail>
';
$api_query = 'DeliveryConfirmationV3';
$xml_request = 'DeliveryConfirmationV3.0Request';
}
else {
// International Order(s)
$shipping_service = strtolower($this->order['ShippingService']);
$base_request = '<Option/>
<ImageParameters/>
<FromFirstName>'.$this->store_first_name.'</FromFirstName>
<FromLastName>'.$this->store_last_name.'</FromLastName>
<FromFirm>'.$this->company_name.'</FromFirm>
<FromAddress1>'.$this->store_address1.'</FromAddress1>
<FromAddress2>'.$this->store_address2.'</FromAddress2>
<FromCity>'.$this->store_city.'</FromCity>
<FromState>'.$this->store_state.'</FromState>
<FromZip5>'.$this->store_zip5.'</FromZip5>
<FromPhone>'.$this->PhoneClean($this->store_phone).'</FromPhone>
<ToName>'.$this->order['FirstName'].' '.$this->order['LastName'].'</ToName>
<ToFirm>'.$this->order['ShippingCompany'].'</ToFirm>
<ToAddress1></ToAddress1>
<ToAddress2>'.$this->order['ShippingAddress2'].'</ToAddress2>
<ToAddress3>'.$this->order['ShippingAddress1'].'</ToAddress3>
<ToCity>'.$this->order['ShippingCity'].'</ToCity>';
if ( $this->order['ShippingProvince'] != '' ) {
$base_request.='
<ToProvince>'.$this->order['ShippingProvince'].'</ToProvince>';
}
$base_request.='
<ToCountry>'.$this->countries[$this->order['ShippingCountry']].'</ToCountry>
<ToPostalCode>'.$this->order['ShippingZip'].'</ToPostalCode>
<ToPOBoxFlag>N</ToPOBoxFlag>
<ToPhone>'.$this->PhoneClean($this->order['ShippingPhone']).'</ToPhone>
<ToFax>'.$this->PhoneClean($this->order['ShippingFax']).'</ToFax>
<ToEmail>'.$this->order['Email'].'</ToEmail>
<ShippingContents>';
// add items
foreach ( $this->order['Items'] as $k => $value ) {
$base_request.='
<ItemDetail>
<Description>Computer Parts</Description>
<Quantity>'.$value['Qty'].'</Quantity>
<Value>'.($value['Price'] * $value['Qty']).'</Value>
<NetPounds>'.$value['NetPounds'].'</NetPounds>
<NetOunces>'.$value['NetOunces'].'</NetOunces>
<HSTariffNumber>123456</HSTariffNumber>
<CountryOfOrigin>United States</CountryOfOrigin>
</ItemDetail>';
}
// end add items
$base_request.='
</ShippingContents>
<GrossPounds>'.$this->pounds.'</GrossPounds>
<GrossOunces>'.$this->ounces.'</GrossOunces>
<ContentType>MERCHANDISE</ContentType>
<Agreement>Y</Agreement>
<InvoiceNumber>'.$this->order['InvoiceNumber'].'</InvoiceNumber>
<ImageType>PDF</ImageType>
<ImageLayout>ALLINONEFILE</ImageLayout>
<LabelDate>'.date('m/d/Y',time()).'</LabelDate>
';
if (strpos($shipping_service, 'express') !== false) {
$xml_request = 'ExpressMailIntlRequest';
$api_query = 'ExpressMailIntl';
}
elseif (strpos($shipping_service, 'priority') !== false) {
$xml_request = 'PriorityMailIntlRequest';
$api_query = 'PriorityMailIntl';
}
else {
$xml_request = 'FirstClassMailIntlRequest';
$api_query = 'FirstClassMailIntl';
}
}
$request.= '<'.$xml_request.' USERID="'.$this->usps_userid.'">';
$request.= $base_request;
$request.= '</'.$xml_request.'>';
// die($request);
$request = 'API='.$api_query.'&XML='.urlencode($request);
$body = $this->PostQuery($request, 1);
// check for errors
if (strpos($body, '<Error>') !== false) {
$errors = Array ();
preg_match_all('/<Number>(.*?)<\/Number>/s', $body, $error_numbers);
preg_match_all('/<Description>(.*?)<\/Description>/s', $body, $error_descriptions);
foreach ($error_numbers[1] as $index => $error_number) {
$errors[$index] = Array ('error_number' => $error_number, 'error_description' => $error_descriptions[1][$index]);
}
// TODO: find a way to return other error messages in same package as well
return $errors[0];
}
// parse response
$xml_helper =& $this->Application->recallObject('kXMLHelper');
$root_node =& $xml_helper->Parse($body);
/* @var $root_node kXMLNode */
$Postage = 0;
$label_file = $TrackingNumber = $PostnetBarCode = '';
// Domestic shipping
if ($this->order['ShippingCountry'] == $this->shipping_origin_country ) {
$delivery_node =& $root_node->FindChild('DeliveryConfirmationV3.0Response');
do {
$TrackingNumber = $delivery_node->FindChildValue('DeliveryConfirmationNumber');
$PostnetBarCode = $delivery_node->FindChildValue('Postnet');
$DeliveryConfirmationLabel = base64_decode($delivery_node->FindChildValue('DeliveryConfirmationLabel'));
}
while ( $delivery_node =& $delivery_node->NextSibling());
}
else {
if (strpos($shipping_service, 'express') !== false) {
$node_title = 'ExpressMailIntlResponse';
}
elseif (strpos($shipping_service, 'priority') !== false) {
$node_title = 'PriorityMailIntlResponse';
}
else {
$node_title = 'FirstClassMailIntlResponse';
}
$delivery_node =& $root_node->FindChild($node_title);
$PostnetBarCode = $delivery_node->FindChildValue('BarcodeNumber');
$Postage = $delivery_node->FindChildValue('Postage');
$DeliveryConfirmationLabel = base64_decode($delivery_node->FindChildValue('LabelImage'));
}
if ( $TrackingNumber != '' ) {
$label_file = USPS_LABEL_FOLDER.$TrackingNumber.".pdf";
}
elseif ( $PostnetBarCode != '' ) {
$label_file = USPS_LABEL_FOLDER.$PostnetBarCode.".pdf";
}
if ( $label_file != '' ) {
$file_helper =& $this->Application->recallObject('FileHelper');
/* @var $file_helper FileHelper */
$file_helper->CheckFolder(USPS_LABEL_FOLDER);
if (!$handle = fopen($label_file, 'a')) echo "Cannot open file ($label_file)";
if ( @fwrite($handle, $DeliveryConfirmationLabel) === FALSE) echo "Cannot write to file ($label_file)";
}
return array('TrackingNumber' => $TrackingNumber, 'PostnetBarCode' => $PostnetBarCode, 'Postage' => $Postage);
}
function GetUSPSCountry($country, $default = 'US')
{
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
/* @var $cs_helper kCountryStatesHelper */
$country = $cs_helper->getCountryIso($country);
return $country == '' ? $default : $country;
}
function GetShippingQuotes($params = null)
{
$weights = Kg2Pounds($params['packages']['0']['weight']);
$weight = '';
$weight = $weights[0];
if ( $weights[1] != '' ) {
$weight.='.'.$weights[1];
}
$country = $this->GetUSPSCountry($params['dest_country']);
$this->order = Array();
$this->order['ShippingWeight'] = $weight;
$this->order['ShippingNumBoxes'] = 1;
$this->order['ShippingZip'] = $params['dest_postal'];
$this->order['SubTotal'] = $params['amount'];
$this->order['ShippingCountry'] = $country;
$shipping_types = Array();
$rates = $this->GetQuote();
if ( !isset($rates['error']) ) {
- $this->Application->RemoveVar('usps_errors');
+ $this->Application->RemoveVar('sqe_error');
$i = 1;
foreach ($rates as $k => $rate ) {
$shipping_types['USPS_'.$i] = Array(
'ShippingId' => 'USPS_'.$i,
'TotalCost' => $rate['Rate'],
'ShippingName' => $rate['Title'],
'Type' => '1',
'CODFlat' => '0',
'CODPercent' => '0',
'PortalGroups' => ',15,',
'InsuranceFee' => '',
'COD' => '0',
'SelectedOnly' => '0',
'Code' => $rate['Title']
);
$i++;
}
}
else {
// for Front-End (shipping screen) and Admin (Shipping Tab on editing order)
- $this->Application->StoreVar('usps_errors', $rates['error']);
+ $this->Application->StoreVar('sqe_error', $rates['error']);
}
$this->Application->StoreVar('current_usps_shipping_types', serialize($shipping_types));
return $shipping_types;
}
function TrackOrder($TrackingNumber='')
{
if ( $TrackingNumber != '' ) {
// http://testing.shippingapis.com/ShippingAPITest.dll?API=TrackV2&XML=<TrackFieldRequest USERID="402INTEC7634"><TrackID ID="EJ958083578US"></TrackID></TrackFieldRequest>
$request = '<TrackRequest USERID="'.$this->usps_userid.'"><TrackID ID="'.$TrackingNumber.'"></TrackID></TrackRequest>';
$api_query = 'TrackV2';
$request = 'API='.$api_query.'&XML='.urlencode($request);
$body = $this->PostQuery($request);
// check for errors
if (strpos($body, '<Error>') !== false) {
$errors = Array ();
preg_match_all('/<Number>(.*?)<\/Number>/s', $body, $error_numbers);
preg_match_all('/<Description>(.*?)<\/Description>/s', $body, $error_descriptions);
foreach ($error_numbers[1] as $index => $error_number) {
$errors[$index] = $error_descriptions[1][$index];
if ($this->Application->isDebugMode()) {
$errors[$index] .= ' (' . $error_number . ')';
}
}
$errors = array_unique($errors); // we may have same errors on many packages, so don't show duplicates
return Array('error' => implode('<br/>', $errors));
}
$xml_helper =& $this->Application->recallObject('kXMLHelper');
$root_node =& $xml_helper->Parse($body);
/* @var $root_node kXMLNode */
// Tracking Shipping
$delivery_node =& $root_node->FindChild('TrackInfo');
$TrackSummary = $delivery_node->FindChildValue('TrackSummary');
// echo ' TrackSummary ('.$TrackingNumber.') = '.$TrackSummary.'<br>';
return strpos($TrackSummary, 'delivered') !== false ? 1 : 0;
}
else
return false;
}
function ProcessTrackOrders()
{
$sql = sprintf('SELECT `OrderId`, `ShippingTracking` FROM %s WHERE `Status` > 3 AND `Delivered` = 0', TABLE_PREFIX.'Orders');
$orders = $this->Application->Conn->Query($sql);
foreach ( $orders as $k => $order ) {
// try to track order
if ( $order['ShippingTracking'] != '' && $this->TrackOrder($order['ShippingTracking']) ) {
$update_order = sprintf("UPDATE %s SET `Delivered` = 1 WHERE %s = %s",
TABLE_PREFIX.'Orders',
$this->Application->getUnitOption('ord', 'IDField'),
$order[$this->Application->getUnitOption('ord', 'IDField')]
);
$this->Application->Conn->Query($update_order);
}
}
}
function PostQuery($request, $secure=0)
{
switch (MODULE_SHIPPING_USPS_SERVER) {
case 'production':
$usps_server = $secure > 0 ? 'https://secure.shippingapis.com' : 'http://production.shippingapis.com' ;
$api_dll = 'ShippingAPI.dll';
break;
case 'test':
$usps_server = $secure > 0 ? 'https://secure.shippingapis.com' : 'http://testing.shippingapis.com';
$api_dll = 'ShippingAPITest.dll';
break;
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $usps_server.'/'.$api_dll.'?'.$request);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$body = curl_exec($curl);
curl_close($curl);
if (defined('USPS_LOG_FILE')) {
$filename = USPS_LOG_FILE;
if ( !$fp = fopen($filename, "a") ) echo("Failed opening file $filename");
}
$request_url = sprintf("Date %s : IP %s\n\nPost\n\n%s\n\nReplay\n\n%s\n\n",
date("m/d/Y H:i:s",time()),
$_SERVER['REMOTE_ADDR'],
$usps_server.'/'.$api_dll.'?'.urldecode($request),
$body
);
if (defined('USPS_LOG_FILE')) {
if (!fwrite($fp, $request_url)) echo("Failed writing to file $filename");
fclose($fp);
}
return $body;
}
+ /**
+ * Returns available shipping types
+ *
+ * @return Array
+ * @todo Get possible shipping types based on MODULE_SHIPPING_USPS_TYPES and MODULE_SHIPPING_USPS_TYPES_INTL consntants
+ */
function GetAvailableTypes()
{
- return array();
- $conn =& $this->Application->GetADODBConnection();
- $types = $conn->Query('SELECT * FROM '.TABLE_PREFIX.'ShippingType');
-
- $ret = array();
- foreach ($types as $a_type) {
- $a_type['_ClassName'] = get_class($this);
- $a_type['_Id'] = 'CUST_'.$a_type['ShippingID'];
- $a_type['_Name'] = '(Custom) '.$a_type['Name'];
- $ret[] = $a_type;
- }
- return $ret;
-
+ return Array (
+ Array (
+ '_ClassName' => get_class($this),
+ '_Id' => 'USPS',
+ '_Name' => 'USPS (Default)'
+ )
+ );
}
function LoadParams()
{
$sql = 'SELECT Properties FROM '.$this->Application->getUnitOption('sqe', 'TableName').'
WHERE ClassName="USPS"';
$db =& $this->Application->GetADODBConnection();
return unserialize($db->GetOne($sql));
}
function _prepare_xml_param($value) {
return strip_tags($value);
}
/**
* Returns virtual field names, that will be saved as properties
*
* @return Array
*/
function GetEngineFields()
{
return Array ('AccountLogin');
}
+
+ /**
+ * Creates new USPS order
+ *
+ * @param OrdersItem $object
+ * @param bool $dry_run
+ * @return Array
+ */
+ function MakeOrder(&$object, $dry_run = false)
+ {
+ $ShippingInfo = unserialize($object->GetDBField('ShippingInfo'));
+ $ShippingCode = $USPSMethod = '';
+ $ShippingCountry = $this->GetUSPSCountry($object->GetDBField('ShippingCountry'));
+
+ $UserName = explode(" ", $object->GetDBField('ShippingTo'));
+
+ $item_table = TABLE_PREFIX.'OrderItems';
+ if ($this->Application->isAdminUser) {
+ // this strange contraption actually uses temp table from object (when in temp mode)
+ $order_table = $object->TableName;
+ $item_table = str_replace('Orders', 'OrderItems', $order_table);
+ }
+
+ $sOrder = Array (
+ 'FirstName' => $UserName[0],
+ 'LastName' => $UserName[1],
+ 'ShippingCompany' => $object->GetDBField('ShippingCompany'),
+ 'ShippingAddress1' => $object->GetDBField('ShippingAddress1'),
+ 'ShippingAddress2' => $object->GetDBField('ShippingAddress2'),
+ 'ShippingCity' => $object->GetDBField('ShippingCity'),
+ 'ShippingZip' => $object->GetDBField('ShippingZip'),
+ 'ShippingCountry' => $ShippingCountry,
+ 'ShippingPhone' => $this->PhoneClean($object->GetDBField('ShippingPhone')),
+ 'ShippingFax' => $this->PhoneClean($object->GetDBField('ShippingFax')),
+ 'ShippingNumBoxes' => '1',
+ );
+
+ $sql = 'SELECT SUM(`Quantity` * `Weight`)
+ FROM ' . $item_table . '
+ WHERE ' . $object->IDField . ' = ' . $object->GetID();
+ $weight = $this->Application->Conn->GetOne($sql);
+
+ $f_weight = Kg2Pounds($weight);
+ $sOrder['ShippingWeight'] = $f_weight[0].'.'.$f_weight[1];
+
+ foreach ($ShippingInfo as $k => $ShippingRow) {
+ $ShippingCode = $ShippingRow['Code'];
+ }
+
+ if ( $object->GetDBField('ShippingCountry') == 'USA' ) {
+ $sOrder['ShippingState'] = $object->GetDBField('ShippingState');
+ $USPSMethod = $ShippingCode;
+ unset($sOrder['ShippingZip']);
+
+ $sOrder['ShippingZip5'] = substr(trim($object->GetDBField('ShippingZip')), 0, 5);
+ $sOrder['ShippingZip4'] = '';
+ $sOrder['SubTotal'] = $object->GetDBField('SubTotal');
+ }
+ else {
+ $USPSMethod = array_search($ShippingCode, $this->intl_types);
+ $sOrder['ShippingProvince'] = '';
+
+ if ( $ShippingCountry == 'CA' ) {
+ $sOrder['ShippingProvince'] = $object->GetField('ShippingState');
+ }
+
+ // add items
+ $sql = 'SELECT `Quantity`, `Weight`, `Price`
+ FROM ' . $item_table . '
+ WHERE ' . $object->IDField . ' = ' . $object->GetID();
+ $order_items = $this->Application->Conn->Query($sql);
+
+ $i = 1;
+ $Items = Array();
+
+ foreach ($order_items as $k => $order_item) {
+ $p_weight = Array();
+ $p_weight = Kg2Pounds($order_item['Weight']);
+ $Items[$i] = Array('Qty' => $order_item['Quantity'], 'Price' => $order_item['Price'], 'NetPounds' => $p_weight[0], 'NetOunces' => $p_weight[1]);
+ $i++;
+ }
+
+ $sOrder['Items'] = $Items;
+ $sOrder['InvoiceNumber'] = $object->GetDBField('OrderNumber');
+ }
+
+ $sOrder['ShippingService'] = $USPSMethod;
+
+ // make USPS order
+ $this->order = $sOrder;
+ $usps_data = $this->PostOrder();
+
+ // if errors
+ if ( array_key_exists('error_number', $usps_data) ) {
+ return $usps_data;
+ }
+
+ if ( array_key_exists('Postage', $usps_data) ) {
+ $ShippingPrice = '';
+ $ShippingPrice = $usps_data['Postage'];
+ }
+
+ $ShippingTracking = '';
+
+ if ( isset($usps_data['TrackingNumber']) && $usps_data['TrackingNumber'] != '' ) {
+ $ShippingTracking = $usps_data['TrackingNumber'];
+ }
+
+ if ( isset($usps_data['PostnetBarCode']) && $usps_data['PostnetBarCode'] != '' && $ShippingTracking == '' ) {
+ $ShippingTracking = $usps_data['PostnetBarCode'];
+ }
+
+ if ($dry_run == false) {
+ $object->SetDBField('ShippingTracking', $ShippingTracking);
+ $object->Update();
+ }
+ else {
+ $full_path = USPS_LABEL_FOLDER . $ShippingTracking . ".pdf";
+
+ if (file_exists($full_path)) {
+ unlink($full_path);
+ }
+ }
+
+ return $usps_data;
+ }
}
\ No newline at end of file
Index: branches/5.2.x/units/shipping_quote_engines/shipping_quote_engines_config.php
===================================================================
--- branches/5.2.x/units/shipping_quote_engines/shipping_quote_engines_config.php (revision 14088)
+++ branches/5.2.x/units/shipping_quote_engines/shipping_quote_engines_config.php (revision 14089)
@@ -1,212 +1,218 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'sqe',
'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'ShippingQuoteEngineEventHandler', 'file' => 'shipping_quote_engine_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'kDBTagProcessor', 'file' => '', 'build_event' => 'OnBuild'),
'RegisterClasses' => Array (
Array ('pseudo' => 'ShippingQuoteEngine', 'class' => 'ShippingQuoteEngine', 'file' => 'shipping_quote_engine.php', 'build_event' => ''),
Array ('pseudo' => 'CustomShippingQuoteEngine', 'class' => 'CustomShippingQuoteEngine', 'file' => 'custom_shipping_quote_engine.php', 'require_classes' => 'ShippingQuoteEngine', 'build_event' => ''),
Array ('pseudo' => 'Intershipper', 'class' => 'Intershipper', 'file' => 'intershipper.php', 'require_classes' => 'ShippingQuoteEngine', 'build_event' => ''),
Array ('pseudo' => 'USPS', 'class' => 'USPS', 'file' => 'usps.php', 'require_classes' => 'ShippingQuoteEngine', 'build_event' => ''),
Array ('pseudo' => 'ShippingQuoteCollector', 'class' => 'ShippingQuoteCollector', 'file' => 'shipping_quote_collector.php', 'build_event' => '', 'require_classes' => 'ShippingQuoteEngine'),
),
'AutoLoad' => true,
'Hooks' => Array (
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'IDField' => 'EngineId',
'StatusField' => Array ('Status'),
'TitleField' => 'Name',
'TitlePresets' => Array (
'default' => Array ( 'edit_status_labels' => Array ('sqe' => '!la_title_EditingShippingQuoteEngine!'),
),
'engine_list' =>Array ( 'prefixes' => Array ('sqe_List'),
'format' => "!la_title_ShippingQuoteEngines!",
),
'engine_edit' =>Array ( 'prefixes' => Array ('sqe'),
'format' => "#sqe_status# '#sqe_titlefield#' - !la_title_General!",
),
),
'PermSection' => Array ('main' => 'in-commerce:shipping_quote_engines'),
'Sections' => Array (
'in-commerce:shipping_quote_engines' => Array (
'parent' => 'in-commerce:shipping_folder',
'icon' => 'conf_shipping',
'label' => 'la_tab_ShippingQuoteEngines',
'url' => Array ('t' => 'in-commerce/shipping/shipping_list', 'pass' => 'm'),
'permissions' => Array ('view', 'edit', 'advanced:approve', 'advanced:decline'),
'priority' => 4.2,
'type' => stTAB,
),
),
'TableName' => TABLE_PREFIX.'ShippingQuoteEngines',
- 'FilterMenu' => Array (
- 'Groups' => Array (
- Array ('mode' => 'AND', 'filters' => Array ('show_active', 'show_disabled'), 'type' => WHERE_FILTER),
- ),
- 'Filters' => Array (
- 'show_active' => Array ('label' => 'la_Active', 'on_sql' => '', 'off_sql' => '%1$s.Status != 1' ),
- 'show_disabled' => Array ('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Status != 0' ),
- )
- ),
-
'ListSQLs' => Array ( '' => 'SELECT * FROM %s'),
// key - special, value - list select sql
'ItemSQLs' => Array ( '' => 'SELECT * FROM %s'),
'ListSortings' => Array (
- '' => Array (
- 'Sorting' => Array ('Name' => 'asc'),
- )
- ),
+ '' => Array (
+ 'Sorting' => Array ('Name' => 'asc'),
+ )
+ ),
+
'Fields' => Array (
'EngineId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'Name' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'FlatSurcharge' => Array ('type' => 'double', 'not_null' => 1, 'default' => '0'),
'PercentSurcharge' => Array ('type' => 'double', 'not_null' => 1, 'default' => '0'),
'Status' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'la_Enabled', 0 => 'la_Disabled'), 'use_phrases' => 1,
'error_msgs' => Array (
'curl_not_present' => '!la_error_EnableCurlFirst!',
'from_info_not_filled_in' => '!la_error_FillInShippingFromAddress!',
),
'default' => 0, 'not_null' => 1,
),
'Properties' => Array ('type' => 'string', 'default' => NULL),
'ClassName' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
),
'VirtualFields' => Array (
- 'AccountLogin' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
- 'AccountPassword' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
+ 'AccountLogin' => Array ('type' => 'string', 'default' => ''),
+ 'AccountPassword' => Array ('type' => 'string', 'default' => ''),
'UPSEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
- 'UPSAccount' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
+ 'UPSAccount' => Array ('type' => 'string', 'default' => ''),
'UPSInvoiced' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Invoiced', 0 => 'NotInvoiced'),
+ 'default' => 0
),
'FDXEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
- 'FDXAccount' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
+ 'FDXAccount' => Array ('type' => 'string', 'default' => ''),
'FDXInvoiced' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Invoiced', 0 => 'NotInvoiced'),
+ 'default' => 0
),
'DHLEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
- 'DHLAccount' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
+ 'DHLAccount' => Array ('type' => 'string', 'default' => ''),
'DHLInvoiced' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Invoiced', 0 => 'NotInvoiced'),
+ 'default' => 0
),
'USPEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
- 'USPAccount' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
+ 'USPAccount' => Array ('type' => 'string', 'default' => ''),
'USPInvoiced' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Invoiced', 0 => 'NotInvoiced'),
+ 'default' => 0
),
'ARBEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
- 'ARBAccount' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
+ 'ARBAccount' => Array ('type' => 'string', 'default' => ''),
'ARBInvoiced' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Invoiced', 0 => 'NotInvoiced'),
+ 'default' => 0
),
'1DYEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
'2DYEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
'3DYEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
'GNDEnabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'Enabled', 0 => 'Disabled'),
+ 'default' => 0
),
'ShipMethod' => Array (
'type' => 'string',
'formatter' => 'kOptionsFormatter',
'options' => Array (
'DRP' => 'Drop-Off At Carrier Location',
'PCK' => 'Schedule A Special Pickup',
'SCD' => 'Regularly Scheduled Pickup'),
+ 'default' => null
),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
0 => 'icon16_disabled.png',
1 => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array (
'EngineId' => Array ( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 50, ),
'Name' => Array ( 'title' => 'la_col_ShippingQuoteEngineName', 'filter_block' => 'grid_like_filter', 'width' => 250, ),
'FlatSurcharge' => Array ( 'title' => 'la_col_FlatSurcharge', 'filter_block' => 'grid_float_range_filter', 'width' => 150, ),
'PercentSurcharge' => Array ( 'title' => 'la_col_PercentSurcharge', 'filter_block' => 'grid_float_range_filter', 'width' => 150, ),
'Status' => Array ( 'title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 150, ),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/shipping_quote_engines/shipping_quote_engine.php
===================================================================
--- branches/5.2.x/units/shipping_quote_engines/shipping_quote_engine.php (revision 14088)
+++ branches/5.2.x/units/shipping_quote_engines/shipping_quote_engine.php (revision 14089)
@@ -1,197 +1,209 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class ShippingQuoteEngine extends kHelper {
/**
* Quote engine specific properties
*
* @var Array
*/
var $properties = Array ();
function ShippingQuoteEngine()
{
parent::kHelper();
$this->initProperties();
}
/**
* $params = Array(
* 'AccountLogin' => 'login',
* 'AccountPassword' => 'pass',
* 'carriers' => Array(
* Array(
* 'name' => 'UPS',
* 'account' => '',
* 'invoiced' => '0'
* ),
* Array(
* 'name' => 'DHL',
* 'account' => '',
* 'invoiced' => '0'
* ),
* Array(
* 'name' => 'FDX',
* 'account' => '',
* 'invoiced' => '0'
* ),
* Array(
* 'name' => 'USP',
* 'account' => '',
* 'invoiced' => '0'
* ),
* Array(
* 'name' => 'ARB',
* 'account' => '',
* 'invoiced' => '0'
* ),
* ),
* 'classes' => Array('1DY', '2DY', '3DY', 'GND'),
*
* 'ShipMethod' => 'DRP',
*
* 'orig_name' => 'John%20Smith',
* 'orig_addr1' => '2275%20Union%20Road',
* 'orig_city' => 'Cheektowaga',
* 'orig_state' => 'NY',
* 'orig_postal' => '14227',
* 'orig_country' => 'US',
*
* // this section is required
* 'dest_name' => 'Vasya%20Pupkin',
* 'dest_addr1' => '175%20E.Hawthorn%20pkwy.',
* 'dest_city' => 'Vernon%20Hills',
* 'dest_state' => 'IL',
* 'dest_postal' => '60061',
* 'dest_country' => 'US',
*
* // this section is required
* 'packages' => Array(
* Array(
* 'package_key' => 'package1',
* 'weight' => '50',
* 'weight_unit' => 'LB',
* 'length' => '25',
* 'width' => '15',
* 'height' => '15',
* 'dim_unit' => 'IN',
* 'packaging' => 'BOX',
* 'contents' => 'OTR',
* 'insurance' => '0'
* ),
* Array(
* 'package_key' => 'package2',
* 'weight' => '50',
* 'weight_unit' => 'LB',
* 'length' => '25',
* 'width' => '15',
* 'height' => '15',
* 'dim_unit' => 'IN',
* 'packaging' => 'BOX',
* 'contents' => 'OTR',
* 'insurance' => '0'
* ),
* ),
*
* 'shipment_id' => 1234;
* );
*
*
* Returns:
*
* $quotes = Array(
* 'package1' =>
* Array(
* Array(
* 'id' => 'INTSH_FDX_2DY',
* 'type' => 'FDX',
* ..
* 'amount' => 24.24,
* )
* Array(
* 'type' => 'FDX',
* ..
* 'amount' => 24.24,
* )
* ),
* 'package2' =>
* Array(
* Array(
* 'id' => 'INTSH_FDX_3DY',
* 'type' => 'FDX',
* ..
* 'amount' => 24.24,
* )
* Array(
* 'type' => 'FDX',
* ..
* 'amount' => 24.24,
* )
* ),
* )
*
* @param Array $params
*/
function GetShippingQuotes($params)
{
}
/**
* Returns list of shipping types, that can be selected on product editing page
*
* @return Array
*/
function GetAvailableTypes()
{
return Array ();
}
/**
* Returns virtual field names, that will be saved as properties
*
* @return Array
*/
function GetEngineFields()
{
return Array ();
}
/**
+ * Sends order to shipping quote engine
+ *
+ * @param OrdersItem $object
+ * @param bool $dry_run
+ * @return Array
+ */
+ function MakeOrder(&$object, $dry_run = false)
+ {
+ return Array ();
+ }
+
+ /**
* Loads properties of shipping quote engine
*
*/
function initProperties()
{
$sql = 'SELECT Properties, FlatSurcharge, PercentSurcharge
FROM ' . $this->Application->getUnitOption('sqe', 'TableName') . '
WHERE LOWER(ClassName) = ' . $this->Conn->qstr( strtolower( get_class($this) ) );
$data = $this->Conn->GetRow($sql);
if (is_array($data)) {
$properties = $data['Properties'] ? unserialize($data['Properties']) : Array ();
$properties['FlatSurcharge'] = $data['FlatSurcharge'];
$properties['PercentSurcharge'] = $data['PercentSurcharge'];
$this->properties = $properties;
}
else {
$this->properties = Array ();
}
}
}
\ No newline at end of file
Index: branches/5.2.x/units/shipping_quote_engines/shipping_quote_collector.php
===================================================================
--- branches/5.2.x/units/shipping_quote_engines/shipping_quote_collector.php (revision 14088)
+++ branches/5.2.x/units/shipping_quote_engines/shipping_quote_collector.php (revision 14089)
@@ -1,156 +1,197 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class ShippingQuoteCollector extends ShippingQuoteEngine {
function GetShippingQuotes($params)
{
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
/* @var $cs_helper kCountryStatesHelper */
$has_states = $cs_helper->CountryHasStates( $cs_helper->getCountryIso($params['dest_country'], true) );
if (
!$params['dest_city'] || !$params['dest_country'] ||
($has_states && !$params['dest_state']) ||
!$params['dest_postal'] || !$params['packages']
) {
return Array ();
}
$cached_var_name = 'ShippingQuotes' . crc32(serialize($params));
$shipping_types = $this->Application->getDBCache($cached_var_name);
if ($shipping_types) {
return unserialize($shipping_types);
}
+ $quotes_valid = true;
$shipping_types = Array();
$classes = $this->getEngineClasses();
foreach ($classes as $class) {
$object =& $this->Application->recallObject($class);
/* @var $object ShippingQuoteEngine */
$new_shipping_types = $object->GetShippingQuotes($params);
- $shipping_types = array_merge($shipping_types, $new_shipping_types);
+
+ if (is_array($new_shipping_types)) {
+ $shipping_types = array_merge($shipping_types, $new_shipping_types);
+ }
+ else {
+ $quotes_valid = false;
+ }
}
uasort($shipping_types, Array(&$this, 'price_sort'));
// exclude not available shipping quotes by products
$limit_types = unserialize($params['limit_types']);
if (is_array($limit_types) && !in_array('ANY', $limit_types)) {
if (count($limit_types) == 0) {
break;
}
$available_types = Array ();
foreach ($shipping_types as $a_type) {
$include = false; // exclude by default
foreach ($limit_types as $limit) {
$include = $include || preg_match("/^$limit/", $a_type['ShippingId']);
if ($include) {
break;
}
}
if (!$include) {
continue;
}
$available_types[ $a_type['ShippingId'] ] = $a_type;
}
$shipping_types = $available_types;
}
// exclude Selected Products Only shipping types, not matching products
$available_types = Array();
foreach ($shipping_types as $a_type) {
if (getArrayValue($a_type, 'SelectedOnly')) {
if (!is_array($limit_types) || !in_array($a_type['ShippingId'], $limit_types)) {
continue;
}
}
$available_types[ $a_type['ShippingId'] ] = $a_type;
}
$shipping_types = $available_types;
- $this->Application->setDBCache($cached_var_name, serialize($shipping_types), 24 * 3600);
+ if ($quotes_valid) {
+ $this->Application->setDBCache($cached_var_name, serialize($shipping_types), 24 * 3600);
+ }
return $shipping_types;
}
function GetAvailableShippingTypes()
{
$shipping_types = Array ();
$classes = $this->getEngineClasses();
foreach ($classes as $class) {
$object =& $this->Application->recallObject($class);
/* @var $object ShippingQuoteEngine */
$new_shipping_types = $object->GetAvailableTypes();
$shipping_types = array_merge($shipping_types, $new_shipping_types);
}
uasort($shipping_types, Array(&$this, 'SortShippingTypes'));
return $shipping_types;
}
/**
* Returns all enabled shipping quote engine classes
*
* @return Array
*/
function getEngineClasses()
{
$sql = 'SELECT Classname
FROM ' . $this->Application->getUnitOption('sqe', 'TableName') . '
WHERE Status = ' . STATUS_ACTIVE;
$classes = $this->Conn->GetCol($sql);
// always persists
$classes[] = 'CustomShippingQuoteEngine';
return $classes;
}
+ /**
+ * Returns shipping quote engine, that matches shipping type used in order
+ *
+ * @param Array $shipping_info
+ * @param int $package_num
+ * @return ShippingQuoteEngine
+ */
+ function &GetClassByType($shipping_info, $package_num = 1)
+ {
+ if ( !$shipping_info || !array_key_exists($package_num, $shipping_info) ) {
+ return false;
+ }
+
+ $classes = $this->getEngineClasses();
+ $shipping_id = $shipping_info[$package_num]['ShippingId'];
+
+ foreach ($classes as $class) {
+ $object =& $this->Application->recallObject($class);
+ /* @var $object ShippingQuoteEngine */
+
+ $shipping_types = $object->GetAvailableTypes();
+
+ foreach ($shipping_types as $index => $shipping_type) {
+ if ( preg_match('/^' . preg_quote($shipping_type['_Id'], '/') . '/', $shipping_id) ) {
+ return $class;
+ }
+ }
+ }
+
+ return false;
+ }
+
function SortShippingTypes($elem1, $elem2)
{
if ($elem1['_Name'] == $elem2['_Name']) {
return 0;
}
return $elem1['_Name'] < $elem2['_Name'] ? -1 : 1;
}
function price_sort($elem1, $elem2)
{
if ($elem1['TotalCost'] == $elem2['TotalCost']) {
return 0;
}
return $elem1['TotalCost'] < $elem2['TotalCost'] ? -1 : 1;
}
}
\ No newline at end of file
Index: branches/5.2.x/units/product_option_combinations/product_option_combinations_config.php
===================================================================
--- branches/5.2.x/units/product_option_combinations/product_option_combinations_config.php (revision 14088)
+++ branches/5.2.x/units/product_option_combinations/product_option_combinations_config.php (revision 14089)
@@ -1,141 +1,142 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'poc',
'ItemClass' => Array ('class' => 'kPOCItem', 'file' => 'products_option_combination_item.php', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'ProductOptionCombinationsEventHandler', 'file' => 'product_option_combinations_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'ProductOptionCombinationsTagProcessor', 'file' => 'product_option_combinations_tag_processor.php', 'build_event' => 'OnBuild'),
'RegisterClasses' => Array (
Array ('pseudo' => 'kCombinationFormatter', 'class' => 'kCombinationFormatter', 'file' => 'product_option_formatters.php', 'build_event' => '', 'require_classes' => 'kFormatter'),
Array ('pseudo' => 'kCombPriceFormatter', 'class' => 'kCombPriceFormatter', 'file' => 'product_option_formatters.php', 'build_event' => '', 'require_classes' => 'kFormatter'),
),
'AutoLoad' => true,
'Hooks' => Array (
),
'AggregateTags' => Array (
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'TitleField' => 'CombinationId',
'IDField' => 'CombinationId',
'TableName' => TABLE_PREFIX.'ProductOptionCombinations',
'ForeignKey' => Array ('p' => 'ProductId'),
'ParentTableKey' => Array ('p' => 'ProductId'),
'ParentPrefix' => 'p',
'AutoDelete' => true,
'AutoClone' => true,
'ListSQLs' => Array ( '' => 'SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'Products ON '.TABLE_PREFIX.'Products.ProductId = %1$s.ProductId
LEFT JOIN '.TABLE_PREFIX.'ProductsPricing ON '.TABLE_PREFIX.'ProductsPricing.ProductId = %1$s.ProductId AND '.TABLE_PREFIX.'ProductsPricing.IsPrimary = 1
',
), // key - special, value - list select sql
'ItemSQLs' => Array ( '' => 'SELECT * FROM %s',
),
'ListSortings' => Array (
'' => Array (
'Sorting' => Array ('Combination' => 'asc'),
'ForcedSorting' => Array ('Priority' => 'desc'),
)
),
'Fields' => Array (
'CombinationId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'ProductId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'Combination' => Array ('type' => 'string', 'required' => 1, 'formatter' => 'kCombinationFormatter', 'format' =>"%s: %s<br>", 'default' => NULL),
'CombinationCRC' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'PriceType' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Txt_=', 2 => 'la_Flat', 3 => 'la_Percent'), 'use_phrases' => 1, 'default' => 3, ),
'Price' => Array ('type' => 'float', 'required' => 1, 'formatter' => 'kFormatter', 'default' => '', ),
'WeightType' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Txt_=', 2 => 'la_Flat', 3 => 'la_Percent'), 'use_phrases' => 1, 'default' => 3, ),
'Weight' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'default' => 0, ),
'Availability' => Array (
'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
- 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
'not_null' => 1, 'default' => 1,
),
'Priority' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'QtyInStock' => Array ('type' => 'int', 'not_null' => '1', 'default' => 0),
'QtyReserved' => Array ('type' => 'int', 'not_null' => '1', 'default' => 0),
'QtyBackOrdered' => Array ('type' => 'int', 'not_null' => '1', 'default' => 0),
'QtyOnOrder' => Array ('type' => 'int', 'not_null' => '1', 'default' => 0),
'SKU' => Array ('type' => 'string', 'not_null' => '1', 'default' => ''),
),
'CalculatedFields' => Array (
'' => Array (
'FinalPrice' => 'IF(%1$s.PriceType = 1, %1$s.Price,
IF(%1$s.PriceType = 2, '.TABLE_PREFIX.'ProductsPricing.Price + %1$s.Price,
'.TABLE_PREFIX.'ProductsPricing.Price * (1 + %1$s.Price/100)
)
)',
'BasePrice' => TABLE_PREFIX.'ProductsPricing.Price',
),
),
'VirtualFields' => Array (
- 'FinalPrice' => Array ('formatter' => 'kCombPriceFormatter', 'format' => '%.2f'),
+ 'FinalPrice' => Array ('type' => 'float', 'formatter' => 'kCombPriceFormatter', 'format' => '%.2f', 'default' => NULL),
+ 'BasePrice' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%.2f', 'default' => NULL),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array (
'Combination' => Array ( 'title' => 'la_col_Combination', 'data_block' => 'grid_combination_td', 'filter_block' => 'grid_empty_filter'),
'SKU' => Array ( 'title' => 'la_col_SKU', 'filter_block' => 'grid_like_filter'),
'Availability' => Array ( 'title' => 'la_col_Availability', 'filter_block' => 'grid_options_filter'),
'Price' => Array ( 'title' => 'la_col_Price', 'data_block' => 'price_td', 'filter_block' => 'grid_float_range_filter'),
/*'Weight' => Array ( 'title' => 'la_col_Weight', 'data_block' => 'weight_td', 'filter_block' => 'grid_float_range_filter'),*/
),
),
'Inventory' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
'module' => 'core',
),
'Selector' => 'radio',
'Fields' => Array (
'Combination' => Array ('title' => 'la_col_Combination', 'data_block' => 'grid_combination_td', 'filter_block' => 'grid_empty_filter'),
'SKU' => Array ('title' => 'la_col_SKU', 'filter_block' => 'grid_like_filter'),
'QtyInStock' => Array ('title' => 'la_col_QtyInStock', 'filter_block' => 'grid_range_filter'),
'QtyReserved' => Array ('title' => 'la_col_QtyReserved', 'filter_block' => 'grid_range_filter'),
'QtyBackOrdered' => Array ('title' => 'la_col_QtyBackOrdered', 'filter_block' => 'grid_range_filter'),
'QtyOnOrder' => Array ('title' => 'la_col_QtyOnOrder', 'filter_block' => 'grid_range_filter'),
),
),
'Radio' => Array (
'Selector' => 'radio',
'Icons' => Array (
'default' => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array (
'Combination' => Array ( 'title' => 'la_col_Combination', 'data_block' => 'grid_combination_td', 'filter_block' => 'grid_empty_filter'),
'FinalPrice' => Array ( 'title' => 'la_col_Price', 'data_block' => 'grid_data_td', 'currency' => 'primary', 'filter_block' => 'grid_float_range_filter'),
/*'Weight' => Array ( 'title' => 'la_col_Weight', 'data_block' => 'weight_td', 'filter_block' => 'grid_float_range_filter'),*/
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/payment_type/payment_type_config.php
===================================================================
--- branches/5.2.x/units/payment_type/payment_type_config.php (revision 14088)
+++ branches/5.2.x/units/payment_type/payment_type_config.php (revision 14089)
@@ -1,171 +1,162 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'pt',
'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'PaymentTypeEventHandler', 'file' => 'payment_type_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'PaymentTypeTagProcessor', 'file' => 'payment_type_tag_processor.php', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'IDField' => 'PaymentTypeId',
'StatusField' => Array ('Status', 'IsPrimary'),
'TableName' => TABLE_PREFIX.'PaymentTypes',
'TitlePresets' => Array (
'default' => Array ( 'new_status_labels' => Array ('pt' => '!la_title_AddingPaymentType!'),
'edit_status_labels' => Array ('pt' => '!la_title_EditingPaymentType!'),
'new_titlefield' => Array ('pt' => '!la_title_NewPaymentType!'),
),
'payment_type_list' =>Array ( 'prefixes' => Array ('pt_List'),
'format' => "!la_title_PaymentTypes!",
),
'payment_type_edit' =>Array ( 'prefixes' => Array ('pt'),
'new_titlefield' => Array ('pt' => '!la_title_NewPaymentType!'),
'format' => "#pt_status# '#pt_titlefield#' - !la_title_General!",
),
'gateway' => Array ('prefixes' => Array ('pt'), 'format' => "#pt_status# '#pt_titlefield#' - !la_title_Gateway!"),
'group_list' => Array ('prefixes' => Array ('pt'), 'format' => "#pt_status# '#pt_titlefield#' - !la_title_Groups!"),
'payment_currencies_edit' => Array ('prefixes' => Array ('pt'), 'format' => "#pt_status# '#pt_titlefield#' - !la_title_Currencies!"),
),
'EditTabPresets' => Array (
'Default' => Array (
'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/payment_type/payment_type_edit', 'priority' => 1),
'gateway' => Array ('title' => 'la_tab_Gateway', 't' => 'in-commerce/payment_type/payment_type_gateway', 'priority' => 2),
'currencies' => Array ('title' => 'la_tab_Currencies', 't' => 'in-commerce/payment_type/payment_type_currencies', 'priority' => 3),
'groups' => Array ('title' => 'la_tab_UserGroups', 't' => 'in-commerce/payment_type/payment_type_groups', 'priority' => 4),
),
),
'PermSection' => Array ('main' => 'in-commerce:payment_types'),
'Sections' => Array (
'in-commerce:payment_types' => Array (
'parent' => 'in-commerce:setting_folder',
'icon' => 'conf_payment_types',
'label' => 'la_tab_PaymentTypes',
'url' => Array ('t' => 'in-commerce/payment_type/payment_type_list', 'pass' => 'm'),
'permissions' => Array ('view', 'add', 'edit', 'delete'),
'priority' => 5,
'type' => stTREE,
),
),
'TitleField' => 'Name', // field, used in bluebar when editing existing item
'SubItems' => Array ('gwfv', 'ptc'),
- 'FilterMenu' => Array (
- 'Groups' => Array (
- Array ('mode' => 'AND', 'filters' => Array ('show_active', 'show_disabled'), 'type' => WHERE_FILTER),
- ),
- 'Filters' => Array (
- 'show_active' => Array ('label' => 'la_Active', 'on_sql' => '', 'off_sql' => '%1$s.Status != 1' ),
- 'show_disabled' => Array ('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Status != 0' ),
- )
- ),
-
'CalculatedFields' => Array (
- '' => Array (
- 'Gateway' => TABLE_PREFIX.'Gateways.Name',
- ),
- ),
+ '' => Array (
+ 'Gateway' => TABLE_PREFIX . 'Gateways.Name',
+ ),
+ ),
'ListSQLs' => Array ( '' => ' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'Gateways ON %1$s.GatewayId = '.TABLE_PREFIX.'Gateways.GatewayId',
), // key - special, value - list select sql
'ItemSQLs' => Array ( '' => 'SELECT * FROM %s',
),
'ListSortings' => Array (
- '' => Array (
- 'ForcedSorting' => Array ('Priority' => 'desc'),
- 'Sorting' => Array ('Name' => 'asc'),
- )
- ),
+ '' => Array (
+ 'ForcedSorting' => Array ('Priority' => 'desc'),
+ 'Sorting' => Array ('Name' => 'asc'),
+ )
+ ),
+
'Fields' => Array (
'PaymentTypeId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,),
'Name' => Array ('type' => 'string', 'not_null' => 1, 'default' => '', 'required' =>true, 'max_len' => 100),
'Description' => Array ('type' => 'string', 'max_len' => 255, 'default' => null),
'Instructions' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
'AdminComments' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
'Status' => Array (
'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
- 'options' => Array ( 0 => 'la_Disabled', 1 => 'la_Active', ), 'use_phrases' => 1,
- 'not_null' => 1, 'default' => 0,
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array ( 0 => 'la_Disabled', 1 => 'la_Active', ), 'use_phrases' => 1,
+ 'not_null' => 1, 'default' => 0,
),
'Priority' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'IsPrimary' => Array (
'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
- 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'BuiltIn' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array ( 1 => 'la_BuiltIn', 0 => 'la_UserDefined' ), 'default' => 0, 'not_null' => 1 ),
'GatewayId' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'Gateways',
'option_key_field' => 'GatewayId',
'option_title_field' => 'Name',
'default' => 1, 'not_null' => 1,
),
'PlacedOrdersEdit' => Array (
'type' => 'int',
- 'formatter' => 'kOptionsFormatter',
- 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array ( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'ProcessingFee' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%.02f', 'not_null' => 1, 'default' => '0.00'),
'PortalGroups' => Array ('type' => 'string', 'default' => null),
),
- /*
+
'VirtualFields' => Array (
- 'Qty' => 1,
+ 'Gateway' => Array ('type' => 'string', 'default' => ''),
),
- */
+
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
'0_0' => 'icon16_disabled.png',
'0_1' => 'icon16_disabled.png',
'1_0' => 'icon16_item.png',
'1_1' => 'icon16_primary.png',
'module' => 'core',
),
'Fields' => Array (
'PaymentTypeId' => Array ( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 50),
'Name' => Array ( 'title' => 'la_col_PaymentTypeName', 'data_block' => 'payment_caption_td', 'filter_block' => 'grid_like_filter', 'width' => 200),
'Description' => Array ( 'title' => 'la_col_Description', 'filter_block' => 'grid_like_filter', 'width' => 200),
'BuiltIn' => Array ( 'title' => 'la_col_BuiltIn', 'filter_block' => 'grid_options_filter', 'width' => 100),
'Status' => Array ( 'title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 100),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/shipping/shipping_event_handler.php
===================================================================
--- branches/5.2.x/units/shipping/shipping_event_handler.php (revision 14088)
+++ branches/5.2.x/units/shipping/shipping_event_handler.php (revision 14089)
@@ -1,196 +1,203 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class ShippingEventHandler extends kDBEventHandler {
/**
* Allows to override standart permission mapping
*
*/
function mapPermissions()
{
parent::mapPermissions();
$permissions = Array(
'OnFlip' => Array('self' => 'add|edit'),
'OnApplyModifier' => Array('self' => 'add|edit'),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
}
/**
* Presets shipping cost object based on shipping fields
*
* @param kEvent $event
*/
function OnAfterItemLoad(&$event)
{
+ parent::OnAfterItemLoad($event);
+
+ if (!$this->Application->isAdminUser) {
+ return ;
+ }
+
$object =& $event->getObject();
$format = '%01.'.$object->GetDBField('PrecisionAfterSep').'f'; // %01.2f
$zero_if_empty = $object->GetDBField('ZeroIfEmpty');
$sc_object =& $this->Application->recallObject('sc', null, Array ('raise_warnings' => 0));
/* @var $sc_object kDBItem */
+ // change default shipping cost values ("Costs" tab on shipping editing) based on field from "Shipping Type"
$flat_options = $sc_object->GetFieldOptions('Flat');
$flat_options['format'] = $format;
$flat_options['default'] = $zero_if_empty ? 0 : null;
$sc_object->SetFieldOptions('Flat', $flat_options);
$perunit_options = $sc_object->GetFieldOptions('PerUnit');
$perunit_options['format'] = $format;
$perunit_options['default'] = $zero_if_empty ? 0 : null;
$sc_object->SetFieldOptions('PerUnit', $perunit_options);
}
/**
* Enter description here...
*
* @param kEvent $event
* @return unknown
*/
function OnApplyModifier(&$event)
{
// $event->CallSubEvent('');
$zones_object =& $this->Application->recallObject('z');
$cost_object =& $this->Application->recallObject('sc');
$object = $event->getObject();
$operation = $this->Application->GetVar('operation');
$formatter =& $this->Application->recallObject('kFormatter');
$modify_by = $formatter->TypeCast($this->Application->GetVar('modify_by'), array('type'=>'float'));
$cost_type = $object->GetDBField('CostType');
$brackets = $this->Application->GetVar('br');
$zones = $this->Application->GetVar('z');
$conditions = Array();
if( is_array($zones) ) {
$conditions['zones'] = 'ZoneID IN ('.implode( ',', array_keys($zones) ).')';
}
if( is_array($brackets) ) {
$conditions['brackets'] = 'BracketId IN ('.implode( ',', array_keys($brackets) ).')';
}
$conditions = implode(' OR ', $conditions);
if(!$conditions)
{
$this->finalizePopup($event);
return false;
}
$sql = 'SELECT ShippingCostId FROM '.$cost_object->TableName.' WHERE '.$conditions;
$res = $this->Conn->GetCol($sql);
switch($cost_type)
{
case 1:
$affected_fields = Array(0 => 'Flat');
break;
case 2:
$affected_fields = Array(0 => 'PerUnit');
break;
default:
$affected_fields = Array(0 => 'PerUnit', 1 => 'Flat');
}
foreach($affected_fields as $field)
{
if($operation == '/' && $modify_by == 0) break;
$sql = 'UPDATE '.$cost_object->TableName.'
SET '.$field.'='.$field.$operation.$modify_by.'
WHERE ShippingCostId IN ('.implode(',', $res).')
AND NOT('.$field.' IS NULL)
AND '.$field.$operation.$modify_by.'>=0';
$this->Conn->Query($sql);
}
$this->finalizePopup($event);
}
function OnFlip(&$event)
{
$object =& $event->getObject();
$aligment = $this->Application->GetLinkedVar('CostsTableAligment');
$new_align = $aligment ? 0 : 1;
$this->Application->SetVar('CostsTableAligment', $new_align);
$this->Application->LinkVar('CostsTableAligment');
$this->OnPreSave($event);
$event->status=erSUCCESS;
}
function OnSave(&$event)
{
$this->OnAfterItemLoad($event);
parent::OnSave($event);
}
function OnAfterItemCreate(&$event)
{
$event->CallSubEvent('OnAnyChange');
}
function OnAfterItemUpdate(&$event)
{
$event->CallSubEvent('OnAnyChange');
}
function OnAfterItemDelete(&$event)
{
$event->CallSubEvent('OnAnyChange');
}
function OnAnyChange(&$event)
{
$sql = 'DELETE FROM '.TABLE_PREFIX.'Cache WHERE VarName LIKE "ShippingQuotes%"';
$this->Conn->Query($sql);
}
function OnPreSaveCreated(&$event){
parent::OnPreSaveCreated($event);
$default_group = $this->Application->ConfigValue('User_LoggedInGroup');
$object =& $event->getObject( Array('skip_autoload' => true) );
$object->SetDBField('PortalGroups', ','.$default_group.',');
}
function UpdateGroups(&$event){
$object = &$event->getObject();
if ($event->Name == 'OnPreSaveCreated') {
$default_group = $this->Application->ConfigValue('User_LoggedInGroup');
$selected_groups = $default_group;
}
else {
$selected_groups = $object->GetDBField('PortalGroups');
}
if ($selected_groups && $selected_groups!='') {
$selected_groups = str_replace('|', ',', $selected_groups);
$selected_groups = ','.trim($selected_groups, ',').',';
$object->SetDBField('PortalGroups', $selected_groups);
}
}
function customProcessing(&$event, $when){
$this->UpdateGroups($event);
}
}
\ No newline at end of file
Index: branches/5.2.x/units/shipping/shipping_config.php
===================================================================
--- branches/5.2.x/units/shipping/shipping_config.php (revision 14088)
+++ branches/5.2.x/units/shipping/shipping_config.php (revision 14089)
@@ -1,201 +1,203 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 's',
'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'ShippingEventHandler', 'file' => 'shipping_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'ShippingTagProcessor', 'file' => 'shipping_tag_processor.php', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'AggregateTags' => Array (
Array (
'AggregateTo' => 'ord',
'AggregatedTagName' => 'PrintShippingTypes',
'LocalTagName' => 'Order_PrintShippingTypes',
),
),
'Hooks' => Array (
Array (
'Mode' => hBEFORE,
'Conditional' => true,
'HookToPrefix' => 'sc',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'OnPropagate', 'OnClearAll' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnPreSave',
),
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'IDField' => 'ShippingID',
'StatusField' => Array ('Status'),
'TitleField' => 'Name',
- 'TitlePresets' => Array (
- 'default' => Array ( 'new_status_labels' => Array ('s' => '!la_title_AddingShippingType!'),
- 'edit_status_labels' => Array ('s' => '!la_title_EditingShippingType!'),
- 'new_titlefield' => Array ('s' => '!la_title_NewShippingType!'),
- ),
- 'shipping_list' =>Array ( 'prefixes' => Array ('s_List'),
- 'format' => "!la_title_ShippingTypes!",
- ),
- 'shipping_type_edit' =>Array ( 'prefixes' => Array ('s'),
- 'format' => "#s_status# '#s_titlefield#' - !la_title_General!",
- ),
-
- 'zones' => Array ('prefixes' => Array ('s'), 'format' => "#s_status# '#s_titlefield#' - !la_title_Zones!"),
- 'brackets' => Array ('prefixes' => Array ('s'), 'format' => "#s_status# '#s_titlefield#' - !la_title_Brackets!"),
- 'costs' => Array ('prefixes' => Array ('s'), 'format' => "#s_status# '#s_titlefield#' - !la_title_Costs!"),
- 'groups' => Array ('prefixes' => Array ('s'), 'format' => "#s_status# '#s_titlefield#' - !la_title_Groups!"),
- 'select_modifier' => Array ('prefixes' => Array ('s'), 'format' => "!la_title_ApplyModifier!"),
- ),
+ 'TitlePresets' => Array (
+ 'default' => Array (
+ 'new_status_labels' => Array ('s' => '!la_title_AddingShippingType!'),
+ 'edit_status_labels' => Array ('s' => '!la_title_EditingShippingType!'),
+ 'new_titlefield' => Array ('s' => '!la_title_NewShippingType!'),
+ ),
+ 'shipping_list' => Array (
+ 'prefixes' => Array ('s_List'),
+ 'format' => "!la_title_ShippingTypes!",
+ ),
+ 'shipping_type_edit' => Array (
+ 'prefixes' => Array ('s'),
+ 'format' => "#s_status# '#s_titlefield#' - !la_title_General!",
+ ),
+ 'zones' => Array (
+ 'prefixes' => Array ('s'),
+ 'format' => "#s_status# '#s_titlefield#' - !la_title_Zones!",
+ ),
+ 'zones_edit' => Array (
+ 'prefixes' => Array ('z'),
+ 'new_status_labels' => Array ('z' => '!la_title_AddingShippingZone!'),
+ 'edit_status_labels' => Array ('z' => '!la_title_EditingShippingZone!'),
+ 'format' => "#z_status# '#z_titlefield#'",
+ ),
+ 'brackets' => Array ('prefixes' => Array ('s'), 'format' => "#s_status# '#s_titlefield#' - !la_title_Brackets!",),
+ 'costs' => Array ('prefixes' => Array ('s'), 'format' => "#s_status# '#s_titlefield#' - !la_title_Costs!",),
+ 'groups' => Array ('prefixes' => Array ('s'), 'format' => "#s_status# '#s_titlefield#' - !la_title_Groups!",),
+ 'select_modifier' => Array ('prefixes' => Array ('s'), 'format' => "!la_title_ApplyModifier!",),
+ ),
'EditTabPresets' => Array (
'Default' => Array (
'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/shipping/shipping_edit', 'priority' => 1),
'zones' => Array ('title' => 'la_tab_ShippingZones', 't' => 'in-commerce/shipping/shipping_zones', 'priority' => 2),
'brackets' => Array ('title' => 'la_tab_Brackets', 't' => 'in-commerce/shipping/shipping_brackets', 'priority' => 3),
'costs' => Array ('title' => 'la_tab_Costs', 't' => 'in-commerce/shipping/shipping_costs', 'priority' => 4),
'groups' => Array ('title' => 'la_tab_UserGroups', 't' => 'in-commerce/shipping/shipping_type_groups', 'priority' => 5),
),
),
'PermSection' => Array ('main' => 'in-commerce:shipping'),
'Sections' => Array (
'in-commerce:shipping_folder' => Array (
'parent' => 'in-commerce:setting_folder',
'icon' => 'conf_shipping',
'use_parent_header' => 1,
'label' => 'la_tab_Shipping',
'permissions' => Array (),
'priority' => 4,
'type' => stTREE,
),
'in-commerce:shipping' => Array (
'parent' => 'in-commerce:shipping_folder',
'icon' => 'conf_shipping',
'label' => 'la_tab_CustomShippingTypes',
'url' => Array ('t' => 'in-commerce/shipping/shipping_custom_list', 'pass' => 'm'),
'permissions' => Array ('view', 'add', 'edit', 'delete', 'advanced:approve', 'advanced:decline'),
'priority' => 4.1,
'type' => stTAB,
),
),
'TableName' => TABLE_PREFIX.'ShippingType',
'SubItems' => Array ('z', 'br'),
- 'FilterMenu' => Array (
- 'Groups' => Array (
- Array ('mode' => 'AND', 'filters' => Array ('show_active', 'show_disabled'), 'type' => WHERE_FILTER),
- ),
- 'Filters' => Array (
- 'show_active' => Array ('label' => 'la_Active', 'on_sql' => '', 'off_sql' => '%1$s.Status != 1' ),
- 'show_disabled' => Array ('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Status != 0' ),
- )
- ),
-
'ListSQLs' => Array ( '' => 'SELECT * FROM %s'),
// key - special, value - list select sql
'ItemSQLs' => Array ( '' => 'SELECT * FROM %s'),
'ListSortings' => Array (
- '' => Array (
- 'Sorting' => Array ('Name' => 'asc'),
- )
- ),
+ '' => Array (
+ 'Sorting' => Array ('Name' => 'asc'),
+ )
+ ),
+
'Fields' => Array (
'ShippingID' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'Code' => Array ('type' => 'string', 'not_null' => 1, 'default' => '', 'required' => 1, 'max_len' =>25, 'error_msgs' => Array ('required' => 'Please fill in')),
'Name' => Array ('type' => 'string', 'not_null' => 1, 'default' => '', 'required' => 1, 'max_len' =>100, 'error_msgs' => Array ('required' => 'Please fill in')),
'SpeedCode' => Array ('type' => 'string', 'not_null' => 1, 'default' => '', 'required' => 1, 'max_len' => 25),
'LocationFrom' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (
1 => 'Riga',
2 => 'Salaspils',
3 => 'Chicago',
4 => 'Dublin'
),
'not_null' => 1, 'default' => 1
),
'Type' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter', 'use_phrases' => 1,
'options' => Array (1 => 'la_ByWeight', 2 => 'la_ByItem', 3 => 'la_ByAmount', 4 => 'la_Handling'),
'not_null' => 1, 'default' => 1),
'BaseFee' => Array ('type' => 'float', 'min_value_inc' =>0, 'formatter' => 'kFormatter', 'format' => '%0.2f', 'default' => 0, 'not_null' => 1),
'CODFlatSurcharge' => Array ('type' => 'float', 'min_value_inc' =>0, 'formatter' => 'kFormatter', 'format' => '%0.2f', 'default' => 0, 'not_null' => 1),
'CODPercentSurcharge' => Array ('type' => 'float', 'min_value_inc' =>0, 'formatter' => 'kFormatter', 'format' => '%0.2f', 'default' => 0, 'not_null' => 1),
'Status' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array ( 1 => 'la_Active', 0 => 'la_Disabled', 2 => 'la_SelectedOnly' ), 'use_phrases' => 1,
'default' => 1, 'not_null' => 1,
),
'CostType' => Array ('type' => 'int', 'options' => Array ( 1 => 'la_Flat', 2 => 'la_PerUnit', 3 => 'la_Combined' ), 'use_phrases' => 1, 'default' => 1, 'not_null' => 1 ),
'ZeroIfEmpty' => Array ('type' => 'int', 'options' => Array ( 1 => 'la_Zeros', 0 => 'la_NoShipments' ), 'use_phrases' => 1, 'default' => 1, 'not_null' => 1 ),
'PrecisionBeforeSep' => Array ('type' => 'int', 'options' => Array ( 1 => '1 digit', 2 => '2 digits', 3 => '3 digits', 4 => '4 digits' ), 'default' => 2, 'not_null' => 1 ),
'PrecisionAfterSep' => Array ('type' => 'int', 'options' => Array ( 0 => 'none', 1 => '1 digit', 2 => '2 digits' ), 'default' => 2, 'not_null' => 1 ),
'PortalGroups' => Array ('type' => 'string', 'default' => null),
'FreeShippingMinAmount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'not_null' => 1, 'format' => '%.2f', 'default' => 0),
'IsFreePromoShipping' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1,
'default' => 0, 'not_null' => 1,
),
'InsuranceFee' => Array ('type' => 'float', 'default' => null),
'InsuranceType' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (2 => 'la_Percent', 1 => 'la_Flat',), 'use_phrases' => 1,
'not_null' => 1, 'default' => 2
),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
0 => 'icon16_disabled.png',
1 => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array (
'ShippingID' => Array ( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 50, ),
'Name' => Array ( 'title' => 'la_col_ShippingName', 'filter_block' => 'grid_range_filter', 'width' => 250, ),
'Type' => Array ( 'title' => 'la_col_ShippingType', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
'SpeedCode' => Array ( 'title' => 'la_col_SpeedCode', 'filter_block' => 'grid_like_filter', 'width' => 130, ),
'BaseFee' => Array ( 'title' => 'la_col_BaseFee', 'filter_block' => 'grid_float_range_filter', 'width' => 100, ),
'IsFreePromoShipping' => Array ( 'title' => 'la_col_IsFreePromoShipping', 'filter_block' => 'grid_options_filter', 'width' => 70, ),
'Status' => Array ( 'title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 170, ),
/*'CODFlatSurcharge' => Array ( 'title' => 'la_col_CODFlatSurcharge', 'filter_block' => 'grid_float_range_filter'),*/
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/coupons/coupons_config.php
===================================================================
--- branches/5.2.x/units/coupons/coupons_config.php (revision 14088)
+++ branches/5.2.x/units/coupons/coupons_config.php (revision 14089)
@@ -1,194 +1,181 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'coup',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'CouponsEventHandler','file'=>'coupons_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'CouponsTagProcessor','file'=>'coupons_tag_processor.php','build_event'=>'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array(
Array(
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'ord',
'HookToSpecial' => '',
'HookToEvent' => Array( 'OnUpdateCart', 'OnCheckout' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnApplyCoupon',
),
),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'IDField' => 'CouponId',
'StatusField' => Array('Status'),
'TitleField' => 'Name',
'TableName' => TABLE_PREFIX.'ProductsCoupons',
'SubItems' => Array('coupi'),
'TitlePresets' => Array(
'default' => Array( 'new_status_labels' => Array('coup'=>'!la_title_Adding_Coupon!'),
'edit_status_labels' => Array('coup'=>'!la_title_Editing_Coupon!'),
'new_titlefield' => Array('coup'=>'!la_title_New_Coupon!'),
),
'coupons_list'=>Array('prefixes' => Array('coup_List'),
'format' => "!la_title_Coupons!",
),
'coupons_edit'=>Array( 'prefixes' => Array('coup'),
'format' => "#coup_status# '#coup_titlefield#' - !la_title_General!",
),
'coupons_items'=>Array('prefixes' => Array('coup','coupi_List'),
'format' => "#coup_status# '#coup_titlefield#' - !la_title_CouponItems!",
),
'coupons_clone'=>Array('prefixes' => Array('coup'),
'format' => "!la_CloneCoupon!",
),
'coupon_selector' => Array('format' => '!la_title_CouponSelector!'),
),
'EditTabPresets' => Array (
'Default' => Array (
'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/discounts/coupon_edit', 'priority' => 1),
'items' => Array ('title' => 'la_tab_CouponsItems', 't' => 'in-commerce/discounts/coupon_items', 'priority' => 2),
),
),
'PermSection' => Array('main' => 'in-commerce:coupons'),
'Sections' => Array(
'in-commerce:coupons' => Array(
'parent' => 'in-commerce:discounts_folder',
'icon' => 'discounts_coupons',
'label' => 'la_tab_Coupons',
'url' => Array('t' => 'in-commerce/discounts/coupons_list', 'pass' => 'm'),
'permissions' => Array('view', 'add', 'edit', 'delete', 'advanced:approve', 'advanced:decline'),
'priority' => 3.2, // <parent_priority>.<own_priority>, because this section replaces parent in tree
'type' => stTAB,
),
),
- 'FilterMenu' => Array(
- 'Groups' => Array(
- Array('mode' => 'AND', 'filters' => Array(0,1,2), 'type' => WHERE_FILTER),
- Array('mode' => 'AND', 'filters' => Array(4,5/*,6*/), 'type' => WHERE_FILTER),
- ),
- 'Filters' => Array(
- 0 => Array('label' =>'la_Enabled', 'on_sql' => '', 'off_sql' => 'Status != 1' ),
- 1 => Array('label' => 'la_Used', 'on_sql' => '', 'off_sql' => 'Status != 2' ),
- 2 => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => 'Status != 0' ),
- 3 => Array(),
- 4 => Array('label' => 'la_Flat', 'on_sql' => '', 'off_sql' => 'Type != 1' ),
- 5 => Array('label' => 'la_Percent', 'on_sql' => '', 'off_sql' => 'Type != 2' ),
- // 6 => Array('label' => 'la_FreeShipping', 'on_sql' => '', 'off_sql' => 'Type != 3' ),
- )
- ),
-
'ListSQLs' => Array( ''=>'SELECT %1$s.* %2$s FROM %1$s',
), // key - special, value - list select sql
'ItemSQLs' => Array( ''=>'SELECT * FROM %1$s',
),
- 'ListSortings' => Array(
- '' => Array(
- 'Sorting' => Array('Name' => 'asc'),
- )
- ),
+ 'ListSortings' => Array (
+ '' => Array(
+ 'Sorting' => Array('Name' => 'asc'),
+ )
+ ),
+
'Fields' => Array(
'CouponId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'Status' => Array (
'type' => 'int', 'formatter' => 'kOptionsFormatter',
'options' => Array ( 1 => 'la_Enabled', 2 => 'la_Used', 0 => 'la_Disabled' ),
'use_phrases' => 1, 'not_null' => 1, 'default' => 1
),
'Name' => Array ( 'type' =>'string', 'required' => 1, 'default' => null, 'max_len' => 255),
'Code' => Array (
'type' => 'string', 'required' => 1, 'default' => null,
'max_len' => 255, 'unique' => Array ('Code'),
),
'Expiration' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null,),
'GroupId' => Array ('type' => 'int', 'default' => null, ),
'Type' => Array (
'type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1,
'options' => Array ( 1 => 'la_Flat', 2 => 'la_Percent'/*, 3 => 'la_FreeShipping'*/),
'not_null' => 1, 'default' => 1,
),
'Amount' => Array ('type' => 'double', 'default' => null),
'LastUsedBy' => Array (
'type' => 'int', 'formatter' => 'kLEFTFormatter',
'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'),
'options' => Array (USER_ROOT => 'root', USER_GUEST => 'Guest'),
'left_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'PortalUser
WHERE `%s` = \'%s\'','left_key_field'=>'PortalUserId',
'left_title_field' => 'Login', 'required' => 0, 'default' => null,
),
'LastUsedOn' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
'NumberOfUses' => Array ('type' => 'int', 'default' => 1),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array(
'default' => 'icon16_item.png',
0 => 'icon16_disabled.png',
1 => 'icon16_item.png',
2 => 'icon16_pending.png',
'module' => 'core',
),
'Fields' => Array(
'CouponId' => Array ('title'=>'la_col_Id', 'data_block' => 'grid_radio_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'Name' => Array( 'title'=>'la_col_Name', 'filter_block' => 'grid_like_filter', 'width' => 150, ),
'Code' => Array( 'title'=>'la_col_CouponCode', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'Expiration' => Array( 'title'=>'la_col_Expiration', 'filter_block' => 'grid_date_range_filter', 'width' => 145, ),
'Type' => Array( 'title'=>'la_col_Type', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
+ 'Status' => Array( 'title'=>'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
'Amount' => Array( 'title'=>'la_col_Amount', 'filter_block' => 'grid_float_range_filter', 'width' => 100, ),
'LastUsedBy' => Array('title'=>'la_col_LastUsedBy', 'filter_block' => 'grid_like_filter', 'width' => 140, ),
'LastUsedOn' => Array('title'=>'la_col_LastUsedOn', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
'NumberOfUses' => Array('title'=>'la_col_NumberOfUses', 'filter_block' => 'grid_range_filter', 'width' => 130, ),
),
),
'Radio' => Array(
'Icons' => Array(
'default' => 'icon16_item.png',
0 => 'icon16_disabled.png',
1 => 'icon16_item.png',
2 => 'icon16_pending.png',
'module' => 'core',
),
'Fields' => Array(
'CouponId' => Array ('title'=>'la_col_Id', 'data_block' => 'grid_radio_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'Name' => Array( 'title'=>'la_col_Name', 'filter_block' => 'grid_like_filter', 'width' => 150, ),
'Code' => Array( 'title'=>'la_col_CouponCode', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'Expiration' => Array( 'title'=>'la_col_Expiration', 'filter_block' => 'grid_date_range_filter', 'width' => 145, ),
'Type' => Array( 'title'=>'la_col_Type', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
+ 'Status' => Array( 'title'=>'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
'Amount' => Array( 'title'=>'la_col_Amount', 'filter_block' => 'grid_float_range_filter', 'width' => 100, ),
'LastUsedBy' => Array('title'=>'la_col_LastUsedBy', 'filter_block' => 'grid_like_filter', 'width' => 140, ),
'LastUsedOn' => Array('title'=>'la_col_LastUsedOn', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
'NumberOfUses' => Array('title'=>'la_col_NumberOfUses', 'filter_block' => 'grid_range_filter', 'width' => 130, ),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/discount_items/discount_items_config.php
===================================================================
--- branches/5.2.x/units/discount_items/discount_items_config.php (revision 14088)
+++ branches/5.2.x/units/discount_items/discount_items_config.php (revision 14089)
@@ -1,122 +1,129 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'di',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'DiscountItemsEventHandler','file'=>'discount_items_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'DiscountItemsTagProcessor','file'=>'discount_items_tag_processor.php','build_event'=>'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array(
Array(
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'p',
'HookToSpecial' => '-item',
'HookToEvent' => Array('OnAfterItemDelete'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnDeleteDiscountedItem',
),
),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'IDField' => 'DiscountItemId',
'StatusField' => Array('Status'),
'TitleField' => 'Name',
'TableName' => TABLE_PREFIX.'ProductsDiscountItems',
'CalculatedFields' => Array(
'' => Array(
'ProductId' => 'p.ProductId',
'ItemName' => 'IF(p.Name IS NULL,c.Name,p.l1_Name)',
'SKU' => 'p.SKU',
'Weight' => 'p.Weight',
'CreatedOn' => 'p.CreatedOn',
'BackOrderDate' => 'p.BackOrderDate',
'Status' => 'p.Status',
'CategoryId' => 'c.CategoryId',
),
),
'ListSQLs' => Array( ''=>' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'Products p ON %1$s.ItemResourceId = p.ResourceId
LEFT JOIN '.TABLE_PREFIX.'Category c ON %1$s.ItemResourceId = c.ResourceId',
), // key - special, value - list select sql
'ItemSQLs' => Array( ''=>'SELECT * FROM %s',
),
/*'BelongsTo' => Array(
Array('prefix' => 'd', 'key' => 'DiscountId', 'ForeignKey' => 'DiscountId'),
),*/
'ForeignKey' => 'DiscountId',
'ParentTableKey' => 'DiscountId',
'ParentPrefix' => 'd',
'AutoDelete' => true,
'AutoClone' => true,
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('ItemName' => 'asc'),
)
),
'Fields' => Array (
'DiscountItemId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0, ),
- 'DiscountId' => Array('type' => 'int', 'default' => 0, ),
- 'ItemResourceId' => Array('type' => 'int', 'default' => 0, ),
+ 'DiscountId' => Array('type' => 'int', 'default' => null, ),
+ 'ItemResourceId' => Array('type' => 'int', 'default' => null, ),
'ItemType' => Array('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array ( 1 => 'la_Product', 2 => 'la_Category', 0 => 'la_WholeOrder' ), 'default' => 1, ),
),
'VirtualFields' => Array(
- 'ProductId' => Array(),
- 'ItemName' => Array(),
- 'SKU' => Array(),
- 'Weight' => Array('type'=>'float', 'min_value_exc'=>0, 'formatter' => 'kFormatter', 'format' => '%0.2f'),
- 'CreatedOn' => Array('formatter' => 'kDateFormatter', 'default' => '#NOW#'),
- 'BackOrderDate' => Array('formatter' => 'kDateFormatter', 'default' => NULL),
+ 'ProductId' => Array('type' => 'int', 'default' => 0),
+ 'ItemName' => Array('type' => 'string', 'default' => ''),
+ 'SKU' => Array('type' => 'string', 'default' => ''),
+ 'Weight' => Array('type' => 'float', 'min_value_exc' => 0, 'formatter' => 'kFormatter', 'format' => '%0.2f', 'default' => NULL),
+ 'CreatedOn' => Array('type' => 'int','formatter' => 'kDateFormatter', 'default' => '#NOW#'),
+ 'BackOrderDate' => Array('type' => 'int','formatter' => 'kDateFormatter', 'default' => NULL),
+ 'Status' => Array (
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1,
+ 'default' => 2,
+ ),
+ 'CategoryId' => Array ('type' => 'int', 'default' => 0),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array('default'=>'icon16_entire_order.gif'),
'Fields' => Array(
'ItemType' => Array( 'title'=>'la_col_ItemType', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_empty_filter'),
),
),
'DiscountItems' => Array(
'Icons' => Array(
'default' => 'icon16_product.png',
0 => 'icon16_product_disabled.png',
1 => 'icon16_product.png',
2 => 'icon16_product_pending.png',
),
'Fields' => Array(
'ProductId' => Array( 'title'=>'la_col_Id', 'data_block' => 'grid_item_td', 'filter_block' => 'grid_range_filter'),
'ItemName' => Array( 'title'=>'la_col_ItemName', 'filter_block' => 'grid_like_filter'),
'ItemType' => Array( 'title'=>'la_col_ItemType', 'filter_block' => 'grid_options_filter'),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/zones/zones_config.php
===================================================================
--- branches/5.2.x/units/zones/zones_config.php (revision 14088)
+++ branches/5.2.x/units/zones/zones_config.php (revision 14089)
@@ -1,99 +1,99 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'z',
'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'ZonesEventHandler', 'file' => 'zones_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'ZonesTagProcessor', 'file' => 'zones_tag_processor.php', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'hooks' => Array (),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'IDField' => 'ZoneID',
'TitleField' => 'Name',
'TitlePresets' => Array (
- 'default' => Array ( 'new_status_labels' => Array ('z' => '!la_title_AddingShippingZone!'),
- 'edit_status_labels' => Array ('z' => '!la_title_EditingShippingZone!'),
- 'new_titlefield' => Array ('z' => '!la_title_NewShippingZone!'),
- ),
+ 'default' => Array (
+ 'new_status_labels' => Array ('z' => '!la_title_AddingShippingZone!'),
+ 'edit_status_labels' => Array ('z' => '!la_title_EditingShippingZone!'),
+ ),
'zones_edit' => Array ( 'prefixes' => Array ('z'), 'format' => "#z_status# - '#z_titlefield#'"),
- ),
- 'TableName' => TABLE_PREFIX.'ShippingZones',
+ ),
+ 'TableName' => TABLE_PREFIX . 'ShippingZones',
'ForeignKey' => 'ShippingTypeID', //Name of the field in this table used as ForeignKey
'ParentTableKey' => 'ShippingID', //Name of the field in parent table linked with ForeignKey
'ParentPrefix' => 's', //Prefix of parent item
'AutoDelete' => true,
'AutoClone' => true,
'SubItems' => Array ('dst', 'sc'),
'ListSQLs' => Array ( '' => 'SELECT * FROM %s'),
// key - special, value - list select sql
'ItemSQLs' => Array ( '' => 'SELECT * FROM %s'),
'ListSortings' => Array (
'' => Array (
'Sorting' => Array ('Name' => 'asc'),
)
),
'Fields' => Array (
'ZoneID' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'ShippingTypeID' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, ),
'Name' => Array (
'type' => 'string', 'max_len' => 100,
'required' => 1, 'default' => '', 'not_null' => 1,
'error_msgs' => Array ('required' => 'Please fill in'),
),
'Type' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter', 'use_phrases' => 1,
'options' => Array (
1 => 'la_ByCountry',
2 => 'la_ByState',
3 => 'la_ByZIP'
),
'not_null' => 1, 'default' => 1,
),
'CODallowed' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_NotAllowed', 1 => 'la_Allowed',), 'use_phrases' => 1,
'not_null' => 1, 'default' => 1,
),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
0 => 'icon16_disabled.png',
1 => 'icon16_item.png',
'module' => 'core',
),
'Fields' => Array (
'ZoneID' => Array ( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 50, ),
'Name' => Array ( 'title' => 'la_col_ShipZoneName', 'filter_block' => 'grid_like_filter', 'width' => 250, ),
'Type' => Array ( 'title' => 'la_col_Type', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
'CODallowed' => Array ( 'title' => 'la_col_CODallowed', 'filter_block' => 'grid_options_filter', 'width' => 120, )
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/orders/orders_event_handler.php
===================================================================
--- branches/5.2.x/units/orders/orders_event_handler.php (revision 14088)
+++ branches/5.2.x/units/orders/orders_event_handler.php (revision 14089)
@@ -1,4193 +1,4109 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class OrdersEventHandler extends kDBEventHandler
{
/**
* Checks permissions of user
*
* @param kEvent $event
*/
function CheckPermission(&$event)
{
if (!$this->Application->isAdminUser) {
if ($event->Name == 'OnCreate') {
// user can't initiate custom order creation directly
return false;
}
$user_id = $this->Application->RecallVar('user_id');
$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
if ($items_info) {
// when POST is present, then check when is beeing submitted
$order_session_id = $this->Application->RecallVar($event->getPrefixSpecial(true).'_id');
$order_dummy =& $this->Application->recallObject($event->Prefix.'.-item', null, Array('skip_autoload' => true));
foreach ($items_info as $id => $field_values) {
if ($order_session_id != $id) {
// user is trying update not his order, even order from other guest
return false;
}
$order_dummy->Load($id);
// session_id matches order_id from submit
if ($order_dummy->GetDBField('PortalUserId') != $user_id) {
// user performs event on other user order
return false;
}
$status_field = array_shift($this->Application->getUnitOption($event->Prefix, 'StatusField'));
if (isset($field_values[$status_field]) && $order_dummy->GetDBField($status_field) != $field_values[$status_field]) {
// user can't change status by himself
return false;
}
if ($order_dummy->GetDBField($status_field) != ORDER_STATUS_INCOMPLETE) {
// user can't edit orders being processed
return false;
}
if ($event->Name == 'OnUpdate') {
// all checks were ok -> it's user's order -> allow to modify
return true;
}
}
}
}
+ if ($event->Name == 'OnQuietPreSave') {
+ $section = $event->getSection();
+
+ if ($this->isNewItemCreate($event)) {
+ return $this->Application->CheckPermission($section.'.add', 1);
+ }
+ else {
+ return $this->Application->CheckPermission($section.'.add', 1) || $this->Application->CheckPermission($section.'.edit', 1);
+ }
+ }
+
return parent::CheckPermission($event);
}
/**
* Allows to override standart permission mapping
*
*/
function mapPermissions()
{
parent::mapPermissions();
$permissions = Array(
// admin
'OnRecalculateItems' => Array('self' => 'add|edit'),
'OnResetToUser' => Array('self' => 'add|edit'),
'OnResetToBilling' => Array('self' => 'add|edit'),
'OnResetToShipping' => Array('self' => 'add|edit'),
'OnMassOrderApprove' => Array('self' => 'advanced:approve'),
'OnMassOrderDeny' => Array('self' => 'advanced:deny'),
'OnMassOrderArchive' => Array('self' => 'advanced:archive'),
'OnMassPlaceOrder' => Array('self' => 'advanced:place'),
'OnMassOrderProcess' => Array('self' => 'advanced:process'),
'OnMassOrderShip' => Array('self' => 'advanced:ship'),
'OnResetToPending' => Array('self' => 'advanced:reset_to_pending'),
'OnLoadSelected' => Array('self' => 'view'), // print in this case
'OnGoToOrder' => Array('self' => 'view'),
// front-end
'OnViewCart' => Array('self' => true),
'OnAddToCart' => Array('self' => true),
'OnRemoveFromCart' => Array('self' => true),
'OnUpdateCart' => Array('self' => true),
'OnUpdateItemOptions' => Array('self' => true),
'OnCleanupCart' => Array('self' => true),
'OnContinueShopping' => Array('self' => true),
'OnCheckout' => Array('self' => true),
'OnSelectAddress' => Array('self' => true),
'OnProceedToBilling' => Array('self' => true),
'OnProceedToPreview' => Array('self' => true),
'OnCompleteOrder' => Array('self' => true),
'OnRemoveCoupon' => Array('self' => true),
'OnRemoveGiftCertificate' => Array('self' => true),
'OnCancelRecurring' => Array('self' => true),
'OnAddVirtualProductToCart' => Array('self' => true),
'OnItemBuild' => Array('self' => true),
'OnDownloadLabel' => Array('self' => true, 'subitem' => true),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
}
function mapEvents()
{
parent::mapEvents();
$common_events = Array(
'OnResetToUser' => 'OnResetAddress',
'OnResetToBilling' => 'OnResetAddress',
'OnResetToShipping' => 'OnResetAddress',
'OnMassOrderProcess' => 'MassInventoryAction',
'OnMassOrderApprove' => 'MassInventoryAction',
'OnMassOrderDeny' => 'MassInventoryAction',
'OnMassOrderArchive' => 'MassInventoryAction',
'OnMassOrderShip' => 'MassInventoryAction',
'OnOrderProcess' => 'InventoryAction',
'OnOrderApprove' => 'InventoryAction',
'OnOrderDeny' => 'InventoryAction',
'OnOrderArchive' => 'InventoryAction',
'OnOrderShip' => 'InventoryAction',
);
$this->eventMethods = array_merge($this->eventMethods, $common_events);
}
/* ======================== FRONT ONLY ======================== */
function OnQuietPreSave(&$event)
{
$object =& $event->getObject();
$object->IgnoreValidation = true;
$event->CallSubEvent('OnPreSave');
$object->IgnoreValidation = false;
}
/**
* Sets new address to order
*
* @param kEvent $event
*/
function OnSelectAddress(&$event)
{
if ($this->Application->isAdminUser) {
return ;
}
$object =& $event->getObject();
$shipping_address_id = $this->Application->GetVar('shipping_address_id');
$billing_address_id = $this->Application->GetVar('billing_address_id');
if ($shipping_address_id || $billing_address_id) {
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
/* @var $cs_helper kCountryStatesHelper */
$address =& $this->Application->recallObject('addr.-item','addr', Array('skip_autoload' => true));
$addr_list =& $this->Application->recallObject('addr', 'addr_List', Array('per_page'=>-1, 'skip_counting'=>true) );
$addr_list->Query();
}
if ($shipping_address_id > 0) {
$addr_list->CopyAddress($shipping_address_id, 'Shipping');
$address->Load($shipping_address_id);
$address->MarkAddress('Shipping');
$cs_helper->PopulateStates($event, 'ShippingState', 'ShippingCountry');
$object->setRequired('ShippingState', false);
}
elseif ($shipping_address_id == -1) {
$object->ResetAddress('Shipping');
}
if ($billing_address_id > 0) {
$addr_list->CopyAddress($billing_address_id, 'Billing');
$address->Load($billing_address_id);
$address->MarkAddress('Billing');
$cs_helper->PopulateStates($event, 'BillingState', 'BillingCountry');
$object->setRequired('BillingState', false);
}
elseif ($billing_address_id == -1) {
$object->ResetAddress('Billing');
}
$event->redirect = false;
$object->IgnoreValidation = true;
$this->RecalculateTax($event);
$object->Update();
}
/**
* Updates order with registred user id
*
* @param kEvent $event
*/
function OnUserCreate(&$event)
{
if( !($event->MasterEvent->status == erSUCCESS) ) return false;
$ses_id = $this->Application->RecallVar('front_order_id');
if($ses_id)
{
$this->updateUserID($ses_id, $event);
$this->Application->RemoveVar('front_order_id');
}
}
/**
* Enter description here...
*
* @param unknown_type $event
* @return unknown
*/
function OnUserLogin(&$event)
{
if( !($event->MasterEvent->status == erSUCCESS) ) {
return false;
}
$ses_id = $this->Application->RecallVar('ord_id');
if ($ses_id) $this->updateUserID($ses_id, $event);
$user_id = $this->Application->RecallVar('user_id');
$affiliate_id = $this->isAffiliate($user_id);
if($affiliate_id) $this->Application->setVisitField('AffiliateId', $affiliate_id);
$event->CallSubEvent('OnRecalculateItems');
}
function updateUserID($order_id, &$event)
{
$table = $this->Application->getUnitOption($event->Prefix,'TableName');
$id_field = $this->Application->getUnitOption($event->Prefix,'IDField');
$user_id = $this->Application->RecallVar('user_id');
$this->Conn->Query('UPDATE '.$table.' SET PortalUserId = '.$user_id.' WHERE '.$id_field.' = '.$order_id);
$affiliate_id = $this->isAffiliate($user_id);
if($affiliate_id)
{
$this->Conn->Query('UPDATE '.$table.' SET AffiliateId = '.$affiliate_id.' WHERE '.$id_field.' = '.$order_id);
}
}
function isAffiliate($user_id)
{
$affiliate_user =& $this->Application->recallObject('affil.-item', null, Array('skip_autoload' => true) );
$affiliate_user->Load($user_id, 'PortalUserId');
return $affiliate_user->isLoaded() ? $affiliate_user->GetDBField('AffiliateId') : 0;
}
function ChargeOrder(&$order)
{
$gw_data = $order->getGatewayData();
$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
$gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] );
$payment_result = $gateway_object->DirectPayment($order->FieldValues, $gw_data['gw_params']);
$sql = 'UPDATE %s SET GWResult1 = %s WHERE %s = %s';
$sql = sprintf($sql, $order->TableName, $this->Conn->qstr($gateway_object->getGWResponce()), $order->IDField, $order->GetID() );
$this->Conn->Query($sql);
$order->SetDBField('GWResult1', $gateway_object->getGWResponce() );
return array('result'=>$payment_result, 'data'=>$gateway_object->parsed_responce, 'gw_data' => $gw_data, 'error_msg'=>$gateway_object->getErrorMsg());
}
function OrderEmailParams(&$order)
{
$billing_email = $order->GetDBField('BillingEmail');
$user_email = $this->Conn->GetOne(' SELECT Email FROM '.$this->Application->getUnitOption('u', 'TableName').'
WHERE PortalUserId = '.$order->GetDBField('PortalUserId'));
$email_params = Array();
$email_params['_user_email'] = $user_email; //for use when shipping vs user is required in InvetnoryAction
$email_params['to_email'] = $billing_email ? $billing_email : $user_email;
$email_params['to_name'] = $order->GetDBField('BillingTo');
return $email_params;
}
function PrepareCoupons(&$event, &$order)
{
$order_items =& $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) );
$order_items->linkToParent($order->Special);
$order_items->Query();
$order_items->GoFirst();
$assigned_coupons = array();
$coup_handler =& $this->Application->recallObject('coup_EventHandler');
foreach($order_items->Records as $product_item)
{
if ($product_item['ItemData']) {
$item_data = unserialize($product_item['ItemData']);
if (isset($item_data['AssignedCoupon']) && $item_data['AssignedCoupon']) {
$coupon_id = $item_data['AssignedCoupon'];
// clone coupon, get new coupon ID
$coupon =& $this->Application->recallObject('coup',null,array('skip_autload' => true));
/* @var $coupon kDBItem */
$coupon->Load($coupon_id);
if (!$coupon->isLoaded()) continue;
$coup_handler->SetNewCode($coupon);
$coupon->NameCopy();
$coupon->SetDBField('Name', $coupon->GetDBField('Name').' (Order #'.$order->GetField('OrderNumber').')');
$coupon->Create();
// add coupon code to array
array_push($assigned_coupons, $coupon->GetDBField('Code'));
}
}
}
/* @var $order OrdersItem */
if ($assigned_coupons) {
$comments = $order->GetDBField('AdminComment');
if ($comments) $comments .= "\r\n";
$comments .= "Issued coupon(s): ". join(',', $assigned_coupons);
$order->SetDBField('AdminComment', $comments);
$order->Update();
}
if ($assigned_coupons) $this->Application->SetVar('order_coupons', join(',', $assigned_coupons));
}
/**
* Completes order if possible
*
* @param kEvent $event
* @return bool
*/
function OnCompleteOrder(&$event)
{
$this->LockTables($event);
if (!$this->CheckQuantites($event)) return;
$this->ReserveItems($event);
$order =& $event->getObject();
$charge_result = $this->ChargeOrder($order);
if (!$charge_result['result']) {
$this->FreeItems($event);
$this->Application->StoreVar('gw_error', $charge_result['error_msg']);
//$this->Application->StoreVar('gw_error', getArrayValue($charge_result, 'data', 'responce_reason_text') );
$event->redirect = $this->Application->GetVar('failure_template');
$event->redirect_params['m_cat_id'] = 0;
if ($event->Special == 'recurring') { // if we set failed status for other than recurring special the redirect will not occur
$event->status = erFAIL;
}
return false;
}
// call CompleteOrder events for items in order BEFORE SplitOrder (because ApproveEvents are called there)
$order_items =& $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) );
$order_items->linkToParent($order->Special);
$order_items->Query(true);
$order_items->GoFirst();
foreach($order_items->Records as $product_item)
{
if (!$product_item['ProductId']) continue; // product may have been deleted
$this->raiseProductEvent('CompleteOrder', $product_item['ProductId'], $product_item);
}
$shipping_control = getArrayValue($charge_result, 'gw_data', 'gw_params', 'shipping_control');
if ($event->Special != 'recurring') {
if ($shipping_control && $shipping_control != SHIPPING_CONTROL_PREAUTH ) {
// we have to do it here, because the coupons are used in the e-mails
$this->PrepareCoupons($event, $order);
}
$email_event_user =& $this->Application->EmailEventUser('ORDER.SUBMIT', $order->GetDBField('PortalUserId'), $this->OrderEmailParams($order));
$email_event_admin =& $this->Application->EmailEventAdmin('ORDER.SUBMIT');
}
if ($shipping_control === false || $shipping_control == SHIPPING_CONTROL_PREAUTH ) {
$order->SetDBField('Status', ORDER_STATUS_PENDING);
$order->Update();
}
else {
$this->SplitOrder($event, $order);
}
if (!$this->Application->isAdminUser) {
// for tracking code
$this->Application->StoreVar('last_order_amount', $order->GetDBField('TotalAmount'));
$this->Application->StoreVar('last_order_number', $order->GetDBField('OrderNumber'));
$this->Application->StoreVar('last_order_customer', $order->GetDBField('BillingTo'));
$this->Application->StoreVar('last_order_user', $order->GetDBField('Username'));
$event->redirect = $this->Application->GetVar('success_template');
$event->redirect_params['m_cat_id'] = 0;
}
else
{
// $event->CallSubEvent('OnSave');
}
$order_id = $order->GetId();
$order_idfield = $this->Application->getUnitOption('ord','IDField');
$order_table = $this->Application->getUnitOption('ord','TableName');
$original_amount = $order->GetDBField('SubTotal') + $order->GetDBField('ShippingCost') + $order->GetDBField('VAT') + $order->GetDBField('ProcessingFee') + $order->GetDBField('InsuranceFee') - $order->GetDBField('GiftCertificateDiscount');
$sql = 'UPDATE '.$order_table.'
SET OriginalAmount = '.$original_amount.'
WHERE '.$order_idfield.' = '.$order_id;
$this->Conn->Query($sql);
$this->Application->StoreVar('front_order_id', $order_id);
$this->Application->RemoveVar('ord_id');
}
/**
* Set billing address same as shipping
*
* @param kEvent $event
*/
function setBillingAddress(&$event)
{
$object =& $event->getObject();
if ($object->HasTangibleItems()) {
if ($this->Application->GetVar('same_address')) {
// copy shipping address to billing
$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
list($id, $field_values) = each($items_info);
$address_fields = Array('To', 'Company', 'Phone', 'Fax', 'Email', 'Address1', 'Address2', 'City', 'State', 'Zip', 'Country');
foreach ($address_fields as $address_field) {
$items_info[$id]['Billing'.$address_field] = $object->GetDBField('Shipping'.$address_field);
}
$this->Application->SetVar($event->getPrefixSpecial(true), $items_info);
}
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnProceedToPreview(&$event)
{
$this->setBillingAddress($event);
$event->CallSubEvent('OnUpdate');
$event->redirect = $this->Application->GetVar('preview_template');
}
function OnViewCart(&$event)
{
$this->StoreContinueShoppingLink();
$event->redirect = $this->Application->GetVar('viewcart_template');
}
function OnContinueShopping(&$event)
{
$env = $this->Application->GetVar('continue_shopping_template');
if (!$env || $env == '__default__') {
$env = $this->Application->RecallVar('continue_shopping');
}
if (!$env) {
$env = 'in-commerce/index';
}
$event->redirect = $env;
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnCheckout(&$event)
{
$this->OnUpdateCart($event);
if ($event->getEventParam('RecalculateChangedCart'))
{
$event->SetRedirectParam('checkout_error', $event->redirect_params['checkout_error']);
}
else
{
$object =& $event->getObject();
if(!$object->HasTangibleItems())
{
$object->SetDBField('ShippingTo', '');
$object->SetDBField('ShippingCompany', '');
$object->SetDBField('ShippingPhone', '');
$object->SetDBField('ShippingFax', '');
$object->SetDBField('ShippingEmail', '');
$object->SetDBField('ShippingAddress1', '');
$object->SetDBField('ShippingAddress2', '');
$object->SetDBField('ShippingCity', '');
$object->SetDBField('ShippingState', '');
$object->SetDBField('ShippingZip', '');
$object->SetDBField('ShippingCountry', '');
$object->SetDBField('ShippingType', 0);
$object->SetDBField('ShippingCost', 0);
$object->SetDBField('ShippingCustomerAccount', '');
$object->SetDBField('ShippingTracking', '');
$object->SetDBField('ShippingDate', 0);
$object->SetDBField('ShippingOption', 0);
$object->SetDBField('ShippingInfo', '');
$object->Update();
}
$event->redirect = $this->Application->GetVar('next_step_template');
$order_id = $this->Application->GetVar('order_id');
if($order_id !== false) $event->redirect_params['ord_id'] = $order_id;
}
}
/**
* Redirect user to Billing checkout step
*
* @param kEvent $event
*/
function OnProceedToBilling(&$event)
{
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
if ($items_info) {
list($id, $field_values) = each($items_info);
$object =& $event->getObject();
$payment_type_id = $object->GetDBField('PaymentType');
if (!$payment_type_id) {
$default_type = $this->_getDefaultPaymentType();
if ($default_type) {
$field_values['PaymentType'] = $default_type;
$items_info[$id] = $field_values;
$this->Application->SetVar( $event->getPrefixSpecial(true), $items_info );
}
}
}
$event->CallSubEvent('OnUpdate');
$event->redirect = $this->Application->GetVar('next_step_template');
}
function OnCancelRecurring(&$event)
{
$order =& $event->GetObject();
$order->SetDBField('IsRecurringBilling', 0);
$order->Update();
if ($this->Application->GetVar('cancelrecurring_ok_template'))
{
$event->redirect = $this->Application->GetVar('cancelrecurring_ok_template');
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnAfterItemUpdate(&$event)
{
$object =& $event->getObject();
$cvv2 = $object->GetDBField('PaymentCVV2');
if($cvv2 !== false) $this->Application->StoreVar('CVV2Code', $cvv2);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnUpdate(&$event)
{
$this->setBillingAddress($event);
parent::OnUpdate($event);
if ($this->Application->isAdminUser) {
return true;
}
else {
$event->redirect_params = Array('opener' => 's');
}
if ($event->status == erSUCCESS) {
$this->createMissingAddresses($event);
}
else {
// strange: recalculate total amount on error
$object =& $event->getObject();
/* @var $object kDBItem */
$object->SetDBField('TotalAmount', $object->getTotalAmount());
}
}
/**
* Creates new address
*
* @param kEvent $event
*/
function createMissingAddresses(&$event)
{
if (!$this->Application->LoggedIn()) {
return false;
}
$object =& $event->getObject();
$addr_list =& $this->Application->recallObject('addr', 'addr_List', Array('per_page'=>-1, 'skip_counting'=>true) );
$addr_list->Query();
$address_dummy =& $this->Application->recallObject('addr.-item', null, Array('skip_autoload' => true));
$address_prefixes = Array('Billing', 'Shipping');
$address_fields = Array('To','Company','Phone','Fax','Email','Address1','Address2','City','State','Zip','Country');
foreach ($address_prefixes as $address_prefix) {
$address_id = $this->Application->GetVar(strtolower($address_prefix).'_address_id');
if (!$this->Application->GetVar('check_'.strtolower($address_prefix).'_address')) {
// form type doesn't match check type, e.g. shipping check on billing form
continue;
}
if ($address_id > 0) {
$address_dummy->Load($address_id);
}
else {
$address_dummy->SetDBField('PortalUserId', $this->Application->RecallVar('user_id') );
}
foreach ($address_fields as $address_field) {
$address_dummy->SetDBField($address_field, $object->GetDBField($address_prefix.$address_field));
}
$address_dummy->MarkAddress($address_prefix, false);
$ret = ($address_id > 0) ? $address_dummy->Update() : $address_dummy->Create();
}
}
function OnUpdateCart(&$event)
{
$this->Application->HandleEvent($items_event, 'orditems:OnUpdate');
return $event->CallSubEvent('OnRecalculateItems');
}
/**
* Adds item to cart
*
* @param kEvent $event
*/
function OnAddToCart(&$event)
{
$this->StoreContinueShoppingLink();
$qty = $this->Application->GetVar('qty');
$options = $this->Application->GetVar('options');
// multiple or options add
$items = Array();
if (is_array($qty)) {
foreach ($qty as $item_id => $combinations)
{
if (is_array($combinations)) {
foreach ($combinations as $comb_id => $comb_qty) {
if ($comb_qty == 0) continue;
$items[] = array('item_id' => $item_id, 'qty' => $comb_qty, 'comb' => $comb_id);
}
}
else {
$items[] = array('item_id' => $item_id, 'qty' => $combinations);
}
}
}
if (!$items) {
if (!$qty || is_array($qty)) $qty = 1;
$item_id = $this->Application->GetVar('p_id');
if (!$item_id) return ;
$items = array(array('item_id' => $item_id, 'qty' => $qty));
}
// remember item data passed to event when called
$default_item_data = $event->getEventParam('ItemData');
$default_item_data = $default_item_data ? unserialize($default_item_data) : Array();
foreach ($items as $an_item) {
$item_id = $an_item['item_id'];
$qty = $an_item['qty'];
$comb = getArrayValue($an_item, 'comb');
$item_data = $default_item_data;
$product =& $this->Application->recallObject('p', null, Array('skip_autoload' => true));
$product->Load($item_id);
$event->setEventParam('ItemData', null);
if ($product->GetDBField('AssignedCoupon')) {
$item_data['AssignedCoupon'] = $product->GetDBField('AssignedCoupon');
}
// 1. store options information OR
if ($comb) {
$combination = $this->Conn->GetOne('SELECT Combination FROM '.TABLE_PREFIX.'ProductOptionCombinations WHERE CombinationId = '.$comb);
$item_data['Options'] = unserialize($combination);
}
elseif (is_array($options)) {
$item_data['Options'] = $options[$item_id];
}
// 2. store subscription information OR
if( $product->GetDBField('Type') == 2 ) // subscriptions
{
$item_data = $this->BuildSubscriptionItemData($item_id, $item_data);
}
// 3. store package information
if( $product->GetDBField('Type') == 5 ) // package
{
$package_content_ids = $product->GetPackageContentIds();
$product_package_item =& $this->Application->recallObject('p.-packageitem');
$package_item_data = array();
foreach ($package_content_ids as $package_item_id){
$product_package_item->Load($package_item_id);
$package_item_data[$package_item_id] = array();
if( $product_package_item->GetDBField('Type') == 2 ) // subscriptions
{
$package_item_data[$package_item_id] = $this->BuildSubscriptionItemData($package_item_id, $item_data);
}
}
$item_data['PackageContent'] = $product->GetPackageContentIds();
$item_data['PackageItemsItemData'] = $package_item_data;
}
$event->setEventParam('ItemData', serialize($item_data));
// 1 for PacakgeNum when in admin - temporary solution to overcome splitting into separate sub-orders
// of orders with items added through admin when approving them
$this->AddItemToOrder($event, $item_id, $qty, $this->Application->isAdminUser ? 1 : null);
}
if ($event->status == erSUCCESS && !$event->redirect) {
$event->redirect_params['pass'] = 'm';
$event->redirect_params['pass_category'] = 0; //otherwise mod-rewrite shop-cart URL will include category
$event->redirect = true;
}
else {
if ($this->Application->isAdminUser) {
$event->redirect_params['opener'] = 'u';
}
}
}
/**
* Check if required options are selected & selected option combination is in stock
*
* @param kEvent $event
* @param Array $options
* @param int $product_id
* @param int $qty
* @param int $selection_mode
* @return bool
*/
function CheckOptions(&$event, &$options, $product_id, $qty, $selection_mode)
{
// 1. check for required options
$selection_filter = $selection_mode == 1 ? ' AND OptionType IN (1,3,6) ' : '';
$req_options = $this->Conn->GetCol('SELECT ProductOptionId FROM '.TABLE_PREFIX.'ProductOptions WHERE ProductId = '.$product_id.' AND Required = 1 '.$selection_filter);
$result = true;
foreach ($req_options as $opt_id) {
if (!getArrayValue($options, $opt_id)) {
$this->Application->SetVar('opt_error', 1); //let the template know we have an error
$result = false;
}
}
// 2. check for option combinations in stock
$comb_salt = $this->OptionsSalt($options, true);
if ($comb_salt) {
// such option combination is defined explicitly
$poc_table = $this->Application->getUnitOption('poc', 'TableName');
$sql = 'SELECT Availability
FROM '.$poc_table.'
WHERE CombinationCRC = '.$comb_salt;
$comb_availble = $this->Conn->GetOne($sql);
// 2.1. check if Availability flag is set, then
if ($comb_availble == 1) {
// 2.2. check for quantity in stock
$table = Array();
$table['poc'] = $this->Application->getUnitOption('poc', 'TableName');
$table['p'] = $this->Application->getUnitOption('p', 'TableName');
$table['oi'] = $this->TablePrefix($event).'OrderItems';
$object =& $event->getObject();
$ord_id = $object->GetID();
// 2.3. check if some amount of same combination & product are not already in shopping cart
$sql = 'SELECT '.
$table['p'].'.InventoryStatus,'.
$table['p'].'.BackOrder,
IF('.$table['p'].'.InventoryStatus = 2, '.$table['poc'].'.QtyInStock, '.$table['p'].'.QtyInStock) AS QtyInStock,
IF('.$table['oi'].'.OrderItemId IS NULL, 0, '.$table['oi'].'.Quantity) AS Quantity
FROM '.$table['p'].'
LEFT JOIN '.$table['poc'].' ON
'.$table['p'].'.ProductId = '.$table['poc'].'.ProductId
LEFT JOIN '.$table['oi'].' ON
('.$table['oi'].'.OrderId = '.$ord_id.') AND
('.$table['oi'].'.OptionsSalt = '.$comb_salt.') AND
('.$table['oi'].'.ProductId = '.$product_id.') AND
('.$table['oi'].'.BackOrderFlag = 0)
WHERE '.$table['poc'].'.CombinationCRC = '.$comb_salt;
$product_info = $this->Conn->GetRow($sql);
if ($product_info['InventoryStatus']) {
$backordering = $this->Application->ConfigValue('Comm_Enable_Backordering');
if (!$backordering || $product_info['BackOrder'] == 0) {
// backordering is not enabled generally or for this product directly, then check quantities in stock
if ($qty + $product_info['Quantity'] > $product_info['QtyInStock']) {
$this->Application->SetVar('opt_error', 2);
$result = false;
}
}
}
}
elseif ($comb_availble !== false) {
$this->Application->SetVar('opt_error', 2);
$result = false;
}
}
if ($result) {
$event->status = erSUCCESS;
$event->redirect = $this->Application->isAdminUser ? true : $this->Application->GetVar('shop_cart_template');
}
else {
$event->status = erFAIL;
}
return $result;
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnUpdateItemOptions(&$event)
{
$opt_data = $this->Application->GetVar('options');
$options = getArrayValue($opt_data, $this->Application->GetVar('p_id'));
if (!$options) {
$qty_data = $this->Application->GetVar('qty');
$comb_id = key(getArrayValue($qty_data, $this->Application->GetVar('p_id')));
$options = unserialize($this->Conn->GetOne('SELECT Combination FROM '.TABLE_PREFIX.'ProductOptionCombinations WHERE CombinationId = '.$comb_id));
}
if (!$options) return;
$ord_item =& $this->Application->recallObject('orditems.-opt', null, Array ('skip_autoload' => true));
/* @var $ord_item kDBItem */
$ord_item->Load($this->Application->GetVar('orditems_id'));
// assuming that quantity cannot be changed during order item editing
if (!$this->CheckOptions($event, $options, $ord_item->GetDBField('ProductId'), 0, $ord_item->GetDBField('OptionsSelectionMode'))) return;
$item_data = unserialize($ord_item->GetDBField('ItemData'));
$item_data['Options'] = $options;
$ord_item->SetDBField('ItemData', serialize($item_data));
$ord_item->SetDBField('OptionsSalt', $this->OptionsSalt($options));
$ord_item->Update();
$event->CallSubEvent('OnRecalculateItems');
if ($event->status == erSUCCESS && $this->Application->isAdminUser) {
$event->redirect_params['opener'] = 'u';
}
}
function BuildSubscriptionItemData($item_id, $item_data)
{
$products_table = $this->Application->getUnitOption('p', 'TableName');
$products_idfield = $this->Application->getUnitOption('p', 'IDField');
$sql = 'SELECT AccessGroupId FROM %s WHERE %s = %s';
$item_data['PortalGroupId'] = $this->Conn->GetOne( sprintf($sql, $products_table, $products_idfield, $item_id) );
$pricing_table = $this->Application->getUnitOption('pr', 'TableName');
$pricing_idfield = $this->Application->getUnitOption('pr', 'IDField');
// $sql = 'SELECT AccessDuration, AccessUnit, DurationType, AccessExpiration FROM %s WHERE %s = %s';
$sql = 'SELECT * FROM %s WHERE %s = %s';
$pricing_id = $this->GetPricingId($item_id, $item_data);
$item_data['PricingId'] = $pricing_id;
$pricing_info = $this->Conn->GetRow( sprintf($sql, $pricing_table, $pricing_idfield, $pricing_id ) );
$unit_secs = Array(1 => 1, 2 => 60, 3 => 3600, 4 => 86400, 5 => 604800, 6 => 2592000, 7 => 31536000);
/*
// Customization healtheconomics.org
$item_data['DurationType'] = $pricing_info['DurationType'];
$item_data['AccessExpiration'] = $pricing_info['AccessExpiration'];
// Customization healtheconomics.org --
*/
$item_data['Duration'] = $pricing_info['AccessDuration'] * $unit_secs[ $pricing_info['AccessUnit'] ];
return $item_data;
}
function OnRemoveCoupon(&$event)
{
$object =& $event->getObject();
$this->RemoveCoupon($object);
$event->CallSubEvent('OnRecalculateItems');
$event->SetRedirectParam('checkout_error', 7);
}
function RemoveCoupon(&$object)
{
$coupon_id = $object->GetDBField('CouponId');
$coupon =& $this->Application->recallObject('coup', null, Array('skip_autoload' => true));
$res = $coupon->Load($coupon_id);
$uses = $coupon->GetDBField('NumberOfUses');
if($res && isset($uses))
{
$coupon->SetDBField('NumberOfUses', $uses + 1);
$coupon->SetDBField('Status', 1);
$coupon->Update();
}
$object->SetDBField('CouponId', 0);
$object->SetDBField('CouponDiscount', 0);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnAddVirtualProductToCart(&$event)
{
$l_info = $this->Application->GetVar('l');
if($l_info)
{
foreach($l_info as $link_id => $link_info) {}
$item_data['LinkId'] = $link_id;
$item_data['ListingTypeId'] = $link_info['ListingTypeId'];
}
else
{
$link_id = $this->Application->GetVar('l_id');
$sql = 'SELECT ResourceId FROM '.$this->Application->getUnitOption('l', 'TableName').'
WHERE LinkId = '.$link_id;
$sql = 'SELECT ListingTypeId FROM '.$this->Application->getUnitOption('ls', 'TableName').'
WHERE ItemResourceId = '.$this->Conn->GetOne($sql);
$item_data['LinkId'] = $link_id;
$item_data['ListingTypeId'] = $this->Conn->GetOne($sql);
}
$sql = 'SELECT VirtualProductId FROM '.$this->Application->getUnitOption('lst', 'TableName').'
WHERE ListingTypeId = '.$item_data['ListingTypeId'];
$item_id = $this->Conn->GetOne($sql);
$event->setEventParam('ItemData', serialize($item_data));
$this->AddItemToOrder($event, $item_id);
$event->redirect = $this->Application->GetVar('shop_cart_template');
// don't pass unused info to shopping cart, brokes old mod-rewrites
$event->SetRedirectParam('pass', 'm'); // not to pass link id
$event->SetRedirectParam('m_cat_id', 0); // not to pass link id
}
function OnRemoveFromCart(&$event)
{
$ord_item_id = $this->Application->GetVar('orditems_id');
$ord_id = $this->getPassedId($event);
$this->Conn->Query('DELETE FROM '.TABLE_PREFIX.'OrderItems WHERE OrderId = '.$ord_id.' AND OrderItemId = '.$ord_item_id);
$this->OnRecalculateItems($event);
}
function OnCleanupCart(&$event)
{
$object =& $event->getObject();
$sql = 'DELETE FROM '.TABLE_PREFIX.'OrderItems
WHERE OrderId = '.$this->getPassedID($event);
$this->Conn->Query($sql);
$this->RemoveCoupon($object);
$this->RemoveGiftCertificate($object);
$this->OnRecalculateItems($event);
}
/**
* Returns order id from session or last used
*
* @param kEvent $event
* @return int
*/
function getPassedId(&$event)
{
$event->setEventParam('raise_warnings', 0);
$passed = parent::getPassedID($event);
if ($this->Application->isAdminUser) {
// work as usual in admin
return $passed;
}
if ($event->Special == 'last') {
// return last order id (for using on thank you page)
$order_id = $this->Application->RecallVar('front_order_id');
return $order_id > 0 ? $order_id : FAKE_ORDER_ID; // FAKE_ORDER_ID helps to keep parent filter for order items set in "kDBList::linkToParent"
}
$ses_id = $this->Application->RecallVar( $event->getPrefixSpecial(true) . '_id' );
if ($passed && ($passed != $ses_id)) {
// order id given in url doesn't match our current order id
$sql = 'SELECT PortalUserId
FROM ' . TABLE_PREFIX . 'Orders
WHERE OrderId = ' . $passed;
$user_id = $this->Conn->GetOne($sql);
if ($user_id == $this->Application->RecallVar('user_id')) {
// current user is owner of order with given id -> allow him to view order details
return $passed;
}
else {
// current user is not owner of given order -> hacking attempt
$this->Application->SetVar($event->getPrefixSpecial().'_id', 0);
return 0;
}
}
else {
// not passed or equals to ses_id
return $ses_id > 0 ? $ses_id : FAKE_ORDER_ID; // FAKE_ORDER_ID helps to keep parent filter for order items set in "kDBList::linkToParent"
}
return $passed;
}
/**
* Load item if id is available
*
* @param kEvent $event
*/
function LoadItem(&$event)
{
$id = $this->getPassedID($event);
if ($id == FAKE_ORDER_ID) {
// if we already know, that there is no such order,
// then don't run database query, that will confirm that
$object =& $event->getObject();
/* @var $object kDBItem */
$object->Clear($id);
return ;
}
parent::LoadItem($event);
}
/**
* Creates new shopping cart
*
* @param kEvent $event
*/
function _createNewCart(&$event)
{
$object =& $event->getObject( Array('skip_autoload' => true) );
/* @var $object kDBItem */
$object->SetDBField('Number', $this->getNextOrderNumber($event));
$object->SetDBField('SubNumber', 0);
$object->SetDBField('Status', ORDER_STATUS_INCOMPLETE);
$object->SetDBField('VisitId', $this->Application->RecallVar('visit_id') );
// get user
$user_id = $this->Application->RecallVar('user_id');
if (!$user_id) {
$user_id = USER_GUEST;
}
$object->SetDBField('PortalUserId', $user_id);
// get affiliate
$affiliate_id = $this->isAffiliate($user_id);
if ($affiliate_id) {
$object->SetDBField('AffiliateId', $affiliate_id);
}
else {
$affiliate_storage_method = $this->Application->ConfigValue('Comm_AffiliateStorageMethod');
$object->SetDBField('AffiliateId', $affiliate_storage_method == 1 ? (int)$this->Application->RecallVar('affiliate_id') : (int)$this->Application->GetVar('affiliate_id') );
}
// get payment type
$default_type = $this->_getDefaultPaymentType();
if ($default_type) {
$object->SetDBField('PaymentType', $default_type);
}
$created = $object->Create();
if ($created) {
$id = $object->GetID();
$this->Application->SetVar($event->getPrefixSpecial(true) . '_id', $id);
$this->Application->StoreVar($event->getPrefixSpecial(true) . '_id', $id);
return $id;
}
return 0;
}
/**
* Returns default payment type for order
*
* @return int
*/
function _getDefaultPaymentType()
{
$default_type = $this->Application->siteDomainField('PrimaryPaymentTypeId');
if (!$default_type) {
$sql = 'SELECT PaymentTypeId
FROM ' . TABLE_PREFIX . 'PaymentTypes
WHERE IsPrimary = 1';
$default_type = $this->Conn->GetOne($sql);
}
return $default_type;
}
function StoreContinueShoppingLink()
{
$this->Application->StoreVar('continue_shopping', 'external:'.PROTOCOL.SERVER_NAME.$this->Application->RecallVar('last_url'));
}
/**
* Sets required fields for order, based on current checkout step
* !!! Do not use switch here, since all cases may be on the same form simultaniously
*
* @param kEvent $event
*/
function SetStepRequiredFields(&$event)
{
$order =& $event->getObject();
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
/* @var $cs_helper kCountryStatesHelper */
$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
if ($items_info) {
// updated address available from SUBMIT -> use it
list($id, $field_values) = each($items_info);
}
else {
// no updated address -> use current address
$field_values = Array (
'ShippingCountry' => $order->GetDBField('ShippingCountry'),
'BillingCountry' => $order->GetDBField('BillingCountry'),
'PaymentType' => $order->GetDBField('PaymentType'),
);
}
// shipping address required fields
if ($this->Application->GetVar('check_shipping_address')) {
$has_tangibles = $order->HasTangibleItems();
$req_fields = array('ShippingTo', 'ShippingAddress1', 'ShippingCity', 'ShippingZip', 'ShippingCountry', 'ShippingPhone');
foreach ($req_fields as $field) {
$order->Fields[$field]['required'] = $has_tangibles;
}
$order->setRequired('ShippingState', $cs_helper->CountryHasStates( $field_values['ShippingCountry'] ));
}
// billing address required fields
if ($this->Application->GetVar('check_billing_address')) {
$req_fields = array('BillingTo', 'BillingAddress1', 'BillingCity', 'BillingZip', 'BillingCountry', 'BillingPhone');
foreach ($req_fields as $field) {
$order->Fields[$field]['required'] = true;
}
$order->setRequired('BillingState', $cs_helper->CountryHasStates( $field_values['BillingCountry'] ));
}
$check_cc = $this->Application->GetVar('check_credit_card');
$ord_event = $this->Application->GetVar($event->getPrefixSpecial().'_event');
if (($ord_event !== 'OnProceedToPreview') && !$this->Application->isAdmin) {
// don't check credit card when going from "billing info" to "order preview" step
$check_cc = 0;
}
if ($check_cc && ($field_values['PaymentType'] == $order->GetDBField('PaymentType'))) {
// cc check required AND payment type was not changed during SUBMIT
if ($this->Application->isAdminUser) {
$req_fields = array('PaymentCardType', 'PaymentAccount', 'PaymentNameOnCard', 'PaymentCCExpDate');
}
else {
$req_fields = array('PaymentCardType', 'PaymentAccount', 'PaymentNameOnCard', 'PaymentCCExpDate', 'PaymentCVV2');
}
foreach ($req_fields as $field) {
$order->Fields[$field]['required'] = true;
}
}
}
/**
* Set's order's user_id to user from session or Guest otherwise
*
* @param kEvent $event
*/
function CheckUser(&$event)
{
- if ($this->Application->isAdminUser) {
+ if ($this->Application->isAdminUser || defined('GW_NOTIFY')) {
+ // don't check for user in order while processing payment
+ // gateways, because they can do cross-domain ssl redirects
return;
}
$order =& $event->GetObject();
$ses_user = $this->Application->RecallVar('user_id');
if ($order->GetDBField('PortalUserId') != $ses_user) {
if ($ses_user == 0) {
$ses_user = USER_GUEST;
}
$order->SetDBField('PortalUserId', $ses_user);
// since CheckUser is called in OnBeforeItemUpdate, we don't need to call udpate here, just set the field
}
}
/* ======================== ADMIN ONLY ======================== */
/**
* Prepare temp tables and populate it
* with items selected in the grid
*
* @param kEvent $event
*/
function OnPreCreate(&$event)
{
parent::OnPreCreate($event);
$object =& $event->getObject();
$new_number = $this->getNextOrderNumber($event);
$object->SetDBField('Number', $new_number);
$object->SetDBField('SubNumber', 0);
$object->SetDBField('OrderIP', $_SERVER['REMOTE_ADDR']);
$order_type = $this->getTypeBySpecial( $this->Application->GetVar('order_type') );
$object->SetDBField('Status', $order_type);
}
/**
* When cloning orders set new order number to them
*
* @param kEvent $event
*/
function OnBeforeClone(&$event)
{
$object =& $event->getObject();
if (substr($event->Special, 0, 9) == 'recurring') {
$object->SetDBField('SubNumber', $object->getNextSubNumber());
$object->SetDBField('OriginalAmount', 0); // needed in this case ?
}
else {
$new_number = $this->getNextOrderNumber($event);
$object->SetDBField('Number', $new_number);
$object->SetDBField('SubNumber', 0);
$object->SetDBField('OriginalAmount', 0);
}
$object->SetDBField('OrderDate', adodb_mktime());
$object->UpdateFormattersSubFields();
$object->SetDBField('GWResult1', '');
$object->SetDBField('GWResult2', '');
}
function OnReserveItems(&$event)
{
$order_items =& $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) );
$order_items->linkToParent('-inv');
// force re-query, since we are updateing through orditem ITEM, not the list, and
// OnReserveItems may be called 2 times when fullfilling backorders through product edit - first time
// from FullFillBackorders and second time from OnOrderProcess
$order_items->Query(true);
$order_items->GoFirst();
// query all combinations used in this order
$product_object =& $this->Application->recallObject('p', null, Array('skip_autoload' => true));
$product_object->SwitchToLive();
$order_item =& $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
$combination_item =& $this->Application->recallObject('poc.-item', null, Array('skip_autoload' => true));
$combinations = $this->queryCombinations($order_items);
$event->status = erSUCCESS;
while (!$order_items->EOL()) {
$rec = $order_items->getCurrentRecord();
$product_object->Load( $rec['ProductId'] );
if (!$product_object->GetDBField('InventoryStatus')) {
$order_items->GoNext();
continue;
}
$inv_object =& $this->getInventoryObject($product_object, $combination_item, $combinations[ $rec['ProductId'].'_'.$rec['OptionsSalt'] ]);
$lack = $rec['Quantity'] - $rec['QuantityReserved'];
if ($lack > 0) {
// reserve lack or what is available (in case if we need to reserve anything, by Alex)
$to_reserve = min($lack, $inv_object->GetDBField('QtyInStock') - $product_object->GetDBField('QtyInStockMin'));
if ($to_reserve < $lack) $event->status = erFAIL; // if we can't reserve the full lack
//reserve in order
$order_item->SetDBFieldsFromHash($rec);
$order_item->SetDBField('QuantityReserved', $rec['QuantityReserved'] + $to_reserve);
$order_item->SetId($rec['OrderItemId']);
$order_item->Update();
//update product - increase reserved, decrease in stock
$inv_object->SetDBField('QtyReserved', $inv_object->GetDBField('QtyReserved') + $to_reserve);
$inv_object->SetDBField('QtyInStock', $inv_object->GetDBField('QtyInStock') - $to_reserve);
$inv_object->SetDBField('QtyBackOrdered', $inv_object->GetDBField('QtyBackOrdered') - $to_reserve);
$inv_object->Update();
if ($product_object->GetDBField('InventoryStatus') == 2) {
// inventory by options, then restore changed combination values back to common $combinations array !!!
$combinations[ $rec['ProductId'].'_'.$rec['OptionsSalt'] ] = $inv_object->FieldValues;
}
}
$order_items->GoNext();
}
return true;
}
function OnOrderPrint(&$event)
{
$event->redirect_params = Array('opener'=>'s');
}
/**
* Processes order each tab info resetting to other tab info / to user info
*
* @param kEvent $event
* @access public
*/
function OnResetAddress(&$event)
{
$to_tab = $this->Application->GetVar('to_tab');
$from_tab = substr($event->Name,strlen('OnResetTo'));
// load values from db
$object =& $event->getObject();
// update values from submit
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
if($items_info) $field_values = array_shift($items_info);
$object->SetFieldsFromHash($field_values);
$this->DoResetAddress($object, $from_tab, $to_tab);
$object->Update();
$event->redirect = false;
}
/**
* Processes item selection from popup item selector
*
* @todo Is this called ? (by Alex)
* @param kEvent $event
*/
function OnProcessSelected(&$event)
{
$selected_ids = $this->Application->GetVar('selected_ids');
$product_ids = $selected_ids['p'];
if ($product_ids) {
$product_ids = explode(',', $product_ids);
// !!! LOOK OUT - Adding items to Order in admin is handled in order_ITEMS_event_handler !!!
foreach ($product_ids as $product_id) {
$this->AddItemToOrder($event, $product_id);
}
}
$this->finalizePopup($event);
}
function OnMassPlaceOrder(&$event)
{
$object =& $event->getObject( Array('skip_autoload' => true) );
$ids = $this->StoreSelectedIDs($event);
if($ids)
{
foreach($ids as $id)
{
$object->Load($id);
$this->DoPlaceOrder($event);
}
}
$event->status = erSUCCESS;
}
/**
* Universal
* Checks if QtyInStock is enough to fullfill backorder (Qty - QtyReserved in order)
*
* @param int $ord_id
* @return bool
*/
function ReadyToProcess($ord_id)
{
$poc_table = $this->Application->getUnitOption('poc', 'TableName');
$query = ' SELECT SUM(IF( IF('.TABLE_PREFIX.'Products.InventoryStatus = 2, '.$poc_table.'.QtyInStock, '.TABLE_PREFIX.'Products.QtyInStock) - '.TABLE_PREFIX.'Products.QtyInStockMin >= ('.TABLE_PREFIX.'OrderItems.Quantity - '.TABLE_PREFIX.'OrderItems.QuantityReserved), 0, 1))
FROM '.TABLE_PREFIX.'OrderItems
LEFT JOIN '.TABLE_PREFIX.'Products ON '.TABLE_PREFIX.'Products.ProductId = '.TABLE_PREFIX.'OrderItems.ProductId
LEFT JOIN '.$poc_table.' ON ('.$poc_table.'.CombinationCRC = '.TABLE_PREFIX.'OrderItems.OptionsSalt) AND ('.$poc_table.'.ProductId = '.TABLE_PREFIX.'OrderItems.ProductId)
WHERE OrderId = '.$ord_id.'
GROUP BY OrderId';
// IF (IF(InventoryStatus = 2, poc.QtyInStock, p.QtyInStock) - QtyInStockMin >= (Quantity - QuantityReserved), 0, 1
return ($this->Conn->GetOne($query) == 0);
}
/**
* Return all option combinations used in order
*
* @param kDBList $order_items
* @return Array
*/
function queryCombinations(&$order_items)
{
// 1. collect combination crc used in order
$combinations = Array();
while (!$order_items->EOL()) {
$row = $order_items->getCurrentRecord();
if ($row['OptionsSalt'] == 0) {
$order_items->GoNext();
continue;
}
$combinations[] = '(poc.ProductId = '.$row['ProductId'].') AND (poc.CombinationCRC = '.$row['OptionsSalt'].')';
$order_items->GoNext();
}
$order_items->GoFirst();
$combinations = array_unique($combinations); // if same combination+product found as backorder & normal order item
if ($combinations) {
// 2. query data about combinations
$poc_table = $this->Application->getUnitOption('poc', 'TableName');
$sql = 'SELECT CONCAT(poc.ProductId, "_", poc.CombinationCRC) AS CombinationKey, poc.*
FROM '.$poc_table.' poc
WHERE ('.implode(') OR (', $combinations).')';
return $this->Conn->Query($sql, 'CombinationKey');
}
return Array();
}
/**
* Returns object to perform inventory actions on
*
* @param ProductsItem $product current product object in order
* @param kDBItem $combination combination dummy object
* @param Array $combination_data pre-queried combination data
* @return kDBItem
*/
function &getInventoryObject(&$product, &$combination, $combination_data)
{
if ($product->GetDBField('InventoryStatus') == 2) {
// inventory by option combinations
$combination->SetDBFieldsFromHash($combination_data);
$combination->setID($combination_data['CombinationId']);
$change_item =& $combination;
}
else {
// inventory by product ifself
$change_item =& $product;
}
return $change_item;
}
/**
* Approve order ("Pending" tab)
*
* @param kDBList $order_items
* @return int new status of order if any
*/
function approveOrder(&$order_items)
{
$product_object =& $this->Application->recallObject('p', null, Array('skip_autoload' => true));
$order_item =& $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
$combination_item =& $this->Application->recallObject('poc.-item', null, Array('skip_autoload' => true));
$combinations = $this->queryCombinations($order_items);
while (!$order_items->EOL()) {
$rec = $order_items->getCurrentRecord();
$order_item->SetDBFieldsFromHash($rec);
$order_item->SetId($rec['OrderItemId']);
$order_item->SetDBField('QuantityReserved', 0);
$order_item->Update();
$product_object->Load( $rec['ProductId'] );
if (!$product_object->GetDBField('InventoryStatus')) {
// if no inventory info is collected, then skip this order item
$order_items->GoNext();
continue;
}
$inv_object =& $this->getInventoryObject($product_object, $combination_item, $combinations[ $rec['ProductId'].'_'.$rec['OptionsSalt'] ]);
// decrease QtyReserved by amount of product used in order
$inv_object->SetDBField('QtyReserved', $inv_object->GetDBField('QtyReserved') - $rec['Quantity']);
$inv_object->Update();
if ($product_object->GetDBField('InventoryStatus') == 2) {
// inventory by options, then restore changed combination values back to common $combinations array !!!
$combinations[ $rec['ProductId'].'_'.$rec['OptionsSalt'] ] = $inv_object->FieldValues;
}
$order_items->GoNext();
}
return true;
}
function restoreOrder(&$order_items)
{
$product_object =& $this->Application->recallObject('p', null, Array('skip_autoload' => true));
$product_object->SwitchToLive();
$order_item =& $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
$combination_item =& $this->Application->recallObject('poc.-item', null, Array('skip_autoload' => true));
$combinations = $this->queryCombinations($order_items);
while( !$order_items->EOL() )
{
$rec = $order_items->getCurrentRecord();
$product_object->Load( $rec['ProductId'] );
if (!$product_object->GetDBField('InventoryStatus')) {
// if no inventory info is collected, then skip this order item
$order_items->GoNext();
continue;
}
$inv_object =& $this->getInventoryObject($product_object, $combination_item, $combinations[ $rec['ProductId'].'_'.$rec['OptionsSalt'] ]);
// cancelling backorderd qty if any
$lack = $rec['Quantity'] - $rec['QuantityReserved'];
if ($lack > 0 && $rec['BackOrderFlag'] > 0) { // lack should have been recorded as QtyBackOrdered
$inv_object->SetDBField('QtyBackOrdered', $inv_object->GetDBField('QtyBackOrdered') - $lack);
}
// canceling reservation in stock
$inv_object->SetDBField('QtyReserved', $inv_object->GetDBField('QtyReserved') - $rec['QuantityReserved']);
// putting remaining freed qty back to stock
$inv_object->SetDBField('QtyInStock', $inv_object->GetDBField('QtyInStock') + $rec['QuantityReserved']);
$inv_object->Update();
$product_h =& $this->Application->recallObject('p_EventHandler');
if ($product_object->GetDBField('InventoryStatus') == 2) {
// inventory by options, then restore changed combination values back to common $combinations array !!!
$combinations[ $rec['ProductId'].'_'.$rec['OptionsSalt'] ] = $inv_object->FieldValues;
// using freed qty to fullfill possible backorders
$product_h->FullfillBackOrders($product_object, $inv_object->GetID());
}
else {
// using freed qty to fullfill possible backorders
$product_h->FullfillBackOrders($product_object, 0);
}
$order_item->SetDBFieldsFromHash($rec);
$order_item->SetId($rec['OrderItemId']);
$order_item->SetDBField('QuantityReserved', 0);
$order_item->Update();
$order_items->GoNext();
}
return true;
}
/**
* Approve order + special processing
*
* @param kEvent $event
*/
function MassInventoryAction(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
$event->status = erFAIL;
return;
}
// process order products
$object =& $this->Application->recallObject($event->Prefix.'.-inv', null, Array('skip_autoload' => true));
$ids = $this->StoreSelectedIDs($event);
if($ids)
{
foreach($ids as $id)
{
$object->Load($id);
$this->InventoryAction($event);
}
}
}
function InventoryAction(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
$event->status = erFAIL;
return;
}
$event_status_map = Array(
'OnMassOrderApprove' => ORDER_STATUS_TOSHIP,
'OnOrderApprove' => ORDER_STATUS_TOSHIP,
'OnMassOrderDeny' => ORDER_STATUS_DENIED,
'OnOrderDeny' => ORDER_STATUS_DENIED,
'OnMassOrderArchive' => ORDER_STATUS_ARCHIVED,
'OnOrderArchive' => ORDER_STATUS_ARCHIVED,
'OnMassOrderShip' => ORDER_STATUS_PROCESSED,
'OnOrderShip' => ORDER_STATUS_PROCESSED,
'OnMassOrderProcess' => ORDER_STATUS_TOSHIP,
'OnOrderProcess' => ORDER_STATUS_TOSHIP,
);
$order_items =& $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) );
$order_items->linkToParent('-inv');
$order_items->Query();
$order_items->GoFirst();
$object =& $this->Application->recallObject($event->Prefix.'.-inv');
/* @var $object OrdersItem */
if ($object->GetDBField('OnHold')) {
// any actions have no effect while on hold
return ;
}
// preparing new status, but not setting it yet
$object->SetDBField('Status', $event_status_map[$event->Name]);
$set_new_status = false;
$event->status = erSUCCESS;
$email_params = $this->OrderEmailParams($object);
switch ($event->Name) {
case 'OnMassOrderApprove':
case 'OnOrderApprove':
$set_new_status = false; //on succsessfull approve order will be split and new orders will have new statuses
if ($object->GetDBField('ChargeOnNextApprove')) {
$charge_info = $this->ChargeOrder($object);
if (!$charge_info['result']) {
break;
}
// removing ChargeOnNextApprove
$object->SetDBField('ChargeOnNextApprove', 0);
$sql = 'UPDATE '.$object->TableName.' SET ChargeOnNextApprove = 0 WHERE '.$object->IDField.' = '.$object->GetID();
$this->Conn->Query($sql);
}
// charge user for order in case if we user 2step charging (e.g. AUTH_ONLY + PRIOR_AUTH_CAPTURE)
$gw_data = $object->getGatewayData();
$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
$gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] );
$charge_result = $gateway_object->Charge($object->FieldValues, $gw_data['gw_params']);
$sql = 'UPDATE %s SET GWResult2 = %s WHERE %s = %s';
$sql = sprintf($sql, $object->TableName, $this->Conn->qstr($gateway_object->getGWResponce()), $object->IDField, $object->GetID() );
$this->Conn->Query($sql);
$object->SetDBField('GWResult2', $gateway_object->getGWResponce() );
if ($charge_result) {
$product_object =& $this->Application->recallObject('p', null, Array('skip_autoload' => true));
foreach ($order_items->Records as $product_item) {
if (!$product_item['ProductId']) {
// product may have been deleted
continue;
}
$product_object->Load($product_item['ProductId']);
$hits = floor( $product_object->GetDBField('Hits') ) + 1;
$sql = 'SELECT MAX(Hits) FROM '.$this->Application->getUnitOption('p', 'TableName').'
WHERE FLOOR(Hits) = '.$hits;
$hits = ( $res = $this->Conn->GetOne($sql) ) ? $res + 0.000001 : $hits;
$product_object->SetDBField('Hits', $hits);
$product_object->Update();
/*$sql = 'UPDATE '.$this->Application->getUnitOption('p', 'TableName').'
SET Hits = Hits + '.$product_item['Quantity'].'
WHERE ProductId = '.$product_item['ProductId'];
$this->Conn->Query($sql);*/
}
$this->PrepareCoupons($event, $object);
$this->SplitOrder($event, $object);
if ($object->GetDBField('IsRecurringBilling') != 1) {
$email_event_user =& $this->Application->EmailEventUser('ORDER.APPROVE', $object->GetDBField('PortalUserId'), $email_params);
// Mask credit card with XXXX
if ($this->Application->ConfigValue('Comm_MaskProcessedCreditCards')) {
$this->maskCreditCard($object, 'PaymentAccount');
$set_new_status = 1;
}
}
}
break;
case 'OnMassOrderDeny':
case 'OnOrderDeny':
foreach ($order_items->Records as $product_item) {
if (!$product_item['ProductId']) {
// product may have been deleted
continue;
}
$this->raiseProductEvent('Deny', $product_item['ProductId'], $product_item);
}
$email_event_user =& $this->Application->EmailEventUser('ORDER.DENY', $object->GetDBField('PortalUserId'), $email_params);
if ($event->Name == 'OnMassOrderDeny' || $event->Name == 'OnOrderDeny') {
// inform payment gateway that order was declined
$gw_data = $object->getGatewayData();
$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
$gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] );
$gateway_object->OrderDeclined($object->FieldValues, $gw_data['gw_params']);
}
// !!! LOOK HERE !!!
// !!!! no break !!!! here on purpose!!!
case 'OnMassOrderArchive':
case 'OnOrderArchive':
// it's critical to update status BEFORE processing items because
// FullfillBackorders could be called during processing and in case
// of order denial/archive fullfill could reserve the qtys back for current backorder
$object->Update();
$this->restoreOrder($order_items);
$set_new_status = false; // already set
break;
case 'OnMassOrderShip':
case 'OnOrderShip':
- $ret = Array();
+ $ret = Array ();
+ $shipping_info = $object->GetDBField('ShippingInfo');
+
+ if ($shipping_info) {
+ $quote_engine_collector =& $this->Application->recallObject('ShippingQuoteCollector');
+ /* @var $quote_engine_collector ShippingQuoteCollector */
+
+ $shipping_info = unserialize($shipping_info);
+ $shipping_quote_engine = $quote_engine_collector->GetClassByType($shipping_info, 1);
+ }
// try to create usps order
- if ( $object->GetDBField('ShippingType') == 0 && strpos($object->GetDBField('ShippingInfo'), 'USPS')) {
- $ses_usps_erros = Array();
- $ret = $this->MakeUSPSOrder($object);
+ if (($object->GetDBField('ShippingType') == 0) && ($shipping_quote_engine !== false)) {
+ $shipping_quote_engine =& $this->Application->recallObject($shipping_quote_engine);
+ /* @var $shipping_quote_engine ShippingQuoteEngine */
+
+ $ret = $shipping_quote_engine->MakeOrder($object);
}
if ( !array_key_exists('error_number', $ret) ) {
$set_new_status = $this->approveOrder($order_items);
// $set_new_status = $this->shipOrder($order_items);
$object->SetDBField('ShippingDate', adodb_mktime());
$object->UpdateFormattersSubFields();
$shipping_email = $object->GetDBField('ShippingEmail');
$email_params['to_email'] = $shipping_email ? $shipping_email : $email_params['_user_email'];
$email_event_user =& $this->Application->EmailEventUser('ORDER.SHIP', $object->GetDBField('PortalUserId'), $email_params);
// inform payment gateway that order was shipped
$gw_data = $object->getGatewayData();
$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
$gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] );
$gateway_object->OrderShipped($object->FieldValues, $gw_data['gw_params']);
}
else {
- $usps_errors[$object->GetField('OrderNumber')] = $ret['error_description'];
- $ses_usps_erros = Array();
- $ses_usps_erros = unserialize($this->Application->RecallVar('usps_errors'));
- if ( is_array($ses_usps_erros) ) {
- $usps_errors = array_merge($usps_errors, $ses_usps_erros);
- }
- $this->Application->StoreVar('usps_errors', serialize($usps_errors));
- }
+ $sqe_errors = $this->Application->RecallVar('sqe_errors');
+ $sqe_errors = $sqe_errors ? unserialize($sqe_errors) : Array ();
+ $sqe_errors[ $object->GetField('OrderNumber') ] = $ret['error_description'];
+ $this->Application->StoreVar('sqe_errors', serialize($sqe_errors));
+ }
break;
case 'OnMassOrderProcess':
case 'OnOrderProcess':
if ($this->ReadyToProcess($object->GetID())) {
$event->CallSubEvent('OnReserveItems');
if ($event->status == erSUCCESS) $set_new_status = true;
$email_event_user =& $this->Application->EmailEventUser('BACKORDER.PROCESS', $object->GetDBField('PortalUserId'), $email_params);
} else {
$event->status = erFAIL;
}
break;
}
if ($set_new_status) {
$object->Update();
}
}
/**
* Hides last 4 digits from credit card number
*
* @param OrdersItem $object
* @param string $field
*/
function maskCreditCard(&$object, $field)
{
$value = $object->GetDBField($field);
$value = preg_replace('/'.substr($value, -4).'$/', str_repeat('X', 4), $value);
$object->SetDBField($field, $value);
}
/**
* Get next free order number
*
* @param kEvent $event
*/
function getNextOrderNumber(&$event)
{
$object =& $event->getObject();
$sql = 'SELECT MAX(Number)
FROM ' . $this->Application->GetLiveName($object->TableName);
return max($this->Conn->GetOne($sql) + 1, $this->Application->ConfigValue('Comm_Next_Order_Number'));
}
/**
* Set's new order address based on another address from order (e.g. billing from shipping)
*
* @param unknown_type $object
* @param unknown_type $from
* @param unknown_type $to
*/
function DoResetAddress(&$object, $from, $to)
{
$fields = Array('To','Company','Phone','Fax','Email','Address1','Address2','City','State','Zip','Country');
if ($from == 'User') {
// skip theese fields when coping from user, because they are not present in user profile
$tmp_fields = array_flip($fields);
// unset($tmp_fields['Company'], $tmp_fields['Fax'], $tmp_fields['Address2']);
$fields = array_flip($tmp_fields);
}
// apply modification
foreach ($fields as $field_name) {
$object->SetDBField($to.$field_name, $object->GetDBField($from.$field_name));
}
}
/**
* Set's additional view filters set from "Orders" => "Search" tab
*
* @param kEvent $event
*/
function AddFilters(&$event)
{
parent::AddFilters($event);
if($event->Special != 'search') return true;
$search_filter = $this->Application->RecallVar('ord.search_search_filter');
if(!$search_filter) return false;
$search_filter = unserialize($search_filter);
$event->setPseudoClass('_List');
$object =& $event->getObject();
foreach($search_filter as $filter_name => $filter_params)
{
$filter_type = $filter_params['type'] == 'where' ? WHERE_FILTER : HAVING_FILTER;
$object->addFilter($filter_name, $filter_params['value'], $filter_type, FLT_VIEW);
}
}
/**
* Set's status incomplete to all cloned orders
*
* @param kEvent $event
*/
function OnAfterClone(&$event)
{
$id = $event->getEventParam('id');
$table = $this->Application->getUnitOption($event->Prefix,'TableName');
$id_field = $this->Application->getUnitOption($event->Prefix,'IDField');
// set cloned order status to Incomplete
$sql = 'UPDATE '.$table.' SET Status = 0 WHERE '.$id_field.' = '.$id;
$this->Conn->Query($sql);
}
/* ======================== COMMON CODE ======================== */
/**
* Split one timestamp field into 2 virtual fields
*
* @param kEvent $event
* @access public
*/
function OnAfterItemLoad(&$event)
{
// get user fields
$object =& $event->getObject();
$user_id = $object->GetDBField('PortalUserId');
if($user_id)
{
$user_info = $this->Conn->GetRow('SELECT *, CONCAT(FirstName,\' \',LastName) AS UserTo FROM '.TABLE_PREFIX.'PortalUser WHERE PortalUserId = '.$user_id);
$fields = Array('UserTo'=>'UserTo','UserPhone'=>'Phone','UserFax'=>'Fax','UserEmail'=>'Email',
'UserAddress1'=>'Street','UserAddress2'=>'Street2','UserCity'=>'City','UserState'=>'State',
'UserZip'=>'Zip','UserCountry'=>'Country','UserCompany'=>'Company');
foreach($fields as $object_field => $user_field)
{
$object->SetDBField($object_field,$user_info[$user_field]);
}
}
$object->SetDBField('PaymentCVV2', $this->Application->RecallVar('CVV2Code') );
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
/* @var $cs_helper kCountryStatesHelper */
$cs_helper->PopulateStates($event, 'ShippingState', 'ShippingCountry');
$cs_helper->PopulateStates($event, 'BillingState', 'BillingCountry');
$this->SetStepRequiredFields($event);
// needed in OnAfterItemUpdate
$this->Application->SetVar('OriginalShippingOption', $object->GetDBField('ShippingOption'));
}
/**
* Processes states
*
* @param kEvent $event
*/
function OnBeforeItemCreate(&$event)
{
parent::OnBeforeItemCreate($event);
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
/* @var $cs_helper kCountryStatesHelper */
$cs_helper->PopulateStates($event, 'ShippingState', 'ShippingCountry');
$cs_helper->PopulateStates($event, 'BillingState', 'BillingCountry');
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnBeforeItemUpdate(&$event)
{
parent::OnBeforeItemUpdate($event);
$object =& $event->getObject();
/* @var $object OrdersItem */
$old_payment_type = $object->GetOriginalField('PaymentType');
$new_payment_type = $object->GetDBField('PaymentType');
if ($new_payment_type != $old_payment_type) {
// payment type changed -> check that it's allowed
$available_payment_types = $this->Application->siteDomainField('PaymentTypes');
if ($available_payment_types) {
if (strpos($available_payment_types, '|' . $new_payment_type . '|') === false) {
// payment type isn't allowed in site domain
$object->SetDBField('PaymentType', $old_payment_type);
}
}
}
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
/* @var $cs_helper kCountryStatesHelper */
$cs_helper->PopulateStates($event, 'ShippingState', 'ShippingCountry');
$cs_helper->PopulateStates($event, 'BillingState', 'BillingCountry');
if ($object->HasTangibleItems()) {
$cs_helper->CheckStateField($event, 'ShippingState', 'ShippingCountry', false);
}
$cs_helper->CheckStateField($event, 'BillingState', 'BillingCountry', false);
if ($object->GetDBField('Status') > ORDER_STATUS_PENDING) {
return ;
}
$this->CheckUser($event);
if(!$object->GetDBField('OrderIP'))
{
$object->SetDBField('OrderIP', $_SERVER['REMOTE_ADDR']);
}
$shipping_option = $this->Application->GetVar('OriginalShippingOption');
$new_shipping_option = $object->GetDBField('ShippingOption');
if ($shipping_option != $new_shipping_option) {
$this->UpdateShippingOption($event);
}
else {
$this->UpdateShippingTypes($event);
}
$this->RecalculateProcessingFee($event);
$this->UpdateShippingTotal($event);
$this->RecalculateGift($event);
}
/**
* Apply any custom changes to list's sql query
*
* @param kEvent $event
* @access protected
* @see OnListBuild
*/
function SetCustomQuery(&$event)
{
$object =& $event->getObject();
$types = $event->getEventParam('types');
if($types == 'myorders' || $types == 'myrecentorders')
{
$user_id = $this->Application->RecallVar('user_id');
$object->addFilter('myitems_user1','%1$s.PortalUserId = '.$user_id);
$object->addFilter('myitems_user2','%1$s.PortalUserId > 0');
$object->addFilter('Status','%1$s.Status != 0');
}
else if ($event->Special == 'returns') {
// $object->addFilter('returns_filter',TABLE_PREFIX.'Orders.Status = '.ORDER_STATUS_PROCESSED.' AND (
// SELECT SUM(ReturnType)
// FROM '.TABLE_PREFIX.'OrderItems oi
// WHERE oi.OrderId = '.TABLE_PREFIX.'Orders.OrderId
// ) > 0');
$object->addFilter('returns_filter',TABLE_PREFIX.'Orders.Status = '.ORDER_STATUS_PROCESSED.' AND '.TABLE_PREFIX.'Orders.ReturnTotal > 0');
}
else if ($event->Special == 'user') {
$user_id = $this->Application->GetVar('u_id');
$object->addFilter('user_filter','%1$s.PortalUserId = '.$user_id);
}
else {
$special = $event->Special ? $event->Special : $this->Application->GetVar('order_type');
if ($special != 'search') {
// don't filter out orders by special in case of search tab
$object->addFilter( 'status_filter', '%1$s.Status='.$this->getTypeBySpecial($special) );
}
if ( $event->getEventParam('selected_only') ) {
$ids = $this->StoreSelectedIDs($event);
$object->addFilter( 'selected_filter', '%1$s.OrderId IN ('.implode(',', $ids).')');
}
}
}
function getTypeBySpecial($special)
{
$special2type = Array('incomplete'=>0,'pending'=>1,'backorders'=>2,'toship'=>3,'processed'=>4,'denied'=>5,'archived'=>6);
return $special2type[$special];
}
function getSpecialByType($type)
{
$type2special = Array(0=>'incomplete',1=>'pending',2=>'backorders',3=>'toship',4=>'processed',5=>'denied',6=>'archived');
return $type2special[$type];
}
function LockTables(&$event)
{
$read = Array();
$write_lock = '';
$read_lock = '';
$write = Array('Orders','OrderItems','Products');
foreach ($write as $tbl) {
$write_lock .= TABLE_PREFIX.$tbl.' WRITE,';
}
foreach ($read as $tbl) {
$read_lock .= TABLE_PREFIX.$tbl.' READ,';
}
$write_lock = rtrim($write_lock, ',');
$read_lock = rtrim($read_lock, ',');
$lock = trim($read_lock.','.$write_lock, ',');
//$this->Conn->Query('LOCK TABLES '.$lock);
}
/**
* Checks shopping cart products quantities
*
* @param kEvent $event
* @return bool
*/
function CheckQuantites(&$event)
{
if ($this->OnRecalculateItems($event)) { // if something has changed in the order
if ($this->Application->isAdminUser) {
if ($this->UseTempTables($event)) {
$event->redirect = 'in-commerce/orders/orders_edit_items';
}
}
else {
$event->redirect = $this->Application->GetVar('viewcart_template');
}
return false;
}
return true;
}
function DoPlaceOrder(&$event)
{
$order =& $event->getObject();
$table_prefix = $this->TablePrefix($event);
$this->LockTables($event);
if (!$this->CheckQuantites($event)) return false;
//everything is fine - we could reserve items
$this->ReserveItems($event);
$this->SplitOrder($event, $order);
return true;
}
function &queryOrderItems(&$event, $table_prefix)
{
$order =& $event->getObject();
$ord_id = $order->GetId();
// TABLE_PREFIX and $table_prefix are NOT the same !!!
$poc_table = $this->Application->getUnitOption('poc', 'TableName');
$query = ' SELECT
BackOrderFlag, '.
$table_prefix.'OrderItems.OrderItemId, '.
$table_prefix.'OrderItems.Quantity, '.
$table_prefix.'OrderItems.QuantityReserved,
IF('.TABLE_PREFIX.'Products.InventoryStatus = 2, '.$poc_table.'.QtyInStock, '.TABLE_PREFIX.'Products.QtyInStock) AS QtyInStock, '.
TABLE_PREFIX.'Products.QtyInStockMin, '.
$table_prefix.'OrderItems.ProductId, '.
TABLE_PREFIX.'Products.InventoryStatus,'.
$table_prefix.'OrderItems.OptionsSalt AS CombinationCRC
FROM '.$table_prefix.'OrderItems
LEFT JOIN '.TABLE_PREFIX.'Products ON '.TABLE_PREFIX.'Products.ProductId = '.$table_prefix.'OrderItems.ProductId
LEFT JOIN '.$poc_table.' ON ('.$poc_table.'.CombinationCRC = '.$table_prefix.'OrderItems.OptionsSalt) AND ('.$poc_table.'.ProductId = '.$table_prefix.'OrderItems.ProductId)
WHERE OrderId = '.$ord_id.' AND '.TABLE_PREFIX.'Products.Type = 1
ORDER BY BackOrderFlag ASC';
$items = $this->Conn->Query($query);
return $items;
}
function ReserveItems(&$event)
{
$table_prefix = $this->TablePrefix($event);
$items =& $this->queryOrderItems($event, $table_prefix);
foreach ($items as $an_item) {
if (!$an_item['InventoryStatus']) {
$to_reserve = $an_item['Quantity'] - $an_item['QuantityReserved'];
}
else {
if ($an_item['BackOrderFlag'] > 0) { // we don't need to reserve if it's backordered item
$to_reserve = 0;
}
else {
$to_reserve = min($an_item['Quantity']-$an_item['QuantityReserved'], $an_item['QtyInStock']-$an_item['QtyInStockMin']); //it should be equal, but just in case
}
$to_backorder = $an_item['BackOrderFlag'] > 0 ? $an_item['Quantity']-$an_item['QuantityReserved'] : 0;
}
if ($to_backorder < 0) $to_backorder = 0; //just in case
$query = ' UPDATE '.$table_prefix.'OrderItems
SET QuantityReserved = IF(QuantityReserved IS NULL, '.$to_reserve.', QuantityReserved + '.$to_reserve.')
WHERE OrderItemId = '.$an_item['OrderItemId'];
$this->Conn->Query($query);
if (!$an_item['InventoryStatus']) continue;
$update_clause = ' QtyInStock = QtyInStock - '.$to_reserve.',
QtyReserved = QtyReserved + '.$to_reserve.',
QtyBackOrdered = QtyBackOrdered + '.$to_backorder;
if ($an_item['InventoryStatus'] == 1) {
// inventory by product, then update it's quantities
$query = ' UPDATE '.TABLE_PREFIX.'Products
SET '.$update_clause.'
WHERE ProductId = '.$an_item['ProductId'];
}
else {
// inventory = 2 -> by product option combinations
$poc_idfield = $this->Application->getUnitOption('poc', 'IDField');
$poc_table = $this->Application->getUnitOption('poc', 'TableName');
$query = ' UPDATE '.$poc_table.'
SET '.$update_clause.'
WHERE (ProductId = '.$an_item['ProductId'].') AND (CombinationCRC = '.$an_item['CombinationCRC'].')';
}
$this->Conn->Query($query);
}
}
function FreeItems(&$event)
{
$table_prefix = $this->TablePrefix($event);
$items =& $this->queryOrderItems($event, $table_prefix);
foreach ($items as $an_item) {
$to_free = $an_item['QuantityReserved'];
if ($an_item['InventoryStatus']) {
if ($an_item['BackOrderFlag'] > 0) { // we don't need to free if it's backordered item
$to_free = 0;
}
// what's not reserved goes to backorder in stock for orderitems marked with BackOrderFlag
$to_backorder_free = $an_item['BackOrderFlag'] > 0 ? $an_item['Quantity'] - $an_item['QuantityReserved'] : 0;
if ($to_backorder_free < 0) $to_backorder_free = 0; //just in case
$update_clause = ' QtyInStock = QtyInStock + '.$to_free.',
QtyReserved = QtyReserved - '.$to_free.',
QtyBackOrdered = QtyBackOrdered - '.$to_backorder_free;
if ($an_item['InventoryStatus'] == 1) {
// inventory by product
$query = ' UPDATE '.TABLE_PREFIX.'Products
SET '.$update_clause.'
WHERE ProductId = '.$an_item['ProductId'];
}
else {
// inventory by option combinations
$poc_idfield = $this->Application->getUnitOption('poc', 'IDField');
$poc_table = $this->Application->getUnitOption('poc', 'TableName');
$query = ' UPDATE '.$poc_table.'
SET '.$update_clause.'
WHERE (ProductId = '.$an_item['ProductId'].') AND (CombinationCRC = '.$an_item['CombinationCRC'].')';
}
$this->Conn->Query($query);
}
$query = ' UPDATE '.$table_prefix.'OrderItems
SET QuantityReserved = IF(QuantityReserved IS NULL, 0, QuantityReserved - '.$to_free.')
WHERE OrderItemId = '.$an_item['OrderItemId'];
$this->Conn->Query($query);
}
}
/**
* Enter description here...
*
* @param kEvent $event
* @param OrdersItem $object
*/
function SplitOrder(&$event, &$object)
{
$affiliate_event = new kEvent('affil:OnOrderApprove');
$affiliate_event->setEventParam('Order_PrefixSpecial', $object->getPrefixSpecial() );
$this->Application->HandleEvent($affiliate_event);
$table_prefix = $this->TablePrefix($event);
$order =& $object;
$ord_id = $order->GetId();
$shipping_option = $order->GetDBField('ShippingOption');
$backorder_select = $shipping_option == 0 ? '0 As BackOrderFlag' : 'BackOrderFlag';
// setting PackageNum to 0 for Non-tangible items, for tangibles first package num is always 1
$query = ' SELECT OrderItemId
FROM '.$table_prefix.'OrderItems
LEFT JOIN '.TABLE_PREFIX.'Products
ON '.TABLE_PREFIX.'Products.ProductId = '.$table_prefix.'OrderItems.ProductId
WHERE '.TABLE_PREFIX.'Products.Type > 1 AND OrderId = '.$ord_id;
$non_tangibles = $this->Conn->GetCol($query);
if ($non_tangibles) {
$query = 'UPDATE '.$table_prefix.'OrderItems SET PackageNum = 0 WHERE OrderItemId IN ('.implode(',', $non_tangibles).')';
$this->Conn->Query($query);
}
// grouping_data:
// 0 => Product Type
// 1 => if NOT tangibale and NOT downloadable - OrderItemId,
// 2 => ProductId
// 3 => Shipping PackageNum
$query = 'SELECT
'.$backorder_select.',
PackageNum,
ProductName,
ShippingTypeId,
CONCAT('.TABLE_PREFIX.'Products.Type,
"_",
IF ('.TABLE_PREFIX.'Products.Type NOT IN ('.PRODUCT_TYPE_DOWNLOADABLE.','.PRODUCT_TYPE_TANGIBLE.'),
CONCAT(OrderItemId, "_", '.TABLE_PREFIX.'Products.ProductId),
""),
"_",
PackageNum
) AS Grouping,
SUM(Quantity) AS TotalItems,
SUM('.$table_prefix.'OrderItems.Weight*Quantity) AS TotalWeight,
SUM(Price * Quantity) AS TotalAmount,
SUM(QuantityReserved) AS TotalReserved,
'.TABLE_PREFIX.'Products.Type AS ProductType
FROM '.$table_prefix.'OrderItems
LEFT JOIN '.TABLE_PREFIX.'Products
ON '.TABLE_PREFIX.'Products.ProductId = '.$table_prefix.'OrderItems.ProductId
WHERE OrderId = '.$ord_id.'
GROUP BY BackOrderFlag, Grouping
ORDER BY BackOrderFlag ASC, PackageNum ASC, ProductType ASC';
$sub_orders = $this->Conn->Query($query);
$processed_sub_orders = Array();
// in case of recurring billing this will not be 0 as usual
//$first_sub_number = ($event->Special == 'recurring') ? $object->getNextSubNumber() - 1 : 0;
$first_sub_number = $object->GetDBField('SubNumber');
$next_sub_number = $first_sub_number;
$group = 1;
$order_has_gift = $order->GetDBField('GiftCertificateDiscount') > 0 ? 1 : 0;
$skip_types = Array (PRODUCT_TYPE_TANGIBLE, PRODUCT_TYPE_DOWNLOADABLE);
foreach ($sub_orders as $sub_order_data) {
$sub_order =& $this->Application->recallObject('ord.-sub'.$next_sub_number, 'ord');
/* @var $sub_order OrdersItem */
if ($this->UseTempTables($event) && $next_sub_number == 0) {
$sub_order =& $order;
}
$sub_order->SetDBFieldsFromHash($order->FieldValues);
$sub_order->SetDBField('SubNumber', $next_sub_number);
$sub_order->SetDBField('SubTotal', $sub_order_data['TotalAmount']);
$grouping_data = explode('_', $sub_order_data['Grouping']);
$named_grouping_data['Type'] = $grouping_data[0];
if (!in_array($named_grouping_data['Type'], $skip_types)) {
$named_grouping_data['OrderItemId'] = $grouping_data[1];
$named_grouping_data['ProductId'] = $grouping_data[2];
$named_grouping_data['PackageNum'] = $grouping_data[3];
}
else {
$named_grouping_data['PackageNum'] = $grouping_data[2];
}
if ($named_grouping_data['Type'] == PRODUCT_TYPE_TANGIBLE) {
$sub_order->SetDBField('ShippingCost', getArrayValue( unserialize($order->GetDBField('ShippingInfo')), $sub_order_data['PackageNum'], 'TotalCost') );
$sub_order->SetDBField('InsuranceFee', getArrayValue( unserialize($order->GetDBField('ShippingInfo')), $sub_order_data['PackageNum'], 'InsuranceFee') );
$sub_order->SetDBField('ShippingInfo', serialize(Array(1 => getArrayValue( unserialize($order->GetDBField('ShippingInfo')), $sub_order_data['PackageNum']))));
}
else {
$sub_order->SetDBField('ShippingCost', 0);
$sub_order->SetDBField('InsuranceFee', 0);
$sub_order->SetDBField('ShippingInfo', ''); //otherwise orders w/o shipping wills still have shipping info!
}
$amount_percent = $sub_order->getTotalAmount() * 100 / $order->getTotalAmount();
// proportional affiliate commission splitting
if ($order->GetDBField('AffiliateCommission') > 0) {
$sub_order->SetDBField('AffiliateCommission', $order->GetDBField('AffiliateCommission') * $amount_percent / 100 );
}
$amount_percent = ($sub_order->GetDBField('SubTotal') + $sub_order->GetDBField('ShippingCost')) * 100 / ($order->GetDBField('SubTotal') + $order->GetDBField('ShippingCost'));
if ($order->GetDBField('ProcessingFee') > 0) {
$sub_order->SetDBField('ProcessingFee', round($order->GetDBField('ProcessingFee') * $amount_percent / 100, 2));
}
$sub_order->RecalculateTax();
$original_amount = $sub_order->GetDBField('SubTotal') + $sub_order->GetDBField('ShippingCost') + $sub_order->GetDBField('VAT') + $sub_order->GetDBField('ProcessingFee') + $sub_order->GetDBField('InsuranceFee') - $sub_order->GetDBField('GiftCertificateDiscount');
$sub_order->SetDBField('OriginalAmount', $original_amount);
if ($named_grouping_data['Type'] == 1 && ($sub_order_data['BackOrderFlag'] > 0
||
($sub_order_data['TotalItems'] != $sub_order_data['TotalReserved'])) ) {
$sub_order->SetDBField('Status', ORDER_STATUS_BACKORDERS);
if ($event->Special != 'recurring') { // just in case if admin uses tangible backordered products in recurring orders
$email_event_user =& $this->Application->EmailEventUser('BACKORDER.ADD', $sub_order->GetDBField('PortalUserId'), $this->OrderEmailParams($sub_order));
$email_event_admin =& $this->Application->EmailEventAdmin('BACKORDER.ADD');
}
}
else {
switch ($named_grouping_data['Type']) {
case PRODUCT_TYPE_DOWNLOADABLE:
$sql = 'SELECT oi.*
FROM '.TABLE_PREFIX.'OrderItems oi
LEFT JOIN '.TABLE_PREFIX.'Products p ON p.ProductId = oi.ProductId
WHERE (OrderId = %s) AND (p.Type = '.PRODUCT_TYPE_DOWNLOADABLE.')';
$downl_products = $this->Conn->Query( sprintf($sql, $ord_id) );
$product_ids = Array();
foreach ($downl_products as $downl_product) {
$this->raiseProductEvent('Approve', $downl_product['ProductId'], $downl_product, $next_sub_number);
$product_ids[] = $downl_product['ProductId'];
}
break;
case PRODUCT_TYPE_TANGIBLE:
$sql = 'SELECT '.$backorder_select.', oi.*
FROM '.TABLE_PREFIX.'OrderItems oi
LEFT JOIN '.TABLE_PREFIX.'Products p ON p.ProductId = oi.ProductId
WHERE (OrderId = %s) AND (BackOrderFlag = 0) AND (p.Type = '.PRODUCT_TYPE_TANGIBLE.')';
$products = $this->Conn->Query( sprintf($sql, $ord_id) );
foreach ($products as $product) {
$this->raiseProductEvent('Approve', $product['ProductId'], $product, $next_sub_number);
}
break;
default:
$order_item_fields = $this->Conn->GetRow('SELECT * FROM '.TABLE_PREFIX.'OrderItems WHERE OrderItemId = '.$named_grouping_data['OrderItemId']);
$this->raiseProductEvent('Approve', $named_grouping_data['ProductId'], $order_item_fields, $next_sub_number);
break;
}
$sub_order->SetDBField('Status', $named_grouping_data['Type'] == PRODUCT_TYPE_TANGIBLE ? ORDER_STATUS_TOSHIP : ORDER_STATUS_PROCESSED);
}
if ($next_sub_number == $first_sub_number) {
$sub_order->SetId($order->GetId());
$sub_order->Update();
}
else {
$sub_order->Create();
}
switch ($named_grouping_data['Type']) {
case PRODUCT_TYPE_TANGIBLE:
$query = 'UPDATE '.$table_prefix.'OrderItems SET OrderId = %s WHERE OrderId = %s AND PackageNum = %s';
$query = sprintf($query, $sub_order->GetId(), $ord_id, $sub_order_data['PackageNum']);
break;
case PRODUCT_TYPE_DOWNLOADABLE:
$query = 'UPDATE '.$table_prefix.'OrderItems SET OrderId = %s WHERE OrderId = %s AND ProductId IN (%s)';
$query = sprintf($query, $sub_order->GetId(), $ord_id, implode(',', $product_ids) );
break;
default:
$query = 'UPDATE '.$table_prefix.'OrderItems SET OrderId = %s WHERE OrderId = %s AND OrderItemId = %s';
$query = sprintf($query, $sub_order->GetId(), $ord_id, $named_grouping_data['OrderItemId']);
break;
}
$this->Conn->Query($query);
if ($order_has_gift) {
// gift certificate can be applied only after items are assigned to suborder
$sub_order->RecalculateGift($event);
$original_amount = $sub_order->GetDBField('SubTotal') + $sub_order->GetDBField('ShippingCost') + $sub_order->GetDBField('VAT') + $sub_order->GetDBField('ProcessingFee') + $sub_order->GetDBField('InsuranceFee') - $sub_order->GetDBField('GiftCertificateDiscount');
$sub_order->SetDBField('OriginalAmount', $original_amount);
$sub_order->Update();
}
$processed_sub_orders[] = $sub_order->GetID();
$next_sub_number++;
$group++;
}
foreach ($processed_sub_orders as $sub_id) {
// update DiscountTotal field
$sql = 'SELECT SUM(ROUND(FlatPrice-Price,2)*Quantity) FROM '.$table_prefix.'OrderItems WHERE OrderId = '.$sub_id;
$discount_total = $this->Conn->GetOne($sql);
$sql = 'UPDATE '.$sub_order->TableName.'
SET DiscountTotal = '.$this->Conn->qstr($discount_total).'
WHERE OrderId = '.$sub_id;
$this->Conn->Query($sql);
}
}
/**
* Call products linked event when spefcfic action is made to product in order
*
* @param string $event_type type of event to get from product ProcessingData = {Approve,Deny,CompleteOrder}
* @param int $product_id ID of product to gather processing data from
* @param Array $order_item_fields OrderItems table record fields (with needed product & order in it)
*/
function raiseProductEvent($event_type, $product_id, $order_item_fields, $next_sub_number=null)
{
$sql = 'SELECT ProcessingData
FROM '.TABLE_PREFIX.'Products
WHERE ProductId = '.$product_id;
$processing_data = $this->Conn->GetOne($sql);
if ($processing_data) {
$processing_data = unserialize($processing_data);
$event_key = getArrayValue($processing_data, $event_type.'Event');
// if requested type of event is defined for product, only then process it
if ($event_key) {
$event = new kEvent($event_key);
$event->setEventParam('field_values', $order_item_fields);
$event->setEventParam('next_sub_number', $next_sub_number);
$this->Application->HandleEvent($event);
}
}
}
/**
* Updates product info in shopping cart
*
* @param kEvent $event
* @param unknown_type $prod_id
* @param unknown_type $back_order
* @param unknown_type $qty
* @param unknown_type $price
* @param unknown_type $discounted_price
* @param unknown_type $discount_type
* @param unknown_type $discount_id
* @param unknown_type $order_item_id
* @param unknown_type $options_salt
* @param unknown_type $passed_item_data
* @param unknown_type $cost
* @return unknown
*/
function UpdateOrderItem(&$event, $prod_id, $back_order, $qty, $price, $discounted_price, $discount_type, $discount_id, $order_item_id = 0, $options_salt = 0, $passed_item_data=null, $cost=0)
{
$price = (float) $price;
$discounted_price = (float) $discounted_price;
$qty = (int) $qty;
$ord_id = $this->getPassedId($event);
$table_prefix = $this->TablePrefix($event);
if($order_item_id)
{
$query = ' SELECT OrderItemId, Quantity, FlatPrice, Price, BackOrderFlag, ItemData FROM '.$table_prefix.'OrderItems
WHERE OrderItemId = '.$order_item_id;
}
else
{
// try to load specified Product by its Id and BackOrderFlag in the order
$query = 'SELECT OrderItemId, Quantity, FlatPrice, Price, BackOrderFlag, ItemData FROM '.$table_prefix.'OrderItems
WHERE
OrderId = '.$ord_id.'
AND
ProductId = '.$prod_id.'
AND
BackOrderFlag '.($back_order ? ' >= 1' : ' = 0').'
AND
OptionsSalt = '.$options_salt;
}
$item_row = $this->Conn->GetRow($query);
$item_id = $item_row['OrderItemId'];
$object =& $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
$item_data = $item_row['ItemData'];
if($item_data)
{
$item_data = unserialize($item_data);
}
$orig_discount_type = (int)getArrayValue($item_data, 'DiscountType');
$orig_discount_id = (int)getArrayValue($item_data, 'DiscountId');
if ($item_id) { // if Product already exists in the order
if ($qty > 0 &&
$item_row['Quantity'] == $qty &&
round($item_row['FlatPrice'], 3) == round($price, 3) &&
round($item_row['Price'], 3) == round($discounted_price, 3) &&
$orig_discount_type == $discount_type &&
$orig_discount_id == $discount_id)
{
return false;
}
$object->Load($item_id);
if ($qty > 0) { // Update Price by _TOTAL_ qty
$object->SetDBField('Quantity', $qty);
$object->SetDBField('FlatPrice', $price );
$object->SetDBField('Price', $discounted_price );
$object->SetDBField('Cost', $cost);
if($item_data = $object->GetDBField('ItemData'))
{
$item_data = unserialize($item_data);
}
else
{
$item_data = Array();
}
$item_data['DiscountType'] = $discount_type;
$item_data['DiscountId'] = $discount_id;
$object->SetDBField('ItemData', serialize($item_data));
$object->Update();
}
else { // delete products with 0 qty
$object->Delete();
}
}
elseif ($qty > 0) { // if we are adding product
$product =& $this->Application->recallObject('p', null, Array ('skip_autoload' => true));
$product->Load($prod_id);
$object->SetDBField('ProductId', $prod_id);
$object->SetDBField('ProductName', $product->GetField('Name'));
$object->SetDBField('Quantity', $qty);
$object->SetDBField('FlatPrice', $price );
$object->SetDBField('Price', $discounted_price );
$object->SetDBField('Cost', $cost);
$object->SetDBField('OrderId', $ord_id);
$object->SetDBField('BackOrderFlag', $back_order);
if ($passed_item_data && !is_array($passed_item_data)) {
$passed_item_data = unserialize($passed_item_data);
}
// $item_data = Array('DiscountType' => $discount_type, 'DiscountId' => $discount_id);
$item_data = $passed_item_data;
$object->SetDBField('ItemData', serialize($item_data));
$object->Create();
}
else {
return false; // item requiring to set qty to 0, meaning already does not exist
}
return true;
}
function OptionsSalt($options, $comb_only=false)
{
$helper =& $this->Application->recallObject('kProductOptionsHelper');
return $helper->OptionsSalt($options, $comb_only);
}
/**
* Enter description here...
*
* @param kEvent $event
* @param int $item_id
*/
function AddItemToOrder(&$event, $item_id, $qty = null, $package_num = null)
{
if (!isset($qty)) {
$qty = 1;
}
// Loading product to add
$product =& $this->Application->recallObject('p.toadd', null, Array('skip_autoload' => true));
/* @var $product kDBItem */
$product->Load($item_id);
$object =& $this->Application->recallObject('orditems.-item', null, Array('skip_autoload' => true));
/* @var $object kDBItem */
$order =& $this->Application->recallObject('ord');
/* @var $order kDBItem */
if (!$order->isLoaded() && !$this->Application->isAdmin) {
// no order was created before -> create one now
if ($this->_createNewCart($event)) {
$this->LoadItem($event);
}
}
if (!$order->isLoaded()) {
// was unable to create new order
return false;
}
$ord_id = $order->GetID();
if ($item_data = $event->getEventParam('ItemData')) {
$item_data = unserialize($item_data);
}
else {
$item_data = Array ();
}
$options = getArrayValue($item_data, 'Options');
if (!$this->CheckOptions($event, $options, $item_id, $qty, $product->GetDBField('OptionsSelectionMode'))) return;
// Checking if such product already exists in the cart
$keys['OrderId'] = $ord_id;
$keys['ProductId'] = $product->GetId();
if (isset($item_data['Options'])) {
$options_salt = $this->OptionsSalt($item_data['Options']);
$keys['OptionsSalt'] = $options_salt;
}
else {
$options_salt = null;
}
$exists = $object->Load($keys);
$object->SetDBField('ProductId', $product->GetId());
$object->SetDBField('ProductName', $product->GetField('l'.$this->Application->GetDefaultLanguageId().'_Name'));
$object->SetDBField('Weight', $product->GetDBField('Weight'));
if (isset($item_data['Options'])) {
$object->SetDBField('OptionsSalt', $options_salt);
}
if (isset($package_num)) {
$object->SetDBField('PackageNum', $package_num);
}
if($product->GetDBField('Type') == PRODUCT_TYPE_TANGIBLE || $product->GetDBField('Type') == 6)
{
$object->SetDBField('Quantity', $object->GetDBField('Quantity') + $qty);
}
else // Types: 2,3,4
{
$object->SetDBField('Quantity', $qty); // 1
$exists = false;
}
if (isset($item_data['ForcePrice'])) {
$price = $item_data['ForcePrice'];
}
else {
$price = $this->GetPlainProductPrice($product->GetId(), $object->GetDBField('Quantity'), $product->GetDBField('Type'), $order, $options_salt, $item_data);
}
$cost = $this->GetProductCost($product->GetId(), $object->GetDBField('Quantity'), $product->GetDBField('Type'), $options_salt, $item_data);
$object->SetDBField('FlatPrice', $price);
$couponed_price = $this->GetCouponDiscountedPrice($order->GetDBField('CouponId'), $product->GetId(), $price);
$discounted_price = $this->GetDiscountedProductPrice($product->GetId(), $price, $discount_id, $order);
if( $couponed_price < $discounted_price )
{
$discounted_price = $couponed_price;
$discount_type = 'coupon';
$discount_id = $order->GetDBField('CouponId');
}
else
{
$discount_type = 'discount';
$discount_id = $discount_id;
}
$item_data['DiscountType'] = $discount_type;
$item_data['DiscountId'] = $discount_id;
$item_data['IsRecurringBilling'] = $product->GetDBField('IsRecurringBilling');
// it item is processed in order using new style, then put such mark in orderitem record
$processing_data = $product->GetDBField('ProcessingData');
if ($processing_data) {
$processing_data = unserialize($processing_data);
if (getArrayValue($processing_data, 'HasNewProcessing')) {
$item_data['HasNewProcessing'] = 1;
}
}
$object->SetDBField('ItemData', serialize($item_data));
$object->SetDBField('Price', $discounted_price); // will be retrieved later
$object->SetDBField('Cost', $cost);
$object->SetDBField('BackOrderFlag', 0); // it will be updated in OnRecalculateItems later if needed
$object->SetDBField('OrderId', $ord_id);
if ($exists) {
if ($qty > 0) {
$object->Update();
}
else {
$object->Delete();
}
}
else {
$object->Create();
}
$this->Application->HandleEvent($ord_event, 'ord:OnRecalculateItems');
/*if ($ord_event->getEventParam('RecalculateChangedCart') && !$this->Application->isAdmin) {
$event->SetRedirectParam('checkout_error', $ord_event->redirect_params['checkout_error']);
}*/
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function UpdateShippingTotal(&$event)
{
if ($this->Application->GetVar('ebay_notification') == 1) {
// TODO: get rid of this "if"
return ;
}
$object =& $event->getObject();
$ord_id = $object->GetId();
$shipping_option = $object->GetDBField('ShippingOption');
$backorder_select = $shipping_option == 0 ? '0 As BackOrderFlag' : 'BackOrderFlag';
$table_prefix = $this->TablePrefix($event);
$shipping_info = $object->GetDBField('ShippingInfo') ? unserialize( $object->GetDBField('ShippingInfo') ) : false;
$shipping_total = 0;
$insurance_fee = 0;
if( is_array($shipping_info) )
{
foreach ($shipping_info as $a_shipping)
{
// $id_elements = explode('_', $a_shipping['ShippingTypeId']);
$shipping_total += $a_shipping['TotalCost'];
$insurance_fee += $a_shipping['InsuranceFee'];
}
}
$object->SetDBField('ShippingCost', $shipping_total);
$object->SetDBField('InsuranceFee', $insurance_fee);
// no need to update, it will be called in calling method
$this->RecalculateTax($event);
}
/**
* Recompile shopping cart, splitting or grouping orders and backorders depending on total quantityes.
* First it counts total qty for each ProductId, and then creates order for available items
* and backorder for others. It also updates the sub-total for the order
*
* @param kEvent $event
* @return bool Returns true if items splitting/grouping were changed
*/
function OnRecalculateItems(&$event)
{
if (is_object($event->MasterEvent) && ($event->MasterEvent->status != erSUCCESS)) {
// e.g. master order update failed, don't recalculate order products
return ;
}
if($checkout_error = $this->Application->GetVar('set_checkout_error'))
{
$event->SetRedirectParam('checkout_error', $checkout_error);
}
$order =& $event->getObject();
/* @var $order OrdersItem */
if ( !$order->isLoaded() ) {
$this->LoadItem($event); // try to load
}
$ord_id = (int)$order->GetID();
if ( !$order->isLoaded() ) return; //order has not been created yet
if( $order->GetDBField('Status') != ORDER_STATUS_INCOMPLETE )
{
return;
}
$table_prefix = $this->TablePrefix($event);
// process only tangible products here
$poc_table = $this->Application->getUnitOption('poc', 'TableName');
$query = ' SELECT oi.ProductId, oi.OptionsSalt, oi.ItemData, SUM(oi.Quantity) AS Quantity,
IF(p.InventoryStatus = 2, poc.QtyInStock, p.QtyInStock) AS QtyInStock,
p.QtyInStockMin, p.BackOrder, p.InventoryStatus
FROM '.$table_prefix.'OrderItems AS oi
LEFT JOIN '.TABLE_PREFIX.'Products AS p ON oi.ProductId = p.ProductId
LEFT JOIN '.$poc_table.' poc ON (poc.CombinationCRC = oi.OptionsSalt) AND (oi.ProductId = poc.ProductId)
WHERE (oi.OrderId = '.$ord_id.') AND (p.Type = 1)
GROUP BY oi.ProductId, OptionsSalt';
$items = $this->Conn->Query($query);
$result = false;
$cost_total = 0;
$sub_total = 0;
$sub_total_flat = 0;
$coupon_discount = 0;
$pending_operations = Array();
$backordering = $this->Application->ConfigValue('Comm_Enable_Backordering');
$coupon_id = $order->GetDBField('CouponId');
foreach ($items as $row) {
$a_item_data = isset($row['ItemData']) ? unserialize($row['ItemData']) : Array();
$min_qty = $this->GetMinQty($row['ProductId']);
if ($row['Quantity'] > 0 && $row['Quantity'] < $min_qty) {
$row['Quantity'] = $min_qty;
$event->SetRedirectParam('checkout_error', 6);
}
$back_order = 0;
$to_order = 0;
if (!$row['InventoryStatus']) {
$available = $row['Quantity']*2; // always available;
}
else {
// if there are not enough qty AND backorder is auto or backorder is always
$available = $row['QtyInStock'] - $row['QtyInStockMin'];
$available = max(0, $available); // just in case
}
if (
$backordering && // backordering generally enabled
(
($row['Quantity'] > $available)
&&
($row['BackOrder'] == 2) //auto
)
||
$row['BackOrder'] == 1 // always
)
{ // split order into order & backorder
if ($row['BackOrder'] == 1) { //Always backorder
$available = 0;
$to_order = 0;
$back_order = $row['Quantity'];
}
else { //Auto
$to_order = $available;
$back_order = $row['Quantity'] - $available;
}
if (isset($a_item_data['ForcePrice'])) {
$price = $a_item_data['ForcePrice'];
}
else {
$price = $this->GetPlainProductPrice( $row['ProductId'], $to_order + $back_order, 1, $order, $row['OptionsSalt'], $row['ItemData'] );
}
$cost = $this->GetProductCost( $row['ProductId'], $to_order + $back_order, 1, $row['OptionsSalt'], $row['ItemData'] );
$discounted_price = $this->GetDiscountedProductPrice( $row['ProductId'], $price, $discount_id, $order );
$couponed_price = $this->GetCouponDiscountedPrice( $coupon_id, $row['ProductId'], $price );
if($couponed_price < $discounted_price)
{
$discounted_price = $couponed_price;
$coupon_discount += ($price - $couponed_price) * ($to_order + $back_order);
$discount_type = 'coupon';
$discount_id = $coupon_id;
}
else
{
$discount_type = 'discount';
}
$pending_operations[] = Array( $row['ProductId'], 0, $to_order, $price, $discounted_price, $discount_type, $discount_id, 0, $row['OptionsSalt'], $row['ItemData'], $cost );
$pending_operations[] = Array( $row['ProductId'], 1, $back_order, $price, $discounted_price, $discount_type, $discount_id, 0, $row['OptionsSalt'], $row['ItemData'], $cost);
}
else { // store as normal order (and remove backorder)
// we could get here with backorder=never then we should order only what's available
$to_order = min($row['Quantity'], $available);
if (isset($a_item_data['ForcePrice'])) {
$price = $a_item_data['ForcePrice'];
}
else {
$price = $this->GetPlainProductPrice( $row['ProductId'], $to_order + $back_order, 1, $order, $row['OptionsSalt'], $row['ItemData'] );
}
$cost = $this->GetProductCost( $row['ProductId'], $to_order + $back_order, 1, $row['OptionsSalt'], $row['ItemData'] );
$discounted_price = $this->GetDiscountedProductPrice( $row['ProductId'], $price, $discount_id, $order );
$couponed_price = $this->GetCouponDiscountedPrice( $coupon_id, $row['ProductId'], $price );
if($couponed_price < $discounted_price)
{
$discounted_price = $couponed_price;
$coupon_discount += ($price - $couponed_price) * ($to_order + $back_order);
$discount_type = 'coupon';
$discount_id = $coupon_id;
}
else
{
$discount_type = 'discount';
}
$pending_operations[] = Array( $row['ProductId'], 0, $to_order, $price, $discounted_price, $discount_type, $discount_id, 0, $row['OptionsSalt'], $row['ItemData'], $cost );
$pending_operations[] = Array( $row['ProductId'], 1, 0, $price, $discounted_price, $discount_type, $discount_id, 0, $row['OptionsSalt'], $row['ItemData'], $cost ); // this removes backorders
if ($to_order < $row['Quantity']) { // has changed
if ($to_order > 0) {
$event->SetRedirectParam('checkout_error', 2);
}
else {
$event->SetRedirectParam('checkout_error', 3);
}
$result = true;
}
}
$sub_total_flat += ($to_order + $back_order) * $price;
$sub_total += ($to_order + $back_order) * $discounted_price;
$cost_total += ($to_order + $back_order) * $cost;
}
// process subscriptions, services and downloadable: begin
$poc_table = $this->Application->getUnitOption('poc', 'TableName');
$query = ' SELECT oi.OrderItemId, oi.ProductId, oi.Quantity, oi.OptionsSalt, oi.ItemData,
IF(p.InventoryStatus = 2, poc.QtyInStock, p.QtyInStock) AS QtyInStock,
p.QtyInStockMin, p.BackOrder, p.InventoryStatus, p.Type
FROM '.$table_prefix.'OrderItems AS oi
LEFT JOIN '.TABLE_PREFIX.'Products AS p ON oi.ProductId = p.ProductId
LEFT JOIN '.$poc_table.' poc ON (poc.CombinationCRC = oi.OptionsSalt) AND (oi.ProductId = poc.ProductId)
WHERE (oi.OrderId = '.$ord_id.') AND (p.Type IN (2,3,4,5,6))';
$items = $this->Conn->Query($query);
foreach ($items as $row)
{
$a_item_data = isset($row['ItemData']) ? unserialize($row['ItemData']) : Array();
if (isset($a_item_data['ForcePrice'])) {
$price = $a_item_data['ForcePrice'];
}
else {
$price = $this->GetPlainProductPrice( $row['ProductId'], $row['Quantity'], $row['Type'], $order, $row['OptionsSalt'], $row['ItemData'] );
}
$cost = $this->GetProductCost( $row['ProductId'], $row['Quantity'], $row['Type'], $row['OptionsSalt'], $row['ItemData'] );
$discounted_price = $this->GetDiscountedProductPrice( $row['ProductId'], $price, $discount_id, $order );
$couponed_price = $this->GetCouponDiscountedPrice( $coupon_id, $row['ProductId'], $price );
if($couponed_price < $discounted_price)
{
$discounted_price = $couponed_price;
$coupon_discount += ($price - $couponed_price);
$discount_type = 'coupon';
$discount_id = $coupon_id;
}
else
{
$discount_type = 'discount';
}
$pending_operations[] = Array( $row['ProductId'], 0, $row['Quantity'], $price, $discounted_price, $discount_type, $discount_id, $row['OrderItemId'], 0, $row['ItemData'], $cost );
$sub_total_flat += $price * $row['Quantity'];
$sub_total += $discounted_price * $row['Quantity'];
$cost_total += $cost * $row['Quantity'];
}
// process subscriptions, services and downloadable: end
$flat_discount = $this->GetWholeOrderPlainDiscount($global_discount_id, $order);
$flat_discount = ($flat_discount < $sub_total_flat) ? $flat_discount : $sub_total_flat;
$coupon_flat_discount = $this->GetWholeOrderCouponDiscount($coupon_id);
$coupon_flat_discount = ($coupon_flat_discount < $sub_total_flat) ? $coupon_flat_discount : $sub_total_flat;
if($coupon_flat_discount && $coupon_flat_discount > $flat_discount)
{
$flat_discount = $coupon_flat_discount;
$global_discount_type = 'coupon';
$global_discount_id = $coupon_id;
}
else
{
$global_discount_type = 'discount';
}
if($sub_total_flat - $sub_total < $flat_discount)
{
$coupon_discount = ($flat_discount == $coupon_flat_discount) ? $flat_discount : 0;
$sub_total = $sub_total_flat - $flat_discount;
foreach ($pending_operations as $operation_row)
{
list($product_id, $backorder, $qty, $price, $discounted_price, $dummy, $dummy, $order_item_id, $options_salt, $item_data, $cost) = $operation_row;
$new_price = ($price / $sub_total_flat) * $sub_total;
$result = $this->UpdateOrderItem($event, $product_id, $backorder, $qty, $price, $new_price, $global_discount_type, $global_discount_id, $order_item_id, $options_salt, $item_data, $cost) || $result;
}
}
else
{
foreach ($pending_operations as $operation_row)
{
list($product_id, $backorder, $qty, $price, $discounted_price, $discount_type, $discount_id, $order_item_id, $options_salt, $item_data, $cost) = $operation_row;
$result = $this->UpdateOrderItem($event, $product_id, $backorder, $qty, $price, $discounted_price, $discount_type, $discount_id, $order_item_id, $options_salt, $item_data, $cost) || $result;
}
}
$order->SetDBField('SubTotal', $sub_total);
$order->SetDBField('CostTotal', $cost_total);
// $this->CalculateDiscount($event);
$order->SetDBField('DiscountTotal', $sub_total_flat - $sub_total);
if($coupon_id && $coupon_discount == 0)
{
$this->RemoveCoupon($order);
$event->SetRedirectParam('checkout_error', 8);
}
$order->SetDBField('CouponDiscount', $coupon_discount);
if ($result) $this->UpdateShippingOption($event);
$this->UpdateShippingTotal($event);
$this->RecalculateProcessingFee($event);
$this->RecalculateTax($event);
$this->RecalculateGift($event);
if ($event->Name != 'OnAfterItemUpdate') $order->Update();
$event->setEventParam('RecalculateChangedCart', $result);
if (is_object($event->MasterEvent)) {
$event->MasterEvent->setEventParam('RecalculateChangedCart', $result);
}
if ($result && !getArrayValue($event->redirect_params, 'checkout_error')) {
$event->SetRedirectParam('checkout_error', 1);
}
if ($result && is_object($event->MasterEvent) && $event->MasterEvent->Name == 'OnUserLogin')
{
if( ($shop_cart_template = $this->Application->GetVar('shop_cart_template'))
&& is_object($event->MasterEvent->MasterEvent) )
{
$event->MasterEvent->MasterEvent->SetRedirectParam('checkout_error', 9);
$event->MasterEvent->MasterEvent->redirect = $shop_cart_template;
}
}
return $result;
}
/* function GetShippingCost($user_country_id, $user_state_id, $user_zip, $weight, $items, $amount, $shipping_type)
{
$this->Application->recallObject('ShippingQuoteEngine');
$shipping_h =& $this->Application->recallObject('CustomShippingQuoteEngine');
$query = $shipping_h->QueryShippingCost($user_country_id, $user_state_id, $user_zip, $weight, $items, $amount, $shipping_type);
$cost = $this->Conn->GetRow($query);
return $cost['TotalCost'];
}*/
function GetMinQty($p_id)
{
$query = 'SELECT
MIN(pp.MinQty)
FROM '.TABLE_PREFIX.'ProductsPricing AS pp
WHERE pp.ProductId = '.$p_id;
$min_qty = $this->Conn->GetOne($query);
if (!$min_qty) return 1;
return $min_qty;
}
/**
* Return product cost for given qty, taking no discounts into account
*
* @param int $p_id ProductId
* @param int $qty Quantity
* @return float
*/
function GetProductCost($p_id, $qty, $product_type, $options_salt=null, $item_data=null)
{
$user_groups = $this->Application->RecallVar('UserGroups');
if($product_type == 1)
{
// $where_clause = 'pp.ProductId = '.$p_id.' AND pp.MinQty <= '.$qty;
// $orderby_clause = 'ORDER BY ('.$qty.' - pp.MinQty) ASC';
$where_clause = 'GroupId IN ('.$user_groups.') AND pp.ProductId = '.$p_id.' AND pp.MinQty <= '.$qty.' AND ('.$qty.' < pp.MaxQty OR pp.MaxQty=-1)';
$orderby_clause = 'ORDER BY pp.Price ASC';
}
else
{
$price_id = $this->GetPricingId($p_id, $item_data);
$where_clause = 'pp.ProductId = '.$p_id.' AND pp.PriceId = '.$price_id;
$orderby_clause = '';
}
$sql = 'SELECT Cost
FROM '.TABLE_PREFIX.'ProductsPricing AS pp
LEFT JOIN '.TABLE_PREFIX.'Products AS p
ON p.ProductId = pp.ProductId
WHERE '.$where_clause.'
'.$orderby_clause;
// GROUP BY pp.ProductId - removed, this it qty pricing is caclucated incorrectly !!!
$cost = $this->Conn->GetOne($sql);
if (!$cost) $price = 0;
return $cost;
}
/**
* Return product price for given qty, taking no discounts into account
*
* @param int $p_id ProductId
* @param int $qty Quantity
* @return float
*/
function GetPlainProductPrice($p_id, $qty, $product_type, &$order_object, $options_salt=null, $item_data=null)
{
$user_id = $order_object->GetDBField('PortalUserId');
$user_groups = $this->Application->getUserGroups($user_id);
if($product_type == 1)
{
// $where_clause = 'pp.ProductId = '.$p_id.' AND pp.MinQty <= '.$qty;
// $orderby_clause = 'ORDER BY ('.$qty.' - pp.MinQty) ASC';
$where_clause = 'GroupId IN ('.$user_groups.') AND pp.ProductId = '.$p_id.' AND pp.MinQty <= '.$qty.' AND ('.$qty.' < pp.MaxQty OR pp.MaxQty=-1)';
// if we have to stick ti primary group this order by clause force its pricing to go first,
// but if there is no pricing for primary group it will take next optimal
if ($this->Application->ConfigValue('Comm_PriceBracketCalculation') == 1){
if ($user_id <= 0) {
$primary_group = $this->Application->ConfigValue('User_LoggedInGroup'); // actually this is Everyone
}
else {
$primary_group = $this->Conn->GetOne('SELECT GroupId FROM '.TABLE_PREFIX.'UserGroup WHERE PortalUserId='.$user_id.' AND PrimaryGroup=1');
}
$orderby_clause = 'ORDER BY (IF(GroupId='.$primary_group.',1,2)) ASC, pp.Price ASC';
}
else {
$orderby_clause = 'ORDER BY pp.Price ASC';
}
}
else
{
$price_id = $this->GetPricingId($p_id, $item_data);
$where_clause = 'pp.ProductId = '.$p_id.' AND pp.PriceId = '.$price_id;
$orderby_clause = '';
}
$sql = 'SELECT Price
FROM '.TABLE_PREFIX.'ProductsPricing AS pp
LEFT JOIN '.TABLE_PREFIX.'Products AS p
ON p.ProductId = pp.ProductId
WHERE '.$where_clause.'
'.$orderby_clause;
// GROUP BY pp.ProductId - removed, this it qty pricing is caclucated incorrectly !!!
$price = $this->Conn->GetOne($sql);
if (!$price) $price = 0;
if (isset($item_data) && !is_array($item_data)) {
$item_data = unserialize($item_data);
}
if (isset($item_data['Options'])) {
$addtion = 0;
$opt_helper =& $this->Application->recallObject('kProductOptionsHelper');
foreach ($item_data['Options'] as $opt => $val) {
$data = $this->Conn->GetRow('SELECT * FROM '.TABLE_PREFIX.'ProductOptions WHERE ProductOptionId = '.$opt);
$parsed = $opt_helper->ExplodeOptionValues($data);
if (!$parsed) continue;
$conv_prices = $parsed['Prices'];
$conv_price_types = $parsed['PriceTypes'];
if (is_array($val)) {
foreach ($val as $a_val) {
if (isset($conv_prices[unhtmlentities($a_val)]) && $conv_prices[unhtmlentities($a_val)]) {
if ($conv_price_types[unhtmlentities($a_val)] == '$') {
$addtion += $conv_prices[unhtmlentities($a_val)];
}
elseif ($conv_price_types[unhtmlentities($a_val)] == '%') {
$addtion += $price * $conv_prices[unhtmlentities($a_val)] / 100;
}
}
}
}
else {
if (isset($conv_prices[unhtmlentities($val)]) && $conv_prices[unhtmlentities($val)]) {
if ($conv_price_types[unhtmlentities($val)] == '$') {
$addtion += $conv_prices[unhtmlentities($val)];
}
elseif ($conv_price_types[unhtmlentities($val)] == '%') {
$addtion += $price * $conv_prices[unhtmlentities($val)] / 100;
}
}
}
}
$price += $addtion;
}
$comb_salt = $this->OptionsSalt( getArrayValue($item_data, 'Options'), 1);
if ($comb_salt) {
$query = 'SELECT * FROM '.TABLE_PREFIX.'ProductOptionCombinations WHERE CombinationCRC = '.$comb_salt;
$comb = $this->Conn->GetRow($query);
if ($comb) {
switch ($comb['PriceType']) {
case 1: // = override
$price = $comb['Price'];
break;
case 2: // flat
$price = $price + $comb['Price'];
break;
case 3: // percent
$price = $price * (1 + $comb['Price'] / 100);
break;
}
}
}
return max($price, 0);
}
/**
* Return product price for given qty, taking possible discounts into account
*
* @param int $p_id ProductId
* @param int $qty Quantity
* @return float
*/
function GetDiscountedProductPrice($p_id, $price, &$discount_id, &$order_object)
{
$discount_id = 0;
$user_id = $order_object->GetDBField('PortalUserId');
$user_groups = $this->Application->getUserGroups($user_id);
$sql = '
SELECT
IF(pd.Type = 1,
'.$price.' - pd.Amount,
IF(pd.Type = 2,
('.$price.' * (1-pd.Amount/100)),
'.$price.'
)
) AS DiscountedPrice,
pd.DiscountId
FROM '.TABLE_PREFIX.'Products AS p
LEFT JOIN '.TABLE_PREFIX.'ProductsDiscountItems AS pdi ON
pdi.ItemResourceId = p.ResourceId OR pdi.ItemType = 0
LEFT JOIN '.TABLE_PREFIX.'ProductsDiscounts AS pd ON
pd.DiscountId = pdi.DiscountId
AND
(pdi.ItemType = 1 OR (pdi.ItemType = 0 AND pd.Type = 2))
AND
pd.Status = 1
AND
( pd.GroupId IN ('.$user_groups.') AND
( (pd.Start IS NULL OR pd.Start < UNIX_TIMESTAMP())
AND
(pd.End IS NULL OR pd.End > UNIX_TIMESTAMP())
)
)
WHERE p.ProductId = '.$p_id.' AND pd.DiscountId IS NOT NULL
';
$pricing = $this->Conn->GetCol($sql, 'DiscountId');
if (!$pricing) return $price;
$discounted_price = min($pricing);
$pricing = array_flip($pricing);
$discount_id = $pricing[$discounted_price];
$discounted_price = min($discounted_price, $price);
return max($discounted_price, 0);
}
function GetCouponDiscountedPrice($coupon_id, $p_id, $price)
{
if(!$coupon_id) return $price;
$sql = '
SELECT
'.$price.' AS Price,
MIN(IF(pc.Type = 1,
'.$price.' - pc.Amount,
IF(pc.Type = 2,
('.$price.' * (1-pc.Amount/100)),
'.$price.'
)
)) AS DiscountedPrice
FROM '.TABLE_PREFIX.'Products AS p
LEFT JOIN '.TABLE_PREFIX.'ProductsCouponItems AS pci ON
pci.ItemResourceId = p.ResourceId OR pci.ItemType = 0
LEFT JOIN '.TABLE_PREFIX.'ProductsCoupons AS pc ON
pc.CouponId = pci.CouponId
AND
(pci.ItemType = 1 OR (pci.ItemType = 0 AND pc.Type = 2))
WHERE p.ProductId = '.$p_id.' AND pci.CouponId = '.$coupon_id.'
GROUP BY p.ProductId
';
$pricing = $this->Conn->GetRow($sql);
if ($pricing === false) return $price;
$price = min($pricing['Price'], $pricing['DiscountedPrice']);
return max($price, 0);
}
function GetWholeOrderPlainDiscount(&$discount_id, &$order_object)
{
$user_id = $order_object->GetDBField('PortalUserId');
$user_groups = $this->Application->getUserGroups($user_id);
$sql = '
SELECT pd.Amount AS Discount, pd.DiscountId
FROM '.TABLE_PREFIX.'ProductsDiscountItems AS pdi
LEFT JOIN '.TABLE_PREFIX.'ProductsDiscounts AS pd
ON
pd.DiscountId = pdi.DiscountId
AND
pdi.ItemType = 0 AND pd.Type = 1
AND
pd.Status = 1
AND
( pd.GroupId IN ('.$user_groups.') AND
( (pd.Start IS NULL OR pd.Start < '.$order_object->GetDBField('OrderDate').')
AND
(pd.End IS NULL OR pd.End > '.$order_object->GetDBField('OrderDate').')
)
)
WHERE pd.DiscountId IS NOT NULL
';
$pricing = $this->Conn->GetCol($sql, 'DiscountId');
if (!$pricing) return 0;
$discounted_price = max($pricing);
$pricing = array_flip($pricing);
$discount_id = $pricing[$discounted_price];
return max($discounted_price, 0);
}
function GetWholeOrderCouponDiscount($coupon_id)
{
if (!$coupon_id) return 0;
$sql = 'SELECT Amount
FROM '.TABLE_PREFIX.'ProductsCouponItems AS pci
LEFT JOIN '.TABLE_PREFIX.'ProductsCoupons AS pc
ON pc.CouponId = pci.CouponId
WHERE pci.CouponId = '.$coupon_id.' AND pci.ItemType = 0 AND pc.Type = 1';
return $this->Conn->GetOne($sql);
}
/**
* Return product pricing id for given product, if not passed - return primary pricing ID
*
* @param int $product_id ProductId
* @return float
*/
function GetPricingId($product_id, $item_data) {
if (!is_array($item_data)) {
$item_data = unserialize($item_data);
}
$price_id = getArrayValue($item_data, 'PricingId');
if (!$price_id) {
$price_id = $this->Application->GetVar('pr_id');
}
if (!$price_id){
$price_id = $this->Conn->GetOne('SELECT PriceId FROM '.TABLE_PREFIX.'ProductsPricing WHERE ProductId='.$product_id.' AND IsPrimary=1');
}
return $price_id;
}
function UpdateShippingOption(&$event)
{
$object =& $event->getObject();
$shipping_option = $object->GetDBField('ShippingOption');
if($shipping_option == '') return;
$table_prefix = $this->TablePrefix($event);
if ($shipping_option == 1 || $shipping_option == 0) { // backorder separately
$query = 'UPDATE '.$table_prefix.'OrderItems SET BackOrderFlag = 1 WHERE OrderId = '.$object->GetId().' AND BackOrderFlag > 1';
$this->Conn->Query($query);
}
if ($shipping_option == 2) {
$query = 'SELECT * FROM '.$table_prefix.'OrderItems WHERE OrderId = '.$object->GetId().' AND BackOrderFlag >= 1 ORDER By ProductName asc';
$items = $this->Conn->Query($query);
$backorder_flag = 2;
foreach ($items as $an_item) {
$query = 'UPDATE '.$table_prefix.'OrderItems SET BackOrderFlag = '.$backorder_flag.' WHERE OrderItemId = '.$an_item['OrderItemId'];
$this->Conn->Query($query);
$backorder_flag++;
}
}
}
+ /**
+ * Updates shipping types
+ *
+ * @param kEvent $event
+ * @return bool
+ */
function UpdateShippingTypes(&$event)
{
- $object =& $this->Application->recallObject($event->getPrefixSpecial());
- $ord_id = $object->GetId();
+ $object =& $event->getObject();
+ /* @var $object OrdersItem */
+
+ $ord_id = $object->GetID();
$order_info = $this->Application->GetVar('ord');
$shipping_ids = getArrayValue($order_info, $ord_id, 'ShippingTypeId');
- if (!$shipping_ids)
- {
+ if (!$shipping_ids) {
return;
}
- $last_shippings = unserialize($this->Application->RecallVar('LastShippings'));
+ $ret = true;
$shipping_types = Array();
+ $last_shippings = unserialize( $this->Application->RecallVar('LastShippings') );
- $ret = true;
- foreach($shipping_ids as $package => $id)
- {
+ $template = $this->Application->GetVar('t');
+ $shipping_templates = Array ('in-commerce/checkout/shipping', 'in-commerce/orders/orders_edit_shipping');
+
+ $quote_engine_collector =& $this->Application->recallObject('ShippingQuoteCollector');
+ /* @var $quote_engine_collector ShippingQuoteCollector */
+
+ foreach ($shipping_ids as $package => $id) {
// try to validate
- if ( $object->GetDBField('ShippingType') == 0 && (strpos($id, 'USPS') !== false) && in_array($this->Application->GetVar('t'), Array('in-commerce/checkout/shipping','in-commerce/orders/orders_edit_shipping'))) {
+ $shipping_types[$package] = $last_shippings[$package][$id];
+ $shipping_quote_engine = $quote_engine_collector->GetClassByType($shipping_types, $package);
+
+ if (($object->GetDBField('ShippingType') == 0) && ($shipping_quote_engine !== false) && in_array($template, $shipping_templates)) {
+ $shipping_quote_engine =& $this->Application->recallObject($shipping_quote_engine);
+ /* @var $shipping_quote_engine ShippingQuoteEngine */
+
+ // set first of found shippings just to check if any errors are returned
$current_usps_shipping_types = unserialize($this->Application->RecallVar('current_usps_shipping_types'));
- $object->SetDBField('ShippingInfo', serialize(Array($package => $current_usps_shipping_types[$id])));
- $usps_data = $this->MakeUSPSOrder($object, true);
- if ( !isset($usps_data['error_number']) ) {
+ $object->SetDBField('ShippingInfo', serialize( Array($package => $current_usps_shipping_types[$id])) );
+
+ $sqe_data = $shipping_quote_engine->MakeOrder($object, true);
+
+ if ( !isset($sqe_data['error_number']) ) {
// update only international shipping
if ( $object->GetDBField('ShippingCountry') != 'USA') {
- $last_shippings[$package][$id]['TotalCost'] = $usps_data['Postage'];
+ $shipping_types[$package]['TotalCost'] = $sqe_data['Postage'];
}
}
else {
- $this->Application->SetVar('usps_errors', $usps_data['error_description']);
$ret = false;
+ $this->Application->StoreVar('sqe_error', $sqe_data['error_description']);
}
+
$object->SetDBField('ShippingInfo', '');
}
- $shipping_types[$package] = $last_shippings[$package][$id];
}
+
$object->SetDBField('ShippingInfo', serialize($shipping_types));
return $ret;
}
-
/*function shipOrder(&$order_items)
{
$product_object =& $this->Application->recallObject('p', null, Array('skip_autoload' => true));
$order_item =& $this->Application->recallObject('orditems.-item');
while( !$order_items->EOL() )
{
$rec = $order_items->getCurrentRecord();
$order_item->SetDBFieldsFromHash($rec);
$order_item->SetId($rec['OrderItemId']);
$order_item->SetDBField('QuantityReserved', 0);
$order_item->Update();
$order_items->GoNext();
}
return true;
}*/
function RecalculateTax(&$event)
{
$object =& $event->getObject();
if ($object->GetDBField('Status') > ORDER_STATUS_PENDING) return;
$object->RecalculateTax();
}
function RecalculateProcessingFee(&$event)
{
$object =& $event->getObject();
// Do not reset processing fee while orders are being split (see SplitOrder)
if (preg_match("/^-sub/", $object->Special)) return;
if ($object->GetDBField('Status') > ORDER_STATUS_PENDING) return; //no changes for orders other than incomple or pending
$pt = $object->GetDBField('PaymentType');
$processing_fee = $this->Conn->GetOne('SELECT ProcessingFee FROM '.$this->Application->getUnitOption('pt', 'TableName').' WHERE PaymentTypeId = '.$pt);
$object->SetDBField( 'ProcessingFee', $processing_fee );
$this->UpdateTotals($event);
}
function UpdateTotals(&$event)
{
$object =& $event->getObject();
$object->UpdateTotals();
}
function CalculateDiscount(&$event)
{
$object =& $event->getObject();
$coupon =& $this->Application->recallObject('coup', null, Array('skip_autoload' => true));
if(!$coupon->Load( $object->GetDBField('CouponId'), 'CouponId' ))
{
return false;
}
$sql = 'SELECT Price * Quantity AS Amount, ProductId FROM '.$this->Application->getUnitOption('orditems', 'TableName').'
WHERE OrderId = '.$object->GetDBField('OrderId');
$orditems = $this->Conn->GetCol($sql, 'ProductId');
$sql = 'SELECT coupi.ItemType, p.ProductId FROM '.$this->Application->getUnitOption('coupi', 'TableName').' coupi
LEFT JOIN '.$this->Application->getUnitOption('p', 'TableName').' p
ON coupi.ItemResourceId = p.ResourceId
WHERE CouponId = '.$object->GetDBField('CouponId');
$discounts = $this->Conn->GetCol($sql, 'ProductId');
$discount_amount = 0;
foreach($orditems as $product_id => $amount)
{
if(isset($discounts[$product_id]) || array_search('0', $discounts, true) !== false)
{
switch($coupon->GetDBField('Type'))
{
case 1:
$discount_amount += $coupon->GetDBField('Amount') < $amount ? $coupon->GetDBField('Amount') : $amount;
break;
case 2:
$discount_amount += $amount * $coupon->GetDBField('Amount') / 100;
break;
default:
}
break;
}
}
$object->SetDBField('CouponDiscount', $discount_amount);
return $discount_amount;
}
/**
* Jumps to selected order in order's list from search tab
*
* @param kEvent $event
*/
function OnGoToOrder(&$event)
{
$id = array_shift( $this->StoreSelectedIDs($event) );
$idfield = $this->Application->getUnitOption($event->Prefix,'IDField');
$table = $this->Application->getUnitOption($event->Prefix,'TableName');
$sql = 'SELECT Status FROM %s WHERE %s = %s';
$order_status = $this->Conn->GetOne( sprintf($sql, $table, $idfield, $id) );
$prefix_special = $event->Prefix.'.'.$this->getSpecialByType($order_status);
$orders_list =& $this->Application->recallObject($prefix_special, $event->Prefix.'_List', Array('per_page'=>-1) );
$orders_list->Query();
foreach($orders_list->Records as $row_num => $record)
{
if( $record[$idfield] == $id ) break;
}
$per_page = $this->getPerPage( new kEvent($prefix_special.':OnDummy') );
$page = ceil( ($row_num+1) / $per_page );
$this->Application->StoreVar($prefix_special.'_Page', $page);
$event->redirect = 'in-commerce/orders/orders_'.$this->getSpecialByType($order_status).'_list';
}
/**
* Reset's any selected order state to pending
*
* @param unknown_type $event
*/
function OnResetToPending(&$event)
{
$object =& $event->getObject( Array('skip_autoload' => true) );
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
if($items_info)
{
foreach($items_info as $id => $field_values)
{
$object->Load($id);
$object->SetDBField('Status', ORDER_STATUS_PENDING);
if( $object->Update() )
{
$event->status=erSUCCESS;
}
else
{
$event->status=erFAIL;
$event->redirect=false;
break;
}
}
}
}
/**
* Creates list from items selected in grid
*
* @param kEvent $event
*/
function OnLoadSelected(&$event)
{
$event->setPseudoClass('_List');
$object =& $event->getObject( Array('selected_only' => true) );
$event->redirect = false;
}
/**
* Return orders list, that will expire in time specified
*
* @param int $pre_expiration timestamp
* @return Array
*/
function getRecurringOrders($pre_expiration)
{
$ord_table = $this->Application->getUnitOption('ord', 'TableName');
$ord_idfield = $this->Application->getUnitOption('ord', 'IDField');
$processing_allowed = Array(ORDER_STATUS_PROCESSED, ORDER_STATUS_ARCHIVED);
$sql = 'SELECT '.$ord_idfield.', PortalUserId, GroupId, NextCharge
FROM '.$ord_table.'
WHERE (IsRecurringBilling = 1) AND (NextCharge < '.$pre_expiration.') AND Status IN ('.implode(',', $processing_allowed).')';
return $this->Conn->Query($sql, $ord_idfield);
}
/**
* Regular event: checks what orders should expire and renew automatically (if such flag set)
*
* @param kEvent $event
*/
function OnCheckRecurringOrders(&$event)
{
$skip_clause = Array();
$ord_table = $this->Application->getUnitOption($event->Prefix, 'TableName');
$ord_idfield = $this->Application->getUnitOption($event->Prefix, 'IDField');
$pre_expiration = adodb_mktime() + $this->Application->ConfigValue('Comm_RecurringChargeInverval') * 3600 * 24;
$to_charge = $this->getRecurringOrders($pre_expiration);
if ($to_charge) {
$order_ids = Array();
foreach ($to_charge as $order_id => $record) {
// skip virtual users (e.g. root, guest, etc.) & invalid subscriptions (with no group specified, no next charge, but Recurring flag set)
if (!$record['PortalUserId'] || !$record['GroupId'] || !$record['NextCharge']) continue;
$order_ids[] = $order_id;
// prevent duplicate user+group pairs
$skip_clause[ 'PortalUserId = '.$record['PortalUserId'].' AND GroupId = '.$record['GroupId'] ] = $order_id;
}
// process only valid orders
$temp_handler =& $this->Application->recallObject($event->Prefix.'_TempHandler', 'kTempTablesHandler');
$cloned_order_ids = $temp_handler->CloneItems($event->Prefix, 'recurring', $order_ids);
$order =& $this->Application->recallObject($event->Prefix.'.recurring', null, Array('skip_autoload' => true));
foreach ($cloned_order_ids as $order_id) {
$order->Load($order_id);
$this->Application->HandleEvent($complete_event, $event->Prefix.'.recurring:OnCompleteOrder' );
if ($complete_event->status == erSUCCESS) {
//send recurring ok email
$email_event_user =& $this->Application->EmailEventUser('ORDER.RECURRING.PROCESSED', $order->GetDBField('PortalUserId'), $this->OrderEmailParams($order));
$email_event_admin =& $this->Application->EmailEventAdmin('ORDER.RECURRING.PROCESSED');
}
else {
//send Recurring failed event
$order->SetDBField('Status', ORDER_STATUS_DENIED);
$order->Update();
$email_event_user =& $this->Application->EmailEventUser('ORDER.RECURRING.DENIED', $order->GetDBField('PortalUserId'), $this->OrderEmailParams($order));
$email_event_admin =& $this->Application->EmailEventAdmin('ORDER.RECURRING.DENIED');
}
}
// remove recurring flag from all orders found, not to select them next time script runs
$sql = 'UPDATE '.$ord_table.'
SET IsRecurringBilling = 0
WHERE '.$ord_idfield.' IN ('.implode(',', array_keys($to_charge)).')';
$this->Conn->Query($sql);
}
+ if ( !is_object($event->MasterEvent) ) {
+ // not called as hook
+ return ;
+ }
+
$pre_expiration = adodb_mktime() + $this->Application->ConfigValue('User_MembershipExpirationReminder') * 3600 * 24;
$to_charge = $this->getRecurringOrders($pre_expiration);
foreach ($to_charge as $order_id => $record) {
// skip virtual users (e.g. root, guest, etc.) & invalid subscriptions (with no group specified, no next charge, but Recurring flag set)
if (!$record['PortalUserId'] || !$record['GroupId'] || !$record['NextCharge']) continue;
// prevent duplicate user+group pairs
$skip_clause[ 'PortalUserId = '.$record['PortalUserId'].' AND GroupId = '.$record['GroupId'] ] = $order_id;
}
$skip_clause = array_flip($skip_clause);
$event->MasterEvent->setEventParam('skip_clause', $skip_clause);
}
function OnGeneratePDF(&$event)
{
$this->OnLoadSelected($event);
$this->Application->InitParser();
$o = $this->Application->ParseBlock(array('name'=>'in-commerce/orders/orders_pdf'));
$file_helper =& $this->Application->recallObject('FileHelper');
/* @var $file_helper FileHelper */
$file_helper->CheckFolder(EXPORT_PATH);
$htmlFile = EXPORT_PATH . '/tmp.html';
$fh = fopen($htmlFile, 'w');
fwrite($fh, $o);
fclose($fh);
// return;
// require_once (FULL_PATH.'html2pdf/PDFEncryptor.php');
// Full path to the file to be converted
// $htmlFile = dirname(__FILE__) . '/test.html';
// The default domain for images that use a relative path
// (you'll need to change the paths in the test.html page
// to an image on your server)
$defaultDomain = DOMAIN;
// Full path to the PDF we are creating
$pdfFile = EXPORT_PATH . '/tmp.pdf';
// Remove old one, just to make sure we are making it afresh
@unlink($pdfFile);
$pdf_helper =& $this->Application->recallObject('kPDFHelper');
$pdf_helper->FileToFile($htmlFile, $pdfFile);
return ;
// DOM PDF VERSION
/*require_once(FULL_PATH.'/dompdf/dompdf_config.inc.php');
$dompdf = new DOMPDF();
$dompdf->load_html_file($htmlFile);
if ( isset($base_path) ) {
$dompdf->set_base_path($base_path);
}
$dompdf->set_paper($paper, $orientation);
$dompdf->render();
file_put_contents($pdfFile, $dompdf->output());
return ;*/
// Instnatiate the class with our variables
require_once (FULL_PATH.'/html2pdf/HTML_ToPDF.php');
$pdf = new HTML_ToPDF($htmlFile, $defaultDomain, $pdfFile);
$pdf->setHtml2Ps('/usr/bin/html2ps');
$pdf->setPs2Pdf('/usr/bin/ps2pdf');
$pdf->setGetUrl('/usr/local/bin/curl -i');
// Set headers/footers
$pdf->setHeader('color', 'black');
$pdf->setFooter('left', '');
$pdf->setFooter('right', '$D');
$pdf->setDefaultPath(BASE_PATH.'/kernel/admin_templates/');
$result = $pdf->convert();
// Check if the result was an error
if (PEAR::isError($result)) {
$this->Application->ApplicationDie($result->getMessage());
}
else {
$download_url = rtrim($this->Application->BaseURL(), '/') . EXPORT_BASE_PATH . '/tmp.pdf';
echo "PDF file created successfully: $result";
echo '<br />Click <a href="' . $download_url . '">here</a> to view the PDF file.';
}
}
function OnAfterConfigRead(&$event)
{
parent::OnAfterConfigRead($event);
if (defined('IS_INSTALL') && IS_INSTALL) {
return ;
}
$order_number = (int)$this->Application->ConfigValue('Comm_Order_Number_Format_P');
$order_sub_number = (int)$this->Application->ConfigValue('Comm_Order_Number_Format_S');
$calc_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields');
foreach ($calc_fields as $special => $fields) {
$calc_fields[$special]['OrderNumber'] = str_replace('6', $order_number, $calc_fields[$special]['OrderNumber']);
$calc_fields[$special]['OrderNumber'] = str_replace('3', $order_sub_number, $calc_fields[$special]['OrderNumber']);
}
$this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calc_fields);
$fields = $this->Application->getUnitOption($event->Prefix, 'Fields');
$fields['Number']['format'] = str_replace('%06d', '%0'.$order_number.'d', $fields['Number']['format']);
$fields['SubNumber']['format'] = str_replace('%03d', '%0'.$order_sub_number.'d', $fields['SubNumber']['format']);
$site_helper =& $this->Application->recallObject('SiteHelper');
/* @var $site_helper SiteHelper */
$fields['BillingCountry']['default'] = $site_helper->getDefaultCountry('Billing');
$fields['ShippingCountry']['default'] = $site_helper->getDefaultCountry('Shipping');
if (!$this->Application->isAdminUser) {
$user_groups = explode(',', $this->Application->RecallVar('UserGroups'));
$default_group = $this->Application->ConfigValue('User_LoggedInGroup');
if (!in_array($default_group, $user_groups)){
$user_groups[] = $default_group;
}
$sql_part = '';
// limit payment types by domain
$payment_types = $this->Application->siteDomainField('PaymentTypes');
if (strlen($payment_types)) {
$payment_types = explode('|', substr($payment_types, 1, -1));
$sql_part .= ' AND PaymentTypeId IN (' . implode(',', $payment_types) . ')';
}
// limit payment types by user group
$sql_part .= ' AND (PortalGroups LIKE "%%,'.implode(',%%" OR PortalGroups LIKE "%%,', $user_groups).',%%")';
$fields['PaymentType']['options_sql'] = str_replace(
'ORDER BY ',
$sql_part . ' ORDER BY ',
$fields['PaymentType']['options_sql']
);
}
$this->Application->setUnitOption($event->Prefix, 'Fields', $fields);
}
/**
* Allows configuring export options
*
* @param kEvent $event
*/
function OnBeforeExportBegin(&$event)
{
$options = $event->getEventParam('options') ;
$items_list =& $this->Application->recallObject($event->Prefix.'.'.$this->Application->RecallVar('export_oroginal_special'), $event->Prefix.'_List');
$items_list->SetPerPage(-1);
if ($options['export_ids'] != '') {
$items_list->AddFilter('export_ids', $items_list->TableName.'.'.$items_list->IDField.' IN ('.implode(',',$options['export_ids']).')');
}
$options['ForceCountSQL'] = $items_list->getCountSQL( $items_list->GetSelectSQL(true,false) );
$options['ForceSelectSQL'] = $items_list->GetSelectSQL();
$event->setEventParam('options',$options);
$object =& $this->Application->recallObject($event->Prefix.'.export');
/* @var $object kDBItem */
$object->SetField('Number', 999999);
$object->SetField('SubNumber', 999);
}
/**
* Returns specific to each item type columns only
*
* @param kEvent $event
* @return Array
*/
function getCustomExportColumns(&$event)
{
$columns = parent::getCustomExportColumns($event);
$new_columns = Array(
'__VIRTUAL__CustomerName' => 'CustomerName',
'__VIRTUAL__TotalAmount' => 'TotalAmount',
'__VIRTUAL__AmountWithoutVAT' => 'AmountWithoutVAT',
'__VIRTUAL__SubtotalWithDiscount' => 'SubtotalWithDiscount',
'__VIRTUAL__SubtotalWithoutDiscount' => 'SubtotalWithoutDiscount',
'__VIRTUAL__OrderNumber' => 'OrderNumber',
);
return array_merge_recursive2($columns, $new_columns);
}
function OnSave(&$event)
{
$res = parent::OnSave($event);
if ($event->status == erSUCCESS) {
$copied_ids = unserialize($this->Application->RecallVar($event->Prefix.'_copied_ids'.$this->Application->GetVar('wid'), serialize(array())));
foreach ($copied_ids as $id) {
$an_event = new kEvent($this->Prefix.':Dummy');
$this->Application->SetVar($this->Prefix.'_id', $id);
$this->Application->SetVar($this->Prefix.'_mode', ''); // this is to fool ReserveItems to use live table
$this->ReserveItems($an_event);
}
}
return $res;
}
/**
* Occures before an item is copied to live table (after all foreign keys have been updated)
* Id of item being copied is passed as event' 'id' param
*
* @param kEvent $event
*/
function OnBeforeCopyToLive(&$event)
{
$id = $event->getEventParam('id');
$copied_ids = unserialize($this->Application->RecallVar($event->Prefix.'_copied_ids'.$this->Application->GetVar('wid'), serialize(array())));
array_push($copied_ids, $id);
$this->Application->StoreVar($event->Prefix.'_copied_ids'.$this->Application->GetVar('wid'), serialize($copied_ids) );
}
/**
* Checks, that currently loaded item is allowed for viewing (non permission-based)
*
* @param kEvent $event
* @return bool
*/
function checkItemStatus(&$event)
{
if ($this->Application->isAdminUser) {
return true;
}
$object =& $event->getObject();
if (!$object->isLoaded()) {
return true;
}
return $object->GetDBField('PortalUserId') == $this->Application->RecallVar('user_id');
}
// ===== Gift Certificates Related =====
function OnRemoveGiftCertificate(&$event)
{
$object =& $event->getObject();
$this->RemoveGiftCertificate($object);
$event->CallSubEvent('OnRecalculateItems');
$event->SetRedirectParam('checkout_error', 107);
}
function RemoveGiftCertificate(&$object)
{
$object->RemoveGiftCertificate();
}
function RecalculateGift(&$event)
{
$object =& $event->getObject();
/* @var $object OrdersItem */
if ($object->GetDBField('Status') > ORDER_STATUS_PENDING) {
return ;
}
$object->RecalculateGift($event);
}
function GetWholeOrderGiftCertificateDiscount($gift_certificate_id)
{
if (!$gift_certificate_id) {
return 0;
}
$sql = 'SELECT Debit
FROM '.TABLE_PREFIX.'GiftCertificates
WHERE GiftCertificateId = '.$gift_certificate_id;
return $this->Conn->GetOne($sql);
}
/**
- * Creates new USPS order
- *
- * @param OrdersItem $object
- * @param bool $fake_mode
- * @return Array
- */
- function MakeUSPSOrder(&$object, $fake_mode = false)
- {
- $this->Application->recallObject('ShippingQuoteEngine');
-
- $aUSPS = $this->Application->recallObject('USPS', 'USPS');
- /* @var $aUSPS USPS */
-
- $ShippingInfo = unserialize($object->GetDBField('ShippingInfo'));
- $ShippingCode = $USPSMethod = '';
- $ShippingCountry = $aUSPS->GetUSPSCountry($object->GetDBField('ShippingCountry'));
-
- $UserName = explode(" ", $object->GetDBField('ShippingTo'));
-
- $item_table = TABLE_PREFIX.'OrderItems';
- if ($this->Application->isAdminUser) {
- // this strange contraption actually uses temp table from object (when in temp mode)
- $order_table = $object->TableName;
- $item_table = str_replace('Orders', 'OrderItems', $order_table);
- }
-
- $sOrder = Array (
- 'FirstName' => $UserName[0],
- 'LastName' => $UserName[1],
- 'ShippingCompany' => $object->GetDBField('ShippingCompany'),
- 'ShippingAddress1' => $object->GetDBField('ShippingAddress1'),
- 'ShippingAddress2' => $object->GetDBField('ShippingAddress2'),
- 'ShippingCity' => $object->GetDBField('ShippingCity'),
- 'ShippingZip' => $object->GetDBField('ShippingZip'),
- 'ShippingCountry' => $ShippingCountry,
- 'ShippingPhone' => $aUSPS->PhoneClean($object->GetDBField('ShippingPhone')),
- 'ShippingFax' => $aUSPS->PhoneClean($object->GetDBField('ShippingFax')),
- 'ShippingNumBoxes' => '1',
- );
-
- $sql = 'SELECT SUM(`Quantity` * `Weight`)
- FROM ' . $item_table . '
- WHERE ' . $object->IDField . ' = ' . $object->GetID();
- $weight = $this->Application->Conn->GetOne($sql);
-
- $f_weight = Kg2Pounds($weight);
- $sOrder['ShippingWeight'] = $f_weight[0].'.'.$f_weight[1];
-
- foreach ($ShippingInfo as $k => $ShippingRow) {
- $ShippingCode = $ShippingRow['Code'];
- }
-
- if ( $object->GetDBField('ShippingCountry') == 'USA' ) {
- $sOrder['ShippingState'] = $object->GetDBField('ShippingState');
- $USPSMethod = $ShippingCode;
- unset($sOrder['ShippingZip']);
-
- $sOrder['ShippingZip5'] = substr(trim($object->GetDBField('ShippingZip')), 0, 5);
- $sOrder['ShippingZip4'] = '';
- $sOrder['SubTotal'] = $object->GetDBField('SubTotal');
- }
- else {
- $USPSMethod = array_search($ShippingCode, $aUSPS->intl_types);
- $sOrder['ShippingProvince'] = '';
-
- if ( $ShippingCountry == 'CA' ) {
- $sOrder['ShippingProvince'] = $object->GetField('ShippingState');
- }
-
- // add items
- $sql = 'SELECT `Quantity`, `Weight`, `Price`
- FROM ' . $item_table . '
- WHERE ' . $object->IDField . ' = ' . $object->GetID();
- $order_items = $this->Application->Conn->Query($sql);
-
- $i = 1;
- $Items = Array();
-
- foreach ($order_items as $k => $order_item) {
- $p_weight = Array();
- $p_weight = Kg2Pounds($order_item['Weight']);
- $Items[$i] = Array('Qty' => $order_item['Quantity'], 'Price' => $order_item['Price'], 'NetPounds' => $p_weight[0], 'NetOunces' => $p_weight[1]);
- $i++;
- }
-
- $sOrder['Items'] = $Items;
- $sOrder['InvoiceNumber'] = $object->GetDBField('OrderNumber');
- }
-
- $sOrder['ShippingService'] = $USPSMethod;
-
- // make USPS order
- $aUSPS->order = $sOrder;
- $usps_data = $aUSPS->PostOrder();
-
- // if errors
- if ( array_key_exists('error_number', $usps_data) ) {
- return $usps_data;
- }
-
- if ( array_key_exists('Postage', $usps_data) ) {
- $ShippingPrice = '';
- $ShippingPrice = $usps_data['Postage'];
- }
-
- $ShippingTracking = '';
-
- if ( isset($usps_data['TrackingNumber']) && $usps_data['TrackingNumber'] != '' ) {
- $ShippingTracking = $usps_data['TrackingNumber'];
- }
-
- if ( isset($usps_data['PostnetBarCode']) && $usps_data['PostnetBarCode'] != '' && $ShippingTracking == '' ) {
- $ShippingTracking = $usps_data['PostnetBarCode'];
- }
-
- if ($fake_mode == false) {
- $object->SetDBField('ShippingTracking', $ShippingTracking);
- $object->Update();
- }
- else {
- $full_path = USPS_LABEL_FOLDER . $ShippingTracking . ".pdf";
-
- if (file_exists($full_path)) {
- unlink($full_path);
- }
- }
-
- return $usps_data;
- }
-
- /**
* Downloads shipping tracking bar code, that was already generated by USPS service
*
* @param kEvent $event
*/
function OnDownloadLabel(&$event)
{
$event->status = erSTOP;
ini_set('memory_limit', '300M');
ini_set('max_execution_time', '0');
$object =& $event->getObject();
$file = $object->GetDBField('ShippingTracking').'.pdf';
$full_path = USPS_LABEL_FOLDER.$file;
if (!file_exists($full_path) || !is_file($full_path)) {
return ;
}
$mime = function_exists('mime_content_type') ? mime_content_type($full_path) : 'application/download';
header('Content-type: '.$mime);
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile($full_path);
}
}
\ No newline at end of file
Index: branches/5.2.x/units/orders/orders_config.php
===================================================================
--- branches/5.2.x/units/orders/orders_config.php (revision 14088)
+++ branches/5.2.x/units/orders/orders_config.php (revision 14089)
@@ -1,553 +1,536 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'ord',
'ItemClass' => Array ('class' => 'OrdersItem', 'file' => 'orders_item.php', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'OrdersEventHandler', 'file' => 'orders_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'OrdersTagProcessor', 'file' => 'orders_tag_processor.php', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array (
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'ord',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'OnPreSave' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnRecalculateItems',
),
/* OnApplyCoupon is called as hook for OnUpdateCart/OnCheckout, which calls OnRecalcualate themself
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'coup',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'OnApplyCoupon' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnRecalculateItems',
),*/
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'u',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'OnCreate' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnUserCreate',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'u',
'HookToSpecial' => '',
'HookToEvent' => Array ('OnCheckExpiredMembership'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnCheckRecurringOrders',
),
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'u',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'OnLogin' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnUserLogin',
),
Array (
'Mode' => hBEFORE, // before because OnInpLogin is called after real in-portal login and uses data from hooks
'Conditional' => false,
'HookToPrefix' => 'u',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'OnInpLogin' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnUserLogin',
),
),
'AggregateTags' => Array (
Array (
'AggregateTo' => 'orditems',
'AggregatedTagName' => 'LinkRemoveFromCart',
'LocalTagName' => 'Orditems_LinkRemoveFromCart',
),
Array (
'AggregateTo' => 'orditems',
'AggregatedTagName' => 'ProductLink',
'LocalTagName' => 'Orderitems_ProductLink',
),
Array (
'AggregateTo' => 'orditems',
'AggregatedTagName' => 'ProductExists',
'LocalTagName' => 'Orderitems_ProductExists',
),
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'IDField' => 'OrderId',
'StatusField' => Array ('Status'), // field, that is affected by Approve/Decline events
'ViewMenuPhrase' => 'la_title_Orders',
'CatalogTabIcon' => 'icon16_item.png',
'TitleField' => 'OrderNumber',
'TitlePresets' => Array (
'default' => Array (
'new_status_labels' => Array ('ord' => '!la_title_Adding_Order!'),
'edit_status_labels' => Array ('ord' => '!la_title_Editing_Order!'),
'new_titlefield' => Array ('ord' => '!la_title_New_Order!'),
),
'orders_incomplete' => Array ( 'prefixes' => Array ('ord.incomplete_List'),
'format' => "!la_title_IncompleteOrders!",
),
'orders_pending' => Array ( 'prefixes' => Array ('ord.pending_List'),
'format' => "!la_title_PendingOrders!",
),
'orders_backorders' => Array ( 'prefixes' => Array ('ord.backorders_List'),
'format' => "!la_title_BackOrders!",
),
'orders_toship' => Array ( 'prefixes' => Array ('ord.toship_List'),
'format' => "!la_title_OrdersToShip!",
),
'orders_processed' => Array ( 'prefixes' => Array ('ord.processed_List'),
'format' => "!la_title_OrdersProcessed!",
),
'orders_returns' => Array ( 'prefixes' => Array ('ord.returns_List'),
'format' => "!la_title_OrdersReturns!",
),
'orders_denied' => Array ( 'prefixes' => Array ('ord.denied_List'),
'format' => "!la_title_OrdersDenied!",
),
'orders_archived' => Array ( 'prefixes' => Array ('ord.archived_List'),
'format' => "!la_title_OrdersArchived!",
),
'orders_search' => Array ( 'prefixes' => Array ('ord.search_List'),
'format' => "!la_title_OrdersSearch!",
),
'orders_edit_general' => Array ('prefixes' => Array ('ord'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_General!"),
'orders_edit_billing' => Array ('prefixes' => Array ('ord'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_OrderBilling!"),
'orders_edit_shipping' => Array ('prefixes' => Array ('ord'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_OrderShipping!"),
'orders_edit_items' => Array ('prefixes' => Array ('ord', 'orditems_List'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_OrderItems!"),
'orders_edit_preview' => Array ('prefixes' => Array ('ord'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_OrderPreview!"),
'orders_gw_result' => Array ('prefixes' => Array ('ord'), 'format' => "!la_title_OrderGWResult!"),
'order_items_edit' => Array ( 'prefixes' => Array ('ord', 'orditems'),
'new_status_labels' => Array ('orditems' => '!la_title_Adding_Order_Item!'),
'edit_status_labels' => Array ('orditems' => '!la_title_Editing_Order_Item!'),
'new_titlefield' => Array ('orditems' => '!la_title_New_Order_Item!'),
'format' => "#ord_status# '#ord_titlefield#' - #orditems_status# '#orditems_titlefield#'",
),
'orders_export' => Array ('format' => '!la_title_OrdersExport!'),
'orders_product_edit' => Array ('format' => '!la_title_Editing_Order_Item!'),
),
'EditTabPresets' => Array (
'Default' => Array (
'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/orders/orders_edit', 'priority' => 1),
'items' => Array ('title' => 'la_tab_Items', 't' => 'in-commerce/orders/orders_edit_items', 'priority' => 2),
'shipping' => Array ('title' => 'la_tab_Shipping', 't' => 'in-commerce/orders/orders_edit_shipping', 'priority' => 3),
'billing' => Array ('title' => 'la_tab_Billing', 't' => 'in-commerce/orders/orders_edit_billing', 'priority' => 4),
'preview' => Array ('title' => 'la_tab_Preview', 't' => 'in-commerce/orders/orders_edit_preview', 'priority' => 5),
),
),
'PermSection' => Array ('main' => 'in-commerce:orders'),
'Sections' => Array (
'in-commerce:orders' => Array (
'parent' => 'in-commerce',
'icon' => 'in-commerce:orders',
'label' => 'la_tab_Orders',
'url' => Array ('t' => 'in-commerce/orders/orders_pending_list', 'pass' => 'm'),
'permissions' => Array ('view', 'add', 'edit', 'delete', 'advanced:approve', 'advanced:deny', 'advanced:archive', 'advanced:place', 'advanced:process', 'advanced:ship', 'advanced:reset_to_pending'),
'priority' => 1,
'type' => stTREE,
),
),
'SectionAdjustments' => Array (
'in-portal:visits' => Array (
'url' => Array ('t' => 'in-commerce/visits/visits_list_incommerce', 'pass' => 'm'),
),
),
'StatisticsInfo' => Array (
'pending' => Array (
'icon' => 'core:icon16_item.png',
'label' => 'la_title_Orders',
'js_url' => "#url#",
'url' => Array ('t' => 'in-commerce/orders/orders_pending_list', 'pass' => 'm'),
'status' => ORDER_STATUS_PENDING,
),
),
- 'TableName' => TABLE_PREFIX.'Orders',
-
- 'FilterMenu' => Array (
- 'Groups' => Array (
- Array ('mode' => 'AND', 'filters' => Array (0,1,2,3,4,5,6), 'type' => WHERE_FILTER),
- ),
-
- 'Filters' => Array (
- 0 => Array ('label' => 'la_Incomplete', 'on_sql' => '', 'off_sql' => '%1$s.Status != 0' ),
- 1 => Array ('label' => 'la_Pending', 'on_sql' => '', 'off_sql' => '%1$s.Status != 1' ),
- 2 => Array ('label' => 'la_BackOrders', 'on_sql' => '', 'off_sql' => '%1$s.Status != 2' ),
- 3 => Array ('label' => 'la_ToShip', 'on_sql' => '', 'off_sql' => '%1$s.Status != 3' ),
- 4 => Array ('label' => 'la_Processed', 'on_sql' => '', 'off_sql' => '%1$s.Status != 4' ),
- 5 => Array ('label' => 'la_Denied', 'on_sql' => '', 'off_sql' => '%1$s.Status != 5' ),
- 6 => Array ('label' => 'la_Archived', 'on_sql' => '', 'off_sql' => '%1$s.Status != 6' ),
- )
- ),
+ 'TableName' => TABLE_PREFIX . 'Orders',
'CalculatedFields' => Array (
'' => Array (
'CustomerName' => 'IF( ISNULL(u.Login), IF (%1$s.PortalUserId = ' . USER_ROOT . ', \'root\', IF (%1$s.PortalUserId = ' . USER_GUEST . ', \'Guest\', \'n/a\')), CONCAT(u.FirstName,\' \',u.LastName) )',
'Username' => 'IF( ISNULL(u.Login),\'root\',u.Login)',
'OrderNumber' => 'CONCAT(LPAD(Number,6,"0"),\'-\',LPAD(SubNumber,3,"0") )',
'SubtotalWithoutDiscount' => '(SubTotal + DiscountTotal)',
'SubtotalWithDiscount' => '(SubTotal)',
'AmountWithoutVAT' => '(SubTotal+IF(ShippingTaxable=1, ShippingCost, 0)+IF(ProcessingTaxable=1, ProcessingFee, 0))',
'TotalAmount' => 'SubTotal+ShippingCost+VAT+ProcessingFee+InsuranceFee-GiftCertificateDiscount',
'CouponCode' => 'pc.Code',
'CouponName' => 'pc.Name',
'AffiliateUser' => 'IF( LENGTH(au.Login),au.Login,\'!la_None!\')',
'AffiliatePortalUserId' => 'af.PortalUserId',
'GiftCertificateCode' => 'gc.Code',
'GiftCertificateRecipient' => 'gc.Recipient',
),
'myorders' => Array (
'OrderNumber' => 'CONCAT(LPAD(Number,6,"0"),\'-\',LPAD(SubNumber,3,"0") )',
'SubtotalWithoutDiscount' => '(SubTotal + DiscountTotal)',
'SubtotalWithDiscount' => '(SubTotal)',
'AmountWithoutVAT' => '(SubTotal+IF(ShippingTaxable=1, ShippingCost, 0)+IF(ProcessingTaxable=1, ProcessingFee, 0))',
'TotalAmount' => 'SubTotal+ShippingCost+VAT+ProcessingFee+InsuranceFee-GiftCertificateDiscount',
/*'ItemsCount' => 'COUNT(%1$s.OrderId)',*/
),
),
// %1$s - table name of object
// %2$s - calculated fields
'ListSQLs' => Array (
'' => ' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.PortalUserId = u.PortalUserId
LEFT JOIN '.TABLE_PREFIX.'ProductsCoupons pc ON %1$s.CouponId = pc.CouponId
LEFT JOIN '.TABLE_PREFIX.'GiftCertificates gc ON %1$s.GiftCertificateId = gc.GiftCertificateId
LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON %1$s.AffiliateId = af.AffiliateId
LEFT JOIN '.TABLE_PREFIX.'PortalUser au ON af.PortalUserId = au.PortalUserId',
'myorders' => ' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.PortalUserId = u.PortalUserId',
// LEFT JOIN '.TABLE_PREFIX.'OrderItems ON %1$s.OrderId = '.TABLE_PREFIX.'OrderItems.OrderId',
),
'ItemSQLs' => Array (
'' => ' SELECT %1$s.* %2$s FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.PortalUserId = u.PortalUserId
LEFT JOIN '.TABLE_PREFIX.'ProductsCoupons pc ON %1$s.CouponId = pc.CouponId
LEFT JOIN '.TABLE_PREFIX.'GiftCertificates gc ON %1$s.GiftCertificateId = gc.GiftCertificateId
LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON %1$s.AffiliateId = af.AffiliateId
LEFT JOIN '.TABLE_PREFIX.'PortalUser au ON af.PortalUserId = au.PortalUserId',
),
'SubItems' => Array ('orditems'),
'ListSortings' => Array (
'' => Array (
'Sorting' => Array ('OrderDate' => 'desc'),
)
),
'Fields' => Array (
'OrderId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, 'filter_type' => 'equals'),
'Number' => Array ('type' => 'int', 'required' =>1, 'formatter' => 'kFormatter', 'unique' =>Array ('SubNumber'), 'format' => '%06d', 'max_value_inc'>999999, 'not_null' => 1, 'default' => 0),
'SubNumber' => Array ('type' => 'int', 'required' =>1, 'formatter' => 'kFormatter', 'unique' =>Array ('Number'), 'format' => '%03d', 'max_value_inc'>999, 'not_null' => 1, 'default' => 0),
'Status' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' =>Array (0=> 'la_Incomplete',1=> 'la_Pending',2=> 'la_BackOrders',3=> 'la_ToShip',4=> 'la_Processed',5=> 'la_Denied',6=> 'la_Archived'), 'use_phrases' =>1, 'not_null' => 1, 'default' => 0, 'filter_type' => 'equals'),
'OnHold' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'OrderDate' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'required' => 1, 'default' => '#NOW#'),
'PortalUserId' =>Array ('type' => 'int', 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), 'options' =>Array (USER_ROOT => 'root', USER_GUEST => 'Guest'), 'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'PortalUser WHERE `%s` = \'%s\'', 'left_key_field' => 'PortalUserId', 'left_title_field' => 'Login', 'required' =>1, 'not_null' =>1, 'default' =>-1),
'OrderIP' => Array ('type' => 'string', 'not_null' => 1, 'default' => '', 'filter_type' => 'like'),
'UserComment' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => NULL),
'AdminComment' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => NULL),
'BillingTo' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'BillingCompany' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'BillingPhone' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'BillingFax' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'BillingEmail' => Array (
'type' => 'string',
'formatter' => 'kFormatter',
'regexp' => '/^(' . REGEX_EMAIL_USER . '@' . REGEX_EMAIL_DOMAIN . ')$/i',
'not_null' => 1, 'default' => '',
),
'BillingAddress1' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'BillingAddress2' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'BillingCity' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'BillingState' => Array (
'type' => 'string',
'formatter' => 'kOptionsFormatter',
'options' => Array (),
'option_key_field' => 'DestAbbr',
'option_title_field' => 'Translation',
'not_null' => 1, 'default' => '',
),
'BillingZip' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'BillingCountry' => Array(
'type' => 'string',
'formatter' => 'kOptionsFormatter',
'options_sql' => ' SELECT IF(l%2$s_Name = "", l%3$s_Name, l%2$s_Name) AS Name, IsoCode
FROM '.TABLE_PREFIX.'CountryStates
WHERE Type = ' . DESTINATION_TYPE_COUNTRY . '
ORDER BY Name',
'option_key_field' => 'IsoCode', 'option_title_field' => 'Name',
'not_null' => 1, 'default' => 'USA'
),
'VAT' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'not_null' =>1, 'default' => '0', 'format' => '%01.2f'),
'VATPercent' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'not_null' =>1, 'default' => '0', 'format' => '%01.3f'),
'PaymentType' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options_sql' => 'SELECT %s
FROM ' . TABLE_PREFIX . 'PaymentTypes
WHERE Status = 1
ORDER BY Priority DESC, Name ASC',
'option_key_field' => 'PaymentTypeId', 'option_title_field' => 'Description',
'not_null' => 1, 'default' => 0
),
'PaymentAccount' => Array ('type' => 'string', 'not_null' => 1, 'cardtype_field' => 'PaymentCardType', 'default' => '', 'filter_type' => 'like'),
'PaymentNameOnCard' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'PaymentCCExpDate' => Array ('type' => 'string', 'formatter' => 'kCCDateFormatter', 'month_field' => 'PaymentCCExpMonth', 'year_field' => 'PaymentCCExpYear', 'not_null' => 1, 'default' => ''),
'PaymentCardType' => Array ('type' => 'string', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'options' => Array ('' => '', '1' => 'Visa', '2' => 'Mastercard', '3' => 'Amex', '4' => 'Discover', '5' => 'Diners Club', '6' => 'JBC'), 'default' => ''),
'PaymentExpires' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
'ShippingTo' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingCompany' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingPhone' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingFax' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingEmail' => Array (
'type' => 'string', 'not_null' => 1, 'default' => '',
'formatter' => 'kOptionsFormatter',
'options' => Array (),
'option_key_field' => 'DestAbbr',
'option_title_field' => 'Translation',
),
'ShippingAddress1' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingAddress2' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingCity' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingState' => Array (
'type' => 'string', 'formatter' => 'kOptionsFormatter',
'options' => Array (),
'option_key_field' => 'DestAbbr', 'option_title_field' => 'Translation',
'not_null' => 1, 'default' => ''),
'ShippingZip' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingCountry' => Array(
'type' => 'string', 'formatter' => 'kOptionsFormatter',
'options_sql' => ' SELECT IF(l%2$s_Name = "", l%3$s_Name, l%2$s_Name) AS Name, IsoCode
FROM '.TABLE_PREFIX.'CountryStates
WHERE Type = ' . DESTINATION_TYPE_COUNTRY . '
ORDER BY Name',
'option_key_field' => 'IsoCode', 'option_title_field' => 'Name',
'not_null' => 1, 'default' => 'USA'
),
'ShippingType' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options_sql' => 'SELECT %s
FROM ' . TABLE_PREFIX . 'ShippingType
WHERE Status = 1',
'option_key_field' => 'ShippingID',
'option_title_field' => 'Name',
'not_null' => 1, 'default' => 0,
),
'ShippingCost' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
'ShippingCustomerAccount' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingTracking' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
'ShippingDate' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
'SubTotal' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
'ReturnTotal' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
'CostTotal' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
'OriginalAmount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
- 'ShippingOption' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (0 => 'la_ship_all_together', 1 => 'la_ship_backorder_separately', 2 => 'la_ship_backorders_upon_avail'), 'default' =>0),
+ 'ShippingOption' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (0 => 'la_ship_all_together', 1 => 'la_ship_backorder_separately', 2 => 'la_ship_backorders_upon_avail'), 'not_null' => 1, 'default' =>0),
'ShippingGroupOption' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array (0 => 'la_auto_group_shipments', 1 => 'la_manual_group_shipments'), 'default' =>0),
'GiftCertificateId' => Array ('type' => 'int', 'default' => null),
'GiftCertificateDiscount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00',),
'ShippingInfo' => Array ('type' => 'string', 'default' => NULL),
'CouponId' => Array ('type' => 'int', 'default' => null),
'CouponDiscount' => Array ('type' => 'float', 'not_null' => 1, 'default' => '0.00', 'formatter' => 'kFormatter', 'format' => '%01.2f'),
'DiscountTotal' => Array ('type' => 'float', 'not_null' => 1, 'default' => '0.00', 'formatter' => 'kFormatter', 'format' => '%01.2f'),
'TransactionStatus' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0=> 'la_Invalid', 1 => 'la_Verified', 2 => 'la_Penging'), 'use_phrases' =>1, 'not_null' => 1, 'default' => 2),
'GWResult1' => Array ('type' => 'string', 'formatter' => 'kSerializedFormatter', 'default' => NULL),
'GWResult2' => Array ('type' => 'string', 'formatter' => 'kSerializedFormatter', 'default' => NULL),
'AffiliateId' => Array ('type' => 'int', 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), 'options' => Array (0 => 'lu_None'), 'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'Affiliates af LEFT JOIN '.TABLE_PREFIX.'PortalUser pu ON pu.PortalUserId = af.PortalUserId WHERE `%s` = \'%s\'', 'left_key_field' => 'AffiliateId', 'left_title_field' => 'Login', 'not_null' =>1, 'default' =>0),
'VisitId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'AffiliateCommission' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%.02f', 'not_null' => 1, 'default' => '0.0000'),
'ProcessingFee' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%.02f', 'not_null' => '0', 'default' => '0.0000'),
'InsuranceFee' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
'ShippingTaxable' => Array ('type' => 'int', 'not_null' => 0, 'default' => 0),
'ProcessingTaxable' => Array ('type' => 'int', 'not_null' => 0, 'default' => 0),
'IsRecurringBilling' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes',), 'use_phrases' => 1,
'default' => 0, 'not_null' => 1,
),
'ChargeOnNextApprove' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes',), 'use_phrases' => 1,
'default' => 0, 'not_null' => 1,
),
'NextCharge' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
'GroupId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'GoogleOrderNumber' => Array ('type' => 'string', 'default' => NULL), // MySQL BIGINT UNSIGNED = 8 Bytes, PHP int = 4 Bytes -> threat as string
),
'VirtualFields' => Array (
'CustomerName' => Array ('type' => 'string', 'default' => '', 'filter_type' => 'like'),
- 'TotalAmount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
- 'AmountWithoutVAT' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
- 'SubtotalWithDiscount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
- 'SubtotalWithoutDiscount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
+ 'TotalAmount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'default' => '0.00'),
+ 'AmountWithoutVAT' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'default' => '0.00'),
+ 'SubtotalWithDiscount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'default' => '0.00'),
+ 'SubtotalWithoutDiscount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'default' => '0.00'),
'OrderNumber' => Array ('type' => 'string', 'default' => '', 'filter_type' => 'like'),
+ 'CouponCode' => Array ('type' => 'string', 'default' => ''),
+ 'CouponName' => Array ('type' => 'string', 'default' => ''),
+ 'GiftCertificateCode' => Array ('type' => 'string', 'default' => ''),
+ 'GiftCertificateRecipient' => Array ('type' => 'string', 'default' => ''),
// for ResetToUser
'UserTo' => Array ('type' => 'string', 'default' => ''),
'UserCompany' => Array ('type' => 'string', 'default' => ''),
'UserPhone' => Array ('type' => 'string', 'default' => ''),
'UserFax' => Array ('type' => 'string', 'default' => ''),
'UserEmail' => Array ('type' => 'string', 'default' => ''),
'UserAddress1' => Array ('type' => 'string', 'default' => ''),
'UserAddress2' => Array ('type' => 'string', 'default' => ''),
'UserCity' => Array ('type' => 'string', 'default' => ''),
'UserState' => Array ('type' => 'string', 'default' => ''),
'UserZip' => Array ('type' => 'string', 'default' => ''),
'UserCountry' => Array ('type' => 'string', 'default' => ''),
// for Search
- 'Username' => Array ('type' => 'string', 'filter_type' => 'like'),
- 'OrderSearchId' => Array ('type' => 'int', 'filter_type' => 'equals', 'filter_field' => 'OrderId'),
- 'FromDateTime' => Array ('formatter' => 'kDateFormatter', 'default' => '', 'filter_type' => 'range_from', 'filter_field' => 'OrderDate' ),
- 'ToDateTime' => Array ('formatter' => 'kDateFormatter', 'default' => '', 'filter_type' => 'range_to', 'filter_field' => 'OrderDate', 'empty_time' => adodb_mktime(23,59,59) ),
- 'FromAmount' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'filter_type' => 'range_from', 'filter_field' => 'TotalAmount'),
- 'ToAmount' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'filter_type' => 'range_to', 'filter_field' => 'TotalAmount'),
- 'HasBackOrders' => Array ('default' =>false),
- 'PaymentCVV2' => Array ('type' => 'string', 'default' =>false),
- 'AffiliateUser' => Array ('type' => 'string', 'filter_type' => 'like'),
- 'AffiliatePortalUserId' => Array ('type' => 'int'),
+ 'Username' => Array ('type' => 'string', 'filter_type' => 'like', 'default' => ''),
+ 'HasBackOrders' => Array ('type' => 'int', 'default' => 0),
+ 'PaymentCVV2' => Array ('type' => 'string', 'default' => ''),
+ 'AffiliateUser' => Array ('type' => 'string', 'filter_type' => 'like', 'default' => ''),
+ 'AffiliatePortalUserId' => Array ('type' => 'int', 'default' => 0),
// export related fields: begin
'ExportFormat' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CSV', /*2 => 'XML'*/), 'default' => 1),
'ExportFilename' => Array ('type' => 'string', 'default' => ''),
'FieldsSeparatedBy' => Array ('type' => 'string', 'default' => ', '),
'FieldsEnclosedBy' => Array ('type' => 'string', 'default' => '"'),
'LineEndings' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'Windows', 2 => 'UNIX'), 'default' => 1),
'LineEndingsInside' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CRLF', 2 => 'LF'), 'default' => 2),
'IncludeFieldTitles' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
- 'use_phrases' => 1, 'not_null' => 1, 'default' => 1,
+ 'use_phrases' => 1, 'default' => 1,
),
- 'ExportColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ()),
- 'AvailableColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ()),
- 'ExportPresets' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ()),
+ 'ExportColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
+ 'AvailableColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
+ 'ExportPresets' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
'ExportSavePreset' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
- 'use_phrases' => 1, 'not_null' => 1, 'default' => 0,
+ 'use_phrases' => 1, 'default' => 0,
),
- 'ExportPresetName' => Array ('type' => 'string'),
+ 'ExportPresetName' => Array ('type' => 'string', 'default' => ''),
// export related fields: end
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
1 => 'icon16_pending.png',
5 => 'icon16_disabled.png',
'module' => 'core',
),
'Fields' => Array (
'OrderId' => Array ('title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 70, ), 'OrderNumber' => Array ( 'title' => 'la_col_OrderNumber', 'data_block' => 'grid_ordernumber_td', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'OrderDate' => Array ( 'title' => 'la_col_OrderDate', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
'CustomerName' => Array ( 'title' => 'la_col_CustomerName', 'data_block' => 'grid_userlink_td', 'user_field' => 'PortalUserId', 'filter_block' => 'grid_like_filter', 'width' => 140, ),
'PaymentType' => Array ( 'title' => 'la_col_PaymentType', 'data_block' => 'grid_billinglink_td', 'filter_block' => 'grid_options_filter', 'width' => 140, ),
'TotalAmount' => Array ( 'title' => 'la_col_TotalAmount', 'data_block' => 'grid_previewlink_td', 'filter_block' => 'grid_range_filter', 'width' => 140, ),
'AffiliateUser' => Array ( 'title' => 'la_col_AffiliateUser', 'data_block' => 'grid_userlink_td', 'user_field' => 'AffiliatePortalUserId', 'filter_block' => 'grid_like_filter', 'width' => 140, ),
'OnHold' => Array ('title' => 'la_col_OnHold', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
),
),
'Search' => Array (
'Icons' => Array (
'default' => 'icon16_item.png',
1 => 'icon16_pending.png',
5 => 'icon16_disabled.png',
'module' => 'core',
),
'Fields' => Array (
'OrderId' => Array ('title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
'OrderNumber' => Array ('title' => 'la_col_OrderNumber', 'data_block' => 'grid_ordernumber_td', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'Status' => Array ('title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
'OrderDate' => Array ('title' => 'la_col_OrderDate', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
'CustomerName' => Array ('title' => 'la_col_CustomerName', 'data_block' => 'grid_userlink_td', 'user_field' => 'PortalUserId', 'filter_block' => 'grid_like_filter'),
'PaymentType' => Array ('title' => 'la_col_PaymentType', 'data_block' => 'grid_billinglink_td', 'filter_block' => 'grid_options_filter'),
'TotalAmount' => Array ('title' => 'la_col_TotalAmount', 'data_block' => 'grid_previewlink_td', 'filter_block' => 'grid_float_range_filter'),
'AffiliateUser' => Array ( 'title' => 'la_col_AffiliateUser', 'data_block' => 'grid_userlink_td', 'user_field' => 'AffiliatePortalUserId', 'filter_block' => 'grid_user_like_filter'),
'OrderIP' => Array ('title' => 'la_col_OrderIP', 'filter_block' => 'grid_like_filter'),
'Username' => Array ('title' => 'la_col_Username', 'filter_block' => 'grid_user_like_filter'),
'PaymentAccount' => Array ('title' => 'la_col_CreditCardNumber', 'filter_block' => 'grid_like_filter'),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/orders/orders_tag_processor.php
===================================================================
--- branches/5.2.x/units/orders/orders_tag_processor.php (revision 14088)
+++ branches/5.2.x/units/orders/orders_tag_processor.php (revision 14089)
@@ -1,1492 +1,1498 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class OrdersTagProcessor extends kDBTagProcessor
{
/**
* Print location using only filled in fields
*
* @param Array $params
* @access public
*/
function PrintLocation($params)
{
$object =& $this->getObject($params);
$type = getArrayValue($params,'type');
if($type == 'Company')
{
return $this->PrintCompanyLocation($params);
}
$fields = Array('City','State','Zip','Country');
$ret = '';
foreach($fields as $field)
{
$value = $object->GetField($type.$field);
if ($field == 'Country' && $value) $ret .= '<br/>';
if($value) $ret .= $value.', ';
}
return rtrim($ret,', ');
}
function PrintCompanyLocation($params)
{
$ret = '';
$fields = Array ('City','State','ZIP','Country');
foreach ($fields as $field) {
$value = $this->Application->ConfigValue('Comm_'.$field);
if ($field == 'Country') {
$current_language = $this->Application->GetVar('m_lang');
$primary_language = $this->Application->GetDefaultLanguageId();
$sql = 'SELECT IF(l' . $current_language . '_Name = "", l' . $primary_language . '_Name, l' . $current_language . '_Name)
FROM ' . TABLE_PREFIX . 'CountryStates
WHERE IsoCode = ' . $this->Conn->qstr($value);
$value = $this->Conn->GetOne($sql);
}
if ($field == 'Country' && $value) {
$ret .= '<br/>';
}
if ($value) {
$ret .= $value.', ';
}
}
return rtrim($ret,', ');
}
function Orditems_LinkRemoveFromCart($params)
{
return $this->Application->HREF($this->Application->GetVar('t'), '', Array('pass' => 'm,orditems,ord', 'ord_event' => 'OnRemoveFromCart', 'm_cat_id'=>0));
}
function Orderitems_ProductLink($params)
{
$object =& $this->Application->recallObject('orditems');
$url_params = Array (
'p_id' => $object->GetDBField('ProductId'),
'pass' => 'm,p',
);
return $this->Application->HREF($params['template'], '', $url_params);
}
function Orderitems_ProductExists($params)
{
$object =& $this->Application->recallObject('orditems');
return $object->GetDBField('ProductId') > 0;
}
function PrintCart($params)
{
$o = '';
$params['render_as'] = $params['item_render_as'];
$tag_params = array_merge($params, Array ('per_page' => -1));
$o_items = $this->Application->ProcessParsedTag(rtrim('orditems.'.$this->Special, '.'), 'PrintList', $tag_params);
if ($o_items) {
$cart_params = array('name' => $params['header_render_as']);
$o = $this->Application->ParseBlock($cart_params);
$o .= $o_items;
$cart_params = array('name' => $params['footer_render_as']);
$o .= $this->Application->ParseBlock($cart_params);
} else {
$cart_params = array('name' => $params['empty_cart_render_as']);
$o = $this->Application->ParseBlock($cart_params);
}
return $o;
}
function ShopCartForm($params)
{
return $this->Application->ProcessParsedTag('m', 'ParseBlock', array_merge($params, Array(
'name' => 'kernel_form', 'PrefixSpecial'=>'ord'
)) );
}
function BackOrderFlag($params)
{
$object =& $this->Application->recallObject('orditems');
return $object->GetDBField('BackOrderFlag');
}
function OrderIcon($params)
{
$object =& $this->Application->recallObject('orditems');
if ($object->GetDBField('BackOrderFlag') == 0) {
return $params['ordericon'];
} else {
return $params['backordericon'];
}
}
function Status($params)
{
$status_map = Array(
'incomplete' => ORDER_STATUS_INCOMPLETE,
'pending' => ORDER_STATUS_PENDING,
'backorder' => ORDER_STATUS_BACKORDERS,
'toship' => ORDER_STATUS_TOSHIP,
'processed' => ORDER_STATUS_PROCESSED,
'denied' => ORDER_STATUS_DENIED,
'archived' => ORDER_STATUS_ARCHIVED,
);
$object =& $this->getObject($params);
$status = $object->GetDBField('Status');
$result = true;
if (isset($params['is'])) {
$result = $result && ($status == $status_map[$params['is']]);
}
if (isset($params['is_not'])) {
$result = $result && ($status != $status_map[$params['is_not']]);
}
return $result;
}
function ItemsInCart($params)
{
$object =& $this->getObject($params);
if ($object->GetDBField('Status') != ORDER_STATUS_INCOMPLETE || $object->GetID() == FAKE_ORDER_ID) {
return 0;
}
$object =& $this->Application->recallObject('orditems', 'orditems_List');
/* @var $object kDBList */
return $object->RecordsCount;
}
function CartNotEmpty($params)
{
$object =& $this->getObject($params);
if ($object->GetDBField('Status') != ORDER_STATUS_INCOMPLETE || $object->GetID() == FAKE_ORDER_ID) {
return 0;
}
$order_id = $this->Application->RecallVar('ord_id');
if ($order_id) {
$sql = 'SELECT COUNT(*)
FROM ' . TABLE_PREFIX . 'OrderItems
WHERE OrderId = ' . $order_id;
return $this->Conn->GetOne($sql);
}
return 0;
}
function CartIsEmpty($params)
{
return $this->CartNotEmpty($params) ? false : true;
}
function CartHasBackorders($params)
{
$object =& $this->getObject($params);
$sql = 'SELECT COUNT(*)
FROM ' . TABLE_PREFIX . 'OrderItems
WHERE OrderId = ' . $object->GetID() . '
GROUP BY BackOrderFlag';
$different_types = $this->Conn->GetCol($sql);
return count($different_types) > 1;
}
function PrintShippings($params)
{
$o = '';
$object =& $this->getObject($params);
$ord_id = $object->GetId();
$shipping_option = $object->GetDBField('ShippingOption');
$backorder_select = $shipping_option == 0 ? '0 As BackOrderFlag' : 'BackOrderFlag';
$order_items =& $this->Application->recallObject('orditems', 'orditems_List', Array('skip_autoload' => true) );
$oi_table = $order_items->TableName;
list($split_shipments, $limit_types) = $this->GetShippingLimitations($ord_id);
foreach ($split_shipments as $group => $data)
{
$query = 'UPDATE '.$oi_table.' SET SplitShippingGroup = '.$group.'
WHERE ProductId IN ('.implode(',', $data['Products']).')';
$this->Conn->Query($query);
$limitations_cache[$group] = $data['Types'];
}
$shipping_group_option = $object->GetDBField('ShippingGroupOption');
$shipping_group_select = $shipping_group_option == 0 ? '0 AS SplitShippingGroup' : 'SplitShippingGroup';
if (count($split_shipments) > 1) {
$this->Application->SetVar('shipping_limitations_apply', 1);
// different shipping limitations apply
if ($limit_types == 'NONE') {
// order can't be shipped with single shipping type
$this->Application->SetVar('shipping_limitations_apply', 2);
$shipping_group_select = 'SplitShippingGroup';
$shipping_group_option = 1;
}
}
else {
$this->Application->SetVar('shipping_limitations_apply', 0);
}
$weight_sql = 'IF(oi.Weight IS NULL, 0, oi.Weight * oi.Quantity)';
$query = 'SELECT
'.$backorder_select.',
oi.ProductName,
oi.ShippingTypeId,
SUM(oi.Quantity) AS TotalItems,
SUM('.$weight_sql.') AS TotalWeight,
SUM(oi.Price * oi.Quantity) AS TotalAmount,'.
// calculate free Totals => SUM(ALL) - SUM(PROMO) '
'SUM(oi.Quantity) - SUM(IF(p.MinQtyFreePromoShipping > 0 AND p.MinQtyFreePromoShipping <= oi.Quantity, oi.Quantity, 0)) AS TotalItemsPromo,
SUM('.$weight_sql.') - SUM(IF(p.MinQtyFreePromoShipping > 0 AND p.MinQtyFreePromoShipping <= oi.Quantity, '.$weight_sql.', 0)) AS TotalWeightPromo,
SUM(oi.Price * oi.Quantity) - SUM(IF(p.MinQtyFreePromoShipping > 0 AND p.MinQtyFreePromoShipping <= oi.Quantity, oi.Price * oi.Quantity, 0)) AS TotalAmountPromo,
'.$shipping_group_select.'
FROM '.$oi_table.' oi
LEFT JOIN '.$this->Application->getUnitOption('p', 'TableName').' p
ON oi.ProductId = p.ProductId
WHERE oi.OrderId = '.$ord_id.' AND p.Type = 1
GROUP BY BackOrderFlag, SplitShippingGroup
ORDER BY BackOrderFlag ASC, SplitShippingGroup ASC';
$shipments = $this->Conn->Query($query);
$block_params = Array();
$block_params['name'] = $this->SelectParam($params, 'render_as,block');
$block_params['user_country_id'] = $object->GetDBField('ShippingCountry');
$block_params['user_state_id'] = $object->GetDBField('ShippingState');
$block_params['user_zip'] = $object->GetDBField('ShippingZip');
$block_params['user_city'] = $object->GetDBField('ShippingCity');
$block_params['user_addr1'] = $object->GetDBField('ShippingAddress1');
$block_params['user_addr2'] = $object->GetDBField('ShippingAddress2');
$block_params['user_name'] = $object->GetDBField('ShippingTo');
if( ($block_params['user_addr1'] == '' || $block_params['user_city'] == '' ||
$block_params['user_zip'] == '' || $block_params['user_country_id'] == '') &&
getArrayValue($params, 'invalid_address_render_as'))
{
$block_params['name'] = $params['invalid_address_render_as'];
return $this->Application->ParseBlock($block_params);
}
$group = 1;
foreach ($shipments as $shipment) {
$where = array('OrderId = '.$ord_id);
if ($shipping_group_option != 0) {
$where[] = 'SplitShippingGroup = '.$shipment['SplitShippingGroup'];
}
if ($shipping_option > 0) { // not all together
$where[] = 'BackOrderFlag = '.$shipment['BackOrderFlag'];
}
$query = 'UPDATE '.$oi_table.' SET PackageNum = '.$group.'
'.($where ? 'WHERE '.implode(' AND ', $where) : '');
$this->Conn->Query($query);
$group++;
}
$this->Application->RemoveVar('LastShippings');
$group = 1;
$this->Application->SetVar('ShipmentsExists', 1);
foreach ($shipments as $shipment) {
$block_params['package_num'] = $group;
$block_params['limit_types'] = strpos($shipping_group_select, '0 AS') !== false ? $limit_types : $limitations_cache[$shipment['SplitShippingGroup']];
$this->Application->SetVar('ItemShipmentsExists', 1);
switch ($shipment['BackOrderFlag']) {
case 0:
if ( $this->CartHasBackOrders(Array()) && $shipping_option == 0 ) {
$block_params['shipment'] = $this->Application->Phrase('lu_all_available_backordered');
}
else {
$block_params['shipment'] = $this->Application->Phrase('lu_ship_all_available');;
}
break;
case 1:
$block_params['shipment'] = $this->Application->Phrase('lu_ship_all_backordered');;
break;
default:
$block_params['shipment'] = $this->Application->Phrase('lu_ship_backordered');
break;
}
$block_params['promo_weight_metric'] = $shipment['TotalWeightPromo'];
$block_params['promo_amount'] = $shipment['TotalAmountPromo'];
$block_params['promo_items'] = $shipment['TotalItemsPromo'];
$block_params['weight_metric'] = $shipment['TotalWeight'];
$block_params['weight'] = $shipment['TotalWeight'];
$regional =& $this->Application->recallObject('lang.current');
if ($block_params['weight_metric'] == '')
{
$block_params['weight'] = $this->Application->Phrase('lu_NotAvailable');
}
elseif ($regional->GetDBField('UnitSystem') == 1)
{
$block_params['weight'] .= ' '.$this->Application->Phrase('lu_kg');
}
elseif ($regional->GetDBField('UnitSystem') == 2)
{
list($pounds, $ounces) = Kg2Pounds($block_params['weight']);
$block_params['weight'] = $pounds.' '.$this->Application->Phrase('lu_pounds').' '.
$ounces.' '.$this->Application->Phrase('lu_ounces');
}
$block_params['items'] = $shipment['TotalItems'];
$iso = $this->GetISO($params['currency']);
$amount = $this->ConvertCurrency($shipment['TotalAmount'], $iso);
$amount = sprintf("%.2f", $amount);
// $block_params['amount'] = $this->AddCurrencySymbol($amount, $iso);
$block_params['amount'] = $shipment['TotalAmount'];
$block_params['field_name'] = $this->InputName(Array('field' => 'ShippingTypeId')).'['.($group).']';
$parsed_block = $this->Application->ParseBlock($block_params);
if($this->Application->GetVar('ItemShipmentsExists'))
{
$o .= $parsed_block;
}
else
{
$this->Application->SetVar('ShipmentsExists', 0);
if(getArrayValue($params, 'no_shipments_render_as'))
{
$block_params['name'] = $params['no_shipments_render_as'];
return $this->Application->ParseBlock($block_params);
}
}
$group++;
}
if(getArrayValue($params, 'table_header_render_as'))
{
$o = $this->Application->ParseBlock( Array('name' => $params['table_header_render_as']) ).$o;
}
if(getArrayValue($params, 'table_footer_render_as'))
{
$o .= $this->Application->ParseBlock( Array('name' => $params['table_footer_render_as']) );
}
return $o;
}
function GetShippingLimitations($ord_id)
{
/*$query = 'SELECT
c.CachedShippingLimitation
FROM '.TABLE_PREFIX.'OrderItems AS oi
LEFT JOIN '.TABLE_PREFIX.'Products AS p
ON p.ProductId = oi.ProductId
LEFT JOIN '.TABLE_PREFIX.'CategoryItems AS ci
ON ci.ItemResourceId = p.ResourceId
LEFT JOIN '.TABLE_PREFIX.'Category AS c
ON c.CategoryId = ci.CategoryId
WHERE
oi.OrderId = '.$ord_id.'
AND
ci.PrimaryCat = 1
AND
c.CachedShippingMode = 1;';
$cat_limitations = $this->Conn->GetCol($query);*/
$cat_limitations = array();
$query = 'SELECT ShippingLimitation, ShippingMode, oi.ProductId as ProductId
FROM '.TABLE_PREFIX.'Products AS p
LEFT JOIN '.TABLE_PREFIX.'OrderItems AS oi ON
oi.ProductId = p.ProductId
WHERE oi.OrderId = '.$ord_id.' AND p.Type = 1'; // .' AND p.ShippingMode = 1';
$limitations = $this->Conn->Query($query, 'ProductId');
$split_shipments = array();
$limit = false;
$types_index = array();
// group products by shipping type range and caculate intersection of all types available for ALL products
// the intersaction caclulation is needed to determine if the order can be shipped with single type or not
if ($limitations) {
$limit_types = null;
foreach ($limitations as $product_id => $row)
{
// if shipping types are limited - get the types
$types = $row['ShippingLimitation'] != '' ? explode('|', substr($row['ShippingLimitation'], 1, -1)) : array('ANY');
// if shipping is NOT limited to selected types (default - so products with no limitations at all also counts)
if ($row['ShippingMode'] == 0) {
array_push($types, 'ANY'); // can be shipped with ANY (literally) type
$types = array_unique($types);
}
//adding product id to split_shipments group by types range
$i = array_search(serialize($types), $types_index);
if ($i === false) {
$types_index[] = serialize($types);
$i = count($types_index)-1;
}
$split_shipments[$i]['Products'][] = $product_id;
$split_shipments[$i]['Types'] = serialize($types);
if ($limit_types == null) { //it is null only when we process first item with limitations
$limit_types = $types; //initial scope
}
// this is to avoid ANY intersect CUST_1 = (), but allows ANY intersect CUST_1,ANY = (ANY)
if (in_array('ANY', $limit_types) && !in_array('ANY', $types)) {
array_splice($limit_types, array_search('ANY', $limit_types), 1, $types);
}
// this is to avoid CUST_1 intersect ANY = (), but allows CUST_1 intersect CUST_1,ANY = (ANY)
if (!in_array('ANY', $limit_types) && in_array('ANY', $types)) {
array_splice($types, array_search('ANY', $types), 1, $limit_types);
}
$limit_types = array_intersect($limit_types, $types);
}
$limit_types = count($limit_types) > 0 ? serialize(array_unique($limit_types)) : 'NONE';
}
return array($split_shipments, $limit_types);
}
function PaymentTypeForm($params)
{
$object =& $this->getObject($params);
$payment_type_id = $object->GetDBField('PaymentType');
if($payment_type_id)
{
$this->Application->SetVar('pt_id', $payment_type_id);
$block_params['name'] = $this->SelectParam($params, $this->UsingCreditCard($params) ? 'cc_render_as,block_cc' : 'default_render_as,block_default' );
return $this->Application->ParseBlock($block_params);
}
return '';
}
/**
* Returns true in case if credit card was used as payment type for order
*
* @param Array $params
* @return bool
*/
function UsingCreditCard($params)
{
$object =& $this->getObject($params);
$pt = $object->GetDBField('PaymentType');
if (!$pt) {
$pt = $this->Conn->GetOne('SELECT PaymentTypeId FROM '.TABLE_PREFIX.'PaymentTypes WHERE IsPrimary = 1');
$object->SetDBField('PaymentType', $pt);
}
$pt_table = $this->Application->getUnitOption('pt','TableName');
$sql = 'SELECT GatewayId FROM %s WHERE PaymentTypeId = %s';
$gw_id = $this->Conn->GetOne( sprintf( $sql, $pt_table, $pt ) );
$sql = 'SELECT RequireCCFields FROM %s WHERE GatewayId = %s';
return $this->Conn->GetOne( sprintf($sql, TABLE_PREFIX.'Gateways', $gw_id) );
}
function PaymentTypeDescription($params)
{
return $this->Application->ProcessParsedTag('pt', 'Field', array_merge($params, Array(
'field' => 'Description'
)) );
}
function PaymentTypeInstructions($params)
{
return $this->Application->ProcessParsedTag('pt', 'Field', array_merge($params, Array(
'field' => 'Instructions'
)) );
}
function PrintMonthOptions($params)
{
$object =& $this->getObject($params);
$date = explode('/', $object->GetDBField($params['date_field_name']));
if (!$date || sizeof($date) != 2) {
$date=array("", "");
}
$o = '';
$params['name'] = $params['block'];
for ($i = 1; $i <= 12; $i++) {
$month_str = str_pad($i, 2, "0", STR_PAD_LEFT);
if ($date[0] == $month_str) {
$params['selected'] = ' selected';
}else {
$params['selected'] = '';
}
$params['mm'] = $month_str;
$o .= $this->Application->ParseBlock($params);
}
return $o;
}
function PrintYearOptions($params)
{
$object =& $this->getObject($params);
$value = $object->GetDBField( $params['field'] );
$block_params = $this->prepareTagParams($params);
$block_params['name'] = $this->SelectParam($params, 'render_as,block');
$o = '';
$this_year = adodb_date('y');
for($i = $this_year; $i <= $this_year + 10; $i++)
{
$year_str = str_pad($i, 2, '0', STR_PAD_LEFT);
$block_params['selected'] = ($value == $year_str) ? $params['selected'] : '';
$block_params['key'] = $year_str;
$block_params['option'] = $year_str;
$o .= $this->Application->ParseBlock($block_params);
}
return $o;
}
function PrintMyOrders($params)
{
}
/**
* Checks, that order data can be editied based on it's status
*
* @param Array $params
* @return bool
*/
function OrderEditable($params)
{
$id_field = $this->Application->getUnitOption($this->Prefix, 'IDField');
$table_name = $this->Application->getUnitOption($this->Prefix, 'TableName');
if ($this->Application->IsTempMode($this->Prefix, $this->Special)) {
$table_name = $this->Application->GetTempName($table_name, 'prefix:' . $this->Prefix);
}
// use direct select here (not $this->getObject) because this tag is
// used even before "combined_header" block is used (on "orders_edit_items" template)
$sql = 'SELECT Status, PaymentType
FROM ' . $table_name . '
WHERE ' . $id_field . ' = ' . $this->Application->GetVar( $this->getPrefixSpecial() . '_id' );
$order_data = $this->Conn->GetRow($sql);
if (!$order_data) {
// new order adding, when even not in database
return true;
}
switch ($order_data['Status']) {
case ORDER_STATUS_INCOMPLETE:
$ret = true;
break;
case ORDER_STATUS_PENDING:
case ORDER_STATUS_BACKORDERS:
$sql = 'SELECT PlacedOrdersEdit
FROM ' . $this->Application->getUnitOption('pt', 'TableName') . '
WHERE ' . $this->Application->getUnitOption('pt', 'IDField') . ' = ' . $order_data['PaymentType'];
$ret = $this->Conn->GetOne($sql);
break;
default:
$ret = false;
break;
}
return $ret;
}
function CheckoutSteps($params)
{
$steps = explode(',', $params['steps']);
foreach ($steps as $key => $item)
{
$templates[$key] = trim($item);
}
$templates = explode(',', $params['templates']);
foreach ($templates as $key => $item)
{
$templates[$key] = trim($item);
}
$total_steps = count($templates);
$t = $this->Application->GetVar('t');
$o = '';
$block_params = array();
$i = 0;
$passed_current = preg_match("/".preg_quote($templates[count($templates)-1], '/')."/", $t);
foreach ($steps as $step => $name)
{
if (preg_match("/".preg_quote($templates[$step], '/')."/", $t)) {
$block_params['name'] = $this->SelectParam($params, 'current_step_render_as,block_current_step');
$passed_current = true;
}
else {
$block_params['name'] = $passed_current ? $this->SelectParam($params, 'render_as,block') : $this->SelectParam($params, 'passed_step_render_as,block_passed_step');
}
$block_params['title'] = $this->Application->Phrase($name);
$block_params['template'] = $templates[$i];
$block_params['template_link'] = $this->Application->HREF($templates[$step], '', Array('pass'=>'m'));
$block_params['next_step_template'] = isset($templates[$i + 1]) ? $templates[$i + 1] : '';
$block_params['number'] = $i + 1;
$i++;
$o.= $this->Application->ParseBlock($block_params, 1);
}
return $o;
}
function ShowOrder($params)
{
$order_params = $this->prepareTagParams($params);
// $order_params['Special'] = 'myorders';
// $order_params['PrefixSpecial'] = 'ord.myorders';
$order_params['name'] = $this->SelectParam($order_params, 'render_as,block');
// $this->Application->SetVar('ord.myorders_id', $this->Application->GetVar('ord_id'));
$object =& $this->getObject($params);
if (!$object->GetDBField('OrderId')) {
return;
}
return $this->Application->ParseBlock($order_params);
}
function BuildListSpecial($params)
{
if ($this->Special != '') {
return $this->Special;
}
$list_unique_key = $this->getUniqueListKey($params);
if ($list_unique_key == '') {
return parent::BuildListSpecial($params);
}
return crc32($list_unique_key);
}
function ListOrders($params)
{
$o = '';
$params['render_as'] = $params['item_render_as'];
$o_orders = $this->PrintList2($params);
if ($o_orders) {
$orders_params = array('name' => $params['header_render_as']);
$o = $this->Application->ParseBlock($orders_params);
$o .= $o_orders;
} else {
$orders_params = array('name' => $params['empty_myorders_render_as']);
$o = $this->Application->ParseBlock($orders_params);
}
return $o;
}
function HasRecentOrders($params)
{
$per_page = $this->SelectParam($params, 'per_page,max_items');
if ($per_page !== false) {
$params['per_page'] = $per_page;
}
return (int)$this->TotalRecords($params) > 0 ? 1 : 0;
}
function ListOrderItems($params)
{
$prefix_special = rtrim('orditems.'.$this->Special, '.');
return $this->Application->ProcessParsedTag($prefix_special, 'PrintList', array_merge($params, Array(
'per_page' => -1
)) );
}
function OrdersLink(){
$params['pass']='m,ord';
$main_processor =& $this->Application->RecallObject('m_TagProcessor');
return $main_processor->Link($params);
}
function PrintAddresses($params)
{
$object =& $this->getObject($params);
$address_list =& $this->Application->recallObject('addr','addr_List', Array('per_page'=>-1, 'skip_counting'=>true) );
$address_list->Query();
$address_id = $this->Application->GetVar($params['type'].'_address_id');
if (!$address_id) {
$sql = 'SELECT '.$address_list->IDField.'
FROM '.$address_list->TableName.'
WHERE PortalUserId = '.$object->GetDBField('PortalUserId').' AND LastUsedAs'.ucfirst($params['type']).' = 1';
$address_id = (int)$this->Conn->GetOne($sql);
}
$ret = '';
$block_params = $this->prepareTagParams($params);
$block_params['name'] = $this->SelectParam($params, 'render_as,block');
$address_list->GoFirst();
while (!$address_list->EOL()) {
$selected = ($address_list->GetID() == $address_id);
if ($selected && $address_list->GetDBField('IsProfileAddress')) {
$this->Application->SetVar($this->Prefix.'_IsProfileAddress', true);
}
$block_params['key'] = $address_list->GetID();
$block_params['value'] = $address_list->GetDBField('ShortAddress');
$block_params['selected'] = $selected ? ' selected="selected"' : '';
$ret .= $this->Application->ParseBlock($block_params, 1);
$address_list->GoNext();
}
return $ret;
}
function PrefillRegistrationFields($params)
{
if ( $this->Application->GetVar('fields_prefilled') ) {
return false;
}
$user =& $this->Application->recallObject('u', null, Array ('skip_autoload' => true));
/* @var $user kDBItem */
$order =& $this->Application->recallObject($this->Prefix . '.last');
$order_prefix = $params['type'] == 'billing' ? 'Billing' : 'Shipping';
$order_fields = Array (
'To', 'Company', 'Phone', 'Fax', 'Email', 'Address1',
'Address2', 'City', 'State', 'Zip', 'Country'
);
$names = explode(' ', $order->GetDBField($order_prefix.'To'), 2);
if (!$user->GetDBField('FirstName')) $user->SetDBField('FirstName', getArrayValue($names, 0) );
if (!$user->GetDBField('LastName')) $user->SetDBField('LastName', getArrayValue($names, 1) );
if (!$user->GetDBField('Company')) $user->SetDBField('Company', $order->GetDBField($order_prefix.'Company') );
if (!$user->GetDBField('Phone')) $user->SetDBField('Phone', $order->GetDBField($order_prefix.'Phone') );
if (!$user->GetDBField('Fax')) $user->SetDBField('Fax', $order->GetDBField($order_prefix.'Fax') );
if (!$user->GetDBField('Email')) $user->SetDBField('Email', $order->GetDBField($order_prefix.'Email') );
if (!$user->GetDBField('Street')) $user->SetDBField('Street', $order->GetDBField($order_prefix.'Address1') );
if (!$user->GetDBField('Street2')) $user->SetDBField('Street2', $order->GetDBField($order_prefix.'Address2') );
if (!$user->GetDBField('City')) $user->SetDBField('City', $order->GetDBField($order_prefix.'City') );
if (!$user->GetDBField('State')) $user->SetDBField('State', $order->GetDBField($order_prefix.'State') );
if (!$user->GetDBField('Zip')) $user->SetDBField('Zip', $order->GetDBField($order_prefix.'Zip') );
if (!$user->GetDBField('Country')) $user->SetDBField('Country', $order->GetDBField($order_prefix.'Country') );
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
/* @var $cs_helper kCountryStatesHelper */
$cs_helper->PopulateStates(new kEvent('u:OnBuild'), 'State', 'Country');
}
function UserLink($params)
{
$object =& $this->getObject($params);
$user_id = $object->GetDBField( $params['user_field'] );
if ($user_id) {
$url_params = Array (
'm_opener' => 'd',
'u_mode' => 't',
'u_event' => 'OnEdit',
'u_id' => $user_id,
'pass' => 'all,u',
'no_pass_through' => 1,
);
return $this->Application->HREF($params['edit_template'], '', $url_params);
}
}
function UserFound($params)
{
$virtual_users = Array(USER_ROOT, USER_GUEST, 0);
$object =& $this->getObject($params);
return !in_array( $object->GetDBField( $params['user_field'] ) , $virtual_users );
}
/**
* Returns a link for editing order
*
* @param Array $params
* @return string
*/
function OrderLink($params)
{
$object =& $this->getObject($params);
$url_params = Array (
'm_opener' => 'd',
$this->Prefix.'_mode' => 't',
$this->Prefix.'_event' => 'OnEdit',
$this->Prefix.'_id' => $object->GetID(),
'pass' => 'all,'.$this->Prefix,
'no_pass_through' => 1,
);
return $this->Application->HREF($params['edit_template'], '', $url_params);
}
function HasOriginalAmount($params)
{
$object =& $this->getObject($params);
$original_amount = $object->GetDBField('OriginalAmount');
return $original_amount && ($original_amount != $object->GetDBField('TotalAmount') );
}
/**
* Returns true, when order has tangible items
*
* @param Array $params
* @return bool
*
* @todo This is copy from OrdersItem::HasTangibleItems. Copy to helper (and create it) and use here.
*/
function OrderHasTangibleItems($params)
{
$object =& $this->getObject($params);
if ($object->GetID() == FAKE_ORDER_ID) {
return false;
}
$sql = 'SELECT COUNT(*)
FROM '.TABLE_PREFIX.'OrderItems orditems
LEFT JOIN '.TABLE_PREFIX.'Products p ON p.ProductId = orditems.ProductId
WHERE (orditems.OrderId = '.$object->GetID().') AND (p.Type = '.PRODUCT_TYPE_TANGIBLE.')';
return $this->Conn->GetOne($sql) ? true : false;
}
function ShipmentsExists($params)
{
return $this->Application->GetVar('ShipmentsExists') ? 1 : 0;
}
function Field($params)
{
$value = parent::Field($params);
$field = $this->SelectParam($params,'name,field');
if( ($field == 'PaymentAccount') && getArrayValue($params,'masked') )
{
$value = str_repeat('X',12).substr($value,-4);
}
return $value;
}
function CartHasError($params)
{
return $this->Application->GetVar('checkout_error') > 0;
}
function CheckoutError($params)
{
$error_codes = Array (
1 => 'state_changed',
2 => 'qty_unavailable',
3 => 'outofstock',
4 => 'invalid_code',
5 => 'code_expired',
6 => 'min_qty',
7 => 'code_removed',
8 => 'code_removed_automatically',
9 => 'changed_after_login',
10 => 'coupon_applied',
104 => 'invalid_gc_code',
105 => 'gc_code_expired',
107 => 'gc_code_removed',
108 => 'gc_code_removed_automatically',
110 => 'gift_certificate_applied',
);
$error_param = $error_codes[ $this->Application->GetVar('checkout_error') ];
return $this->Application->Phrase($params[$error_param]);
}
function GetFormAction($params)
{
$object =& $this->getObject($params);
/* @var $object OrdersItem */
$gw_data = $object->getGatewayData($params['payment_type_id']);
$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
$gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] );
/* @var $gateway_object kGWBase */
return $gateway_object->getFormAction($gw_data['gw_params']);
}
function GetFormHiddenFields($params)
{
$object =& $this->getObject($params);
/* @var $object OrdersItem */
$gw_data = $object->getGatewayData(array_key_exists('payment_type_id', $params) ? $params['payment_type_id'] : null);
$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
$gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] );
$tpl = '<input type="hidden" name="%s" value="%s" />'."\n";
$hidden_fields = $gateway_object->getHiddenFields($object->FieldValues, $params, $gw_data['gw_params']);
$ret = '';
if (!is_array($hidden_fields)) {
return $hidden_fields;
}
foreach($hidden_fields as $hidden_name => $hidden_value)
{
$ret .= sprintf($tpl, $hidden_name, $hidden_value);
}
return $ret;
}
function NeedsPlaceButton($params)
{
$object =& $this->getObject($params);
$gw_data = $object->getGatewayData();
$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
$gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] );
return $gateway_object->NeedPlaceButton($object->FieldValues, $params, $gw_data['gw_params']);
}
function HasGatewayError($params)
{
return $this->Application->RecallVar('gw_error');
}
function ShowGatewayError($params)
{
$ret = $this->Application->RecallVar('gw_error');
$this->Application->RemoveVar('gw_error');
return $ret;
}
function ShippingType($params)
{
$object =& $this->getObject($params);
$shipping_info = unserialize( $object->GetDBField('ShippingInfo') );
if (count($shipping_info) > 1) {
return $this->Application->Phrase('lu_MultipleShippingTypes');
}
$shipping_info = array_shift($shipping_info);
return $shipping_info['ShippingName'];
}
function DiscountHelpLink($params)
{
$params['pass'] = 'all,orditems';
$params['m_cat_id'] = 0;
$m_tag_processor =& $this->Application->recallObject('m_TagProcessor');
return $m_tag_processor->Link($params);
}
function DiscountField($params)
{
$orditems =& $this->Application->recallObject( 'orditems' );
$item_data = $orditems->GetDBField('ItemData');
if(!$item_data) return '';
$item_data = unserialize($item_data);
$discount_prefix = ($item_data['DiscountType'] == 'coupon') ? 'coup' : 'd';
$discount =& $this->Application->recallObject($discount_prefix, null, Array('skip_autoload' => true));
if(!$discount->isLoaded())
{
$discount->Load($item_data['DiscountId']);
}
return $discount->GetField( $this->SelectParam($params, 'field,name') );
}
function HasDiscount($params)
{
$object =& $this->getObject($params);
return (float)$object->GetDBField('DiscountTotal') ? 1 : 0;
}
/**
* Allows to check if required product types are present in order
*
* @param Array $params
*/
function HasProductType($params)
{
$product_types = Array('tangible' => 1, 'subscription' => 2, 'service' => 3, 'downloadable' => 4, 'package' => 5, 'gift' => 6);
$object =& $this->getObject($params);
$sql = 'SELECT COUNT(*)
FROM '.TABLE_PREFIX.'OrderItems oi
LEFT JOIN '.TABLE_PREFIX.'Products p ON p.ProductId = oi.ProductId
WHERE (oi.OrderId = '.$object->GetID().') AND (p.Type = '.$product_types[ $params['type'] ].')';
return $this->Conn->GetOne($sql);
}
function PrintSerializedFields($params)
{
$object =& $this->getObject($params);
$field = $this->SelectParam($params, 'field');
if (!$field) $field = $this->Application->GetVar('field');
$data = unserialize($object->GetDBField($field));
$o = '';
$block_params['name'] = $params['render_as'];
foreach ($data as $field => $value) {
$block_params['field'] = $field;
$block_params['value'] = $value;
$o .= $this->Application->ParseBlock($block_params);
}
return $o;
}
function OrderProductEmail($params)
{
$order =& $this->Application->recallObject('ord');
$orditems =& $this->Application->recallObject('orditems');
$sql = 'SELECT ResourceId
FROM '.TABLE_PREFIX.'Products
WHERE ProductId = '.$orditems->GetDBField('ProductId');
$resource_id = $this->Conn->GetOne($sql);
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
$custom_fields = $this->Application->getUnitOption('p', 'CustomFields');
$custom_name = $ml_formatter->LangFieldName('cust_'.array_search($params['msg_custom_field'], $custom_fields));
$sql = 'SELECT '.$custom_name.'
FROM '.$this->Application->getUnitOption('p-cdata', 'TableName').'
WHERE ResourceId = '.$resource_id;
$message_template = $this->Conn->GetOne($sql);
if (!$message_template || trim($message_template) == '') {
// message template missing
return ;
}
$from_name = strip_tags($this->Application->ConfigValue('Site_Name'));
$from_email = $this->Application->ConfigValue('Smtp_AdminMailFrom');
$to_name = $order->GetDBField('BillingTo');
$to_email = $order->GetDBField('BillingEmail');
if (!$to_email) {
// billing email is empty, then use user's email
$sql = 'SELECT Email
FROM '.$this->Application->getUnitOption('u', 'TableName').'
WHERE PortalUserId = '.$order->GetDBField('PortalUserId');
$to_email = $this->Conn->GetOne($sql);
}
$esender =& $application->recallObject('EmailSender.-product');
/* @var $esender kEmailSendingHelper */
$esender->SetFrom($from_email, $from_name);
$esender->AddTo($to_email, $to_name);
$email_events_eh =& $this->Application->recallObject('emailevents_EventHandler');
/* @var $email_events_eh EmailEventsEventsHandler */
list ($message_headers, $message_body) = $email_events_eh->ParseMessageBody($message_template, Array());
if (!trim($message_body)) {
// message body missing
return false;
}
foreach ($message_headers as $header_name => $header_value) {
$esender->SetEncodedHeader($header_name, $header_value);
}
$esender->SetHTML($message_body);
$esender->Deliver();
}
function PrintTotals($params)
{
$order =& $this->getObject($params);
$totals = array();
if (ABS($order->GetDBField('SubTotal') - $order->GetDBField('AmountWithoutVAT')) > 0.01) {
$totals[] = 'products';
}
$has_tangible = $this->OrderHasTangibleItems($params);
if ($has_tangible && $order->GetDBField('ShippingTaxable')) {
$totals[] = 'shipping';
}
if ($order->GetDBField('ProcessingFee') > 0 && $order->GetDBField('ProcessingTaxable')) {
$totals[] = 'processing';
}
if ($order->GetDBField('ReturnTotal') > 0 && $order->GetDBField('ReturnTotal')) {
$totals[] = 'return';
}
$totals[] = 'sub_total';
if ($order->GetDBField('VAT') > 0) {
$totals[] = 'vat';
}
if ($has_tangible && !$order->GetDBField('ShippingTaxable')) {
$totals[] = 'shipping';
}
if ($order->GetDBField('ProcessingFee') > 0 && !$order->GetDBField('ProcessingTaxable')) {
$totals[] = 'processing';
}
$o = '';
foreach ($totals as $type)
{
if ($element = getArrayValue($params, $type.'_render_as')) {
$o .= $this->Application->ParseBlock( array('name' => $element), 1 );
}
}
return $o;
}
function ShowDefaultAddress($params)
{
$address_type = ucfirst($params['type']);
if ($this->Application->GetVar('check_'.strtolower($address_type).'_address')) {
// form type doesn't match check type, e.g. shipping check on billing form
return '';
}
// for required field highlighting on form when no submit made
$this->Application->SetVar('check_'.strtolower($address_type).'_address', 'true');
/*if ((strtolower($address_type) == 'billing') && $this->UsingCreditCard($params)) {
$this->Application->SetVar('check_credit_card', 'true');
}*/
$this->Application->HandleEvent(new kEvent('ord:SetStepRequiredFields'));
$user_id = $this->Application->RecallVar('user_id');
$sql = 'SELECT AddressId
FROM '.TABLE_PREFIX.'Addresses
WHERE PortalUserId = '.$user_id.' AND LastUsedAs'.$address_type.' = 1';
$address_id = $this->Conn->GetOne($sql);
if (!$address_id) {
return '';
}
$addr_list =& $this->Application->recallObject('addr', 'addr_List', Array('per_page'=>-1, 'skip_counting'=>true) );
$addr_list->Query();
$object =& $this->getObject();
if (!$addr_list->CheckAddress($object->FieldValues, $address_type)) {
$addr_list->CopyAddress($address_id, $address_type);
}
}
function IsProfileAddress($params)
{
$object =& $this->getObject($params);
$address_type = ucfirst($params['type']);
return $object->IsProfileAddress($address_type);
}
function HasPayPalSubscription($params)
{
$object =& $this->getObject($params);
$sql = 'SELECT COUNT(*)
FROM '.TABLE_PREFIX.'OrderItems oi
LEFT JOIN '.TABLE_PREFIX.'Products p ON p.ProductId = oi.ProductId
WHERE (oi.OrderId = '.$object->GetID().') AND (p.PayPalRecurring = 1)';
return $this->Conn->GetOne($sql);
}
function GetPayPalSubscriptionForm($params)
{
$object =& $this->getObject($params);
$gw_data = $object->getGatewayData($params['payment_type_id']);
$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
$gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] );
$sql = 'SELECT oi.*
FROM '.TABLE_PREFIX.'OrderItems oi
LEFT JOIN '.TABLE_PREFIX.'Products p ON p.ProductId = oi.ProductId
WHERE (oi.OrderId = '.$object->GetID().') AND (p.PayPalRecurring = 1)';
$order_item = $this->Conn->GetRow($sql);
$order_item_data = unserialize($order_item['ItemData']);
$cycle = ceil($order_item_data['Duration'] / 86400);
$cycle_units = 'D';
$item_data = $object->FieldValues;
$item_data['item_name'] = $order_item['ProductName'];
$item_data['item_number'] = $order_item['OrderItemId'];
$item_data['custom'] = $order_item['OrderId'];
$item_data['a1'] = '';
$item_data['p1'] = '';
$item_data['t1'] = '';
$item_data['a2'] = '';
$item_data['p2'] = '';
$item_data['t2'] = '';
$item_data['a3'] = $order_item['Price']; //rate
$item_data['p3'] = $cycle; //cycle
$item_data['t3'] = $cycle_units; //cycle units D (days), W (weeks), M (months), Y (years)
$item_data['src'] = '1'; // Recurring payments. If set to 1, the payment will recur unless your customer cancels the subscription before the end of the billing cycle.
$item_data['sra'] = '1'; // Reattempt on failure. If set to 1, and the payment fails, the payment will be reattempted two more times. After the third failure, the subscription will be cancelled.
$item_data['srt'] = ''; // Recurring Times. This is the number of payments which will occur at the regular rate.
$hidden_fields = $gateway_object->getSubscriptionFields($item_data, $params, $gw_data['gw_params']);
$ret = '';
if (!is_array($hidden_fields)) {
return $hidden_fields;
}
$tpl = '<input type="hidden" name="%s" value="%s" />'."\n";
foreach($hidden_fields as $hidden_name => $hidden_value)
{
$ret .= sprintf($tpl, $hidden_name, $hidden_value);
}
return $ret;
}
function UserHasPendingOrders($params)
{
$sql = 'SELECT OrderId FROM '.$this->Application->getUnitOption($this->Prefix, 'TableName').'
WHERE PortalUserId = '.$this->Application->RecallVar('user_id').'
AND Status = '.ORDER_STATUS_PENDING;
return $this->Conn->GetOne($sql) ? 1 : 0;
}
function AllowAddAddress($params)
{
$user =& $this->Application->recallObject('u.current');
if ($user->GetDBField('cust_shipping_addr_block')) return false;
$address_list =& $this->Application->recallObject('addr','addr_List', Array('per_page'=>-1, 'skip_counting'=>true) );
$address_list->Query();
$max = $this->Application->ConfigValue('MaxAddresses');
return $max <= 0 ? true : $address_list->RecordsCount < $max;
}
function FreePromoShippingAvailable($params)
{
$object =& $this->Application->recallObject('orditems');
$free_ship = $object->GetDBField('MinQtyFreePromoShipping');
$tangible = ($object->GetDBField('Type') == 1)? 1 : 0;
return ($tangible && ($free_ship > 0 && $free_ship <= $object->GetDBField('Quantity')))? 1 : 0;
}
/**
* Creates link for removing coupon or gift certificate
*
* @param Array $params
* @return string
*/
function RemoveCouponLink($params)
{
$type = strtolower($params['type']);
$url_params = Array (
'pass' => 'm,ord',
'ord_event' => ($type == 'coupon') ? 'OnRemoveCoupon' : 'OnRemoveGiftCertificate',
'm_cat_id' => 0,
);
return $this->Application->HREF('', '', $url_params);
}
/**
* Calculates total weight of items in shopping cart
*
* @param Array $params
* @return float
*/
function TotalOrderWeight($params)
{
$object =& $this->getObject();
/* @var $object kDBItem */
$sql = 'SELECT SUM( IF(oi.Weight IS NULL, 0, oi.Weight * oi.Quantity) )
FROM '.TABLE_PREFIX.'OrderItems oi
WHERE oi.OrderId = '.$object->GetID();
$total_weight = $this->Conn->GetOne($sql);
if ($total_weight == '') {
// zero weight -> return text about it
return $this->Application->Phrase('lu_NotAvailable');
}
$regional =& $this->Application->recallObject('lang.current');
switch ($regional->GetDBField('UnitSystem')) {
case 1:
// metric system -> add kg sign
$total_weight .= ' '.$this->Application->Phrase('lu_kg');
break;
case 2:
// uk system -> convert to pounds
list($pounds, $ounces) = Kg2Pounds($total_weight);
$total_weight = $pounds.' '.$this->Application->Phrase('lu_pounds').' '.$ounces.' '.$this->Application->Phrase('lu_ounces');
break;
}
return $total_weight;
}
function InitCatalogTab($params)
{
$tab_params['mode'] = $this->Application->GetVar('tm'); // single/multi selection possible
$tab_params['special'] = $this->Application->GetVar('ts'); // use special for this tab
$tab_params['dependant'] = $this->Application->GetVar('td'); // is grid dependant on categories grid
// set default params (same as in catalog)
if ($tab_params['mode'] === false) $tab_params['mode'] = 'multi';
if ($tab_params['special'] === false) $tab_params['special'] = '';
if ($tab_params['dependant'] === false) $tab_params['dependant'] = 'yes';
// pass params to block with tab content
$params['name'] = $params['render_as'];
$params['prefix'] = trim($this->Prefix.'.'.($tab_params['special'] ? $tab_params['special'] : $this->Special), '.');
$params['cat_prefix'] = trim('c.'.($tab_params['special'] ? $tab_params['special'] : $this->Special), '.');
$params['tab_mode'] = $tab_params['mode'];
$params['grid_name'] = ($tab_params['mode'] == 'multi') ? $params['default_grid'] : $params['radio_grid'];
$params['tab_dependant'] = $tab_params['dependant'];
$params['show_category'] = $tab_params['special'] == 'showall' ? 1 : 0; // this is advanced view -> show category name
// use $pass_params to be able to pass 'tab_init' parameter from m_ModuleInclude tag
return $this->Application->ParseBlock($params, 1);
}
/**
* Checks if required payment method is available
*
* @param Array $params
* @return bool
*/
function HasPaymentGateway($params)
{
static $payment_types = Array ();
$gw_name = $params['name'];
if (!array_key_exists($gw_name, $payment_types)) {
$sql = 'SELECT pt.PaymentTypeId, pt.PortalGroups
FROM '.TABLE_PREFIX.'PaymentTypes pt
LEFT JOIN '.TABLE_PREFIX.'Gateways g ON pt.GatewayId = g.GatewayId
WHERE (g.Name = '.$this->Conn->qstr($params['name']).') AND (pt.Status = '.STATUS_ACTIVE.')';
$payment_types[$gw_name] = $this->Conn->GetRow($sql);
}
if (!$payment_types[$gw_name]) {
return false;
}
$pt_groups = explode(',', substr($payment_types[$gw_name]['PortalGroups'], 1, -1));
$user_groups = explode(',', $this->Application->RecallVar('UserGroups'));
return array_intersect($user_groups, $pt_groups) ? $payment_types[$gw_name]['PaymentTypeId'] : false;
}
function DisplayPaymentGateway($params)
{
$payment_type_id = $this->HasPaymentGateway($params);
if (!$payment_type_id) {
return '';
}
$object =& $this->getObject($params);
/* @var $object OrdersItem */
$gw_data = $object->getGatewayData($payment_type_id);
$block_params = $gw_data['gw_params'];
$block_params['name'] = $params['render_as'];
$block_params['payment_type_id'] = $payment_type_id;
return $this->Application->ParseBlock($block_params);
}
/**
* Checks, that USPS returned valid label
*
* @param Array $params
* @return bool
*/
function USPSLabelFound($params)
{
$object =& $this->getObject($params);
/* @var $object kDBItem */
$full_path = USPS_LABEL_FOLDER . $object->GetDBField( $params['field'] ) . '.pdf';
return file_exists($full_path) && is_file($full_path);
}
/**
- * Prints USPS errors from session
+ * Prints SQE errors from session
*
* @param Array $params
* @return string
*/
- function PrintUSPSErrors($params)
+ function PrintSQEErrors($params)
{
+ $sqe_errors = $this->Application->RecallVar('sqe_errors');
+
+ if (!$sqe_errors) {
+ return '';
+ }
+
$o = '';
- $ses_usps_erros = Array();
- $ses_usps_erros = unserialize($this->Application->RecallVar('usps_errors'));
- if ( count($ses_usps_erros) > 0 && is_array($ses_usps_erros)) {
- foreach ( $ses_usps_erros as $order_number => $error_description ) {
- $block_params = Array();
- $block_params['name'] = $params['render_as'];
- $block_params['order_number'] = $order_number;
- $block_params['error_description'] = $error_description;
- $o.=$this->Application->ParseBlock($block_params, 1);
- }
- $this->Application->RemoveVar('usps_errors');
+ $block_params = $this->prepareTagParams($params);
+ $block_params['name'] = $params['render_as'];
+ $sqe_errors = unserialize($sqe_errors);
+
+ foreach ($sqe_errors as $order_number => $error_description) {
+ $block_params['order_number'] = $order_number;
+ $block_params['error_description'] = $error_description;
+
+ $o .= $this->Application->ParseBlock($block_params);
}
+ $this->Application->RemoveVar('sqe_errors');
+
return $o;
}
}
\ No newline at end of file
Index: branches/5.2.x/units/products/products_event_handler.php
===================================================================
--- branches/5.2.x/units/products/products_event_handler.php (revision 14088)
+++ branches/5.2.x/units/products/products_event_handler.php (revision 14089)
@@ -1,1313 +1,1316 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class ProductsEventHandler extends kCatDBEventHandler {
/**
* Allows to override standart permission mapping
*
*/
function mapPermissions()
{
parent::mapPermissions();
$permissions = Array(
// front
'OnCancelAction' => Array('self' => true),
'OnRateProduct' => Array('self' => true),
'OnClearRecent' => Array('self' => true),
'OnRecommendProduct' => Array('self' => true),
// admin
'OnQtyAdd' => Array('self' => 'add|edit'),
'OnQtyRemove' => Array('self' => 'add|edit'),
'OnQtyOrder' => Array('self' => 'add|edit'),
'OnQtyReceiveOrder' => Array('self' => 'add|edit'),
'OnQtyCancelOrder' => Array('self' => 'add|edit'),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
}
function mapEvents()
{
parent::mapEvents(); // ensure auto-adding of approve/decine and so on events
$product_events = Array( 'OnQtyAdd'=>'InventoryAction',
'OnQtyRemove'=>'InventoryAction',
'OnQtyOrder'=>'InventoryAction',
'OnQtyReceiveOrder'=>'InventoryAction',
'OnQtyCancelOrder'=>'InventoryAction',);
$this->eventMethods = array_merge($this->eventMethods, $product_events);
}
/**
* Sets default processing data for subscriptions
*
* @param kEvent $event
*/
function OnBeforeItemCreate(&$event)
{
+ parent::OnBeforeItemCreate($event);
+
$object =& $event->getObject();
- $product_approve_events = Array(2 => 'p:OnSubscriptionApprove',
- 4 => 'p:OnDownloadableApprove',
- 5 => 'p:OnPackageApprove');
+ $product_approve_events = Array(
+ 2 => 'p:OnSubscriptionApprove',
+ 4 => 'p:OnDownloadableApprove',
+ 5 => 'p:OnPackageApprove'
+ );
$product_type = $object->GetDBField('Type');
$type_found = in_array($product_type, array_keys($product_approve_events) );
- if($type_found && !$object->GetDBField('ProcessingData') )
- {
+ if ($type_found && !$object->GetDBField('ProcessingData') ) {
$processing_data = Array('ApproveEvent' => $product_approve_events[$product_type] );
$object->SetDBField( 'ProcessingData', serialize($processing_data) );
}
}
/**
* Process product count manipulations
*
* @param kEvent $event
* @access private
*/
function InventoryAction(&$event)
{
$object =& $event->getObject();
$object->SetFieldsFromHash( $this->getSubmittedFields($event) );
if ($object->GetDBField('InventoryStatus') == 2) {
// inventory by options (use first selected combination in grid)
$combination_id = array_shift( array_keys( $this->Application->GetVar('poc_grid') ) );
}
else {
// inventory by product
$combination_id = 0;
}
// save id of selected option combination & preselect it in grid
$this->Application->SetVar('combination_id', $combination_id);
$this->ScheduleInventoryAction($event->Name, $object->GetId(), $object->GetDBField('Qty'), $combination_id);
$object->Validate();
if (!isset($object->FieldErrors['Qty']['pseudo'])){
$this->modifyInventory($event->Name, $object, $object->GetDBField('Qty'), $combination_id);
}
$object->SetDBField('Qty', null);
$event->redirect = false;
}
/**
* Perform inventory action on supplied object
*
* @param string $action event name which is actually called by user
* @param ProductsItem $product
* @param int $qty
* @param int $combination_id
*/
function modifyInventory($action, &$product, $qty, $combination_id)
{
if ($product->GetDBField('InventoryStatus') == 2) {
// save inventory changes to option combination instead of product
$object =& $this->Application->recallObject('poc.-item', null, Array('skip_autoload' => true));
$object->Load($combination_id);
}
elseif ($combination_id > 0) {
// combination id present, but not inventory by combinations => skip
return false;
}
elseif ($product->GetDBField('InventoryStatus') == 1) {
// save inventory changes to product
$object =& $product;
}
else {
// product has inventory actions, but don't use inventory => skip
return false;
}
if (!$object->isLoaded()) {
// product/combination in action doesn't exist in database by now
return false;
}
switch ($action) {
case 'OnQtyAdd':
$object->SetDBField('QtyInStock', $object->GetDBField('QtyInStock') + $qty);
break;
case 'OnQtyRemove':
if ($object->GetDBField('QtyInStock') < $qty) {
$qty = $object->GetDBField('QtyInStock');
}
$object->SetDBField('QtyInStock', $object->GetDBField('QtyInStock') - $qty);
break;
case 'OnQtyOrder':
$object->SetDBField('QtyOnOrder', $object->GetDBField('QtyOnOrder') + $qty);
break;
case 'OnQtyReceiveOrder':
$object->SetDBField('QtyOnOrder', $object->GetDBField('QtyOnOrder') - $qty);
$object->SetDBField('QtyInStock', $object->GetDBField('QtyInStock') + $qty);
break;
case 'OnQtyCancelOrder':
$object->SetDBField('QtyOnOrder', $object->GetDBField('QtyOnOrder') - $qty);
break;
}
return $object->Update();
}
function ScheduleInventoryAction($action, $prod_id, $qty, $combination_id = 0)
{
$inv_actions = $this->Application->RecallVar('inventory_actions');
if (!$inv_actions) {
$inv_actions = Array();
}
else {
$inv_actions = unserialize($inv_actions);
}
array_push($inv_actions, Array('action' => $action, 'product_id' => $prod_id, 'combination_id' => $combination_id, 'qty' => $qty));
$this->Application->StoreVar('inventory_actions', serialize($inv_actions));
}
function RealInventoryAction($action, $prod_id, $qty, $combination_id)
{
$product =& $this->Application->recallObject('p.liveitem', null, Array('skip_autoload' => true));
$product->SwitchToLive();
$product->Load($prod_id);
$this->modifyInventory($action, $product, $qty, $combination_id);
}
function RunScheduledInventoryActions(&$event)
{
$inv_actions = $this->Application->GetVar('inventory_actions');
if (!$inv_actions) {
return;
}
$inv_actions = unserialize($inv_actions);
$products = array();
foreach($inv_actions as $an_action) {
$this->RealInventoryAction($an_action['action'], $an_action['product_id'], $an_action['qty'], $an_action['combination_id']);
array_push($products, $an_action['product_id'].'_'.$an_action['combination_id']);
}
$products = array_unique($products);
if ($products) {
$product_obj =& $this->Application->recallObject('p.liveitem', null, Array('skip_autoload' => true));
$product_obj->SwitchToLive();
foreach ($products as $product_key) {
list($prod_id, $combination_id) = explode('_', $product_key);
$product_obj->Load($prod_id);
$this->FullfillBackOrders($product_obj, $combination_id);
}
}
}
/**
* In case if products arrived into inventory and they are required by old (non processed) orders, then use them (products) in that orders
*
* @param ProductsItem $product
* @param int $combination_id
*/
function FullfillBackOrders(&$product, $combination_id)
{
if ( !$this->Application->ConfigValue('Comm_Process_Backorders_Auto') ) return;
if ($combination_id && ($product->GetDBField('InventoryStatus') == 2)) {
// if combination id present and inventory by combinations
$poc_idfield = $this->Application->getUnitOption('poc', 'IDField');
$poc_tablename = $this->Application->getUnitOption('poc', 'TableName');
$sql = 'SELECT QtyInStock
FROM '.$poc_tablename.'
WHERE '.$poc_idfield.' = '.$combination_id;
$stock_qty = $this->Conn->GetOne($sql);
}
else {
// inventory by product
$stock_qty = $product->GetDBField('QtyInStock');
}
$qty = (int) $stock_qty - $product->GetDBField('QtyInStockMin');
$prod_id = $product->GetID();
if ($prod_id <= 0 || !$prod_id || $qty <= 0) return;
//selecting up to $qty backorders with $prod_id where full qty is not reserved
$query = 'SELECT '.TABLE_PREFIX.'Orders.OrderId
FROM '.TABLE_PREFIX.'OrderItems
LEFT JOIN '.TABLE_PREFIX.'Orders ON '.TABLE_PREFIX.'Orders.OrderId = '.TABLE_PREFIX.'OrderItems.OrderId
WHERE (ProductId = '.$prod_id.') AND (Quantity > QuantityReserved) AND (Status = '.ORDER_STATUS_BACKORDERS.')
GROUP BY '.TABLE_PREFIX.'Orders.OrderId
ORDER BY OrderDate ASC
LIMIT 0,'.$qty; //assuming 1 item per order - minimum possible
$orders = $this->Conn->GetCol($query);
if (!$orders) return;
$order =& $this->Application->recallObject('ord.-inv', null, Array('skip_autoload' => true));
foreach ($orders as $ord_id) {
$order->Load($ord_id);
$email_event_admin =& $this->Application->EmailEventAdmin('BACKORDER.FULLFILL');
//reserve what's possible in any case
$this->Application->HandleEvent( $event, 'ord:OnReserveItems' );
if ($event->status == erSUCCESS) { //
//in case the order is ready to process - process it
$this->Application->HandleEvent( $event, 'ord:OnOrderProcess' );
}
}
}
function OnBeforeDeleteFromLive(&$event)
{
$id = $event->getEventParam('id');
$product =& $this->Application->recallObject($event->Prefix.'.itemlive', null, Array('skip_autoload' => true));
$product->SwitchToLive();
if (!$product->Load($id)) return ; // this will make sure New product will not be overwritten with empty data
$temp =& $this->Application->recallObject($event->Prefix.'.itemtemp', null, Array('skip_autoload' => true));
$temp->SwitchToTemp();
$temp->Load($id);
$temp->SetDBFieldsFromHash($product->FieldValues, Array('QtyInStock','QtyReserved','QtyBackOrdered','QtyOnOrder'));
$temp->Update();
}
function clearSelectedIDs(&$event)
{
parent::clearSelectedIDs($event);
$this->Application->SetVar('inventory_actions', $this->Application->RecallVar('inventory_actions'));
$this->Application->RemoveVar('inventory_actions');
}
function OnSave(&$event)
{
$res = parent::OnSave($event);
if ($event->status == erSUCCESS) {
$this->RunScheduledInventoryActions($event);
}
return $res;
}
function OnPreCreate(&$event)
{
parent::onPreCreate($event);
$object =& $event->GetObject();
$object->SetDBField('Type', $this->Application->GetVar( $event->getPrefixSpecial(true).'_new_type' ));
}
function OnPreSaveAndGo(&$event) {
$event->CallSubEvent('OnPreSave');
$this->LoadItem($event);
$object =& $event->getObject();
$from_type = $object->GetDBField('Type');
if ($event->status==erSUCCESS) {
$this->Application->SetVar($event->Prefix_Special.'_id', $this->Application->GetVar($event->getPrefixSpecial(true).'_GoId'));
$this->LoadItem($event);
$to_type = $object->GetDBField('Type');
if ($from_type != $to_type) {
$from_tabs = $this->GetTabs($from_type);
$from_tab_i = array_search($this->Application->GetVar('t'), $from_tabs);
$to_tabs = $this->GetTabs($to_type);
$to_tab = $this->Application->GetVar('t');
$found = false;
while ( !isset($to_tabs[$from_tab_i]) && $from_tab_i < count($to_tabs)) {
$from_tab_i++;
}
if ( !isset($to_tabs[$from_tab_i]) ) $from_tab_i = 0;
$to_tab = $to_tabs[$from_tab_i];
$event->redirect = $to_tab;
}
}
}
function GetTabs($type)
{
switch($type)
{
case 1:
return Array(
0 => 'in-commerce/products/products_edit',
1 => 'in-commerce/products/products_inventory',
2 => 'in-commerce/products/products_pricing',
3 => 'in-commerce/products/products_categories',
4 => 'in-commerce/products/products_images',
5 => 'in-commerce/products/products_reviews',
6 => 'in-commerce/products/products_custom',
);
case 2:
return Array(
0 => 'in-commerce/products/products_edit',
1 => 'in-commerce/products/products_access',
/*2 => 'in-commerce/products/products_access_pricing',*/
3 => 'in-commerce/products/products_categories',
4 => 'in-commerce/products/products_images',
5 => 'in-commerce/products/products_reviews',
6 => 'in-commerce/products/products_custom',
);
case 3:
return Array(
0 => 'in-commerce/products/products_edit',
2 => 'in-commerce/products/products_access_pricing',
3 => 'in-commerce/products/products_categories',
4 => 'in-commerce/products/products_images',
5 => 'in-commerce/products/products_reviews',
6 => 'in-commerce/products/products_custom',
);
case 4:
return Array(
0 => 'in-commerce/products/products_edit',
2 => 'in-commerce/products/products_files',
3 => 'in-commerce/products/products_categories',
4 => 'in-commerce/products/products_images',
5 => 'in-commerce/products/products_reviews',
6 => 'in-commerce/products/products_custom',
);
}
}
/**
* Return type clauses for list bulding on front
*
* @param kEvent $event
* @return Array
*/
function getTypeClauses(&$event)
{
$types=$event->getEventParam('types');
$except_types=$event->getEventParam('except');
$object =& $event->getObject();
$type_clauses = parent::getTypeClauses($event);
$type_clauses['featured']['include']='%1$s.Featured=1 AND '.TABLE_PREFIX.'CategoryItems.PrimaryCat = 1';
$type_clauses['featured']['except']='%1$s.Featured!=1 AND '.TABLE_PREFIX.'CategoryItems.PrimaryCat = 1';
$type_clauses['featured']['having_filter']=false;
$type_clauses['onsale']['include']='%1$s.OnSale=1 AND '.TABLE_PREFIX.'CategoryItems.PrimaryCat = 1';
$type_clauses['onsale']['except']='%1$s.OnSale!=1 AND '.TABLE_PREFIX.'CategoryItems.PrimaryCat = 1';
$type_clauses['onsale']['having_filter']=false;
// products from selected manufacturer: begin
$manufacturer = $event->getEventParam('manufacturer');
if ( !$manufacturer ) {
$manufacturer = $this->Application->GetVar('manuf_id');
}
if ( $manufacturer ) {
$type_clauses['manufacturer']['include'] = '%1$s.ManufacturerId='.$manufacturer.' AND PrimaryCat = 1';
$type_clauses['manufacturer']['except'] = '%1$s.ManufacturerId!='.$manufacturer.' AND PrimaryCat = 1';
$type_clauses['manufacturer']['having_filter'] = false;
}
// products from selected manufacturer: end
// recent products: begin
$recent = $this->Application->RecallVar('recent_products');
if ($recent) {
$recent = unserialize($recent);
$type_clauses['recent']['include'] = '%1$s.ProductId IN ('.implode(',', $recent).') AND PrimaryCat = 1';
$type_clauses['recent']['except'] = '%1$s.ProductId NOT IN ('.implode(',', $recent).') AND PrimaryCat = 1';
}
else {
$type_clauses['recent']['include']='0';
$type_clauses['recent']['except']='1';
}
$type_clauses['recent']['having_filter']=false;
// recent products: end
// products already in shopping cart: begin
if (strpos($types, 'in_cart') !== false || strpos($except_types, 'in_cart') !== false) {
$order_id = $this->Application->RecallVar('ord_id');
if ($order_id) {
$in_cart = $this->Conn->GetCol('SELECT ProductId FROM '.TABLE_PREFIX.'OrderItems WHERE OrderId = '.$order_id);
if ($in_cart) {
$type_clauses['in_cart']['include'] = '%1$s.ProductId IN ('.implode(',', $in_cart).') AND PrimaryCat = 1';
$type_clauses['in_cart']['except'] = '%1$s.ProductId NOT IN ('.implode(',', $in_cart).') AND PrimaryCat = 1';
}
else {
$type_clauses['in_cart']['include']='0';
$type_clauses['in_cart']['except']='1';
}
}
else {
$type_clauses['in_cart']['include']='0';
$type_clauses['in_cart']['except']='1';
}
$type_clauses['in_cart']['having_filter']=false;
}
// products already in shopping cart: end
// my downloadable products: begin
if (strpos($types, 'my_downloads') !== false || strpos($except_types, 'my_downloads') !== false)
{
$user_id = $this->Application->RecallVar('user_id');
$my_downloads = ($user_id > 0) ? $this->Conn->GetCol('SELECT ProductId FROM '.TABLE_PREFIX.'UserFileAccess WHERE PortalUserId = '.$user_id) : false;
if ($my_downloads)
{
$type_clauses['my_downloads']['include'] = '%1$s.ProductId IN ('.implode(',', $my_downloads).') AND PrimaryCat = 1';
$type_clauses['my_downloads']['except'] = '%1$s.ProductId NOT IN ('.implode(',', $my_downloads).') AND PrimaryCat = 1';
}
else
{
$type_clauses['my_downloads']['include'] = '0';
$type_clauses['my_downloads']['except'] = '1';
}
$type_clauses['my_downloads']['having_filter'] = false;
}
// my downloadable products: end
// my favorite products: begin
if (strpos($types, 'wish_list') !== false || strpos($except_types, 'wish_list') !== false) {
$sql = 'SELECT ResourceId FROM '.$this->Application->getUnitOption('fav', 'TableName').'
WHERE PortalUserId = '.(int)$this->Application->RecallVar('user_id');
$wishlist_ids = $this->Conn->GetCol($sql);
if ($wishlist_ids) {
$type_clauses['wish_list']['include'] = '%1$s.ResourceId IN ('.implode(',', $wishlist_ids).') AND PrimaryCat = 1';
$type_clauses['wish_list']['except'] = '%1$s.ResourceId NOT IN ('.implode(',', $wishlist_ids).') AND PrimaryCat = 1';
}
else {
$type_clauses['wish_list']['include']='0';
$type_clauses['wish_list']['except']='1';
}
$type_clauses['wish_list']['having_filter']=false;
}
// my favorite products: end
// products from package: begin
if (strpos($types, 'content') !== false) {
$object->removeFilter('category_filter');
$object->AddGroupByField('%1$s.ProductId');
$item_type = $this->Application->getUnitOption('p', 'ItemType');
$object_product = &$this->Application->recallObject($event->Prefix);
$content_ids_array = $object_product->GetPackageContentIds();
if (sizeof($content_ids_array)==0) {
$content_ids_array = array('-1');
}
if (sizeof($content_ids_array)>0) {
$type_clauses['content']['include'] = '%1$s.ProductId IN ('.implode(',', $content_ids_array).')';
}
else {
$type_clauses['content']['include']='0';
}
$type_clauses['related']['having_filter']=false;
}
// products from package: end
$object->addFilter('not_virtual', '%1$s.Virtual = 0');
if (!$this->Application->isAdminUser) {
$object->addFilter('expire_filter', '%1$s.Expire IS NULL OR %1$s.Expire > UNIX_TIMESTAMP()');
}
return $type_clauses;
}
function OnClearRecent(&$event)
{
$this->Application->RemoveVar('recent_products');
}
/**
* Occurs, when user rates a product
*
* @param kEvent $event
*/
function OnRateProduct(&$event)
{
$event->redirect_params = Array('pass' => 'all,p');
$event->redirect = $this->Application->GetVar('success_template');
$object =& $event->getObject();
$user_id = $this->Application->RecallVar('user_id');
$sql = ' SELECT * FROM '.TABLE_PREFIX.'SpamControl
WHERE ItemResourceId='.$object->GetDBField('ResourceId').'
AND IPaddress="'.$_SERVER['REMOTE_ADDR'].'"
AND PortalUserId='.$user_id.'
AND DataType="Rating"';
$res = $this->Conn->GetRow($sql);
if( $res && $res['Expire'] < adodb_mktime() )
{
$sql = ' DELETE FROM '.TABLE_PREFIX.'SpamControl
WHERE ItemResourceId='.$object->GetDBField('ResourceId').'
AND IPaddress="'.$_SERVER['REMOTE_ADDR'].'"
AND PortalUserId='.$user_id.'
AND DataType="Rating"';
$this->Conn->Query($sql);
unset($res);
}
$new_rating = $this->Application->GetVar('rating');
if($new_rating !== false && !$res)
{
$rating = $object->GetDBField('CachedRating');
$votes = $object->GetDBField('CachedVotesQty');
$new_votes = $votes + 1;
$rating = (($rating * $votes) + $new_rating) / $new_votes;
$object->SetDBField('CachedRating', $rating);
$object->SetDBField('CachedVotesQty', $new_votes);
$object->Update();
$expire = adodb_mktime() + $this->Application->ConfigValue('product_ReviewDelay_Value') * $this->Application->ConfigValue('product_ReviewDelay_Interval');
$sql = ' INSERT INTO '.TABLE_PREFIX.'SpamControl
(ItemResourceId, IPaddress, PortalUserId, DataType, Expire)
VALUES ('.$object->GetDBField('ResourceId').',
"'.$_SERVER['REMOTE_ADDR'].'",
'.$user_id.',
"Rating",
'.$expire.')';
$this->Conn->Query($sql);
}
else
{
$event->status == erFAIL;
$event->redirect=false;
$object->FieldErrors['CachedRating']['pseudo'] = 'too_frequent';
$object->ErrorMsgs['too_frequent'] = $this->Application->Phrase('lu_ferror_rate_duplicate');
}
}
function OnCancelAction(&$event)
{
$event->redirect_params = Array('pass' => 'all,p');
$event->redirect = $this->Application->GetVar('cancel_template');
}
function OnRecommendProduct(&$event)
{
// used for error reporting only -> rewrite code + theme (by Alex)
$object =& $this->Application->recallObject('u', null, Array('skip_autoload' => true)); // TODO: change theme too
$friend_email = $this->Application->GetVar('friend_email');
$friend_name = $this->Application->GetVar('friend_name');
$my_email = $this->Application->GetVar('your_email');
$my_name = $this->Application->GetVar('your_name');
$my_message = $this->Application->GetVar('your_message');
$send_params = array();
$send_params['to_email']=$friend_email;
$send_params['to_name']=$friend_name;
$send_params['from_email']=$my_email;
$send_params['from_name']=$my_name;
$send_params['message']=$my_message;
if (preg_match('/'.REGEX_EMAIL_USER.'@'.REGEX_EMAIL_DOMAIN.'/', $friend_email)) {
$user_id = $this->Application->RecallVar('user_id');
$email_event = &$this->Application->EmailEventUser('PRODUCT.SUGGEST', $user_id, $send_params);
$email_event = &$this->Application->EmailEventAdmin('PRODUCT.SUGGEST');
if ($email_event->status == erSUCCESS){
$event->redirect_params = array('opener' => 's', 'pass' => 'all');
$event->redirect = $this->Application->GetVar('template_success');
}
else {
// $event->redirect_params = array('opener' => 's', 'pass' => 'all');
// $event->redirect = $this->Application->GetVar('template_fail');
$object->ErrorMsgs['send_error'] = $this->Application->Phrase('lu_email_send_error');
$object->FieldErrors['Email']['pseudo'] = 'send_error';
$event->status = erFAIL;
}
}
else {
$object->ErrorMsgs['invalid_email'] = $this->Application->Phrase('lu_InvalidEmail');
$object->FieldErrors['Email']['pseudo'] = 'invalid_email';
$event->status = erFAIL;
}
}
/**
* Creates/updates virtual product based on listing type data
*
* @param kEvent $event
*/
function OnSaveVirtualProduct(&$event)
{
$object =& $event->getObject( Array('skip_autoload' => true) );
$listing_type =& $this->Application->recallObject('lst', null, Array('skip_autoload' => true));
$listing_type->Load($event->MasterEvent->getEventParam('id'));
$product_id = $listing_type->GetDBField('VirtualProductId');
if ($product_id) {
$object->Load($product_id);
}
if (!$listing_type->GetDBField('EnableBuying')) {
if ($product_id) {
// delete virtual product here
$temp_handler =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
$temp_handler->DeleteItems($event->Prefix, $event->Special, Array($product_id));
$listing_type->SetDBField('VirtualProductId', 0);
$listing_type->Update();
}
return true;
}
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
$object->SetDBField($ml_formatter->LangFieldName('Name'), $listing_type->GetDBField('ShopCartName') );
$object->SetDBField($ml_formatter->LangFieldName('Description'), $listing_type->GetDBField('Description'));
$object->SetDBField('SKU', 'ENHANCE_LINK_'.abs( crc32( $listing_type->GetDBField('Name') ) ) );
if ($product_id) {
$object->Update();
}
else {
$object->SetDBField('Type', 2);
$object->SetDBField('Status', 1);
$object->SetDBField('HotItem', 0);
$object->SetDBField('PopItem', 0);
$object->SetDBField('NewItem', 0);
$object->SetDBField('Virtual', 1);
// $processing_data = Array('ApproveEvent' => 'ls:EnhanceLinkAfterOrderApprove', 'ExpireEvent' => 'ls:ExpireLink');
$processing_data = Array( 'ApproveEvent' => 'ls:EnhanceLinkAfterOrderApprove',
'DenyEvent' => 'ls:EnhanceLinkAfterOrderDeny',
'CompleteOrderEvent' => 'ls:EnhancedLinkOnCompleteOrder',
'ExpireEvent' => 'ls:ExpireLink',
'HasNewProcessing' => 1);
$object->SetDBField('ProcessingData', serialize($processing_data));
$object->Create();
$listing_type->SetDBField('VirtualProductId', $object->GetID());
$listing_type->Update();
}
$additiona_fields = Array( 'AccessDuration' => $listing_type->GetDBField('Duration'),
'AccessUnit' => $listing_type->GetDBField('DurationType'),
);
$this->setPrimaryPrice($object->GetID(), (double)$listing_type->GetDBField('Price'), $additiona_fields);
}
/**
* [HOOK] Deletes virtual product when listing type is deleted
*
* @param kEvent $event
*/
function OnDeleteListingType(&$event)
{
$listing_type = $event->MasterEvent->getObject();
$product_id = $listing_type->GetDBField('VirtualProductId');
if ($product_id) {
$temp_handler =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
$temp_handler->DeleteItems($event->Prefix, $event->Special, Array($product_id));
}
}
/**
* Extends user membership in group when his order is approved
*
* @param kEvent $event
*/
function OnSubscriptionApprove(&$event)
{
$field_values = $event->getEventParam('field_values');
$item_data = unserialize($field_values['ItemData']);
if (!getArrayValue($item_data,'PortalGroupId')) {
// is subscription product, but no group defined in it's properties
trigger_error('Invalid product <b>'.$field_values['ProductName'].'</b> (id: '.$field_values['ProductId'].')', E_USER_WARNING);
return false;
}
$order_table = $this->Application->getUnitOption('ord', 'TableName');
$order_idfield = $this->Application->getUnitOption('ord', 'IDField');
$sql = 'SELECT PortalUserId FROM %s WHERE %s = %s';
$user_id = $this->Conn->GetOne( sprintf($sql, $order_table, $order_idfield, $field_values['OrderId']) );
$group_id = $item_data['PortalGroupId'];
$duration = $item_data['Duration'];
$sql = 'SELECT * FROM '.TABLE_PREFIX.'UserGroup WHERE PortalUserId = %s';
$user_groups = $this->Conn->Query( sprintf($sql, $user_id), 'GroupId' );
$sql = 'REPLACE INTO '.TABLE_PREFIX.'UserGroup (PortalUserId,GroupId,MembershipExpires,PrimaryGroup) VALUES (%s,%s,%s,%s)';
if( !isset($user_groups[$group_id]) )
{
$primary_group = count($user_groups) == 0 ? 1 : 0;
$expire = adodb_mktime() + $duration;
}
else {
$primary_group = $user_groups[$group_id]['PrimaryGroup'];
$expire = $user_groups[$group_id]['MembershipExpires'];
$expire = $expire < adodb_mktime() ? adodb_mktime() + $duration : $expire + $duration;
}
/*
// Customization healtheconomics.org
if ($item_data['DurationType'] == 2) {
$expire = $item_data['AccessExpiration'];
}
// Customization healtheconomics.org --
*/
$this->Conn->Query( sprintf($sql, $user_id, $group_id, $expire, $primary_group) );
$sub_order =& $this->Application->recallObject('ord.-sub'.$event->getEventParam('next_sub_number'), 'ord');
$sub_order->SetDBField('IsRecurringBilling', getArrayValue($item_data, 'IsRecurringBilling') ? 1 : 0);
$sub_order->SetDBField('GroupId', $group_id);
$sub_order->SetDBField('NextCharge_date', $expire);
$sub_order->SetDBField('NextCharge_time', $expire);
}
function OnDownloadableApprove(&$event)
{
$field_values = $event->getEventParam('field_values');
$product_id = $field_values['ProductId'];
$sql = 'SELECT PortalUserId FROM '.$this->Application->getUnitOption('ord', 'TableName').'
WHERE OrderId = '.$field_values['OrderId'];
$user_id = $this->Conn->GetOne($sql);
$sql = 'INSERT INTO '.TABLE_PREFIX.'UserFileAccess VALUES("", '.$product_id.', '.$user_id.')';
$this->Conn->Query($sql);
}
function OnPackageApprove(&$event){
$field_values = $event->getEventParam('field_values');
$item_data = unserialize($field_values['ItemData']);
$package_content_ids = $item_data['PackageContent'];
$object_item = &$this->Application->recallObject('p.packageitem', null, array('skip_autoload'=>true));
foreach ($package_content_ids as $package_item_id) {
$object_field_values = array();
// query processing data from product and run approve event
$sql = 'SELECT ProcessingData FROM '.TABLE_PREFIX.'Products WHERE ProductId = '.$package_item_id;
$processing_data = $this->Conn->GetOne($sql);
if($processing_data)
{
$processing_data = unserialize($processing_data);
$approve_event = new kEvent($processing_data['ApproveEvent']);
//$order_item_fields = $this->Conn->GetRow('SELECT * FROM '.TABLE_PREFIX.'OrderItems WHERE OrderItemId = '.$grouping_data[1]);
$object_item->Load($package_item_id);
$object_field_values['OrderId'] = $field_values['OrderId'];
$object_field_values['ProductId'] = $package_item_id;
$object_field_values['ItemData'] = serialize($item_data['PackageItemsItemData'][$package_item_id]);
$approve_event->setEventParam('field_values', $object_field_values);
$this->Application->HandleEvent($approve_event);
}
}
}
/**
* Checks, that all required product options are filled in before product is saved
*
* @param kEvent $event
*/
function OnPreSave(&$event)
{
$this->CheckRequiredOptions($event);
parent::OnPreSave($event);
}
/**
* Set new price to ProductsPricing
*
* @param kEvent $event
*/
function OnAfterItemCreate(&$event)
{
parent::OnAfterItemCreate($event);
$this->_updateProductPrice($event);
}
/**
* Set new price to ProductsPricing
*
* @param kEvent $event
*/
function OnAfterItemUpdate(&$event)
{
parent::OnAfterItemUpdate($event);
$this->_updateProductPrice($event);
}
/**
* Updates product's primary price based on Price virtual field value
*
* @param kEvent $event
*/
function _updateProductPrice(&$event)
{
$object =& $event->getObject();
/* @var $object kDBItem */
$price = $object->GetDBField('Price');
// always create primary pricing, to show on Pricing tab (in admin) for tangible products
$force_create = ($object->GetDBField('Type') == PRODUCT_TYPE_TANGIBLE) && is_null($price);
if ($force_create || ($price != $object->GetOriginalField('Price'))) {
// new product OR price was changed in virtual field
$this->setPrimaryPrice($object->GetID(), (float)$price);
}
}
function CheckRequiredOptions(&$event)
{
$object =& $event->getObject();
if ($object->GetDBField('ProductId') == '') return ; // if product does not have ID - it's not yet created
$opt_object =& $this->Application->recallObject('po', null, Array('skip_autoload' => true) );
$has_required = $this->Conn->GetOne('SELECT COUNT(*) FROM '.$opt_object->TableName.' WHERE Required = 1 AND ProductId = '.$object->GetDBField('ProductId'));
//we need to imitate data sumbit, as parent' PreSave sets object values from $items_info
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
$items_info[$object->GetDBField('ProductId')]['HasRequiredOptions'] = $has_required ? '1' : '0';
$this->Application->SetVar($event->getPrefixSpecial(true), $items_info);
$object->SetDBField('HasRequiredOptions', $has_required ? 1 : 0);
}
/**
* Sets required price in primary price backed, if it's missing, then create it
*
* @param int $product_id
* @param double $price
* @param Array $additional_fields
* @return bool
*/
function setPrimaryPrice($product_id, $price, $additional_fields = Array())
{
$pr_object =& $this->Application->recallObject('pr.-item', null, Array('skip_autoload' => true) );
/* @var $pr_object kDBItem */
$pr_object->Load( Array('ProductId' => $product_id, 'IsPrimary' => 1) );
$sql = 'SELECT COUNT(*) FROM '.$pr_object->TableName.' WHERE ProductId = '.$product_id;
$has_pricings = $this->Conn->GetOne($sql);
if ($additional_fields) {
$pr_object->SetDBFieldsFromHash($additional_fields);
}
if( ($price === false) && $has_pricings ) return false;
if( $pr_object->isLoaded() )
{
$pr_object->SetField('Price', $price);
return $pr_object->Update();
}
else
{
$group_id = $this->Application->ConfigValue('User_LoggedInGroup');
$field_values = Array('ProductId' => $product_id, 'IsPrimary' => 1, 'MinQty' => 1, 'MaxQty' => -1, 'GroupId'=>$group_id);
$pr_object->SetDBFieldsFromHash($field_values);
$pr_object->SetField('Price', $price);
return $pr_object->Create();
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnAfterItemDelete(&$event)
{
$product_id = $event->getEventParam('id');
if(!$product_id)
{
return;
}
$sql = 'DELETE FROM '.TABLE_PREFIX.'UserFileAccess
WHERE ProductId = '.$product_id;
$this->Conn->Query($sql);
}
/**
* Load price from temp table if product mode is temp table
*
* @param kEvent $event
*/
function OnAfterItemLoad(&$event)
{
parent::OnAfterItemLoad($event);
$object =& $event->getObject();
/* @var $object kDBItem */
$a_pricing = $object->getPrimaryPricing();
if (!$a_pricing) {
// pricing doesn't exist for new products
$price = $cost = null;
}
else {
$price = (float)$a_pricing['Price'];
$cost = (float)$a_pricing['Cost'];
}
// set original fields to use them in OnAfterItemCreate/OnAfterItemUpdate later
$object->SetDBField('Price', $price);
$object->SetOriginalField('Price', $price);
$object->SetDBField('Cost', $cost);
$object->SetOriginalField('Cost', $cost);
}
/**
* Allows to add products to package besides all that parent method does
*
* @param kEvent $event
*/
function OnProcessSelected(&$event)
{
$dst_field = $this->Application->RecallVar('dst_field');
if ($dst_field == 'PackageContent') {
$this->OnAddToPackage($event);
}
elseif ($dst_field == 'AssignedCoupon') {
$coupon_id = $this->Application->GetVar('selected_ids');
$object =& $event->getObject();
$object->SetDBField('AssignedCoupon', $coupon_id);
$this->RemoveRequiredFields($object);
$object->Update();
}
else {
parent::OnProcessSelected($event);
}
$this->finalizePopup($event);
}
/**
* Called when some products are selected in products selector for this prefix
*
* @param kEvent $event
*/
function OnAddToPackage(&$event)
{
$selected_ids = $this->Application->GetVar('selected_ids');
// update current package content with selected products
$object =& $event->getObject();
/* @var $object ProductsItem */
$product_ids = $selected_ids['p'] ? explode(',', $selected_ids['p']) : Array();
if ($product_ids) {
$current_ids = $object->GetPackageContentIds();
$current_ids = array_unique(array_merge($current_ids, $product_ids));
// remove package product from selected list
$this_product = array_search($object->GetID(), $current_ids);
if ($this_product !== false) {
unset($current_ids[$this_product]);
}
$dst_field = $this->Application->RecallVar('dst_field');
$object->SetDBField($dst_field, '|'.implode('|', $current_ids).'|');
$object->Update();
$this->ProcessPackageItems($event);
}
$this->finalizePopup($event);
}
function ProcessPackageItems(&$event)
{
//$this->Application->SetVar('p_mode', 't');
$object =& $event->getObject();
/* @var $object ProductsItem */
$content_ids = $object->GetPackageContentIds();
if (sizeof($content_ids) > 0) {
$total_weight = $this->Conn->GetOne('SELECT SUM(Weight) FROM '.TABLE_PREFIX.'Products WHERE ProductId IN ('.implode(', ', $content_ids).') AND Type=1');
if (!$total_weight) $total_weight = 0;
$this->Conn->Query('UPDATE '.$object->TableName.' SET Weight='.$total_weight.' WHERE ProductId='.$object->GetID());
}
/*
$this->Application->SetVar('p_mode', false);
$list = &$this->Application->recallObject('p.content', 'p_List', array('types'=>'content'));
$this->Application->SetVar('p_mode', 't');
$list->Query();
$total_weight_a = 0;
$total_weight_b = 0;
$list->GoFirst();
while (!$list->EOL())
{
if ($list->GetDBField('Type')==1){
$total_weight_a += $list->GetField('Weight_a');
$total_weight_b += $list->GetField('Weight_b');
}
$list->GoNext();
}
$object->SetField('Weight_a', $total_weight_a);
$object->SetField('Weight_b', $total_weight_b);
*/
//$object->Update();
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnSaveItems(&$event)
{
//$event->CallSubEvent('OnUpdate');
$event->redirect = false;
//$event->redirect_params = Array('opener'=>'s','pass'=>'all,p');
}
/**
* Removes product from package
*
* @param kEvent $event
*/
function OnRemovePackageItem(&$event) {
$this->Application->SetVar('p_mode', 't');
$object =& $event->getObject();
$items_info = $this->Application->GetVar('p_content');
if($items_info)
{
$product_ids = array_keys($items_info);
$current_ids = $object->GetPackageContentIds();
$current_ids_flip = array_flip($current_ids);
foreach($product_ids as $key=>$val){
unset($current_ids_flip[$val]);
}
$current_ids = array_keys($current_ids_flip);
$current_ids_str = '|'.implode('|', array_unique($current_ids)).'|';
$object->SetDBField('PackageContent', $current_ids_str);
}
$object->Update();
$this->ProcessPackageItems($event);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnBeforeItemDelete(&$event){
$object = &$event->getObject();
$product_includes_in = $this->Conn->GetOne('SELECT COUNT(*) FROM '.TABLE_PREFIX.'Products WHERE PackageContent LIKE "%|'.$object->GetID().'%"');
if ($product_includes_in > 0){
$event->status=erFAIL;
}
}
/**
* Returns specific to each item type columns only
*
* @param kEvent $event
* @return Array
*/
function getCustomExportColumns(&$event)
{
$columns = parent::getCustomExportColumns($event);
$new_columns = Array(
'__VIRTUAL__Price' => 'Price',
'__VIRTUAL__Cost' => 'Cost',
);
return array_merge_recursive2($columns, $new_columns);
}
/**
* Sets non standart virtual fields (e.g. to other tables)
*
* @param kEvent $event
*/
function setCustomExportColumns(&$event)
{
parent::setCustomExportColumns($event);
$object =& $event->getObject();
$this->setPrimaryPrice($object->GetID(), (double)$object->GetDBField('Price'), Array('Cost' => (double)$object->GetDBField('Cost')) );
}
function OnPreSaveAndOpenPopup(&$event)
{
$object =& $event->getObject();
$this->RemoveRequiredFields($object);
$event->CallSubEvent('OnPreSave');
$event->redirect = $this->Application->GetVar('t');
// pass ID too, in case if product is created by OnPreSave call to ensure proper editing
$event->redirect_params = Array(
'pass' => 'all',
$event->getPrefixSpecial(true).'_id' => $object->GetID(),
);
}
function getPassedID(&$event)
{
$event->setEventParam('raise_warnings', 0);
$passed = parent::getPassedID($event);
if ($passed) {
return $passed;
}
if ($this->Application->isAdminUser) {
// we may get product id out of OrderItem, if it exists
$ord_item =& $this->Application->recallObject('orditems', null, Array ('raise_warnings' => 0));
if ($ord_item->GetDBField('ProductId')) {
$passed = $ord_item->GetDBField('ProductId');
}
}
return $passed;
}
function OnAfterConfigRead(&$event)
{
parent::OnAfterConfigRead($event);
if (!$this->Application->LoggedIn()) {
return ;
}
$user_id = $this->Application->RecallVar('user_id');
$calculated_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields');
$sql = 'SELECT GroupId
FROM ' . TABLE_PREFIX . 'UserGroup
WHERE PrimaryGroup = 1 AND PortalUserId = ' . $user_id;
$primary_group = $this->Conn->GetOne($sql);
if (!$primary_group) {
return;
}
$sub_select = ' SELECT pp.Price
FROM ' . TABLE_PREFIX . 'ProductsPricing AS pp
WHERE pp.ProductId = %1$s.ProductId AND GroupId = ' . $primary_group . '
ORDER BY MinQty
LIMIT 0,1';
$calculated_fields['']['Price'] = 'IFNULL((' . $sub_select . '), ' . $calculated_fields['']['Price'] . ')';
$this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calculated_fields);
}
/**
* Starts product editing, remove any pending inventory actions
*
* @param kEvent $event
*/
function OnEdit(&$event)
{
$this->Application->RemoveVar('inventory_actions');
parent::OnEdit($event);
}
/**
* Adds "Shop Cart" tab on paid listing type editing tab
*
* @param kEvent $event
*/
function OnModifyPaidListingConfig(&$event)
{
$edit_tab_presets = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'EditTabPresets');
$edit_tab_presets['Default']['shopping_cart'] = Array ('title' => 'la_tab_ShopCartEntry', 't' => 'in-commerce/paid_listings/paid_listing_type_shopcart', 'priority' => 2);
$this->Application->setUnitOption($event->MasterEvent->Prefix, 'EditTabPresets', $edit_tab_presets);
}
/**
* [HOOK] Allows to add cloned subitem to given prefix
*
* @param kEvent $event
*/
function OnCloneSubItem(&$event)
{
parent::OnCloneSubItem($event);
if ($event->MasterEvent->Prefix == 'rev') {
$clones = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'Clones');
$subitem_prefix = $event->Prefix . '-' . $event->MasterEvent->Prefix;
$clones[$subitem_prefix]['ConfigMapping'] = Array (
'PerPage' => 'Comm_Perpage_Reviews',
'ReviewDelayInterval' => 'product_ReviewDelay_Value',
'ReviewDelayValue' => 'product_ReviewDelay_Interval',
);
$this->Application->setUnitOption($event->MasterEvent->Prefix, 'Clones', $clones);
}
}
}
\ No newline at end of file
Index: branches/5.2.x/units/products/products_item.php
===================================================================
--- branches/5.2.x/units/products/products_item.php (revision 14088)
+++ branches/5.2.x/units/products/products_item.php (revision 14089)
@@ -1,84 +1,85 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class ProductsItem extends kCatDBItem
{
function GetPackageContentIds()
{
$ids_string = trim($this->GetDBField('PackageContent'), '|');
if ($ids_string) {
$ids_array = explode('|', $ids_string);
return $ids_array;
}
else {
return array();
}
}
/**
* Returns field values from primary pricing for product
*
* @return array
*/
function getPrimaryPricing()
{
// product + pricing based
$cache_key = 'product_primary_pricing[%PIDSerial:' . $this->GetID() . '%][%PrIDSerial:ProductId:' . $this->GetID() . '%]';
if (!$this->Application->isAdmin && $this->Application->LoggedIn()) {
// also group based
$primary_group = (int)$this->Application->Session->GetField('GroupId');
$cache_key .= ':group=' . $primary_group;
}
- $price_info = $this->Application->getCache($cache_key);
+ // don't cache, while in temp table
+ $price_info = $this->IsTempTable() ? false : $this->Application->getCache($cache_key);
if ($price_info === false) {
if (!$this->Application->isAdmin && $this->Application->LoggedIn()) {
// logged in user on front-end
$this->Conn->nextQueryCachable = true;
$sql = 'SELECT Price, Cost
FROM ' . TABLE_PREFIX . 'ProductsPricing
WHERE (ProductId = ' . $this->GetID() . ') AND (GroupId = ' . $primary_group . ')
ORDER BY MinQty';
$price_info = $this->Conn->GetRow($sql);
if ($price_info !== false) {
$this->Application->setCache($cache_key, $price_info);
return $price_info;
}
}
// not logged-in user on front-end or in administrative console
$pr_table = $this->Application->getUnitOption('pr', 'TableName');
if ($this->IsTempTable()) {
$pr_table = $this->Application->GetTempName($pr_table, 'prefix:' . $this->Prefix);
}
$this->Conn->nextQueryCachable = true;
$sql = 'SELECT Price, Cost
FROM ' . $pr_table . '
WHERE (' . $this->IDField . ' = ' . $this->GetID() . ') AND (IsPrimary = 1)';
$price_info = $this->Conn->GetRow($sql);
$this->Application->setCache($cache_key, $price_info);
}
return $price_info;
}
}
\ No newline at end of file
Index: branches/5.2.x/units/products/products_config.php
===================================================================
--- branches/5.2.x/units/products/products_config.php (revision 14088)
+++ branches/5.2.x/units/products/products_config.php (revision 14089)
@@ -1,684 +1,675 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'p',
'ItemClass' => Array ('class' => 'ProductsItem', 'file' => 'products_item.php', 'require_classes' => Array ('kCatDBItem'), 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kCatDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'ProductsEventHandler', 'file' => 'products_event_handler.php', 'require_classes' => Array ('kCatDBEventHandler'), 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'ProductsTagProcessor', 'file' => 'products_tag_processor.php', 'require_classes' => Array ('kCatDBTagProcessor'), 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'CatalogItem' => true,
'AdminTemplatePath' => 'products',
'AdminTemplatePrefix' => 'products_',
'SearchConfigPostfix' => 'products',
'ConfigPriority' => 0,
'RewritePriority' => 104,
'RewriteListener' => 'ModRewriteHelper:CategoryItemRewriteListener',
'Hooks' => Array (
// for subscription products: access group is saved before changing pricings
Array (
'Mode' => hAFTER,
'Conditional' => true,
'HookToPrefix' => 'pr',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnNew', 'OnAfterItemLoad'),
'DoPrefix' => '',
'DoSpecial' => '*',
'DoEvent' => 'OnPreSave',
),
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'lst',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'OnBeforeCopyToLive' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnSaveVirtualProduct',
),
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'lst',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterItemDelete'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnDeleteListingType',
),
Array (
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'lst',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterConfigRead'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnModifyPaidListingConfig',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'file',
'HookToSpecial' => '',
'HookToEvent' => Array ( 'OnNew', 'OnEdit' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnPreSave',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => '',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterConfigRead'),
'DoPrefix' => 'cdata',
'DoSpecial' => '*',
'DoEvent' => 'OnDefineCustomFields',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'rev',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterConfigRead'),
'DoPrefix' => '',
'DoSpecial' => '*',
'DoEvent' => 'OnCloneSubItem',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'fav',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterConfigRead'),
'DoPrefix' => '',
'DoSpecial' => '*',
'DoEvent' => 'OnCloneSubItem',
),
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'ci',
'HookToSpecial' => '*',
'HookToEvent' => Array ('OnAfterConfigRead'),
'DoPrefix' => '',
'DoSpecial' => '*',
'DoEvent' => 'OnCloneSubItem',
),
),
'IDField' => 'ProductId',
'StatusField' => Array ('Status'), // field, that is affected by Approve/Decline events
'TitleField' => 'Name', // field, used in bluebar when editing existing item
'ItemType' => 11, // this is used when relation to product is added from in-portal and via-versa
'ViewMenuPhrase' => 'la_text_Products',
'CatalogTabIcon' => 'in-commerce:icon16_products.png',
'ItemPropertyMappings' => Array (
'NewDays' => 'Product_NewDays', // number of days item to be NEW
'MinPopVotes' => 'Product_MinPopVotes', // minimum number of votes for an item to be POP
'MinPopRating' => 'Product_MinPopRating', // minimum rating for an item to be POP
'MaxHotNumber' => 'Product_MaxHotNumber', // maximum number of HOT (top seller) items
'HotLimit' => 'Product_HotLimit', // variable name in inp_Cache table
'ClickField' => 'Hits', // item click count is stored here (in item table)
),
'TitlePhrase' => 'la_text_Product',
'TitlePresets' => Array (
'default' => Array ( 'new_status_labels' => Array ('p' => '!la_title_Adding_Product!'),
'edit_status_labels' => Array ('p' => '!la_title_Editing_Product!'),
'new_titlefield' => Array ('p' => '!la_title_NewProduct!'),
),
'product_list' =>Array ( 'prefixes' => Array ('c_List', 'p_List'),
'tag_params' => Array ('c' => Array ('per_page' =>-1)),
'format' => "!la_title_Categories! (#c_recordcount#) - !la_title_Products! (#p_recordcount#)",
),
'products_edit' =>Array ( 'prefixes' => Array ('p'),
'new_titlefield' => Array ('p' => '!la_title_NewProduct!'),
'format' => "#p_status# '#p_titlefield#' - !la_title_General!",
),
'inventory' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# - '#p_titlefield#' - !la_title_Product_Inventory!"),
'pricing' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_Pricing!"),
'access_pricing' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_AccessPricing!"),
'access' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_Access!"),
'files' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_Files!"),
'options' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_Options!"),
'categories' => Array ('prefixes' => Array ('p', 'p-ci_List'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Categories!"),
'relations' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Relations!"),
'content' => Array ('prefixes' => Array ('p', 'p.content_List'), 'tag_params' => Array ('p.content' => Array ('types' => 'content', 'live_table' =>true)), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_PackageContent!"),
'images' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Images!"),
'reviews' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Reviews!"),
'products_custom' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Custom!"),
'images_edit' => Array ( 'prefixes' => Array ('p', 'img'),
'new_status_labels' => Array ('img' => '!la_title_Adding_Image!'),
'edit_status_labels' => Array ('img' => '!la_title_Editing_Image!'),
'new_titlefield' => Array ('img' => '!la_title_New_Image!'),
'format' => "#p_status# '#p_titlefield#' - #img_status# '#img_titlefield#'",
),
'pricing_edit' => Array ( 'prefixes' => Array ('p', 'pr'),
'new_status_labels' => Array ('pr' =>"!la_title_Adding_PriceBracket! '!la_title_New_PriceBracket!'"),
'edit_status_labels' => Array ('pr' => '!la_title_Editing_PriceBracket!'),
'format' => "#p_status# '#p_titlefield#' - #pr_status#",
),
'options_edit' => Array ( 'prefixes' => Array ('p', 'po'),
'new_status_labels' => Array ('po' =>"!la_title_Adding_Option!"),
'edit_status_labels' => Array ('po' => '!la_title_Editing_Option!'),
'new_titlefield' => Array ('po' => '!la_title_New_Option!'),
'format' => "#p_status# '#p_titlefield#' - #po_status# '#po_titlefield#'",
),
'options_combinations' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_ManagingOptionCombinations!"),
'shipping_options' => Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_ManagingShippingOptions!"),
'file_edit' => Array ( 'prefixes' => Array ('p', 'file'),
'new_status_labels' => Array ('file' =>"!la_title_Adding_File!"),
'edit_status_labels' => Array ('file' => '!la_title_Editing_File!'),
'new_titlefield' => Array ('file' => '!la_title_New_File!'),
'format' => "#p_status# '#p_titlefield#' - #file_status# '#file_titlefield#'",
),
'relations_edit' => Array ( 'prefixes' => Array ('p', 'rel'),
'new_status_labels' => Array ('rel' =>"!la_title_Adding_Relationship! '!la_title_New_Relationship!'"),
'edit_status_labels' => Array ('rel' => '!la_title_Editing_Relationship!'),
'format' => "#p_status# '#p_titlefield#' - #rel_status#",
),
'reviews_edit' => Array ( 'prefixes' => Array ('p', 'rev'),
'new_status_labels' => Array ('rev' =>"!la_title_Adding_Review! '!la_title_New_Review!'"),
'edit_status_labels' => Array ('rev' => '!la_title_Editing_Review!'),
'format' => "#p_status# '#p_titlefield#' - #rev_status#",
),
'products_export' => Array ('format' => '!la_title_ProductsExport!'),
'products_import' => Array ('format' => '!la_title_ImportProducts!'),
'tree_in-commerce' => Array ('format' => '!la_Text_Version! '.$this->Application->findModule('Name', 'In-Commerce', 'Version')),
),
'EditTabPresets' => Array (
'Default' => Array (
'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/products/products_edit', 'priority' => 1),
'inventory' => Array ('title' => 'la_tab_Inventory', 't' => 'in-commerce/products/products_inventory', 'priority' => 2),
'access_and_pricing' => Array ('title' => 'la_tab_AccessAndPricing', 't' => 'in-commerce/products/products_access', 'priority' => 3),
'pricing' => Array ('title' => 'la_tab_Pricing', 't' => 'in-commerce/products/products_pricing', 'priority' => 4),
// 'pricing2' => Array ('title' => 'la_tab_Pricing', 't' => 'in-commerce/products/products_access_pricing', 'priority' => 5),
'files_and_pricing' => Array ('title' => 'la_tab_FilesAndPricing', 't' => 'in-commerce/products/products_files', 'priority' => 6),
'options' => Array ('title' => 'la_tab_Options', 't' => 'in-commerce/products/products_options', 'priority' => 7),
'categories' => Array ('title' => 'la_tab_Categories', 't' => 'in-commerce/products/products_categories', 'priority' => 8),
'relations' => Array ('title' => 'la_tab_Relations', 't' => 'in-commerce/products/products_relations', 'priority' => 9),
'package_content' => Array ('title' => 'la_tab_PackageContent', 't' => 'in-commerce/products/products_packagecontent', 'priority' => 10),
'images' => Array ('title' => 'la_tab_Images', 't' => 'in-commerce/products/products_images', 'priority' => 11),
'reviews' => Array ('title' => 'la_tab_Reviews', 't' => 'in-commerce/products/products_reviews', 'priority' => 12),
'custom' => Array ('title' => 'la_tab_Custom', 't' => 'in-commerce/products/products_custom', 'priority' => 13),
),
),
'PermItemPrefix' => 'PRODUCT',
'PermTabText' => 'In-Commerce',
'PermSection' => Array ('main' => 'CATEGORY:in-commerce:products_list', 'search' => 'in-commerce:search', 'custom' => 'in-commerce:configuration_custom'),
'Sections' => Array (
'in-commerce' => Array (
'parent' => 'in-portal:root',
'icon' => 'ecommerce',
'label' => 'la_title_In-Commerce',
'url' => Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view'),
'priority' => 2.1,
'container' => true,
'type' => stTREE,
),
'in-commerce:products' => Array (
'parent' => 'in-portal:site',
'icon' => 'products',
'label' => 'la_tab_Products',
'url' => Array ('t' => 'catalog/advanced_view', 'anchor' => 'tab-p.showall', 'pass' => 'm'),
'onclick' => 'setCatalogTab(\'p.showall\')',
'permissions' => Array ('view'),
'priority' => 3.2,
'type' => stTREE,
),
// product settings
'in-commerce:setting_folder' => Array (
'parent' => 'in-portal:system',
'icon' => 'conf_ecommerce',
'label' => 'la_title_In-Commerce',
'use_parent_header' => 1,
'url' => Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view'),
'priority' => 3.1,
'container' => true,
'type' => stTREE,
),
'in-commerce:general' => Array (
'parent' => 'in-commerce:setting_folder',
'icon' => 'conf_ecommerce_general',
'label' => 'la_tab_GeneralSettings',
'url' => Array ('t' => 'config/config_general', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view', 'edit'),
'priority' => 1,
'type' => stTREE,
),
'in-commerce:output' => Array (
'parent' => 'in-commerce:setting_folder',
'icon' => 'core:conf_output',
'label' => 'la_tab_ConfigOutput',
'url' => Array ('t' => 'config/config_universal', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view', 'edit'),
'priority' => 2,
'type' => stTREE,
),
'in-commerce:search' => Array (
'parent' => 'in-commerce:setting_folder',
'icon' => 'core:conf_search',
'label' => 'la_tab_ConfigSearch',
'url' => Array ('t' => 'config/config_search', 'module_key' => 'products', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view', 'edit'),
'priority' => 7,
'type' => stTREE,
),
'in-commerce:configuration_custom' => Array (
'parent' => 'in-commerce:setting_folder',
'icon' => 'core:conf_customfields',
'label' => 'la_tab_ConfigCustom',
'url' => Array ('t' => 'custom_fields/custom_fields_list', 'cf_type' => 11, 'pass_section' => true, 'pass' => 'm,cf'),
'permissions' => Array ('view', 'add', 'edit', 'delete'),
'priority' => 8,
'type' => stTREE,
),
'in-commerce:contacts' => Array (
'parent' => 'in-commerce:setting_folder',
'icon' => 'conf_contact_info',
'label' => 'la_tab_ConfigContacts',
'url' => Array ('t' => 'config/config_universal', 'pass_section' => true, 'pass' => 'm'),
'permissions' => Array ('view', 'edit'),
'priority' => 10,
'type' => stTREE,
),
),
'FilterMenu' => Array (
- 'Groups' => Array (
- Array ('mode' => 'AND', 'filters' => Array ('show_active', 'show_pending', 'show_disabled'), 'type' => WHERE_FILTER),
- Array ('mode' => 'AND', 'filters' => Array ('show_tang', 'show_sub', 'show_serv', 'show_download', 'show_package'), 'type' => WHERE_FILTER),
- Array ('mode' => 'AND', 'filters' => Array ('show_new'), 'type' => HAVING_FILTER),
- Array ('mode' => 'AND', 'filters' => Array ('show_hot'), 'type' => HAVING_FILTER),
- Array ('mode' => 'AND', 'filters' => Array ('show_pop'), 'type' => HAVING_FILTER),
- Array ('mode' => 'AND', 'filters' => Array ('show_pick'), 'type' => WHERE_FILTER),
- ),
- 'Filters' => Array (
- 'show_active' => Array ('label' => 'la_Active', 'on_sql' => '', 'off_sql' => '%1$s.Status != 1' ),
- 'show_pending' => Array ('label' => 'la_Pending', 'on_sql' => '', 'off_sql' => '%1$s.Status != 2' ),
- 'show_disabled' => Array ('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Status != 0' ),
- 's1' => Array (),
- 'show_tang' => Array ('label' => 'la_product_tangible', 'on_sql' => '', 'off_sql' => '%1$s.Type != 1' ),
- 'show_sub' => Array ('label' => 'la_product_subscription', 'on_sql' => '', 'off_sql' => '%1$s.Type != 2' ),
- 'show_serv' => Array ('label' => 'la_product_service', 'on_sql' => '', 'off_sql' => '%1$s.Type != 3' ),
- 'show_download' => Array ('label' => 'la_product_downloadable', 'on_sql' => '', 'off_sql' => '%1$s.Type != 4' ),
- 'show_package' => Array ('label' => 'la_product_package', 'on_sql' => '', 'off_sql' => '%1$s.Type != 5' ),
- 's2' => Array (),
- 'show_new' => Array ('label' => 'la_Text_New', 'on_sql' => '', 'off_sql' => '`IsNew` != 1' ),
- 'show_hot' => Array ('label' => 'la_Text_TopSellers', 'on_sql' => '', 'off_sql' => '`IsHot` != 1' ),
- 'show_pop' => Array ('label' => 'la_Text_Pop', 'on_sql' => '', 'off_sql' => '`IsPop` != 1' ),
- 'show_pick' => Array ('label' => 'la_prompt_EditorsPick', 'on_sql' => '', 'off_sql' => '%1$s.`EditorsPick` != 1' ),
- )
- ),
+ 'Groups' => Array (
+ Array ('mode' => 'AND', 'filters' => Array ('show_new'), 'type' => HAVING_FILTER),
+ Array ('mode' => 'AND', 'filters' => Array ('show_hot'), 'type' => HAVING_FILTER),
+ Array ('mode' => 'AND', 'filters' => Array ('show_pop'), 'type' => HAVING_FILTER),
+ Array ('mode' => 'AND', 'filters' => Array ('show_pick'), 'type' => WHERE_FILTER),
+ ),
+ 'Filters' => Array (
+ 'show_new' => Array ('label' => 'la_Text_New', 'on_sql' => '', 'off_sql' => '`IsNew` != 1' ),
+ 'show_hot' => Array ('label' => 'la_Text_TopSellers', 'on_sql' => '', 'off_sql' => '`IsHot` != 1' ),
+ 'show_pop' => Array ('label' => 'la_Text_Pop', 'on_sql' => '', 'off_sql' => '`IsPop` != 1' ),
+ 'show_pick' => Array ('label' => 'la_prompt_EditorsPick', 'on_sql' => '', 'off_sql' => '%1$s.`EditorsPick` != 1' ),
+ )
+ ),
+
+ 'TableName' => TABLE_PREFIX . 'Products',
- 'TableName' => TABLE_PREFIX.'Products',
'CalculatedFields' => Array (
'' => Array (
'AltName' => 'img.AltName',
'SameImages' => 'img.SameImages',
'LocalThumb' => 'img.LocalThumb',
'ThumbPath' => 'img.ThumbPath',
'ThumbUrl' => 'img.ThumbUrl',
'LocalImage' => 'img.LocalImage',
'LocalPath' => 'img.LocalPath',
'FullUrl' => 'img.Url',
'Price' => 'COALESCE(pricing.Price, 0)',
'Cost' => 'COALESCE(pricing.Cost, 0)',
'PrimaryCat' => TABLE_PREFIX.'%3$sCategoryItems.PrimaryCat',
'CategoryId' => TABLE_PREFIX.'%3$sCategoryItems.CategoryId',
'ParentPath' => TABLE_PREFIX.'Category.ParentPath',
'Manufacturer' => TABLE_PREFIX.'Manufacturers.Name',
'Filename' => TABLE_PREFIX.'%3$sCategoryItems.Filename',
'CategoryFilename' => TABLE_PREFIX.'Category.NamedParentPath',
'FileSize' => 'files.Size',
'FilePath' => 'files.FilePath',
'FileVersion' => 'files.Version',
),
'showall' => Array (
'Price' => 'COALESCE(pricing.Price, 0)',
'Manufacturer' => TABLE_PREFIX.'Manufacturers.Name',
'PrimaryCat' => TABLE_PREFIX.'%3$sCategoryItems.PrimaryCat',
'CategoryId' => TABLE_PREFIX.'%3$sCategoryItems.CategoryId',
'FileSize' => 'files.Size',
'FilePath' => 'files.FilePath',
'FileVersion' => 'files.Version',
'Filename' => TABLE_PREFIX.'%3$sCategoryItems.Filename',
'CategoryFilename' => TABLE_PREFIX.'Category.NamedParentPath',
),
),
'CacheModRewrite' => true,
'ListSQLs' => Array (
'' => ' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'PortalGroup ON '.TABLE_PREFIX.'PortalGroup.GroupId = %1$s.AccessGroupId
LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
LEFT JOIN '.TABLE_PREFIX.'Category ON '.TABLE_PREFIX.'Category.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
LEFT JOIN '.TABLE_PREFIX.'%3$sImages img ON img.ResourceId = %1$s.ResourceId AND img.DefaultImg = 1
LEFT JOIN '.TABLE_PREFIX.'%3$sProductFiles files ON files.ProductId = %1$s.ProductId AND files.IsPrimary = 1
LEFT JOIN '.TABLE_PREFIX.'%3$sProductsPricing pricing ON pricing.ProductId = %1$s.ProductId AND pricing.IsPrimary = 1
LEFT JOIN '.TABLE_PREFIX.'Manufacturers ON '.TABLE_PREFIX.'Manufacturers.ManufacturerId = %1$s.ManufacturerId
LEFT JOIN '.TABLE_PREFIX.'PermCache perm ON perm.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
LEFT JOIN '.TABLE_PREFIX.'%3$sProductsCustomData cust ON %1$s.ResourceId = cust.ResourceId',
'showall' => 'SELECT %1$s.* %2$s FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'%3$sProductsPricing pricing ON pricing.ProductId = %1$s.ProductId AND pricing.IsPrimary = 1
LEFT JOIN '.TABLE_PREFIX.'%3$sProductFiles files ON files.ProductId = %1$s.ProductId AND files.IsPrimary = 1
LEFT JOIN '.TABLE_PREFIX.'Manufacturers ON '.TABLE_PREFIX.'Manufacturers.ManufacturerId = %1$s.ManufacturerId
LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
LEFT JOIN '.TABLE_PREFIX.'Category ON '.TABLE_PREFIX.'Category.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
LEFT JOIN '.TABLE_PREFIX.'PermCache perm ON perm.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
LEFT JOIN '.TABLE_PREFIX.'%3$sProductsCustomData cust ON %1$s.ResourceId = cust.ResourceId',
), // key - special, value - list select sql
'ListSortings' => Array (
'' => Array (
'ForcedSorting' => Array ('Priority' => 'desc'),
'Sorting' => Array ('Name' => 'asc'),
)
),
'ItemSQLs' => Array ( '' => ' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'PortalGroup pg ON pg.GroupId = %1$s.AccessGroupId
LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
LEFT JOIN '.TABLE_PREFIX.'Category ON '.TABLE_PREFIX.'Category.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
LEFT JOIN '.TABLE_PREFIX.'%3$sImages img ON img.ResourceId = %1$s.ResourceId AND img.DefaultImg = 1
LEFT JOIN '.TABLE_PREFIX.'%3$sProductFiles files ON files.ProductId = %1$s.ProductId AND files.IsPrimary = 1
LEFT JOIN '.TABLE_PREFIX.'%3$sProductsPricing pricing ON pricing.ProductId = %1$s.ProductId AND pricing.IsPrimary = 1
LEFT JOIN '.TABLE_PREFIX.'Manufacturers ON '.TABLE_PREFIX.'Manufacturers.ManufacturerId = %1$s.ManufacturerId
LEFT JOIN '.TABLE_PREFIX.'%3$sProductsCustomData cust ON %1$s.ResourceId = cust.ResourceId',
),
'SubItems' => Array ('pr', 'rev', 'img', 'po', 'poc', 'p-ci', 'rel', 'file', 'p-cdata', 'p-fav'),
'Fields' => Array (
'ProductId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0,),
'Name' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'required' => 1, 'max_len' =>255, 'default' => ''),
'AutomaticFilename' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
'use_phrases' => 1, 'not_null' => 1, 'default' => 1,
),
'SKU' => Array ('type' => 'string', 'required' => 1, 'max_len' =>255, 'error_msgs' => Array ('required' => 'Please fill in'), 'default' => NULL),
'Description' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'using_fck' => 1, 'default' => NULL),
'DescriptionExcerpt' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'using_fck' => 1, 'default' => NULL),
'Weight' => Array ('type' => 'float', 'min_value_exc' => 0, 'formatter' => 'kUnitFormatter', 'format' => '%0.2f', 'default' => NULL),
'MSRP' => Array ('type' => 'float', 'min_value_inc' => 0, 'formatter' => 'kFormatter', 'format' => '%0.2f', 'default' => NULL),
'ManufacturerId' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' =>Array (0 => ''), 'options_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'Manufacturers ORDER BY Name', 'option_key_field' => 'ManufacturerId', 'option_title_field' => 'Name', 'not_null' => 1, 'default' => 0),
'Status' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1,
'default' => 2, 'not_null' => 1,
),
'BackOrder' => Array ('type' => 'int', 'not_null' => 1, 'options' => Array ( 2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never' ), 'use_phrases' => 1, 'default' => 2 ),
'BackOrderDate' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'error_msgs' => Array ('bad_date_format' => 'Please use the following date format: %s'), 'default' => NULL),
'NewItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never' ), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2 ),
'HotItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never' ), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2 ),
'PopItem' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never' ), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2 ),
'EditorsPick' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'Featured' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'OnSale' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0,
),
'Priority' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'CachedRating' => Array ('type' => 'string', 'not_null' => 1, 'formatter' => 'kFormatter', 'default' => 0),
'CachedVotesQty' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'Hits' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%d', 'not_null' => 1, 'default' => 0),
'CreatedOn' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
'Expire' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' =>null),
'Type' => Array ('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' =>Array (1=> 'la_product_tangible', 2=> 'la_product_subscription', 4=> 'la_product_downloadable', 3=> 'la_product_service'/*, 6=> 'la_gift_certificate', 5=> 'la_product_package'*/), 'not_null' => 1, 'default' => 1 ),
'Modified' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
- 'ModifiedById' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
- 'CreatedById' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
- 'ResourceId' => Array ('type' => 'int', 'default' => 0),
+ 'ModifiedById' => Array ('type' => 'int', 'default' => NULL),
+ 'CreatedById' => Array ('type' => 'int', 'required' => 1, 'default' => NULL),
+ 'ResourceId' => Array ('type' => 'int', 'default' => null),
'CachedReviewsQty' => Array ('type' => 'int', 'formatter' => 'kFormatter', 'format' => '%d', 'not_null' => 1, 'default' => 0),
'InventoryStatus' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_Disabled', 1 => 'la_by_product', 2 => 'la_by_options'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0),
'QtyInStock' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'QtyInStockMin' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'QtyReserved' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'QtyBackOrdered' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'QtyOnOrder' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'InventoryComment' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
'Qty' => Array ('type' => 'int', 'formatter' => 'kFormatter', 'regexp' => '/^[\d]+$/', 'error_msgs' => Array ('invalid_format' => '!la_invalid_integer!')),
'AccessGroupId' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'PortalGroup WHERE System!=1 AND Personal !=1 ORDER BY Name', 'option_key_field' => 'GroupId', 'option_title_field' => 'Name', 'default' => NULL),
'AccessDuration' => Array ('type' => 'int', 'default' => NULL),
'AccessDurationType' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' =>Array (1 => 'la_opt_sec', 2 => 'la_opt_min', 3 => 'la_opt_hour', 4 => 'la_opt_day', 5 => 'la_opt_week', 6 => 'la_opt_month', 7 => 'la_opt_year' ), 'default' => NULL,),
'AccessStart' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
'AccessEnd' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL,),
'OptionsSelectionMode' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' =>Array (0 => 'la_opt_Selection', 1 => 'la_opt_List'), 'default' => 0),
'HasRequiredOptions' => Array ('type' => 'int', 'default' => 0, 'not_null' => 1),
'Virtual' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'ProcessingData' => Array ('type' => 'string', 'default' => ''),
'PackageContent' => Array ('type' => 'string', 'default' => NULL),
'IsRecurringBilling' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
'use_phrases' => 1, 'not_null' => 1, 'default' => 0,
),
//'PayPalRecurring' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => '1', 'default' => '0'),
'ShippingMode' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' =>Array (0 => 'la_shipping_AnyAndSelected', 1 => 'la_shipping_Limited'), 'not_null' => 1, 'default' =>0),
'ProcessingData' => Array ('type' => 'string', 'default' => null),
'ShippingLimitation' => Array ('type' => 'string', 'default' => NULL),
'AssignedCoupon' =>
Array ('type' => 'int', 'not_null' => 1, 'default' => 0,
'formatter' => 'kLEFTFormatter',
'options' => Array (0 => 'None'),
'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'ProductsCoupons WHERE `%s` = \'%s\'',
'left_key_field' => 'CouponId',
'left_title_field' => 'Name'),
'MinQtyFreePromoShipping' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'MetaKeywords' => Array ('type' => 'string', 'default' => null),
'MetaDescription' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
),
'VirtualFields' => Array (
- 'Qty' => 1,
+ 'Qty' => Array ('type' => 'int', 'formatter' => 'kFormatter', 'regexp' => '/^[\d]+$/', 'default' => 0),
'Price' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%.2f', 'default' => NULL),
'Cost' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%.2f', 'default' => NULL),
- 'IsHot' => Array ('type' => 'int'),
- 'IsNew' => Array ('type' => 'int'),
- 'IsPop' => Array ('type' => 'int'),
- 'Manufacturer' => Array (),
+ 'CategoryFilename' => Array ('type' => 'string', 'default' => ''),
+ 'PrimaryCat' => Array ('type' => 'int', 'default' => 0),
+ 'IsHot' => Array ('type' => 'int', 'default' => 0),
+ 'IsNew' => Array ('type' => 'int', 'default' => 0),
+ 'IsPop' => Array ('type' => 'int', 'default' => 0),
+ 'Manufacturer' => Array ('type' => 'string', 'default' => ''),
// export related fields: begin
'CategoryId' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => 0),
'ExportFormat' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CSV', /*2 => 'XML'*/), 'default' => 1),
'ExportFilename' => Array ('type' => 'string', 'default' => ''),
'FieldsSeparatedBy' => Array ('type' => 'string', 'default' => ', '),
'FieldsEnclosedBy' => Array ('type' => 'string', 'default' => '"'),
'LineEndings' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'Windows', 2 => 'UNIX'), 'default' => 1),
'LineEndingsInside' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CRLF', 2 => 'LF'), 'default' => 2),
'IncludeFieldTitles' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
- 'use_phrases' => 1, 'not_null' => 1, 'default' => 1,
+ 'use_phrases' => 1, 'default' => 1,
),
- 'ExportColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ()),
- 'AvailableColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ()),
+ 'ExportColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
+ 'AvailableColumns' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
'CategoryFormat' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_MixedCategoryPath', 2 => 'la_SeparatedCategoryPath'), 'use_phrases' => 1, 'default' => 1),
'CategorySeparator' => Array ('type' => 'string', 'default' => ':'),
'IsBaseCategory' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter',
'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
- 'use_phrases' => 1, 'not_null' => 1, 'default' => 0,
+ 'use_phrases' => 1, 'default' => 0,
),
// export related fields: end
// import related fields: begin
'FieldTitles' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Automatic', 2 => 'la_Manual'), 'use_phrases' => 1, 'default' => 1),
'ImportSource' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Upload', 2 => 'la_Local'), 'use_phrases' => 1, 'default' => 2),
- 'ImportFilename' => Array ('type' => 'string', 'formatter' => 'kUploadFormatter', 'max_size' => MAX_UPLOAD_SIZE, 'upload_dir' => EXPORT_BASE_PATH . '/'),
+ 'ImportFilename' => Array ('type' => 'string', 'formatter' => 'kUploadFormatter', 'max_size' => MAX_UPLOAD_SIZE, 'upload_dir' => EXPORT_BASE_PATH . '/', 'default' => ''),
'ImportLocalFilename' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'default' => ''),
'CheckDuplicatesMethod' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_IDField', 2 => 'la_OtherFields'), 'use_phrases' => 1, 'default' => 1),
'ReplaceDuplicates' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_No', 1 => 'la_Yes'), 'use_phrases' => 1, 'default' => 0),
'DuplicateCheckFields' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ('Name' => 'NAME'), 'default' => '|Name|'),
'SkipFirstRow' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'default' => 1),
// import related fields: end
'ThumbnailImage' => Array ('type' => 'string', 'default' => ''),
'FullImage' => Array ('type' => 'string', 'default' => ''),
'ImageAlt' => Array ('type' => 'string', 'default' => ''),
- 'Filename' => Array ('type' => 'string', 'not_null' => '1', 'default' => ''),
+ 'Filename' => Array ('type' => 'string', 'default' => ''),
'CachedNavbar' => Array ('type' => 'string', 'default' => ''),
'ParentPath' => Array ('type' => 'string', 'default' => ''),
- 'FileSize' => Array ('type' => 'int', 'formatter' => 'kFilesizeFormatter', 'not_null' => 1, 'default' => 0),
- 'FilePath' => Array (),
- 'FileVersion' => Array (),
+ 'FileSize' => Array ('type' => 'int', 'formatter' => 'kFilesizeFormatter', 'default' => 0),
+ 'FilePath' => Array ('type' => 'string', 'default' => ''),
+ 'FileVersion' => Array ('type' => 'string', 'default' => ''),
// for primary image
'AltName' => Array ('type' => 'string', 'default' => ''),
'SameImages' => Array ('type' => 'string', 'default' => ''),
'LocalThumb' => Array ('type' => 'string', 'default' => ''),
'ThumbPath' => Array ('type' => 'string', 'default' => ''),
'ThumbUrl' => Array ('type' => 'string', 'default' => ''),
'LocalImage' => Array ('type' => 'string', 'default' => ''),
'LocalPath' => Array ('type' => 'string', 'default' => ''),
'FullUrl' => Array ('type' => 'string', 'default' => ''),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_product.png',
0 => 'icon16_product_disabled.png',
1 => 'icon16_product.png',
2 => 'icon16_product_pending.png',
'NEW' => 'icon16_product_new.png',
),
'Fields' => Array (
'ProductId' => Array ( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'SKU' => Array ( 'title' => 'la_col_ProductSKU', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'Name' => Array ( 'title' => 'la_col_ProductName', 'data_block' => 'grid_catitem_td', 'filter_block' => 'grid_like_filter', 'width' => 150, ),
'Type' => Array ('title' => 'la_col_ProductType', 'filter_block' => 'grid_options_filter', 'width' => 80, ),
'Manufacturer' => Array ('title' => 'la_col_Manufacturer', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'Price' => Array ('title' => 'la_col_Price', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
'Status' => Array ('title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 70, ),
'QtyInStock' => Array ('title' => 'la_col_Qty', 'data_block' => 'qty_td', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
'QtyBackOrdered' => Array ('title' => 'la_col_QtyBackOrdered', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
'OnSale' => Array ('title' => 'la_col_OnSale', 'filter_block' => 'grid_options_filter', 'width' => 70, ), /*
'Weight' => Array ( 'title' => 'la_col_ProductWeight', 'filter_block' => 'grid_float_range_filter', 'width' => 150, ),
'CreatedOn' => Array ( 'title' => 'la_col_ProductCreatedOn', 'filter_block' => 'grid_date_range_filter', 'width' => 150, ),
'BackOrderDate' => Array ( 'title' => 'la_col_ProductBackOrderDate', 'filter_block' => 'grid_date_range_filter', 'width' => 150, ),
*/
),
),
'Radio' => Array (
'Icons' => Array (
'default' => 'icon16_product.png',
0 => 'icon16_product_disabled.png',
1 => 'icon16_product.png',
2 => 'icon16_product_pending.png',
'NEW' => 'icon16_product_new.png',
),
'Selector' => 'radio',
'Fields' => Array (
'ProductId' => Array ( 'title' => 'la_col_Id', 'data_block' => 'grid_radio_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'SKU' => Array ( 'title' => 'la_col_ProductSKU', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'Name' => Array ( 'title' => 'la_col_ProductName', 'data_block' => 'grid_catitem_td', 'filter_block' => 'grid_like_filter', 'width' => 150, ),
'Type' => Array ('title' => 'la_col_ProductType', 'filter_block' => 'grid_options_filter', 'width' => 80, ),
'Manufacturer' => Array ('title' => 'la_col_Manufacturer', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'Price' => Array ('title' => 'la_col_Price', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
'Status' => Array ('title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 70, ),
'QtyInStock' => Array ('title' => 'la_col_Qty', 'data_block' => 'qty_td', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
'QtyBackOrdered' => Array ('title' => 'la_col_QtyBackOrdered', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
),
),
),
'ConfigMapping' => Array (
'PerPage' => 'Comm_Perpage_Products',
'ShortListPerPage' => 'Comm_Perpage_Products_Short',
'ForceEditorPick' => 'products_EditorPicksAboveRegular',
'DefaultSorting1Field' => 'product_OrderProductsBy',
'DefaultSorting2Field' => 'product_OrderProductsThenBy',
'DefaultSorting1Dir' => 'product_OrderProductsByDir',
'DefaultSorting2Dir' => 'product_OrderProductsThenByDir',
'RatingDelayValue' => 'product_RatingDelay_Value',
'RatingDelayInterval' => 'product_RatingDelay_Interval',
),
);
Index: branches/5.2.x/units/coupon_items/coupon_items_config.php
===================================================================
--- branches/5.2.x/units/coupon_items/coupon_items_config.php (revision 14088)
+++ branches/5.2.x/units/coupon_items/coupon_items_config.php (revision 14089)
@@ -1,122 +1,151 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
- $config = Array(
- 'Prefix' => 'coupi',
- 'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
- 'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
- 'EventHandlerClass' => Array('class'=>'CouponItemsEventHandler','file'=>'coupon_items_event_handler.php','build_event'=>'OnBuild'),
- 'TagProcessorClass' => Array('class'=>'CouponItemsTagProcessor','file'=>'coupon_items_tag_processor.php','build_event'=>'OnBuild'),
- 'AutoLoad' => true,
- 'Hooks' => Array(
- Array(
- 'Mode' => hAFTER,
- 'Conditional' => false,
- 'HookToPrefix' => 'p',
- 'HookToSpecial' => '-item',
- 'HookToEvent' => Array('OnAfterItemDelete'),
- 'DoPrefix' => '',
- 'DoSpecial' => '',
- 'DoEvent' => 'OnDeleteCouponItem',
- ),
- ),
- 'QueryString' => Array(
- 1 => 'id',
- 2 => 'Page',
- 3 => 'PerPage',
- 4 => 'event',
- ),
- 'IDField' => 'CouponItemId',
- 'StatusField' => Array('Status'),
- 'TitleField' => 'Name',
- 'TableName' => TABLE_PREFIX.'ProductsCouponItems',
-
- 'CalculatedFields' => Array(
- '' => Array(
- 'ProductId' => 'p.ProductId',
- 'ItemName' => 'IF(p.Name IS NULL,c.Name,p.l1_Name)',
- 'SKU' => 'p.SKU',
- 'Weight' => 'p.Weight',
- 'CreatedOn' => 'p.CreatedOn',
- 'BackOrderDate' => 'p.BackOrderDate',
- 'Status' => 'p.Status',
- 'CategoryId' => 'c.CategoryId',
-
- ),
-
- ),
- 'ListSQLs' => Array( ''=>' SELECT %1$s.* %2$s
- FROM %1$s
- LEFT JOIN '.TABLE_PREFIX.'Products p ON %1$s.ItemResourceId = p.ResourceId
- LEFT JOIN '.TABLE_PREFIX.'Category c ON %1$s.ItemResourceId = c.ResourceId',
- ), // key - special, value - list select sql
- 'ItemSQLs' => Array( ''=>'SELECT * FROM %s',
- ),
-
- /*'BelongsTo' => Array(
- Array('prefix' => 'd', 'key' => 'DiscountId', 'ForeignKey' => 'DiscountId'),
- ),*/
- 'ForeignKey' => 'CouponId',
- 'ParentTableKey' => 'CouponId',
- 'ParentPrefix' => 'coup',
- 'AutoDelete' => true,
- 'AutoClone' => true,
-
- 'ListSortings' => Array(
- '' => Array(
- 'Sorting' => Array('ItemName' => 'asc'),
- )
- ),
-
- 'Fields' => Array (
- 'CouponItemId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0, ),
- 'CouponId' => Array('type' => 'int', 'default' => 0, ),
- 'ItemResourceId' => Array('type' => 'int', 'default' => 0, ),
- 'ItemType' => Array('type' => 'int', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array ( 1 => 'la_Product', 2 => 'la_Category', 0 => 'la_WholeOrder' ), 'default' => 1, ),
- ),
-
- 'VirtualFields' => Array(
- 'ProductId' => Array(),
- 'ItemName' => Array(),
- 'SKU' => Array(),
- 'Weight' => Array('type'=>'float', 'min_value_exc'=>0, 'formatter' => 'kFormatter', 'format' => '%0.2f'),
- 'CreatedOn' => Array('formatter' => 'kDateFormatter', 'default' => '#NOW#'),
- 'BackOrderDate' => Array('formatter' => 'kDateFormatter', 'default' => NULL),
- ),
-
- 'Grids' => Array(
- 'Default' => Array(
- 'Icons' => Array('default'=>'icon16_entire_order.gif'),
- 'Fields' => Array(
- 'ItemType' => Array( 'title'=>'la_col_ItemType', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_empty_filter', 'width' => 200, ),
- ),
-
- ),
- 'CouponItems' => Array(
- 'Icons' => Array(
- 'default' => 'icon16_product.png',
- 0 => 'icon16_product_disabled.png',
- 1 => 'icon16_product.png',
- 2 => 'icon16_product_pending.png',
- ),
- 'Fields' => Array(
- 'ProductId' => Array( 'title'=>'la_col_Id', 'data_block' => 'grid_item_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
- 'ItemName' => Array( 'title'=>'la_col_ItemName', 'filter_block' => 'grid_like_filter', 'width' => 250, ),
- 'ItemType' => Array( 'title'=>'la_col_CouponItemType', 'filter_block' => 'grid_options_filter', 'width' => 150, ),
- ),
-
- ),
- ),
+ $config = Array(
+ 'Prefix' => 'coupi',
+ 'ItemClass' => Array('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
+ 'ListClass' => Array('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
+ 'EventHandlerClass' => Array('class' => 'CouponItemsEventHandler', 'file' => 'coupon_items_event_handler.php', 'build_event' => 'OnBuild'),
+ 'TagProcessorClass' => Array('class' => 'CouponItemsTagProcessor', 'file' => 'coupon_items_tag_processor.php', 'build_event' => 'OnBuild'),
+ 'AutoLoad' => true,
+ 'Hooks' => Array(
+ Array(
+ 'Mode' => hAFTER,
+ 'Conditional' => false,
+ 'HookToPrefix' => 'p',
+ 'HookToSpecial' => '-item',
+ 'HookToEvent' => Array('OnAfterItemDelete'),
+ 'DoPrefix' => '',
+ 'DoSpecial' => '',
+ 'DoEvent' => 'OnDeleteCouponItem',
+ ),
+ ),
+
+ 'QueryString' => Array(
+ 1 => 'id',
+ 2 => 'Page',
+ 3 => 'PerPage',
+ 4 => 'event',
+ ),
+
+ 'IDField' => 'CouponItemId',
+ 'StatusField' => Array('Status'),
+ 'TitleField' => 'Name',
+ 'TableName' => TABLE_PREFIX . 'ProductsCouponItems',
+
+ 'ForeignKey' => 'CouponId',
+ 'ParentTableKey' => 'CouponId',
+ 'ParentPrefix' => 'coup',
+ 'AutoDelete' => true,
+ 'AutoClone' => true,
+
+ 'ListSQLs' => Array(
+ '' => ' SELECT %1$s.* %2$s
+ FROM %1$s
+ LEFT JOIN ' . TABLE_PREFIX . 'Products p ON %1$s.ItemResourceId = p.ResourceId
+ LEFT JOIN ' . TABLE_PREFIX . 'Category c ON %1$s.ItemResourceId = c.ResourceId',
+ ), // key - special, value - list select sql
+
+ 'ItemSQLs' => Array(
+ '' => 'SELECT * FROM %s',
+ ),
+
+ /*'BelongsTo' => Array(
+ Array(
+ 'prefix' => 'd', 'key' => 'DiscountId', 'ForeignKey' => 'DiscountId'),
+ ),*/
+
+ 'ListSortings' => Array(
+ '' => Array(
+ 'Sorting' => Array('ItemName' => 'asc'),
+ ),
+ ),
+
+ 'CalculatedFields' => Array(
+ '' => Array(
+ 'ProductId' => 'p.ProductId',
+ 'ItemName' => 'IF(p.Name IS NULL,c.Name,p.l1_Name)',
+ 'SKU' => 'p.SKU',
+ 'Weight' => 'p.Weight',
+ 'CreatedOn' => 'p.CreatedOn',
+ 'BackOrderDate' => 'p.BackOrderDate',
+ 'Status' => 'p.Status',
+ 'CategoryId' => 'c.CategoryId',
+ ),
+ ),
+
+ 'Fields' => Array (
+ 'CouponItemId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0,),
+ 'CouponId' => Array('type' => 'int', 'default' => null, ),
+ 'ItemResourceId' => Array('type' => 'int', 'default' => null, ),
+ 'ItemType' => Array(
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array (1 => 'la_Product', 2 => 'la_Category', 0 => 'la_WholeOrder'), 'use_phrases' => 1,
+ 'not_null' => 1, 'default' => 1
+ ),
+ ),
+
+ 'VirtualFields' => Array(
+ 'ProductId' => Array('type' => 'int', 'default' => 0),
+ 'ItemName' => Array('type' => 'string', 'default' => ''),
+ 'SKU' => Array('type' => 'string', 'default' => ''),
+ 'Weight' => Array(
+ 'type' => 'float',
+ 'formatter' => 'kFormatter', 'format' => '%0.2f',
+ 'min_value_exc' => 0, 'default' => NULL,
+ ),
+ 'CreatedOn' => Array(
+ 'type' => 'int',
+ 'formatter' => 'kDateFormatter',
+ 'default' => '#NOW#',
+ ),
+ 'BackOrderDate' => Array(
+ 'type' => 'int',
+ 'formatter' => 'kDateFormatter',
+ 'default' => NULL,
+ ),
+ 'Status' => Array (
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1,
+ 'default' => 2,
+ ),
+ 'CategoryId' => Array ('type' => 'int', 'default' => 0),
+ ),
+
+ 'Grids' => Array(
+ 'Default' => Array(
+ 'Icons' => Array('default'=>'icon16_entire_order.gif'),
+ 'Fields' => Array(
+ 'ItemType' => Array( 'title'=>'la_col_ItemType', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_empty_filter', 'width' => 200, ),
+ ),
+ ),
+ 'CouponItems' => Array(
+ 'Icons' => Array(
+ 'default' => 'icon16_product.png',
+ 0 => 'icon16_product_disabled.png',
+ 1 => 'icon16_product.png',
+ 2 => 'icon16_product_pending.png',
+ ),
+ 'Fields' => Array(
+ 'ProductId' => Array( 'title'=>'la_col_Id', 'data_block' => 'grid_item_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
+ 'ItemName' => Array( 'title'=>'la_col_ItemName', 'filter_block' => 'grid_like_filter', 'width' => 250, ),
+ 'ItemType' => Array( 'title'=>'la_col_CouponItemType', 'filter_block' => 'grid_options_filter', 'width' => 150, ),
+ ),
+ ),
+ ),
+
);
\ No newline at end of file
Index: branches/5.2.x/units/affiliates/affiliates_config.php
===================================================================
--- branches/5.2.x/units/affiliates/affiliates_config.php (revision 14088)
+++ branches/5.2.x/units/affiliates/affiliates_config.php (revision 14089)
@@ -1,208 +1,209 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'affil',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'AffiliatesEventHandler','file'=>'affiliates_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'AffiliatesTagProcessor','file'=>'affiliates_tag_processor.php','build_event'=>'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array(
Array(
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'u',
'HookToSpecial' => '',
'HookToEvent' => Array('OnCreate'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnRegisterAsAffiliate',
),
Array(
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'u',
'HookToSpecial' => '',
'HookToEvent' => Array('OnCreate'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnCheckAffiliateAgreement',
),
),
'AggregateTags' => Array(
Array(
'AggregateTo' => 'u',
'AggregatedTagName' => 'IsAffiliate',
'LocalTagName' => 'User_IsAffiliate',
),
Array(
'AggregateTo' => 'u',
'AggregatedTagName' => 'AffiliateIsNotActive',
'LocalTagName' => 'User_AffiliateIsNotActive',
),
Array(
'AggregateTo' => 'u',
'AggregatedTagName' => 'AffiliateField',
'LocalTagName' => 'CurrentUserAffiliateField',
),
Array(
'AggregateTo' => 'u',
'AggregatedTagName' => 'IsAffiliateOrRegisterAsAffiliateAllowed',
'LocalTagName' => 'IsAffiliateOrRegisterAsAffiliateAllowed',
),
Array(
'AggregateTo' => 'm',
'AggregatedTagName' => 'RequireAffiliate',
'LocalTagName' => 'Main_RequireAffiliate',
),
Array(
'AggregateTo' => 'm',
'AggregatedTagName' => 'AllowAffiliateRegistration',
'LocalTagName' => 'AllowAffiliateRegistration',
),
),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'RegularEvents' => Array(
'store_affiliate' => Array('EventName' => 'OnStoreAffiliate', 'RunInterval' => 0, 'Type' => reBEFORE),
'reset_affiliate_stats' => Array('EventName' => 'OnResetStatistics', 'RunInterval' => 0, 'Type' => reBEFORE),
),
'IDField' => 'AffiliateId',
'StatusField' => Array('Status'), // field, that is affected by Approve/Decline events
'TitleField' => 'UserName',
'TitlePresets' => Array(
'default' => Array( 'new_status_labels' => Array('affil'=>'!la_title_Adding_Affiliate!'),
'edit_status_labels' => Array('affil'=>'!la_title_Editing_Affiliate!'),
'new_titlefield' => Array('affil'=>'!la_title_New_Affiliate!'),
),
'affiliates_list' => Array('prefixes' => Array('affil_List'), 'format' => "!la_title_Affiliates!"),
'affiliates_edit' => Array('prefixes' => Array('affil'), 'format' => "#affil_status# '#affil_titlefield#' - !la_title_General!"),
'affiliate_payments' => Array('prefixes' => Array('affil', 'apayments_List'), 'format' => "#affil_status# '#affil_titlefield#' - !la_title_Payments!"),
'affiliates_payout' => Array('prefixes' => Array('affil','apayments'), 'format' => "!la_title_PayOut_To! '#affil_titlefield#'"),
),
'EditTabPresets' => Array (
'Default' => Array (
'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/affiliate_plans/affiliates_edit', 'priority' => 1),
'payments' => Array ('title' => 'la_tab_Payments', 't' => 'in-commerce/affiliate_plans/affiliate_edit_payments', 'priority' => 2),
),
),
'PermSection' => Array('main' => 'in-commerce:affiliates'),
'Sections' => Array(
'in-commerce:affiliates_folder' => Array(
'parent' => 'in-commerce',
'icon' => 'affiliates',
'label' => 'la_tab_Affiliates',
'use_parent_header' => 1,
'permissions' => Array(),
'priority' => 5,
'type' => stTREE,
),
'in-commerce:affiliates' => Array(
'parent' => 'in-commerce:affiliates_folder',
'icon' => 'affiliates',
'label' => 'la_tab_Affiliates',
'url' => Array('t' => 'in-commerce/affiliate_plans/affiliates_list', 'pass' => 'm'),
'permissions' => Array('view', 'add', 'edit', 'delete', 'advanced:approve', 'advanced:decline'),
'priority' => 5.1, // <parent_priority>.<own_priority>, because this section replaces parent in tree
'type' => stTAB,
),
),
'TableName' => TABLE_PREFIX.'Affiliates',
'CalculatedFields' => Array(
'' => Array (
'UserId' => 'u.PortalUserId',
'UserName' => 'IF( LENGTH(u.Login), u.Login, \'\')',
'PlanName' => 'ap.Name',
),
),
'ListSQLs' => Array( ''=>' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.PortalUserId = u.PortalUserId
LEFT JOIN '.TABLE_PREFIX.'AffiliatePlans ap ON %1$s.AffiliatePlanId = ap.AffiliatePlanId'),
'ItemSQLs' => Array( ''=>' SELECT %1$s.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.PortalUserId = u.PortalUserId
LEFT JOIN '.TABLE_PREFIX.'AffiliatePlans ap ON %1$s.AffiliatePlanId = ap.AffiliatePlanId'),
'SubItems' => Array('apayments'),
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('CreatedOn' => 'desc', 'UserName' => 'asc'),
)
),
'Fields' => Array(
'AffiliateId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'PortalUserId' => Array('type' => 'int', 'unique'=>Array('PortalUserId'), 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!', 'unique' => '!la_affiliate_already_exists!'), 'options' => Array(USER_ROOT => 'root', USER_GUEST => 'Guest'),'left_sql'=>'SELECT %s FROM '.TABLE_PREFIX.'PortalUser WHERE `%s` = \'%s\'', 'left_key_field' => 'PortalUserId', 'left_title_field' => 'Login', 'required' => 1, 'not_null' => 1, 'default' => 0, ),
'AffiliatePlanId' => Array('type' => 'int', 'formatter'=>'kOptionsFormatter', 'options_sql'=>'SELECT Name, AffiliatePlanId FROM '.TABLE_PREFIX.'AffiliatePlans WHERE Enabled = 1 ORDER BY Name', 'option_key_field'=>'AffiliatePlanId', 'option_title_field'=>'Name', 'not_null' => 1, 'default' => 0),
'AccumulatedAmount' => Array('type' => 'double', 'formatter'=>'kFormatter', 'format'=>'%.02f', 'not_null' => '1','default' => '0.00'),
'AmountToPay' => Array('type' => 'double', 'formatter'=>'kFormatter', 'format'=>'%.02f', 'not_null' => '1','default' => '0.00'),
'LastPaymentDate' => Array('type' => 'int', 'formatter'=>'kDateFormatter', 'default' => NULL),
'LastOrderDate' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
'Status' => Array('type' => 'int', 'formatter'=>'kOptionsFormatter', 'options'=>Array(1=>'la_Active', 2=>'la_Pending', 0=>'la_Disabled'), 'use_phrases'=>1, 'not_null' => '1','default' => 2),
'AffiliateCode' => Array('type' => 'string', 'not_null' => '1', 'default' => ''),
'ItemsSold' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'PaymentTypeId' => Array('type' => 'int', 'formatter'=>'kOptionsFormatter', 'options' => Array(0 => ''), 'options_sql'=>'SELECT Name, PaymentTypeId FROM '.TABLE_PREFIX.'AffiliatePaymentTypes WHERE Status = 1 ORDER BY IsPrimary DESC, Priority DESC, Name ASC', 'option_key_field'=>'PaymentTypeId', 'option_title_field'=>'Name', 'not_null' => 1, 'default' => 0),
'SSN' => Array('type' => 'string','not_null' => '1','default' => '', 'required' => 1),
'Comments' => Array('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => NULL),
'CreatedOn' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
),
'VirtualFields' => Array(
'UserName' => Array('type'=>'string', 'default' => ''),
'PlanName' => Array('type'=>'string', 'default' => ''),
+ 'UserId' => Array('type'=>'int', 'default' => 0),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array (
'default' => 'icon16_item.png',
0 => 'icon16_disabled.png',
1 => 'icon16_item.png',
2 => 'icon16_primary.png',
'module' => 'core',
),
'Fields' => Array(
'AffiliateId' => Array( 'title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'UserName' => Array( 'title' => 'la_col_UserName', 'data_block' => 'grid_userlink_td', 'filter_block' => 'grid_like_filter'),
'PlanName' => Array( 'title'=>'la_col_PlanName', 'filter_block' => 'grid_like_filter'),
'PaymentTypeId' => Array( 'title' => 'la_col_PaymentType', 'filter_block' => 'grid_options_filter', 'width' => 120, ),
'CreatedOn' => Array( 'title' => 'la_col_RegisteredOn', 'format' => '_regional_DateFormat', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
'Status' => Array( 'title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/discounts/discounts_config.php
===================================================================
--- branches/5.2.x/units/discounts/discounts_config.php (revision 14088)
+++ branches/5.2.x/units/discounts/discounts_config.php (revision 14089)
@@ -1,151 +1,141 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'd',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'DiscountsEventHandler','file'=>'discounts_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'kDBTagProcessor','file'=>'','build_event'=>'OnBuild'),
'AutoLoad' => true,
'hooks' => Array(),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'IDField' => 'DiscountId',
'StatusField' => Array('Status'),
'TitleField' => 'Name',
'TableName' => TABLE_PREFIX.'ProductsDiscounts',
'SubItems' => Array('di'),
'TitlePresets' => Array(
'default' => Array( 'new_status_labels' => Array('d'=>'!la_title_Adding_Discount!'),
'edit_status_labels' => Array('d'=>'!la_title_Editing_Discount!'),
'new_titlefield' => Array('d'=>'!la_title_New_Discount!'),
),
'discounts_list'=>Array('prefixes' => Array('d_List'),
'format' => "!la_title_Discounts!",
),
'discount_edit'=>Array( 'prefixes' => Array('d'),
'format' => "#d_status# '#d_titlefield#' - !la_title_General!",
),
'discount_items'=>Array('prefixes' => Array('d','di_List'),
'format' => "#d_status# '#d_titlefield#' - !la_title_DiscountItems!",
),
),
'EditTabPresets' => Array (
'Default' => Array (
'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/discounts/discount_edit', 'priority' => 1),
'items' => Array ('title' => 'la_tab_DiscountItems', 't' => 'in-commerce/discounts/discount_items', 'priority' => 2),
),
),
'PermSection' => Array('main' => 'in-commerce:discounts'),
'Sections' => Array(
'in-commerce:discounts_folder' => Array(
'parent' => 'in-commerce',
'use_parent_header' => 1,
'icon' => 'discounts_coupons',
'label' => 'la_tab_DiscountsAndCoupons',
'permissions' => Array(),
'priority' => 3,
'type' => stTREE,
),
'in-commerce:discounts' => Array(
'parent' => 'in-commerce:discounts_folder',
'icon' => 'discounts_coupons',
'label' => 'la_tab_Discounts',
'url' => Array('t' => 'in-commerce/discounts/discounts_list', 'pass' => 'm'),
'permissions' => Array('view', 'add', 'edit', 'delete', 'advanced:approve', 'advanced:decline'),
'priority' => 3.1, // <parent_priority>.<own_priority>, because this section replaces parent in tree
'type' => stTAB,
),
),
- 'FilterMenu' => Array(
- 'Groups' => Array(
- Array('mode' => 'AND', 'filters' => Array(0,1,2), 'type' => WHERE_FILTER),
- Array('mode' => 'AND', 'filters' => Array(4,5,6), 'type' => WHERE_FILTER),
- ),
- 'Filters' => Array(
- 0 => Array('label' =>'la_Active', 'on_sql' => '', 'off_sql' => 'Status != 1' ),
- 1 => Array('label' => 'la_Pending', 'on_sql' => '', 'off_sql' => 'Status != 2' ),
- 2 => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => 'Status != 0' ),
- 3 => Array(),
- 4 => Array('label' => 'la_Flat', 'on_sql' => '', 'off_sql' => 'Type != 1' ),
- 5 => Array('label' => 'la_Percent', 'on_sql' => '', 'off_sql' => 'Type != 2' ),
- 6 => Array('label' => 'la_FreeShipping', 'on_sql' => '', 'off_sql' => 'Type != 3' ),
- )
- ),
-
'ListSQLs' => Array( ''=>'SELECT %1$s.* %2$s FROM %1$s',
), // key - special, value - list select sql
'ItemSQLs' => Array( ''=>'SELECT * FROM %1$s',
),
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('Name' => 'asc'),
)
),
- 'Fields' => Array(
- 'DiscountId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
- 'Status' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled' ), 'use_phrases' => 1, 'default' => 2 ),
- 'Name' => Array('type'=>'string','required' => 1, 'default' => null, 'max_len'=>255),
- 'Start' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
- 'End' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
- 'GroupId' => Array(
- 'type' => 'int',
- 'formatter'=>'kOptionsFormatter', 'options_sql'=>'SELECT %s FROM '.TABLE_PREFIX.'PortalGroup WHERE Personal = 0 ORDER BY Name', 'option_key_field'=>'GroupId', 'option_title_field'=>'Name',
- 'required' => 1, 'default' => NULL
- ),
- 'Type' => Array('type' => 'int', 'formatter'=>'kOptionsFormatter', 'use_phrases' => 1, 'options' => Array ( 1 => 'la_Flat', 2 => 'la_Percent'/*, 3 => 'la_FreeShipping' */), 'default' => 1 ),
- 'Amount' => Array('type'=>'double', 'default' => null),
-
- ),
-
- 'Grids' => Array(
- 'Default' => Array(
- 'Icons' => Array(
- 'default' => 'icon16_item.png',
- 0 => 'icon16_disabled.png',
- 1 => 'icon16_item.png',
- 2 => 'icon16_pending.png',
- 'module' => 'core',
- ),
- 'Fields' => Array(
- 'DiscountId' => Array( 'title'=>'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
- 'Name' => Array( 'title'=>'la_col_Name', 'filter_block' => 'grid_like_filter', 'width' => 200, ),
- 'Start' => Array( 'title'=>'la_col_Start', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
- 'End' => Array( 'title'=>'la_col_End', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
- 'GroupId' => Array( 'title'=>'la_col_Group', 'filter_block' => 'grid_options_filter', 'width' => 150, ),
- 'Type' => Array( 'title'=>'la_col_Type', 'filter_block' => 'grid_options_filter', 'width' => 90, ),
- 'Amount' => Array( 'title'=>'la_col_Amount', 'filter_block' => 'grid_float_range_filter', 'width' => 100, ),
- ),
+ 'Fields' => Array (
+ 'DiscountId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
+ 'Status' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled' ), 'use_phrases' => 1, 'default' => 2 ),
+ 'Name' => Array('type'=>'string','required' => 1, 'default' => null, 'max_len'=>255),
+ 'Start' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
+ 'End' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
+ 'GroupId' => Array(
+ 'type' => 'int',
+ 'formatter'=>'kOptionsFormatter', 'options_sql'=>'SELECT %s FROM '.TABLE_PREFIX.'PortalGroup WHERE Personal = 0 ORDER BY Name', 'option_key_field'=>'GroupId', 'option_title_field'=>'Name',
+ 'required' => 1, 'default' => NULL
+ ),
+ 'Type' => Array(
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter',
+ 'options' => Array (
+ 1 => 'la_Flat', 2 => 'la_Percent'/*, 3 => 'la_FreeShipping' */
+ ),
+ 'use_phrases' => 1, 'default' => 1,
+ ),
+ 'Amount' => Array('type'=>'double', 'default' => null),
+ ),
- ),
- ),
+ 'Grids' => Array (
+ 'Default' => Array (
+ 'Icons' => Array(
+ 'default' => 'icon16_item.png',
+ 0 => 'icon16_disabled.png',
+ 1 => 'icon16_item.png',
+ 2 => 'icon16_pending.png',
+ 'module' => 'core',
+ ),
+ 'Fields' => Array (
+ 'DiscountId' => Array( 'title'=>'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
+ 'Name' => Array( 'title'=>'la_col_Name', 'filter_block' => 'grid_like_filter', 'width' => 200, ),
+ 'Start' => Array( 'title'=>'la_col_Start', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
+ 'End' => Array( 'title'=>'la_col_End', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
+ 'GroupId' => Array( 'title'=>'la_col_Group', 'filter_block' => 'grid_options_filter', 'width' => 150, ),
+ 'Type' => Array( 'title'=>'la_col_Type', 'filter_block' => 'grid_options_filter', 'width' => 90, ),
+ 'Status' => Array( 'title'=>'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 90, ),
+ 'Amount' => Array( 'title'=>'la_col_Amount', 'filter_block' => 'grid_float_range_filter', 'width' => 100, ),
+ ),
+ ),
+ ),
);
\ No newline at end of file
Index: branches/5.2.x/units/order_items/order_items_config.php
===================================================================
--- branches/5.2.x/units/order_items/order_items_config.php (revision 14088)
+++ branches/5.2.x/units/order_items/order_items_config.php (revision 14089)
@@ -1,175 +1,175 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'orditems',
'ItemClass' => Array('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array('class' => 'OrderItemsEventHandler', 'file' => 'order_items_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array('class' => 'OrderItemsTagProcessor', 'file' => 'order_items_tag_processor.php', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'AggregateTags' => Array (
Array (
'AggregateTo' => '#PARENT#',
'AggregatedTagName' => 'ItemFieldEquals',
'LocalTagName' => 'FieldEquals',
),
),
'Hooks' => Array (
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => '#PARENT#',
'HookToSpecial' => '',
'HookToEvent' => Array('OnPreSave', 'OnRecalculateItems'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnUpdate',
),
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
),
'IDField' => 'OrderItemId',
'TitleField' => 'OrderItemId',
'StatusField' => Array ('Status'),
'TableName' => TABLE_PREFIX.'OrderItems',
'ParentTableKey' => 'OrderId',
'ForeignKey' => 'OrderId',
'ParentPrefix' => 'ord',
'AutoDelete' => true,
'AutoClone' => true,
'ItemType' => 11,
'CalculatedFields' => Array (
'' => Array (
'ExtendedPrice' => '%1$s.Price * %1$s.Quantity',
'ExtendedPriceFlat' => '%1$s.FlatPrice * %1$s.Quantity',
'QuantityAvailable' => 'IF( ISNULL(p.QtyInStock) AND ISNULL(p.ProductId),"!la_ProductDeleted!", IF(p.Type = 1, IF(p.InventoryStatus = 2, poc.QtyInStock, p.QtyInStock), "") )',
'ItemDiscount' => '(%1$s.FlatPrice - %1$s.Price)',
'SKU' => 'IF(p.InventoryStatus = 2 OR NOT ISNULL(poc.CombinationCRC), poc.SKU, p.SKU)', // inventory by options OR combination found
),
),
'ListSQLs' => Array (
'' => ' SELECT %1$s.*, p.* %2$s
FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'Products p ON %1$s.ProductId = p.ProductId
LEFT JOIN '.TABLE_PREFIX.'ProductOptionCombinations poc ON (%1$s.ProductId = poc.ProductId) AND (%1$s.OptionsSalt = poc.CombinationCRC)',
),
'ItemSQLs' => Array (
'' => 'SELECT *, (Quantity*Price) AS ExtendedPrice, 0 AS QuantityAvailable FROM %s',
),
'ListSortings' => Array (
'' => Array (
'Sorting' => Array ('ProductName' => 'asc', 'BackOrderFlag' => 'asc'),
)
),
'Fields' => Array (
'OrderItemId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'OrderId' => Array('type' => 'int','not_null' => 1, 'default' => 0),
'ProductId' => Array('type' => 'int','not_null' => 1, 'default' => 0),
'ProductName' => Array('type' => 'string','not_null' => 1, 'default' => ''),
'Quantity' => Array('type' => 'int','not_null' => 1, 'default' => 0),
'QuantityReserved' => Array('type' => 'int', 'default' => null),
'FlatPrice' => Array('type' => 'double','formatter'=>'kFormatter','format'=>'%01.2f','not_null' => '1','default' => '0.0000'),
'Price' => Array('type' => 'double','formatter'=>'kFormatter','format'=>'%01.2f','not_null' => '1','default' => '0.0000'),
'Cost' => Array('type' => 'double','formatter'=>'kFormatter','format'=>'%01.2f','not_null' => '1','default' => '0.0000'),
'BackOrderFlag' => Array('type' => 'int', 'default' => 0),
'Weight' => Array ('type' => 'double', 'default' => NULL),
'ShippingTypeId' => Array ('type' => 'string', 'default' => NULL),
'ItemData' => Array('type' => 'string','default' => null),
'OptionsSalt' => Array('type' => 'int', 'default' => 0),
'SplitShippingGroup' => Array('type' => 'int', 'not_null' => 1, 'default' => 0,),
'PackageNum' => Array('type' => 'int', 'not_null' => 1, 'default' => 0,),
'ReturnType' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_opt_Refund', 2 => 'la_opt_Exchange', 3 => 'la_opt_Warranty'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0
),
'ReturnAmount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => 0),
'ReturnedOn' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
),
'VirtualFields' => Array (
'ExtendedPrice' => Array('type'=>'double','formatter'=>'kFormatter','format'=>'%01.2f','default'=>'0.00'),
'ExtendedPriceFlat' => Array('type'=>'double','formatter'=>'kFormatter','format'=>'%01.2f','default'=>'0.00'),
'QuantityAvailable' => Array('type'=>'int','default'=>0),
'DiscountType' => Array('type'=>'string','default'=>''),
'DiscountId' => Array('type'=>'int','default'=>0),
- 'Name' => Array('formatter' => 'kMultiLanguage'),
+ 'Name' => Array('type' => 'string', 'formatter' => 'kMultiLanguage', 'default' => ''),
'ItemDiscount' => Array('type'=>'double','formatter'=>'kFormatter','format'=>'%01.2f','default'=>'0.00'),
'SKU' => Array('type' => 'string', 'default' => ''),
- 'MinQtyFreeShipping'=> Array('type' => 'int', 'not_null' => 1, 'default' => 0,),
+ 'MinQtyFreeShipping'=> Array('type' => 'int', 'default' => 0,),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array (
'default' => 'icon16_product.png',
0 => 'icon16_product_disabled.png',
1 => 'icon16_product.png',
2 => 'icon16_product_pending.png',
),
'Fields' => Array (
'ProductName' => Array ('title' => 'la_col_ProductNameId', 'data_block' => 'grid_productname_td', 'filter_block' => 'grid_like_filter'),
'Quantity' => Array ('title' => 'la_col_Quantity', 'data_block' => 'grid_quantity_td', 'filter_block' => 'grid_range_filter'),
'QuantityReserved' => Array ('title' => 'la_col_QuantityReserved', 'filter_block' => 'grid_range_filter'),
'QuantityAvailable' => Array ('title' => 'la_col_QuantityAvailable', 'filter_block' => 'grid_range_filter'),
'Price' => Array ('title' => 'la_col_Price', 'data_block' => 'grid_price_td', 'filter_block' => 'grid_float_range_filter'),
'ExtendedPrice' => Array ('title' => 'la_col_ExtendedPrice', 'data_block' => 'grid_extendedprice_td', 'filter_block' => 'grid_float_range_filter'),
'ReturnType' => Array ('title' => 'la_col_ReturnType', 'data_block' => 'grid_options_td', 'filter_block' => 'grid_options_filter'),
'ReturnAmount' => Array ('title' => 'la_col_ReturnAmount', 'data_block' => 'grid_edit_td', 'filter_block' => 'grid_float_range_filter'),
'ReturnedOn' => Array ('title' => 'la_col_ReturnedOn', 'data_block' => 'grid_date_td', 'filter_block' => 'grid_date_range_filter'),
),
),
'NotEditable' => Array (
'Icons' => Array (
'default' => 'icon16_product.png',
0 => 'icon16_product_disabled.png',
1 => 'icon16_product.png',
2 => 'icon16_product_pending.png',
),
'Fields' => Array (
'ProductName' => Array ('title' => 'la_col_ProductNameId', 'data_block' => 'grid_productname_td'),
'Quantity' => Array ('title' => 'la_col_Quantity', 'filter_block' => 'grid_range_filter'),
'QuantityReserved' => Array ('title' => 'la_col_QuantityReserved', 'filter_block' => 'grid_range_filter'),
'QuantityAvailable' => Array ('title' => 'la_col_QuantityAvailable', 'filter_block' => 'grid_range_filter'),
'Price' => Array ('title' => 'la_col_Price', 'filter_block' => 'grid_float_range_filter'),
'ExtendedPrice' => Array ('title' => 'la_col_ExtendedPrice', 'filter_block' => 'grid_float_range_filter'),
'ReturnType' => Array ('title' => 'la_col_ReturnType', 'data_block' => 'grid_options_td', 'filter_block' => 'grid_options_filter'),
'ReturnAmount' => Array ('title' => 'la_col_ReturnAmount', 'data_block' => 'grid_edit_td', 'filter_block' => 'grid_float_range_filter'),
'ReturnedOn' => Array ('title' => 'la_col_ReturnedOn', 'data_block' => 'grid_date_td', 'filter_block' => 'grid_date_range_filter'),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/units/addresses/addresses_config.php
===================================================================
--- branches/5.2.x/units/addresses/addresses_config.php (revision 14088)
+++ branches/5.2.x/units/addresses/addresses_config.php (revision 14089)
@@ -1,118 +1,118 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array(
'Prefix' => 'addr',
'ItemClass' => Array('class'=>'AddressesItem','file'=>'addresses_item.php','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'AddressesList','file'=>'addresses_list.php','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class' => 'AddressesEventHandler', 'file' => 'addresses_event_handler.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array('class' => 'AddressesTagProcessor', 'file' => 'addresses_tag_processor.php', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array(
// create/update profile addres (in addresses table)
Array(
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => '#PARENT#',
'HookToSpecial' => '*',
'HookToEvent' => Array('OnAfterItemCreate', 'OnAfterItemUpdate'),
'DoPrefix' => '',
'DoSpecial' => '*',
'DoEvent' => 'OnUpdateUserProfile',
),
Array(
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => '',
'HookToSpecial' => '*',
'HookToEvent' => Array('OnAfterItemCreate', 'OnAfterItemUpdate'),
'DoPrefix' => '',
'DoSpecial' => '*',
'DoEvent' => 'OnUpdateProfileAddress',
),
),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'IDField' => 'AddressId',
'TableName' => TABLE_PREFIX.'Addresses',
'ParentTableKey'=> 'PortalUserId', // linked field in master table
'ForeignKey' => 'PortalUserId', // linked field in subtable
'ParentPrefix' => 'u',
'AutoDelete' => true,
'AutoClone' => true,
'CalculatedFields' => Array(
'' => Array(
'ShortAddress' => 'CONCAT( TRIM(CONCAT(Address1," ",Address2)),", ",City," ...")',
),
),
'ListSQLs' => Array('' => 'SELECT %1$s.* %2$s FROM %1$s'), // key - special, value - list select sql
'ItemSQLs' => Array( ''=>'SELECT * FROM %s'),
'ListSortings' => Array('' => Array('Sorting' => Array('IsProfileAddress' => 'desc')) ),
'Fields' => Array(
'AddressId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'PortalUserId' => Array('type' => 'int','not_null' => 1, 'default' => 0),
'To' => Array('type' => 'string','not_null' => '1', 'required' => 1, 'default' => ''),
'Company' => Array('type' => 'string','not_null' => '1','default' => ''),
'Phone' => Array('type' => 'string','not_null' => '1', 'required' => 1, 'default' => ''),
'Fax' => Array('type' => 'string','not_null' => '1','default' => ''),
'Email' => Array('type' => 'string','formatter'=>'kFormatter', 'regexp'=>'/^(' . REGEX_EMAIL_USER . '@' . REGEX_EMAIL_DOMAIN . ')$/i','not_null' => '1','default' => ''),
'Address1' => Array('type' => 'string','not_null' => '1', 'required' => 1, 'default' => ''),
'Address2' => Array('type' => 'string','not_null' => '1','default' => ''),
'City' => Array('type' => 'string','not_null' => '1', 'required' => 1, 'default' => ''),
'State' => Array(
'type' => 'string',
'formatter' => 'kOptionsFormatter', 'options' => Array(),
'not_null' => '1', 'default' => ''
),
'Zip' => Array('type' => 'string','not_null' => '1', 'required' => 1, 'default' => ''),
'Country' => Array(
'type' => 'string',
'formatter' => 'kOptionsFormatter',
'options_sql' => ' SELECT IF(l%2$s_Name = "", l%3$s_Name, l%2$s_Name) AS Name, IsoCode
FROM ' . TABLE_PREFIX . 'CountryStates
WHERE Type = ' . DESTINATION_TYPE_COUNTRY . '
ORDER BY Name',
'option_key_field' => 'IsoCode', 'option_title_field' => 'Name',
'not_null' => '1', 'required' => 1, 'default' => ''
),
'LastUsedAsBilling' => Array('type' => 'int','not_null' => 1, 'default' => 0),
'LastUsedAsShipping' => Array('type' => 'int','not_null' => 1, 'default' => 0),
'IsProfileAddress' => Array('type' => 'int','not_null' => 1, 'default' => 0),
),
'VirtualFields' => Array(
- 'ShortAddress' => Array('type'=>'string'),
+ 'ShortAddress' => Array('type'=>'string', 'default' => ''),
),
'Grids' => Array(),
);
\ No newline at end of file
Index: branches/5.2.x/units/gift_certificates/gift_certificates_config.php
===================================================================
--- branches/5.2.x/units/gift_certificates/gift_certificates_config.php (revision 14088)
+++ branches/5.2.x/units/gift_certificates/gift_certificates_config.php (revision 14089)
@@ -1,150 +1,138 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$config = Array (
'Prefix' => 'gc',
'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array ('class' => 'GiftCertificateEventHandler', 'file' => 'gift_certificates_eh.php', 'build_event' => 'OnBuild'),
'TagProcessorClass' => Array ('class' => 'GiftCertificateTagProcessor', 'file' => 'gift_certificates_tp.php', 'build_event' => 'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array (
Array (
'Mode' => hBEFORE,
'Conditional' => false,
'HookToPrefix' => 'ord',
'HookToSpecial' => '',
'HookToEvent' => Array( 'OnUpdateCart', 'OnCheckout' ),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnApplyGiftCertificate',
),
),
'QueryString' => Array (
1 => 'id',
2 => 'Page',
3 => 'PerPage',
4 => 'event',
5 => 'mode',
),
'IDField' => 'GiftCertificateId',
'StatusField' => Array('Status'),
'TitleField' => 'Recipient',
'TableName' => TABLE_PREFIX.'GiftCertificates',
'TitlePresets' => Array (
'default' => Array (
'new_status_labels' => Array ('gc' => '!la_title_AddingGiftCertificate!'),
'edit_status_labels' => Array ('gc' => '!la_title_EditingGiftCertificate!'),
'new_titlefield' => Array ('gc' => '!la_title_NewGiftCertificate!'),
),
'gift_certificates_list' => Array ('prefixes' => Array ('gc_List'), 'format' => "!la_title_GiftCertificates!",),
'gift_certificates_edit' => Array ('prefixes' => Array ('gc'), 'format' => "#gc_status# '#gc_titlefield#' - !la_title_General!",),
),
'PermSection' => Array ('main' => 'in-commerce:gift-certificates'),
'Sections' => Array (
'in-commerce:gift-certificates' => Array (
'parent' => 'in-commerce:discounts_folder',
'icon' => 'discounts_coupons',
'label' => 'la_tab_GiftCertificates',
'url' => Array('t' => 'in-commerce/discounts/gift_certificate_list', 'pass' => 'm'),
'permissions' => Array('view', 'add', 'edit', 'delete', 'advanced:approve', 'advanced:decline'),
'priority' => 3.3, // <parent_priority>.<own_priority>, because this section replaces parent in tree
'type' => stTAB,
),
- ),
-
- 'FilterMenu' => Array (
- 'Groups' => Array(
- Array ('mode' => 'AND', 'filters' => Array(0,1,2), 'type' => WHERE_FILTER),
- ),
-
- 'Filters' => Array(
- 0 => Array('label' =>'la_Enabled', 'on_sql' => '', 'off_sql' => 'Status != 1' ),
- 1 => Array('label' => 'la_Used', 'on_sql' => '', 'off_sql' => 'Status != 2' ),
- 2 => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => 'Status != 0' ),
- )
- ),
+ ),
'ListSQLs' => Array ('' => 'SELECT %1$s.* %2$s FROM %1$s',),
'ItemSQLs' => Array ('' => 'SELECT * FROM %1$s',),
'ListSortings' => Array (
'' => Array(
'Sorting' => Array('Recipient' => 'asc'),
)
),
'Fields' => Array (
'GiftCertificateId' => Array('type' => 'int', 'not_null' => 1, 'default' => 0),
'OrderId' => Array ('type' => 'int', 'default' => 0),
'Status' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 1 => 'la_Enabled', 2 => 'la_Used', 0 => 'la_Disabled' ), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2 ),
'SendVia' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 0 => 'la_opt_Email', 1 => 'la_opt_PostalMail'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0 ),
'Purchaser' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255),
'Recipient' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255),
'RecipientEmail' => Array('type' => 'string', 'formatter'=>'kFormatter', 'regexp'=>'/^(' . REGEX_EMAIL_USER . '@' . REGEX_EMAIL_DOMAIN . ')$/i', 'sample_value' => 'email@domain.com', 'not_null' => '1', 'required'=>1, 'default' => '', 'error_msgs' => Array('invalid_format'=>'!la_invalid_email!') ),
'RecipientFirstname' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255),
'RecipientLastname' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255),
'RecipientAddress1' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255),
'RecipientAddress2' => Array('type'=>'string', 'default'=>null, 'max_len'=>255),
'RecipientCity' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255),
'RecipientState' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255),
'RecipientZipcode' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255),
'RecipientCountry' => Array(
'type' => 'string',
'formatter' => 'kOptionsFormatter',
'options_sql' => ' SELECT IF(l%2$s_Name = "", l%3$s_Name, l%2$s_Name) AS Name, IsoCode
FROM '.TABLE_PREFIX.'CountryStates
WHERE Type = ' . DESTINATION_TYPE_COUNTRY . '
ORDER BY Name',
'option_key_field' => 'IsoCode', 'option_title_field' => 'Name',
'not_null' => 1, 'required' => 1, 'default' => 'USA'
),
'RecipientPhone' => Array('type'=>'string','default'=>null, 'max_len'=>255),
'Message' => Array('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
'Code' => Array('type'=>'string','required'=>1,'default'=>null, 'max_len'=>255, 'unique'=>Array('Code')),
'AddDate' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#',),
'Expiration' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null,),
'Amount' => Array('type'=>'double', 'default' => null, 'required' => 1, 'min_value_exc' => 0),
'Debit' => Array('type'=>'double', 'default' => null),
),
'Grids' => Array (
'Default' => Array (
'Icons' => Array(
'default' => 'icon16_item.png',
0 => 'icon16_disabled.png',
1 => 'icon16_item.png',
2 => 'icon16_pending.png',
'module' => 'core',
),
'Fields' => Array (
'GiftCertificateId' => Array ('title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'Code' => Array ('title' => 'la_col_Code', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
'Status' => Array ('title' => 'la_col_Status', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
'Debit' => Array ('title' => 'la_col_RemainingAmount', 'filter_block' => 'grid_float_range_filter', 'width' => 160, ),
'Amount' => Array ('title' => 'la_col_Amount', 'filter_block' => 'grid_float_range_filter', 'width' => 100, ),
'Expiration' => Array ('title'=>'la_col_Expiration', 'filter_block' => 'grid_date_range_filter', 'width' => 145, ),
),
),
),
);
\ No newline at end of file
Index: branches/5.2.x/admin_templates/export.tpl
===================================================================
--- branches/5.2.x/admin_templates/export.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/export.tpl (revision 14089)
@@ -1,128 +1,124 @@
<inp2:adm_SetPopupSize width="780" height="670"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p.export" section="in-portal:browse" perm_section="PRODUCT" permission_type="VIEW" system_permission="0" title_preset="products_export"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
document.getElementById('hidden_export_columns').value = select_to_string('<inp2:p.export_InputName field="ExportColumns"/>');
submit_event('p.export','OnExportBegin');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p.export','OnGoBack');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<inp2:p.export_SaveWarning name="grid_save_warning"/>
<inp2:p.export_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="p.export" field="ExportFormat" title="la_fld_ExportFormat" use_phrases="0"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="p.export" field="FieldsSeparatedBy" title="la_fld_FieldsSeparatedBy" size="2" maxlength="1"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="p.export" field="FieldsEnclosedBy" title="la_fld_FieldsEnclosedBy" size="2" maxlength="1"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="p.export" field="LineEndings" title="la_fld_LineEndings" use_phrases="0"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="p.export" field="LineEndingsInside" title="la_fld_LineEndingsInside" use_phrases="0"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p.export" field="IncludeFieldTitles" title="la_fld_IncludeFieldTitles"/>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="p.export" field="ExportColumns" title="la_fld_ExportColumns"/>
+ <inp2:m_RenderElement design="form_row" prefix="p.export" field="ExportColumns" title="la_fld_ExportColumns">
<td class="control-cell">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<input type="button" value="<inp2:m_phrase name="la_btn_Up"/>" onclick="move_options_up('<inp2:p.export_InputName field="ExportColumns"/>', 1)" class="button">
<input type="button" value="<inp2:m_phrase name="la_btn_Down"/>" onclick="move_options_down('<inp2:p.export_InputName field="ExportColumns"/>', 1)" class="button"><br />
<img src="img/spacer.gif" width="1" height="5" alt=""><br />
</td>
<td><img src="img/spacer.gif" width="45" height="1" alt=""><br></td>
<td><inp2:m_phrase name="la_fld_AvailableColumns"/>:</td>
</tr>
<tr>
<td>
<select multiple id="<inp2:p.export_InputName field="ExportColumns"/>" size="15" style="width: 225px;">
<inp2:p.export_PredefinedOptions field="ExportColumns" block="inp_option_item" selected="selected"/>
</select>
<input type="hidden" id="hidden_export_columns" name="<inp2:p.export_InputName field="ExportColumns"/>" value="<inp2:p.export_Field field="ExportColumns"/>" />
</td>
<td align="center">
<input type="button" value="&nbsp;&laquo;&laquo;&nbsp;" onclick="move_selected('<inp2:p.export_InputName field="AvailableColumns"/>', '<inp2:p.export_InputName field="ExportColumns"/>')" class="button"><br>
<img src="img/spacer.gif" width="1" height="4" alt=""><br>
<input type="button" value="&nbsp;&raquo;&raquo;&nbsp;" onclick="move_selected('<inp2:p.export_InputName field="ExportColumns"/>', '<inp2:p.export_InputName field="AvailableColumns"/>'); select_sort('<inp2:p.export_InputName field="AvailableColumns"/>');" class="button">
</td>
<td>
<select multiple id="<inp2:p.export_InputName field="AvailableColumns"/>" size="15" style="width: 225px;">
<inp2:p.export_PredefinedOptions field="AvailableColumns" block="inp_option_item" selected="selected"/>
</select>
</td>
</tr>
</table>
</td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="p.export" field="ExportColumns"/>
- </tr>
+ </inp2:m_RenderElement>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="p.export" field="CategoryFormat" title="la_fld_CategoryFormat"/>
+ <inp2:m_RenderElement design="form_row" prefix="p.export" field="CategoryFormat" title="la_fld_CategoryFormat">
<td class="control-cell">
<table cellspacing="0" cellpadding="0">
<tr>
<td rowspan="2" valign="top">
<input type="radio"<inp2:m_if check="p.export_FieldEquals" field="CategoryFormat" value="1"> checked</inp2:m_if> name="<inp2:p.export_InputName field="CategoryFormat"/>" id="<inp2:p.export_InputName field="CategoryFormat"/>_1" value="1" />
</td>
<td>
<label for="<inp2:p.export_InputName field="CategoryFormat"/>_1"><inp2:m_phrase label="la_MixedCategoryPath"/></label>
</td>
</tr>
<tr>
<td>
<span class="<inp2:m_if check="p.export_HasError" field="CategorySeparator">error</inp2:m_if>"><inp2:m_phrase name="la_fld_CategorySeparator"/></span><inp2:m_if check="p.export_IsRequired" field="CategorySeparator"><span class="error"> *</span></inp2:m_if>:
<input type="text" name="<inp2:p.export_InputName field="CategorySeparator"/>" id="<inp2:p.export_InputName field="CategorySeparator"/>" value="<inp2:p.export_Field field="CategorySeparator"/>" size="2" maxlength="1" /><br />
(will look like "Category:Sub-category:Sub-sub-category")
</td>
</tr>
<tr>
<td rowspan="2" valign="top">
<input type="radio"<inp2:m_if check="p.export_FieldEquals" field="CategoryFormat" value="2"> checked</inp2:m_if> name="<inp2:p.export_InputName field="CategoryFormat"/>" id="<inp2:p.export_InputName field="CategoryFormat"/>_2" value="2" />
</td>
<td>
<label for="<inp2:p.export_InputName field="CategoryFormat"/>_2"><inp2:m_phrase label="la_SeparatedCategoryPath"/></label><br />
(the fields will be titled Category1..CategoryN accordingly)
</td>
</tr>
</table>
</td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="p.export" field="CategoryFormat"/>
- </tr>
+ </inp2:m_RenderElement>
<inp2:m_if check="m_GetEquals" name="m_cat_id" value="0" inverse="inverse">
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p.export" field="IsBaseCategory" title="la_fld_IsBaseCategory" />
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_box" prefix="p.export" field="ExportFilename" title="la_fld_ExportFilename" size="20" />
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/export_finish.tpl
===================================================================
--- branches/5.2.x/admin_templates/export_finish.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/export_finish.tpl (revision 14089)
@@ -1,45 +1,45 @@
<inp2:adm_SetPopupSize width="780" height="670"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p.export" section="in-portal:browse" perm_section="PRODUCT" permission_type="VIEW" system_permission="0" title_preset="products_export"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Close" escape="1"/>', function() {
submit_event('p.export', 'OnGoBack');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_DownloadExportFile"/>
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<a href="<inp2:p.export_ExportPath as_url="1"/>"><inp2:p.export_ExportPath /></a>
</td>
</tr>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/manufacturers/manufacturers_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/manufacturers/manufacturers_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/manufacturers/manufacturers_edit.tpl (revision 14089)
@@ -1,83 +1,83 @@
<inp2:adm_SetPopupSize width="780" height="580"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" section="in-commerce:manufacturers" prefix="manuf" title_preset="manuf_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('manuf','<inp2:manuf_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('manuf','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('manuf', '<inp2:manuf_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('manuf', '<inp2:manuf_NextId/>');
}
) );
a_toolbar.Render();
<inp2:m_if check="manuf_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="manuf_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="manuf_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
<script src="js/swfobject.js" type="text/javascript"></script>
<script type="text/javascript" src="<inp2:m_Compress files='js/uploader/upload_manager.js|js/uploader/uploader.js'/>"></script>
</td>
</tr>
</tbody>
</table>
<inp2:manuf_SaveWarning name="grid_save_warning"/>
<inp2:manuf_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
<inp2:m_RenderElement name="subsection" title="la_title_General"/>
- <inp2:m_RenderElement name="inp_id_label" prefix="manuf" field="ManufacturerId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Name" title="!la_fld_Name!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="manuf" field="Description" title="!la_fld_Description!" control_options="{min_height: 100}" cols="40" rows="5"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="URL" title="!la_fld_URL!" size="40"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="manuf" field="ManufacturerId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Name" title="la_fld_Name" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="manuf" field="Description" title="la_fld_Description" control_options="{min_height: 100}" cols="40" rows="5"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="URL" title="la_fld_URL" size="40"/>
<inp2:m_RenderElement name="inp_edit_swf_upload" prefix="manuf" field="Logo" thumbnail="120x120" title="la_fld_Logo"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="manuf" field="IsPopular" title="la_fld_Popular"/>
<inp2:m_RenderElement name="subsection" title="la_title_ContactInformation"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Address1" title="!la_fld_Address1!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Address2" title="!la_fld_Address2!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="City" title="!la_fld_City!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="State" title="!la_fld_State!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_options" has_empty="1" prefix="manuf" field="Country" title="!la_fld_Country!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Zip" title="!la_fld_Zip!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Phone" title="!la_fld_Phone!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Fax" title="!la_fld_Fax!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Email" title="!la_fld_Email!" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Address1" title="la_fld_Address1" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Address2" title="la_fld_Address2" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="City" title="la_fld_City" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="State" title="la_fld_State" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_options" has_empty="1" prefix="manuf" field="Country" title="la_fld_Country" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Zip" title="la_fld_Zip" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Phone" title="la_fld_Phone" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Fax" title="la_fld_Fax" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="manuf" field="Email" title="la_fld_Email" size="40"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/shipping/shipping_type_groups.tpl
===================================================================
--- branches/5.2.x/admin_templates/shipping/shipping_type_groups.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/shipping/shipping_type_groups.tpl (revision 14089)
@@ -1,118 +1,118 @@
<inp2:adm_SetPopupSize width="850" height="610"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="s" section="in-commerce:shipping" title_preset="groups" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
document.getElementById('<inp2:s_InputName field="PortalGroups"/>').value = select_to_string('selected_groups');
submit_event('s','<inp2:s_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('s','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('s', '<inp2:s_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('s', '<inp2:s_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="s_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="s_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="s_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
function go_to_tab(prefix_special, tab)
{
set_hidden_field(prefix_special+'_GoTab', tab);
document.getElementById('<inp2:s_InputName field="PortalGroups"/>').value = select_to_string('selected_groups');
submit_event(prefix_special,'OnPreSaveAndGoToTab',null);
}
function go_to_id(prefix_special, id)
{
set_hidden_field(prefix_special+'_GoId', id);
document.getElementById('<inp2:s_InputName field="PortalGroups"/>').value = select_to_string('selected_groups');
submit_event(prefix_special,'OnPreSaveAndGo')
}
</script>
</td>
</tr>
</tbody>
</table>
<inp2:s_SaveWarning name="grid_save_warning"/>
<inp2:s_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="inp_id_label" prefix="s" field="ShippingID" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_hidden" prefix="s" field="PortalGroups" title="!la_fld_UserGroups!" size="40"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="s" field="ShippingID" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_hidden" prefix="s" field="PortalGroups" title="la_fld_UserGroups" size="40"/>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_fld_UserGroups"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<table style="width: 300px">
<tr>
<td>
<inp2:m_DefineElement name="group_option">
<option value="<inp2:m_param name="GroupId"/>"><inp2:m_param name="Name"/></option>
</inp2:m_DefineElement>
<inp2:m_phrase label="la_fld_SelectedGroups"/><br />
<select id="selected_groups" name="selected_groups[]" multiple="multiple" size="15" style="width: 200px">
<inp2:s_ListGroups mode="selected" render_as="group_option"/>
</select>
</td>
<td align="center">
<input type="button" value="&nbsp;&laquo;&laquo;&nbsp;" onclick="move_selected('available_groups', 'selected_groups'); select_sort('selected_groups')" class="button"><br>
<img src="img/s.gif" width="1" height="4" alt=""><br>
<input type="button" value="&nbsp;&raquo;&raquo;&nbsp;" onclick="move_selected('selected_groups', 'available_groups'); select_sort('available_groups');" class="button">
</td>
<td>
<inp2:m_phrase label="la_fld_AvailableGroups"/><br />
<select id="available_groups" name="available_groups[]" multiple="multiple" size="15" style="width: 200px">
<inp2:s_ListGroups render_as="group_option"/>
</select>
</td>
</tr>
</table>
</td>
</tr>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/shipping/shipping_custom_list.tpl
===================================================================
--- branches/5.2.x/admin_templates/shipping/shipping_custom_list.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/shipping/shipping_custom_list.tpl (revision 14089)
@@ -1,69 +1,69 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="s" section="in-commerce:shipping" pagination="1" title_preset="shipping_list" tabs="in-commerce/shipping/shipping_tabs"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_New_Shipping" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_precreate_item('s', 'in-commerce/shipping/shipping_edit')
} ) );
function edit()
{
std_edit_item('s', 'in-commerce/shipping/shipping_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('s')
} ) );
function clone_items()
{
submit_event('s','onMassClone');
}
a_toolbar.AddButton( new ToolBarButton('clone', '<inp2:m_phrase label="la_ToolTip_Clone" escape="1"/>', clone_items) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('s','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('s','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="s" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="s" IdField="ShippingID" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="s" IdField="ShippingID" grid="Default"/>
<script type="text/javascript">
Grids['s'].SetDependantToolbarButtons( new Array('edit','delete','clone','approve','decline') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/shipping/shipping_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/shipping/shipping_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/shipping/shipping_edit.tpl (revision 14089)
@@ -1,80 +1,80 @@
<inp2:adm_SetPopupSize width="850" height="610"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="s" section="in-commerce:shipping" title_preset="shipping_type_edit" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('s','<inp2:s_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('s','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('s', '<inp2:s_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('s', '<inp2:s_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="s_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="s_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="s_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:s_SaveWarning name="grid_save_warning"/>
<inp2:s_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_Text_Shipping_Type!"/>
- <inp2:m_RenderElement name="inp_id_label" prefix="s" field="ShippingID" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="Code" title="!la_fld_ShippingCode!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="Name" title="!la_fld_ShippingName!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="SpeedCode" title="!la_fld_SpeedCode!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="s" field="Status" title="!la_fld_Status!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="s" field="Type" title="!la_fld_ShippingType!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="BaseFee" title="!la_fld_BaseFee!"/>
- <inp2:m_RenderElement name="inp_edit_options" use_phrases="1" prefix="s" field="InsuranceType" title="!la_fld_Insurance_Type!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="InsuranceFee" title="!la_fld_Insurance_Fee!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="FreeShippingMinAmount" title="!la_fld_FreeShippingMinAmount!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="s" field="IsFreePromoShipping" title="!la_fld_IsFreePromoShipping!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Shipping_Type"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="s" field="ShippingID" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="Code" title="la_fld_ShippingCode" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="Name" title="la_fld_ShippingName" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="SpeedCode" title="la_fld_SpeedCode" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="s" field="Status" title="la_fld_Status"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="s" field="Type" title="la_fld_ShippingType"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="BaseFee" title="la_fld_BaseFee"/>
+ <inp2:m_RenderElement name="inp_edit_options" use_phrases="1" prefix="s" field="InsuranceType" title="la_fld_Insurance_Type"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="InsuranceFee" title="la_fld_Insurance_Fee" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="FreeShippingMinAmount" title="la_fld_FreeShippingMinAmount"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="s" field="IsFreePromoShipping" title="la_fld_IsFreePromoShipping"/>
- <!-- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="CODFlatSurcharge" title="!la_fld_CODFlatSurcharge!" size="10" /> -->
- <!-- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="CODPercentSurcharge" title="!la_fld_CODPercentSurcharge!" size="10" /> -->
+ <!-- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="CODFlatSurcharge" title="la_fld_CODFlatSurcharge" size="10" /> -->
+ <!-- <inp2:m_RenderElement name="inp_edit_box" prefix="s" field="CODPercentSurcharge" title="la_fld_CODPercentSurcharge" size="10" /> -->
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/shipping/shipping_quote_engine_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/shipping/shipping_quote_engine_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/shipping/shipping_quote_engine_edit.tpl (revision 14089)
@@ -1,116 +1,112 @@
<inp2:adm_SetPopupSize width="780" height="580"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="sqe" section="in-commerce:shipping_quote_engines" title_preset="engine_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('sqe','<inp2:sqe_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('sqe','OnCancelEdit');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="carrier">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<input type="hidden" id="<inp2:sqe_InputName field="{$carrier}Enabled"/>" name="<inp2:sqe_InputName field="{$carrier}Enabled"/>" value="<inp2:sqe_Field field="{$carrier}Enabled" db="db"/>">
<input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:sqe_InputName field="{$carrier}Enabled"/>" name="_cb_<inp2:sqe_InputName field="{$carrier}Enabled"/>" <inp2:sqe_Field field="{$carrier}Enabled" checked="checked" db="db"/> onclick="update_checkbox(this, document.getElementById('<inp2:sqe_InputName field="{$carrier}Enabled"/>'))" onchange="check_carrier('_cb_<inp2:sqe_InputName field="{$carrier}Enabled"/>', '<inp2:sqe_InputName field="{$carrier}Account" />', '_cb_<inp2:sqe_InputName field="{$carrier}Invoiced"/>')">
<inp2:m_param name="title" />
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<inp2:m_phrase label="la_AccountLogin" />:
<input type="text" name="<inp2:sqe_InputName field="{$carrier}Account" />" id="<inp2:sqe_InputName field="{$carrier}Account" />" value="<inp2:sqe_Field field="{$carrier}Account" />" tabindex="<inp2:m_get param="tab_index"/>">
<inp2:m_phrase label="la_Invoiced" />:
<input type="hidden" id="<inp2:sqe_InputName field="{$carrier}Invoiced"/>" name="<inp2:sqe_InputName field="{$carrier}Invoiced"/>" value="<inp2:sqe_Field field="{$carrier}Invoiced" db="db"/>">
<input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:sqe_InputName field="{$carrier}Invoiced"/>" name="_cb_<inp2:sqe_InputName field="{$carrier}Invoiced"/>" <inp2:sqe_Field field="{$carrier}Invoiced" checked="checked" db="db"/> onclick="update_checkbox(this, document.getElementById('<inp2:sqe_InputName field="{$carrier}Invoiced"/>'))">
</td>
</tr>
<script type="text/javascript">
check_carrier('_cb_<inp2:sqe_InputName field="{$carrier}Enabled"/>', '<inp2:sqe_InputName field="{$carrier}Account" />', '_cb_<inp2:sqe_InputName field="{$carrier}Invoiced"/>');
</script>
</inp2:m_DefineElement>
<script type="text/javascript">
function check_carrier(carrier_checkbox, account_field, invoiced_checkbox)
{
if(document.getElementById(carrier_checkbox).checked)
{
document.getElementById(account_field).disabled = false;
document.getElementById(invoiced_checkbox).disabled = false;
}
else
{
document.getElementById(account_field).disabled = true;
document.getElementById(invoiced_checkbox).disabled = true;
}
}
</script>
<inp2:sqe_SaveWarning name="grid_save_warning"/>
<inp2:sqe_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_Text_General!"/>
- <inp2:m_RenderElement name="inp_label" prefix="sqe" field="EngineId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_label" prefix="sqe" field="Name" title="!la_fld_ShippingQuoteEngineName!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="Status" title="!la_fld_Enabled!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="sqe" field="AccountLogin" title="!la_fld_Login!" />
-
- <inp2:m_if check="sqe_FieldVisible" field="AccountPassword">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="sqe" field="AccountPassword" title="!la_fld_Password!" />
- <td class="control-cell">
- <input type="password" name="<inp2:sqe_InputName field="AccountPassword" />" id="<inp2:sqe_InputName field="AccountPassword" />" value="">
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="sqe" field="AccountPassword"/>
- </tr>
- </inp2:m_if>
+ <inp2:m_RenderElement name="subsection" title="la_Text_General"/>
+ <inp2:m_RenderElement name="inp_label" prefix="sqe" field="EngineId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_label" prefix="sqe" field="Name" title="la_fld_ShippingQuoteEngineName"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="Status" title="la_fld_Enabled"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="sqe" field="AccountLogin" title="la_fld_Login" />
+
+ <inp2:m_RenderElement design="form_row" prefix="sqe" field="AccountPassword" title="la_fld_Password">
+ <td class="control-cell">
+ <input type="password" name="<inp2:sqe_InputName field="AccountPassword" />" id="<inp2:sqe_InputName field="AccountPassword" />" value="">
+ </td>
+ </inp2:m_RenderElement>
<inp2:m_if check="sqe_Field" field="ClassName" equals_to="Intershipper" db="db">
- <inp2:m_RenderElement name="subsection" title="!la_Text_Carriers!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Carriers"/>
<inp2:m_RenderElement name="carrier" carrier="UPS" title="UPS" />
<inp2:m_RenderElement name="carrier" carrier="FDX" title="FedEx" />
<inp2:m_RenderElement name="carrier" carrier="DHL" title="DHL" />
<inp2:m_RenderElement name="carrier" carrier="USP" title="USPS" />
<inp2:m_RenderElement name="carrier" carrier="ARB" title="Airborne" />
- <inp2:m_RenderElement name="subsection" title="!la_Text_Delivery!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="1DYEnabled" title="!la_fld_FirstDayDelivery!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="2DYEnabled" title="!la_fld_SecondDayDelivery!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="3DYEnabled" title="!la_fld_ThirdDayDelivery!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="GNDEnabled" title="!la_fld_GroundDelivery!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Delivery"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="1DYEnabled" title="la_fld_FirstDayDelivery"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="2DYEnabled" title="la_fld_SecondDayDelivery"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="3DYEnabled" title="la_fld_ThirdDayDelivery"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="sqe" field="GNDEnabled" title="la_fld_GroundDelivery"/>
- <inp2:m_RenderElement name="subsection" title="!la_Text_Other!"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="sqe" field="ShipMethod" title="!la_fld_ShipMethod!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Other"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="sqe" field="ShipMethod" title="la_fld_ShipMethod"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="sqe" field="FlatSurcharge" title="!la_fld_FlatSurcharge!" size="10"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="sqe" field="PercentSurcharge" title="!la_fld_PercentSurcharge!" size="10"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="sqe" field="FlatSurcharge" title="la_fld_FlatSurcharge" size="10"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="sqe" field="PercentSurcharge" title="la_fld_PercentSurcharge" size="10"/>
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/shipping/shipping_costs.tpl
===================================================================
--- branches/5.2.x/admin_templates/shipping/shipping_costs.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/shipping/shipping_costs.tpl (revision 14089)
@@ -1,220 +1,216 @@
<inp2:adm_SetPopupSize width="850" height="610"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="s" section="in-commerce:shipping" title_preset="costs" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
var $checked_count = 0;
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('s','<inp2:s_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('s','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('s', '<inp2:s_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('s', '<inp2:s_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('in-commerce:flip', '<inp2:m_phrase label="la_ToolTip_Flip" escape="1"/>',
function() {
submit_event('s','OnFlip');
} ) );
a_toolbar.AddButton( new ToolBarButton('in-commerce:clear_all', '<inp2:m_phrase label="la_ToolTip_ClearAll" escape="1"/>', function() {
if(confirm('<inp2:m_phrase label="la_ClearCostsWarning"/>'))
submit_event('sc','OnClearAll');
}
) );
a_toolbar.AddButton( new ToolBarButton('in-commerce:modify', '<inp2:m_phrase label="la_ToolTip_Modify" escape="1"/>',
function() {
openSelector('s', '<inp2:m_t t="in-commerce/shipping/modify_selector" pass="all,sc" sc_event="OnSaveCreated"/>');
} ) );
a_toolbar.Render();
a_toolbar.DisableButton('modify');
<inp2:m_if check="s_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="s_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="s_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
function reflect_toolbar($prefix_special, $id, $field)
{
var $element = document.getElementById($prefix_special+'['+$id+']['+$field+']');
if($element.checked)
{
$checked_count++;
}
else
{
$checked_count--;
}
if($checked_count)
{
a_toolbar.EnableButton('modify');
}
else
{
a_toolbar.DisableButton('modify');
}
}
</script>
</td>
</tr>
</tbody>
</table>
-<inp2:m_DefineElement name="precision_field">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field_name="$field" title="$title"/>
- <td class="control-cell">
- <select tabindex="<inp2:m_get param="tab_index"/>" name="<inp2:{$prefix}_InputName field="PrecisionBeforeSep"/>" id="<inp2:{$prefix}_InputName field="PrecisionBeforeSep"/>">
- <inp2:m_if check="m_ParamEquals" name="use_phrases" value="1" >
- <inp2:{$prefix}_PredefinedOptions field="PrecisionBeforeSep" block="inp_option_phrase" selected="selected"/>
- <inp2:m_else/>
- <inp2:{$prefix}_PredefinedOptions field="PrecisionBeforeSep" block="inp_option_item" selected="selected"/>
- </inp2:m_if>
- </select>&nbsp;,&nbsp;<select tabindex="<inp2:m_get param="tab_index"/>" name="<inp2:{$prefix}_InputName field="PrecisionAfterSep"/>" id="<inp2:{$prefix}_InputName field="PrecisionAfterSep"/>">
- <inp2:m_if check="m_ParamEquals" name="use_phrases" value="1" >
- <inp2:{$prefix}_PredefinedOptions field="PrecisionAfterSep" block="inp_option_phrase" selected="selected"/>
- <inp2:m_else/>
- <inp2:{$prefix}_PredefinedOptions field="PrecisionAfterSep" block="inp_option_item" selected="selected"/>
- </inp2:m_if>
- </select>
- </td>
- </tr>
-</inp2:m_DefineElement>
-
-
<inp2:m_DefineElement name="row_header">
<td>
<input type="checkbox" name="<inp2:{$prefix}_InputName field="$IdField"/>" id="<inp2:{$prefix}_InputName field="$IdField"/>" value="<inp2:{$prefix}_field field="$IdField"/>" onclick="reflect_toolbar('<inp2:m_param name="prefix"/>', <inp2:{$prefix}_field field="$IdField"/>, '<inp2:m_param name="IdField"/>')">
<inp2:m_RenderElement name="$header_caption"/>
<a href="javascript:propagate_values('<inp2:m_param name="prefix"/>', <inp2:{$prefix}_field field="$IdField"/>)"><img src="<inp2:m_TemplatesBase module='In-Commerce'/>/img/list_horiz_propagate.gif" alt="<inp2:m_phrase label="la_PropagateValues"/>" border="0"></a>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="column_header">
<td align="center" style="border-left:1px solid black">
<input type="checkbox" name="<inp2:{$prefix}_InputName field="$IdField"/>" id="<inp2:{$prefix}_InputName field="$IdField"/>" value="<inp2:{$prefix}_field field="$IdField"/>" onclick="reflect_toolbar('<inp2:m_param name="prefix"/>', <inp2:{$prefix}_field field="$IdField"/>, '<inp2:m_param name="IdField"/>')">
<inp2:m_RenderElement name="$header_caption"/>
<a href="javascript:propagate_values('<inp2:m_param name="prefix"/>', <inp2:{$prefix}_field field="$IdField"/>)"><img src="<inp2:m_TemplatesBase module='In-Commerce'/>/img/list_vertic_propagate.gif" alt="<inp2:m_phrase label="la_PropagateValues"/>" border="0"></a>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="zone_caption">
<nobr><inp2:z_field field="Name"/></nobr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="bracket_caption">
<inp2:m_if check="s_FieldEquals" name="Type" value="1">
<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="1">
<inp2:br_field field="Start"/>&nbsp;<inp2:m_Phrase label="la_kg" /> - <inp2:m_if check="br_fieldequals" field="End" value="-1">&infin;<inp2:m_else/><inp2:br_field field="End"/>&nbsp;<inp2:m_Phrase label="la_kg" /></inp2:m_if>
</inp2:m_if>
<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="2">
<inp2:br_field field="Start_a"/>&nbsp;<inp2:m_Phrase label="la_lbs" />&nbsp;<inp2:br_field field="Start_b"/>&nbsp;<inp2:m_Phrase label="la_oz" /> - <inp2:m_if check="br_fieldequals" field="End" value="-1">&infin;<inp2:m_else/><inp2:br_field field="End_a"/>&nbsp;<inp2:m_Phrase label="la_lbs" />&nbsp;<inp2:br_field field="End_b"/>&nbsp;<inp2:m_Phrase label="la_oz" /></inp2:m_if>
</inp2:m_if>
<inp2:m_else />
<nobr><inp2:br_field field="Start"/> - <inp2:m_if check="br_fieldequals" field="End" value="-1">&infin;<inp2:m_else/><inp2:br_field field="End" /></inp2:m_if></nobr>
</inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="cost_cell">
<td style="border-left:1px solid black" align="center">
<nobr>$ <input type="text" maxlength="<inp2:s_CostInputSize/>" size="<inp2:s_CostInputSize/>" name="<inp2:sc_InputName field="Flat"/><inp2:m_if check="s_fieldequals" field="CostType" value="2">_input</inp2:m_if>" id="<inp2:sc_InputName field="Flat"/><inp2:m_if check="s_fieldequals" field="CostType" value="2" >_input</inp2:m_if>" value="<inp2:sc_field field="Flat" />"<inp2:m_if check="s_fieldequals" field="CostType" value="2" > disabled</inp2:m_if>>
% <input type="text" maxlength="<inp2:s_CostInputSize/>" size="<inp2:s_CostInputSize/>" name="<inp2:sc_InputName field="PerUnit"/><inp2:m_if check="s_fieldequals" field="CostType" value="1">_input</inp2:m_if>" id="<inp2:sc_InputName field="PerUnit"/><inp2:m_if check="s_fieldequals" field="CostType" value="1" >_input</inp2:m_if>" value="<inp2:sc_field field="PerUnit" />"<inp2:m_if check="s_fieldequals" field="CostType" value="1" > disabled</inp2:m_if>></nobr>
<inp2:m_if check="s_fieldequals" field="CostType" value="2" >
<input type="hidden" name="<inp2:sc_InputName field="Flat"/>" id="<inp2:sc_InputName field="Flat"/>" value="<inp2:sc_field field="Flat"/>">
</inp2:m_if>
<inp2:m_if check="s_fieldequals" field="CostType" value="1" >
<input type="hidden" name="<inp2:sc_InputName field="PerUnit"/>" id="<inp2:sc_InputName field="PerUnit"/>" value="<inp2:sc_field field="PerUnit"/>">
</inp2:m_if>
<input type="hidden" name="<inp2:sc_InputName field="BracketId"/>" id="<inp2:sc_InputName field="BracketId"/>" value="<inp2:br_field field="BracketId"/>">
<input type="hidden" name="<inp2:sc_InputName field="ZoneID"/>" id="<inp2:sc_InputName field="ZoneID"/>" value="<inp2:z_field field="ZoneID"/>">
</td>
</inp2:m_DefineElement>
<inp2:sc_SaveWarning name="grid_save_warning"/>
<inp2:sc_ErrorWarning name="form_error_warning"/>
<div id="scroll_container" mode="minimal">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="s" field="CostType" title="!la_fld_CostType!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="s" field="ZeroIfEmpty" title="!la_fld_EmptyCellsAre!" size="20"/>
- <inp2:m_RenderElement name="precision_field" prefix="s" title="!la_Precision!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="s" field="CostType" title="la_fld_CostType"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="s" field="ZeroIfEmpty" title="la_fld_EmptyCellsAre" size="20"/>
+
+ <inp2:m_RenderElement design="form_row" prefix="s" field="PrecisionBeforeSep" title="la_Precision">
+ <td class="control-cell">
+ <select tabindex="<inp2:m_get param="tab_index"/>" name="<inp2:{$prefix}_InputName field="PrecisionBeforeSep"/>" id="<inp2:{$prefix}_InputName field="PrecisionBeforeSep"/>">
+ <inp2:m_if check="m_ParamEquals" name="use_phrases" value="1" >
+ <inp2:{$prefix}_PredefinedOptions field="PrecisionBeforeSep" block="inp_option_phrase" selected="selected"/>
+ <inp2:m_else/>
+ <inp2:{$prefix}_PredefinedOptions field="PrecisionBeforeSep" block="inp_option_item" selected="selected"/>
+ </inp2:m_if>
+ </select>&nbsp;,&nbsp;<select tabindex="<inp2:m_get param="tab_index"/>" name="<inp2:{$prefix}_InputName field="PrecisionAfterSep"/>" id="<inp2:{$prefix}_InputName field="PrecisionAfterSep"/>">
+ <inp2:m_if check="m_ParamEquals" name="use_phrases" value="1" >
+ <inp2:{$prefix}_PredefinedOptions field="PrecisionAfterSep" block="inp_option_phrase" selected="selected"/>
+ <inp2:m_else/>
+ <inp2:{$prefix}_PredefinedOptions field="PrecisionAfterSep" block="inp_option_item" selected="selected"/>
+ </inp2:m_if>
+ </select>
+ </td>
+ </inp2:m_RenderElement>
+
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_ShippingCosts!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_ShippingCosts"/>
</table>
<div id="cost_container" style="overflow: auto;">
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="tableborder" style="border-top:none">
<inp2:s_ShowCostsTable/>
</table>
</div>
<input type="hidden" name="z_propagate_id" id="z_propagate_id" value="">
<input type="hidden" name="br_propagate_id" id="br_propagate_id" value="">
<script type="text/javascript">
function propagate_values(prefix,id)
{
document.getElementById(prefix + '_propagate_id').value = id;
submit_event('sc', 'OnPropagate');
}
document.getElementById('<inp2:s_InputName field="CostType"/>').onchange = saveShipping;
document.getElementById('<inp2:s_InputName field="PrecisionBeforeSep"/>').onchange = saveShipping;
document.getElementById('<inp2:s_InputName field="PrecisionAfterSep"/>').onchange = saveShipping;
function saveShipping()
{
submit_event('s', 'OnPreSave');
}
$(document).ready(
function() {
maximizeElement('#cost_container');
}
);
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/shipping/shipping_list.tpl
===================================================================
--- branches/5.2.x/admin_templates/shipping/shipping_list.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/shipping/shipping_list.tpl (revision 14089)
@@ -1,53 +1,53 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="sqe" section="in-commerce:shipping_quote_engines" pagination="1" title_preset="engine_list" tabs="in-commerce/shipping/shipping_tabs"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
function edit()
{
std_edit_item('sqe', 'in-commerce/shipping/shipping_quote_engine_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('sqe','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('sqe','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="sqe" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="sqe" IdField="EngineId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="sqe" IdField="EngineId" grid="Default"/>
<script type="text/javascript">
Grids['sqe'].SetDependantToolbarButtons( new Array('edit','approve','decline') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/shipping/shipping_brackets.tpl
===================================================================
--- branches/5.2.x/admin_templates/shipping/shipping_brackets.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/shipping/shipping_brackets.tpl (revision 14089)
@@ -1,267 +1,267 @@
<inp2:adm_SetPopupSize width="850" height="610"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="s" section="in-commerce:shipping" title_preset="brackets" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('s','<inp2:s_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('s','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('s', '<inp2:s_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('s', '<inp2:s_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
function add_brackets()
{
submit_event('br', 'OnMoreBrackets')
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:more_brackets', '<inp2:m_phrase label="la_ToolTip_MoreBrackets" escape="1"/>', add_brackets) );
function infinity()
{
submit_event('br', 'OnInfinity');
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:infinity', '<inp2:m_phrase label="la_ToolTip_Infinity" escape="1"/>', infinity) );
function arrange_brackets()
{
submit_event('br', 'OnArrange')
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:arrange', '<inp2:m_phrase label="la_ToolTip_Arrange" escape="1"/>', arrange_brackets) );
a_toolbar.Render();
<inp2:m_if check="s_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="s_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="s_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="br_edit_box" >
<td>
<input type="text" size="<inp2:m_param name="size"/>" name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
tabindex="<inp2:m_get param="tab_index"/>"
value="<inp2:m_param name="$field"/>"
>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="br_edit_max" >
<td>
<inp2:m_if check="s_FieldEquals" name="Type" value="1">
<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="1">
<input type="text"
<inp2:m_inc param="tab_index" by="1"/> tabindex="<inp2:m_get param="tab_index"/>"
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
value="<inp2:m_param name="max"/>" size="10"
<inp2:m_if check="m_ParamEquals" param="next_min_id" value="">
<inp2:m_else />
onchange="set_start(<inp2:m_param name="id"/>, <inp2:m_param name="next_min_id"/>,'<inp2:m_param name="PrefixSpecial"/>', 'Start', 'End')"
</inp2:m_if>
/>
<inp2:m_phrase label="la_kg" />
</inp2:m_if>
<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="2">
<input type="text"
<inp2:m_inc param="tab_index" by="1"/> tabindex="<inp2:m_get param="tab_index"/>"
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>_a]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>_a]"
value="<inp2:m_param name="max_a"/>" size="10"
<inp2:m_if check="m_ParamEquals" param="next_min_id" value="">
<inp2:m_else />
onchange="set_start(<inp2:m_param name="id"/>, <inp2:m_param name="next_min_id"/>,'<inp2:m_param name="PrefixSpecial"/>', 'Start_a', 'End_a')"
</inp2:m_if>
/>
<inp2:m_phrase label="la_lbs" />
<input type="text"
<inp2:m_inc param="tab_index" by="1"/> tabindex="<inp2:m_get param="tab_index"/>"
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>_b]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>_b]"
value="<inp2:m_param name="max_b"/>" size="10"
<inp2:m_if check="m_ParamEquals" param="next_min_id" value="">
<inp2:m_else />
onchange="set_start(<inp2:m_param name="id"/>, <inp2:m_param name="next_min_id"/>,'<inp2:m_param name="PrefixSpecial"/>', 'Start_b', 'End_b')"
</inp2:m_if>
/>
<inp2:m_phrase label="la_oz" />
</inp2:m_if>
<inp2:m_else />
<input type="text" size="10"
<inp2:m_inc param="tab_index" by="1"/> tabindex="<inp2:m_get param="tab_index"/>"
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
value="<inp2:m_param name="max"/>"
<inp2:m_if check="m_ParamEquals" param="next_min_id" value="">
<inp2:m_else />
onchange="set_start(<inp2:m_param name="id"/>, <inp2:m_param name="next_min_id"/>,'<inp2:m_param name="PrefixSpecial"/>', 'Start', 'End')"
</inp2:m_if>
/>
</inp2:m_if>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="br_edit_min" >
<td>
<input type="hidden" name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="IdField"/>]" id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="IdField"/>]" value="<inp2:m_param name="id"/>">
<inp2:m_if check="s_FieldEquals" name="Type" value="1">
<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="1">
<input type="text"
<inp2:m_if check="m_ParamEquals" param="first" value="1">
<inp2:m_inc param="tab_index" by="1"/>
tabindex="<inp2:m_get param="tab_index"/>"
<inp2:m_else/>
readonly
</inp2:m_if>
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
value="<inp2:m_param name="min"/>" size="10"
<inp2:m_if check="m_ParamEquals" param="first" value="1"><inp2:m_else/>disabled</inp2:m_if>/>
<inp2:m_phrase label="la_kg" />
</inp2:m_if>
<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="2">
<input type="text"
<inp2:m_if check="m_ParamEquals" param="first" value="1">
<inp2:m_inc param="tab_index" by="1"/>
tabindex="<inp2:m_get param="tab_index"/>"
<inp2:m_else/>
readonly
</inp2:m_if>
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>_a]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>_a]"
value="<inp2:m_param name="min_a"/>" size="10"
<inp2:m_if check="m_ParamEquals" param="first" value="1"><inp2:m_else/>disabled</inp2:m_if>/>
<inp2:m_phrase label="la_lbs" />
<input type="text"
<inp2:m_if check="m_ParamEquals" param="first" value="1">
<inp2:m_inc param="tab_index" by="1"/>
tabindex="<inp2:m_get param="tab_index"/>"
<inp2:m_else/>
readonly
</inp2:m_if>
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>_b]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>_b]"
value="<inp2:m_param name="min_b"/>" size="10"
<inp2:m_if check="m_ParamEquals" param="first" value="1"><inp2:m_else/>disabled</inp2:m_if>/>
<inp2:m_phrase label="la_oz" />
</inp2:m_if>
<inp2:m_else />
<input type="text" size="10"
<inp2:m_if check="m_ParamEquals" param="first" value="1">
<inp2:m_inc param="tab_index" by="1"/>
tabindex="<inp2:m_get param="tab_index"/>"
<inp2:m_else/>
readonly
</inp2:m_if>
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
value="<inp2:m_param name="min"/>"
<inp2:m_if check="m_ParamEquals" param="first" value="1"><inp2:m_else/>disabled</inp2:m_if>
/>
</inp2:m_if>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="bracket">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="br_edit_min" IdField="$IdField" PrefixSpecial="$PrefixSpecial" field="Start" size="40" pass_params="true"/>
<inp2:m_RenderElement name="br_edit_max" IdField="$IdField" PrefixSpecial="$PrefixSpecial" field="End" size="40" pass_params="true"/>
</tr>
</inp2:m_DefineElement>
<script type="text/javascript" >
NumberFormatter.ThousandsSep = '<inp2:lang.current_Field name="ThousandSep" js_escape="1"/>';
NumberFormatter.DecimalSep = '<inp2:lang.current_Field name="DecimalPoint" js_escape="1"/>';
function set_start(id, next_id, prefix_special, start_field, end_field)
{
//var next_id = id - 1;
var input_id = prefix_special + '[' + next_id + '][' + start_field + ']';
//var orig_id = prefix_special + '[' + id + '][Start]';
//alert('here');
if(document.getElementById(input_id) != null)
{
var new_value = NumberFormatter.Parse(document.getElementById(prefix_special + '[' + id + '][' + end_field + ']').value);
//alert(prefix_special + '[' + id + '][' + end_field + ']');
if( isNaN(new_value) ) new_value = 0;
document.getElementById(prefix_special + '[' + id + '][' + end_field + ']').value = NumberFormatter.Format(new_value);
document.getElementById(input_id).value = NumberFormatter.Format(new_value);
}
}
function enableKernelFormFields()
{
var kForm = document.forms.kernel_form;
var elem = false;
for (var i=0; i<kForm.elements.length; i++){
elem = kForm.elements[i];
if (elem.type == "text" && elem.disabled == true){
elem.disabled = false;
}
}
}
</script>
<inp2:m_DefineElement name="br_grid_th" >
<td class="columntitle_small"><inp2:m_phrase label="$phrase" /></td>
</inp2:m_DefineElement>
<inp2:br_SaveWarning name="grid_save_warning"/>
<inp2:br_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="tableborder">
<tr nowrap="nowrap" class="grid-header-row-0">
- <inp2:m_RenderElement name="br_grid_th" phrase="!la_col_Start!"/>
- <inp2:m_RenderElement name="br_grid_th" phrase="!la_col_End!"/>
+ <inp2:m_RenderElement name="br_grid_th" phrase="la_col_Start"/>
+ <inp2:m_RenderElement name="br_grid_th" phrase="la_col_End"/>
</tr>
<inp2:br_ShowBracketsForm block="bracket" IdField="BracketId"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
<script>
document.forms.kernel_form.onsubmit = enableKernelFormFields;
</script>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/shipping/zone_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/shipping/zone_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/shipping/zone_edit.tpl (revision 14089)
@@ -1,384 +1,384 @@
<inp2:adm_SetPopupSize width="650" height="480"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="s" section="in-commerce:shipping" title_preset="zones_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
SelectAll(document.getElementById('location_list[]'));
SelectToString(document.getElementById('location_list[]'));
submit_event('z','<inp2:z_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('z','OnCancel');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('z', '<inp2:z_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('z', '<inp2:z_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="z_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="z_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="z_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="destination_block" selected="">
<option value="<inp2:m_param name="id"/>" <inp2:m_param name="selected"/>><inp2:m_param name="destination_title"/></option>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="countries_multiple">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">&nbsp;</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<table>
<tr><td>
<inp2:m_Phrase label="la_zones_SelectedCountries"/>:<br/>
<select name="location_list[]" id="location_list[]" multiple onchange="SelectToString(this)" size="10" style="width: 200px">
<inp2:z_ShowCountries block="destination_block" show="current"/>
</select>
</td>
<td>
<input class="button" type=button onclick="MoveSelected(this.form.ShippingZoneIdChooser, document.getElementById('location_list[]'))" value="&lt;"><br/>
<input class="button" type=button onclick="MoveSelected(document.getElementById('location_list[]'), this.form.ShippingZoneIdChooser)" value="&gt;">
</td>
<td>
<inp2:m_Phrase label="la_zones_AvailableCountries"/>:<br/>
<select name="ShippingZoneIdChooser" multiple size="10" size="10" style="width: 200px">
<inp2:z_ShowCountries block="destination_block" show="available"/>
</select>
</td>
</tr>
</table>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="states_multiple">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<td class="label-cell">&nbsp;</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<select name="CountrySelector" onChange="change_country()">
<inp2:z_ShowCountries block="destination_block" show="has_states"/>
</select>
<br />
<table>
<tr><td>
<inp2:m_Phrase label="la_zones_SelectedStates"/>:<br/>
<select name="location_list[]" id="location_list[]" multiple onchange="SelectToString(this)" size="10" style="width: 200px">
<inp2:z_ShowStates block="destination_block" show="current"/>
</select>
</td>
<td>
<input class="button" type=button onclick="MoveSelected(this.form.ShippingZoneIdChooser, document.getElementById('location_list[]'))" value="&lt;"><br/>
<input class="button" type=button onclick="MoveSelected(document.getElementById('location_list[]'), this.form.ShippingZoneIdChooser)" value="&gt;">
</td>
<td>
<inp2:m_Phrase label="la_zones_AvailableStates"/>:<br/>
<select name="ShippingZoneIdChooser" multiple size="10" style="width: 200px">
<inp2:z_ShowStates block="destination_block" show="available"/>
</select>
</td>
</tr>
</table>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="zips_multiple">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<td class="label-cell">&nbsp;</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<select name="CountrySelector" onChange="change_country()">
<inp2:z_ShowCountries block="destination_block" show="all"/>
</select>
<br />
<table>
<tr><td>
<inp2:m_Phrase label="la_zones_SelectedZips"/>:<br/>
<select name="location_list[]" id="location_list[]" multiple onchange="SelectToString(this)" size="10" style="width: 200px">
<inp2:z_ShowZips block="destination_block" show="current"/>
</select>
</td>
<td>
<input class="button" type=button onclick="MoveSelected(this.form.ShippingZoneIdChooser, document.getElementById('location_list[]'))" value="&lt;"><br/>
<input class="button" type=button onclick="MoveSelected(document.getElementById('location_list[]'), this.form.ShippingZoneIdChooser)" value="&gt;">
</td>
<td>
<inp2:m_Phrase label="la_zones_AvailableZips"/>:<br/>
<select name="ShippingZoneIdChooser" multiple size="10" style="width: 200px">
<inp2:z_ShowZips block="destination_block" show="available"/>
</select>
</td>
</tr>
</table>
<br>
<input type="text" name="zone_add" id="zone_add"> <input type="button" onClick="add_zone(document.getElementById('location_list[]'))" value="<inp2:m_Phrase label='la_btn_AddLocation'/>" class="button"/>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:z_SaveWarning name="grid_save_warning"/>
<inp2:z_ErrorWarning name="form_error_warning"/>
<!--## used for OnCountryChange event ##-->
<input type="hidden" name="z_id" value="<inp2:z_Field name='ZoneID'/>"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_ShippingZone!"/>
- <inp2:m_RenderElement name="inp_id_label" prefix="z" field="ZoneID" title="!la_fld_Id!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_ShippingZone"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="z" field="ZoneID" title="la_fld_Id"/>
- <inp2:m_RenderElement name="inp_label" prefix="z" field="ShippingTypeID" title="!la_fld_ShippingTypeId!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="z" field="ShippingTypeID" title="la_fld_ShippingTypeId"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="z" field="Name" title="!la_fld_ShipZoneName!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="z" field="CODallowed" title="!la_fld_CODallowed!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="z" field="Type" title="!la_fld_Zone_Type!"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="z" field="Name" title="la_fld_ShipZoneName" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="z" field="CODallowed" title="la_fld_CODallowed"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="z" field="Type" title="la_fld_Zone_Type"/>
<inp2:m_if check="z_Field" field="Type" equals_to="1" db="db">
<inp2:m_RenderElement name="countries_multiple" prefix="z" />
</inp2:m_if>
<inp2:m_if check="z_Field" field="Type" equals_to="2" db="db">
<inp2:m_RenderElement name="states_multiple" prefix="z" />
</inp2:m_if>
<inp2:m_if check="z_Field" field="Type" equals_to="3" db="db">
<inp2:m_RenderElement name="zips_multiple" prefix="z" />
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<input type="hidden" value="" name="location_id" id="location_id">
<input type="hidden" value="" name="selected_destinations" id="selected_destinations">
<input type="hidden" name="z_OriginalSaveEvent" id="z_OriginalSaveEvent" value="<inp2:z_SaveEvent/>">
<inp2:m_RenderElement name="inp_edit_hidden" prefix="z" field="ShippingTypeID"/>
<script>
document.getElementById('z[<inp2:z_field field="ZoneID"/>][Type]_1').onchange = change_type;
document.getElementById('z[<inp2:z_field field="ZoneID"/>][Type]_2').onchange = change_type;
document.getElementById('z[<inp2:z_field field="ZoneID"/>][Type]_3').onchange = change_type;
function change_type()
{
submit_event('z','OnTypeChange');
}
function change_country()
{
submit_event('z','OnCountryChange');
}
function remove_location(location_id)
{
document.getElementById('location_id').value = location_id;
submit_event('z', 'OnRemoveLocation');
}
function SelectToString(aSelect)
{
// written by Slava, patched by Alex, modified by SergeyG
var result = '';
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
if(aSelect.options[i].selected == true) result += cur.value+',';
}
if(result.length > 0) result = result.substring(0,result.length-1);
document.getElementById('selected_destinations').value = result;
return result;
}
function add_zone(aSelect){
var el = document.getElementById('zone_add');
if (el)
{
if (el.value=='') return;
var found = false;
var valueArray;
for (i = 0; i < aSelect.options.length; i++){
valueArray = aSelect.options[i].value.split("|");
if (valueArray[1] == el.value){
found = true;
break;
}
}
if (!found){
aSelect.options[aSelect.length] = new Option(el.value, '0|'+el.value);
el.value='';
}
}
}
function SelectContainsValue(selectObject, searchValue)
{
for (i = 0; i < selectObject.options.length; i++){
if (selectObject.options[i].text == searchValue){
return true;
}
}
return false;
}
function SelectToArray(aSelect)
{
var an_arr = new Array();
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
an_arr[an_arr.length] = new Array(cur.text, cur.value, cur.selected);
}
return an_arr;
}
function ArrayToSelect(anArray, aSelect)
{
var initial_length = aSelect.length;
for (var i=initial_length-1; i >= 0; i--) { aSelect.options[i] = null; }
for (var i=0; i < anArray.length; i++)
{
cur = anArray[i];
aSelect.options[aSelect.length] = new Option(cur[0], cur[1]);
}
}
function SelectCompare(a, b)
{
if (a[0] < b[0])
return -1;
if (a[0] > b[0])
return 1;
return 0;
}
function MoveSelected(FromList, ToList)
{
FromArr = SelectToArray(FromList);
ToArr = SelectToArray(ToList);
NewFrom = Array();
for (var i=FromArr.length-1; i >= 0; i--)
{
cur = FromArr[i];
if (cur[2] && !SelectContainsValue(ToList, cur[0])) {
ToArr[ToArr.length] = cur;
}
else if(SelectContainsValue(ToList, cur[0])) {
}
else {
NewFrom[NewFrom.length] = cur;
}
}
NewFrom.sort(SelectCompare);
ToArr.sort(SelectCompare);
FromList = ArrayToSelect(NewFrom, FromList);
ToList = ArrayToSelect(ToArr, ToList);
}
function SelectToString2(aSelect)
{
var result = '';
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
result += cur.value+',';
}
return result;
}
function SelectAll(aSelect)
{
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
aSelect.options[i].selected = true;
}
// -----------
}
function OnlySelectedToString(aSelect)
{
var result = '';
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
if (cur.selected)
result += cur.value+',';
}
return result;
}
function SelectMultipleSelected(aSelect, aStr)
{
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
if (aStr.match("(^|\,)+"+cur.value+"(,|$)+") ) {
aSelect.options[i].selected = true;
}
}
}
function SelectAll(aSelect)
{
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
aSelect.options[i].selected = true;
}
}
// --------------
</SCRIPT>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/affiliate_plans/affiliate_plans_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/affiliate_plans/affiliate_plans_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/affiliate_plans/affiliate_plans_edit.tpl (revision 14089)
@@ -1,107 +1,103 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ap" section="in-commerce:affiliate_plans" title_preset="affiliate_plans_edit" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('ap','<inp2:ap_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('ap','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('ap', '<inp2:ap_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('ap', '<inp2:ap_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="ap_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="ap_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="ap_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:ap_SaveWarning name="grid_save_warning"/>
<inp2:ap_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ap" field="AffiliatePlanId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ap" field="Name" title="!la_fld_Name!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="ap" field="PlanType" title="!la_fld_PlanType!"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="ap" field="ResetInterval" title="!la_fld_Period!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ap" field="IsPrimary" title="!la_fld_Primary!" onchange="check_status()" />
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ap" field="Enabled" title="!la_fld_Enabled!" onchange="check_primary()"/>
-
- <inp2:m_if check="ap_FieldVisible" field="MinPaymentAmount">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="ap" field="MinPaymentAmount" title="la_fld_MinimumPaymentAmount" />
- <td class="control-cell">
- <input type="text" name="<inp2:ap_InputName field='MinPaymentAmount' />" id="<inp2:ap_InputName field='MinPaymentAmount' />" value="<inp2:ap_Field name='MinPaymentAmount' />" tabindex="<inp2:m_get param='tab_index'/>" size="8">
- <span class="small">(<inp2:curr_PrimaryCurrencyISO />)</span>
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="ap" field="MinPaymentAmount"/>
- </tr>
- </inp2:m_if>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ap" field="AffiliatePlanId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ap" field="Name" title="la_fld_Name" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="ap" field="PlanType" title="la_fld_PlanType"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="ap" field="ResetInterval" title="la_fld_Period"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ap" field="IsPrimary" title="la_fld_Primary" onchange="check_status()" />
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ap" field="Enabled" title="la_fld_Enabled" onchange="check_primary()"/>
+
+ <inp2:m_RenderElement design="form_row" prefix="ap" field="MinPaymentAmount" title="la_fld_MinimumPaymentAmount">
+ <td class="control-cell">
+ <input type="text" name="<inp2:ap_InputName field='MinPaymentAmount' />" id="<inp2:ap_InputName field='MinPaymentAmount' />" value="<inp2:ap_Field name='MinPaymentAmount' />" tabindex="<inp2:m_get param='tab_index'/>" size="8">
+ <span class="small">(<inp2:curr_PrimaryCurrencyISO />)</span>
+ </td>
+ </inp2:m_RenderElement>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script type="text/javascript">
if(document.getElementById('_cb_<inp2:ap_InputName field="IsPrimary"/>').checked)
{
document.getElementById('_cb_<inp2:ap_InputName field="IsPrimary"/>').disabled = true;
document.getElementById('_cb_<inp2:ap_InputName field="Enabled"/>').disabled = true;
}
function check_status()
{
if(document.getElementById('_cb_<inp2:ap_InputName field="IsPrimary"/>').checked)
{
document.getElementById('_cb_<inp2:ap_InputName field="Enabled"/>').checked = true;
document.getElementById('<inp2:ap_InputName field="Enabled"/>').value = 1;
}
}
function check_primary()
{
if(!document.getElementById('_cb_<inp2:ap_InputName field="Enabled"/>').checked)
{
document.getElementById('_cb_<inp2:ap_InputName field="IsPrimary"/>').checked = false;
document.getElementById('<inp2:ap_InputName field="IsPrimary"/>').value = 0;
}
}
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/affiliate_plans/affiliates_payout.tpl
===================================================================
--- branches/5.2.x/admin_templates/affiliate_plans/affiliates_payout.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/affiliate_plans/affiliates_payout.tpl (revision 14089)
@@ -1,45 +1,45 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="affil" section="in-commerce:affiliates" title_preset="affiliates_payout"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_PayOut" escape="1"/>', function() {
submit_event('apayments','OnCreate');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('apayments','OnGoBack');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<inp2:apayments_SaveWarning name="grid_save_warning"/>
<inp2:apayments_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="apayments" field="AffiliateId"/>
- <inp2:m_RenderElement name="inp_label" prefix="apayments" field="AffiliateId" title="!la_fld_Username!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="apayments" field="AffiliateId" title="la_fld_Username"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="apayments" field="Amount" title="la_fld_Amount"/>
<inp2:m_RenderElement name="inp_edit_options" prefix="apayments" field="PaymentTypeId" title="la_fld_PaymentTypeId"/>
<inp2:m_RenderElement name="inp_edit_date_time" prefix="apayments" field="PaymentDate" title="la_fld_PaymentDate"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="apayments" field="PaymentReference" title="la_fld_PaymentReference"/>
<inp2:m_RenderElement name="inp_edit_textarea" prefix="apayments" field="Comment" title="la_fld_Comment" rows="10" cols="40"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/affiliate_plans/affiliate_payment_types_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/affiliate_plans/affiliate_payment_types_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/affiliate_plans/affiliate_payment_types_edit.tpl (revision 14089)
@@ -1,95 +1,95 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="apt" section="in-commerce:affiliate_payment_types" title_preset="affiliate_payment_types_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('apt','<inp2:apt_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('apt','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('apt', '<inp2:apt_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('apt', '<inp2:apt_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="apt_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="apt_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="apt_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:apt_SaveWarning name="grid_save_warning"/>
<inp2:apt_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="inp_id_label" prefix="apt" field="PaymentTypeId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="apt" field="Name" title="!la_fld_Name!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="apt" field="IsPrimary" title="!la_fld_IsPrimary!" onchange="check_status()"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="apt" field="Status" title="!la_fld_Enabled!" onchange="check_primary()"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="apt" field="Priority" title="!la_fld_Priority!" size="5"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="apt" field="Description" title="!la_fld_Description!" cols="40" rows="5"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="apt" field="PaymentTypeId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="apt" field="Name" title="la_fld_Name" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="apt" field="IsPrimary" title="la_fld_IsPrimary" onchange="check_status()"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="apt" field="Status" title="la_fld_Enabled" onchange="check_primary()"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="apt" field="Priority" title="la_fld_Priority" size="5"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="apt" field="Description" title="la_fld_Description" cols="40" rows="5"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script type="text/javascript">
if(document.getElementById('_cb_<inp2:apt_InputName field="IsPrimary"/>').checked)
{
document.getElementById('_cb_<inp2:apt_InputName field="IsPrimary"/>').disabled = true;
document.getElementById('_cb_<inp2:apt_InputName field="Status"/>').disabled = true;
}
function check_status()
{
if(document.getElementById('_cb_<inp2:apt_InputName field="IsPrimary"/>').checked)
{
document.getElementById('_cb_<inp2:apt_InputName field="Status"/>').checked = true;
document.getElementById('<inp2:apt_InputName field="Status"/>').value = 1;
}
}
function check_primary()
{
if(!document.getElementById('_cb_<inp2:apt_InputName field="Status"/>').checked)
{
document.getElementById('_cb_<inp2:apt_InputName field="IsPrimary"/>').checked = false;
document.getElementById('<inp2:apt_InputName field="IsPrimary"/>').value = 0;
}
}
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/affiliate_plans/affiliates_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/affiliate_plans/affiliates_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/affiliate_plans/affiliates_edit.tpl (revision 14089)
@@ -1,100 +1,100 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="affil" section="in-commerce:affiliates" title_preset="affiliates_edit" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('affil','<inp2:affil_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('affil','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('affil', '<inp2:affil_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('affil', '<inp2:affil_NextId/>');
}
) );
<inp2:m_if check="affil_IsNewMode" inverse="inverse">
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('in-commerce:pay_out', '<inp2:m_phrase label="la_ToolTip_PayOut" escape="1"/>', function() {
direct_edit('affil', '<inp2:m_t t="in-commerce/affiliate_plans/affiliates_payout" m_opener="d" apayments_event="OnNew" pass="all,apayments"/>');
}
) );
</inp2:m_if>
a_toolbar.Render();
<inp2:m_if check="affil_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="affil_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="affil_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:affil_SaveWarning name="grid_save_warning"/>
<inp2:affil_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
- <inp2:m_RenderElement name="inp_id_label" prefix="affil" field="AffiliateId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_user" prefix="affil" field="PortalUserId" title="!la_fld_Username!"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="affil" field="AffiliatePlanId" title="!la_fld_AffiliatePlan!"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="affil" field="PaymentTypeId" title="!la_fld_PaymentType!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="affil" field="SSN" title="!la_fld_SSN!" />
- <inp2:m_RenderElement name="inp_edit_radio" prefix="affil" field="Status" title="!la_fld_Status!"/>
- <inp2:m_RenderElement name="inp_edit_date" prefix="affil" field="CreatedOn" title="!la_fld_RegisteredOn!" />
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="affil" field="Comments" title="!la_fld_Comments!" cols="40" rows="5"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="affil" field="AffiliateId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_user" prefix="affil" field="PortalUserId" title="la_fld_Username"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="affil" field="AffiliatePlanId" title="la_fld_AffiliatePlan"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="affil" field="PaymentTypeId" title="la_fld_PaymentType"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="affil" field="SSN" title="la_fld_SSN" />
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="affil" field="Status" title="la_fld_Status"/>
+ <inp2:m_RenderElement name="inp_edit_date" prefix="affil" field="CreatedOn" title="la_fld_RegisteredOn" />
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="affil" field="Comments" title="la_fld_Comments" cols="40" rows="5"/>
<inp2:m_if check="affil_IsNewMode" inverse="inverse">
- <inp2:m_RenderElement name="subsection" title="!la_section_AdvertisingMaterials!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_AdvertisingMaterials"/>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_fld_AffiliateLink"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<a href="<inp2:affil_GetAffiliateLink template='index'/>" target="_blank"><inp2:affil_GetAffiliateLink template="index" prefix="_FRONT_"/></a>
</td>
</tr>
<inp2:m_RenderElement name="inp_label" prefix="affil" field="AffiliateCode" title="la_fld_AffiliateCode"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_Statistics!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Statistics"/>
<inp2:m_RenderElement name="inp_label" prefix="affil" field="AccumulatedAmount" title="la_fld_AccumulatedAmount" currency="selected"/>
<inp2:m_RenderElement name="inp_label" prefix="affil" field="ItemsSold" title="la_fld_ItemsSold"/>
<inp2:m_RenderElement name="inp_label" prefix="affil" field="AmountToPay" title="la_fld_AmountToPay" currency="selected"/>
<inp2:m_RenderElement name="inp_label" prefix="affil" field="LastPaymentDate_date" title="la_fld_LastPaymentDate"/>
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/affiliate_plans/affiliate_plans_brackets.tpl
===================================================================
--- branches/5.2.x/admin_templates/affiliate_plans/affiliate_plans_brackets.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/affiliate_plans/affiliate_plans_brackets.tpl (revision 14089)
@@ -1,176 +1,176 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ap" section="in-commerce:affiliate_plans" title_preset="affiliate_plans_brackets" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('ap','<inp2:ap_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('ap','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('ap', '<inp2:ap_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('ap', '<inp2:ap_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
function add_brackets()
{
submit_event('apbrackets', 'OnMoreBrackets')
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:more_brackets', '<inp2:m_phrase label="la_ToolTip_MoreBrackets" escape="1"/>', add_brackets) );
function infinity()
{
submit_event('apbrackets', 'OnInfinity');
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:infinity', '<inp2:m_phrase label="la_ToolTip_Infinity" escape="1"/>', infinity) );
function arrange_brackets()
{
submit_event('apbrackets', 'OnArrange')
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:arrange', '<inp2:m_phrase label="la_ToolTip_Arrange" escape="1"/>', arrange_brackets) );
a_toolbar.Render();
<inp2:m_if check="ap_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="ap_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="ap_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="pr_edit_box" >
<td>
<input type="text" size="<inp2:m_param name="size"/>" name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
tabindex="<inp2:m_get param="tab_index"/>"
value="<inp2:m_param name="$field"/>"
>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="pr_edit_max" >
<td>
<input type="text" size="10" name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
tabindex="<inp2:m_get param="tab_index"/>"
value="<inp2:m_param name="max"/>"
<inp2:m_if check="m_ParamEquals" param="next_min_id" value="">
<inp2:m_else />
onchange="set_start(<inp2:m_param name="id"/>, <inp2:m_param name="next_min_id"/>,'<inp2:m_param name="PrefixSpecial"/>')"
</inp2:m_if>
>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="pr_edit_min" >
<td>
<input type="hidden" name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="IdField"/>]" id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="IdField"/>]" value="<inp2:m_param name="id"/>">
<input type="text" size="10"
<inp2:m_if check="m_ParamEquals" param="first" value="1">
<inp2:m_inc param="tab_index" by="1"/>
tabindex="<inp2:m_get param="tab_index"/>"
<inp2:m_else/>
readonly
</inp2:m_if>
name="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="<inp2:m_param name="PrefixSpecial"/>[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
value="<inp2:m_param name="min"/>"
<inp2:m_if check="m_ParamEquals" param="first" value="1"><inp2:m_else/>disabled</inp2:m_if>
>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="prbracket">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="pr_edit_min" IdField="$IdField" PrefixSpecial="$PrefixSpecial" field="FromAmount" size="40" pass_params="true"/>
<inp2:m_RenderElement name="pr_edit_max" IdField="$IdField" PrefixSpecial="$PrefixSpecial" field="ToAmount" size="40" pass_params="true"/>
<inp2:m_RenderElement name="pr_edit_box" IdField="$IdField" PrefixSpecial="$PrefixSpecial" field="Percent" size="4" pass_params="true"/>
</tr>
</inp2:m_DefineElement>
<script>
function set_start(id, next_id, prefix_special)
{
//var next_id = id - 1;
var input_id = prefix_special + '[' + next_id + '][FromAmount]';
//var orig_id = prefix_special + '[' + id + '][FromAmount]';
if(document.getElementById(input_id) != null)
{
var new_value = parseInt(document.getElementById(prefix_special + '[' + id + '][ToAmount]').value);
if( isNaN(new_value) ) new_value = 0;
document.getElementById(prefix_special + '[' + id + '][ToAmount]').value = new_value;
document.getElementById(input_id).value = new_value;
}
}
function enableKernelFormFields()
{
var kForm = document.forms.kernel_form;
var elem = false;
for (var i=0; i<kForm.elements.length; i++){
elem = kForm.elements[i];
if (elem.type == "text" && elem.disabled == true){
elem.disabled = false;
}
}
}
</script>
<inp2:m_DefineElement name="pr_grid_th" >
<td class="columntitle_small"><inp2:m_phrase label="$phrase" /></td>
</inp2:m_DefineElement>
<inp2:apbrackets_SaveWarning name="grid_save_warning"/>
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="tableborder">
<tr nowrap="nowrap" class="grid-header-row-0">
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_FromAmount!"/>
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_ToAmount!"/>
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_Percent!"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_FromAmount"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_ToAmount"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_Percent"/>
</tr>
<inp2:apbrackets_ShowPricingForm block="prbracket" IdField="AffiliateBracketId"/>
</table>
<inp2:m_include t="incs/footer"/>
<script>
document.forms.kernel_form.onsubmit = enableKernelFormFields;
</script>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/taxes/taxes_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/taxes/taxes_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/taxes/taxes_edit.tpl (revision 14089)
@@ -1,382 +1,382 @@
<inp2:adm_SetPopupSize width="850" height="610"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="tax" section="in-commerce:taxes" title_preset="taxes_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
SelectAll(document.getElementById('location_list[]'));
SelectToString(document.getElementById('location_list[]'));
submit_event('tax','<inp2:tax_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('tax','OnCancel');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('tax', '<inp2:tax_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('tax', '<inp2:tax_NextId/>');
}
) );
a_toolbar.Render();
<inp2:m_if check="tax_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="tax_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="tax_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="destination_block" selected="">
<option value="<inp2:m_param name="id"/>" <inp2:m_param name="selected"/>><inp2:m_param name="destination_title"/></option>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="countries_multiple">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">&nbsp;</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<table>
<tr><td>
<inp2:m_Phrase label="la_zones_SelectedCountries"/>:<br/>
<select name="location_list[]" id="location_list[]" multiple onchange="SelectToString(this)" size="10" style="width: 200px">
<inp2:tax_ShowCountries block="destination_block" show="current"/>
</select>
</td>
<td>
<input class="button" type=button onclick="MoveSelected(document.getElementById('location_list[]'), this.form.TaxZoneIdChooser)" value="&gt;"><br>
<input class="button" type=button onclick="MoveSelected(this.form.TaxZoneIdChooser, document.getElementById('location_list[]'))" value="&lt;">
</td>
<td>
<inp2:m_Phrase label="la_zones_AvailableCountries"/>:<br/>
<select name="TaxZoneIdChooser" multiple size="10" size="10" style="width: 200px">
<inp2:tax_ShowCountries block="destination_block" show="available"/>
</select>
</td>
</tr>
</table>
<!-- <select name="<inp2:tax_InputName field="TaxZoneId" />" multiple> -->
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="states_multiple">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">&nbsp;</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<select name="CountrySelector" onChange="change_country()">
<inp2:tax_ShowCountries block="destination_block" show="has_states"/>
</select>
<br />
<table>
<tr><td>
<inp2:m_Phrase label="la_zones_SelectedStates"/>:<br/>
<select name="location_list[]" id="location_list[]" multiple onchange="SelectToString(this)" size="10" style="width: 200px">
<inp2:tax_ShowStates block="destination_block" show="current"/>
</select>
</td>
<td>
<input class="button" type=button onclick="MoveSelected(document.getElementById('location_list[]'), this.form.TaxZoneIdChooser)" value="&gt;"><br>
<input class="button" type=button onclick="MoveSelected(this.form.TaxZoneIdChooser, document.getElementById('location_list[]'))" value="&lt;">
</td>
<td>
<inp2:m_Phrase label="la_zones_AvailableStates"/>:<br/>
<select name="TaxZoneIdChooser" multiple size="10" style="width: 200px">
<inp2:tax_ShowStates block="destination_block" show="available"/>
</select>
</td>
</tr>
</table>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="zips_multiple">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">&nbsp;</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<select name="CountrySelector" onChange="change_country()">
<inp2:tax_ShowCountries block="destination_block" show="all"/>
</select>
<br />
<table>
<tr><td>
<inp2:m_Phrase label="la_zones_SelectedZips"/>:<br/>
<select name="location_list[]" id="location_list[]" multiple onchange="SelectToString(this)" size="10" style="width: 200px">
<inp2:tax_ShowZips block="destination_block" show="current"/>
</select>
</td>
<td>
<input class="button" type=button onclick="MoveSelected(document.getElementById('location_list[]'), this.form.TaxZoneIdChooser)" value="&gt;"><br>
<input class="button" type=button onclick="MoveSelected(this.form.TaxZoneIdChooser, document.getElementById('location_list[]'))" value="&lt;">
</td>
<td>
<inp2:m_Phrase label="la_zones_AvailableZips"/>:<br/>
<select name="TaxZoneIdChooser" multiple size="10" style="width: 200px">
<inp2:tax_ShowZips block="destination_block" show="available"/>
</select>
</td>
</tr>
</table>
<br>
<input type="text" name="zone_add" id="zone_add"> <input type="button" onClick="add_zone(document.getElementById('location_list[]'))" value="<inp2:m_Phrase label='la_btn_AddLocation'/>" class="button"/>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:tax_SaveWarning name="grid_save_warning"/>
<inp2:tax_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_TaxZone!"/>
- <inp2:m_RenderElement name="inp_id_label" prefix="tax" field="TaxZoneId" title="!la_fld_Id!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_TaxZone"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="tax" field="TaxZoneId" title="la_fld_Id"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="tax" field="Name" title="!la_fld_ZoneName!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="tax" field="TaxValue" title="!la_fld_TaxValue!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="tax" field="ApplyToShipping" title="!la_fld_TaxApplyToShipping!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="tax" field="ApplyToProcessing" title="!la_fld_TaxApplyToProcessing!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="tax" field="Type" title="!la_fld_ZoneType!"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="tax" field="Name" title="la_fld_ZoneName" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="tax" field="TaxValue" title="la_fld_TaxValue" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="tax" field="ApplyToShipping" title="la_fld_TaxApplyToShipping"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="tax" field="ApplyToProcessing" title="la_fld_TaxApplyToProcessing"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="tax" field="Type" title="la_fld_ZoneType"/>
<inp2:m_if check="tax_Field" field="Type" equals_to="1" db="db">
<inp2:m_RenderElement name="countries_multiple" prefix="tax" />
</inp2:m_if>
<inp2:m_if check="tax_Field" field="Type" equals_to="2" db="db">
<inp2:m_RenderElement name="states_multiple" prefix="tax" />
</inp2:m_if>
<inp2:m_if check="tax_Field" field="Type" equals_to="3" db="db">
<inp2:m_RenderElement name="zips_multiple" prefix="tax" />
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<input type="hidden" value="" name="location_id" id="location_id">
<input type="hidden" value="" name="selected_destinations" id="selected_destinations">
<input type="hidden" name="tax_OriginalSaveEvent" id="tax_OriginalSaveEvent" value="<inp2:tax_SaveEvent/>">
<script>
document.getElementById('tax[<inp2:tax_field field="TaxZoneId"/>][Type]_1').onchange = change_type;
document.getElementById('tax[<inp2:tax_field field="TaxZoneId"/>][Type]_2').onchange = change_type;
document.getElementById('tax[<inp2:tax_field field="TaxZoneId"/>][Type]_3').onchange = change_type;
function change_type()
{
submit_event('tax','OnTypeChange');
}
function change_country()
{
submit_event('tax','OnCountryChange');
}
function remove_location(location_id)
{
document.getElementById('location_id').value = location_id;
submit_event('tax', 'OnRemoveLocation');
}
function SelectToString(aSelect)
{
// written by Slava, patched by Alex, modified by SergeyG
var result = '';
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
if(aSelect.options[i].selected == true) result += cur.value+',';
}
if(result.length > 0) result = result.substring(0,result.length-1);
document.getElementById('selected_destinations').value = result;
return result;
}
function add_zone(aSelect){
var el = document.getElementById('zone_add');
if (el)
{
if (el.value=='') return;
var found = false;
var valueArray;
for (i = 0; i < aSelect.options.length; i++){
valueArray = aSelect.options[i].value.split("|");
if (valueArray[1] == el.value){
found = true;
break;
}
}
if (!found){
aSelect.options[aSelect.length] = new Option(el.value, '0|'+el.value);
el.value='';
}
}
}
function SelectContainsValue(selectObject, searchValue)
{
for (i = 0; i < selectObject.options.length; i++){
if (selectObject.options[i].text == searchValue){
return true;
}
}
return false;
}
function SelectToArray(aSelect)
{
var an_arr = new Array();
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
an_arr[an_arr.length] = new Array(cur.text, cur.value, cur.selected);
}
return an_arr;
}
function ArrayToSelect(anArray, aSelect)
{
var initial_length = aSelect.length;
for (var i=initial_length-1; i >= 0; i--) { aSelect.options[i] = null; }
for (var i=0; i < anArray.length; i++)
{
cur = anArray[i];
aSelect.options[aSelect.length] = new Option(cur[0], cur[1]);
}
}
function SelectCompare(a, b)
{
if (a[0] < b[0])
return -1;
if (a[0] > b[0])
return 1;
return 0;
}
function MoveSelected(FromList, ToList)
{
FromArr = SelectToArray(FromList);
ToArr = SelectToArray(ToList);
NewFrom = Array();
for (var i=FromArr.length-1; i >= 0; i--)
{
cur = FromArr[i];
if (cur[2] && !SelectContainsValue(ToList, cur[0])) {
ToArr[ToArr.length] = cur;
}
else if(SelectContainsValue(ToList, cur[0])) {
}
else {
NewFrom[NewFrom.length] = cur;
}
}
NewFrom.sort(SelectCompare);
ToArr.sort(SelectCompare);
FromList = ArrayToSelect(NewFrom, FromList);
ToList = ArrayToSelect(ToArr, ToList);
}
function SelectToString2(aSelect)
{
var result = '';
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
result += cur.value+',';
}
return result;
}
function SelectAll(aSelect)
{
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
aSelect.options[i].selected = true;
}
// -----------
}
function OnlySelectedToString(aSelect)
{
var result = '';
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
if (cur.selected)
result += cur.value+',';
}
return result;
}
function SelectMultipleSelected(aSelect, aStr)
{
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
if (aStr.match("(^|\,)+"+cur.value+"(,|$)+") ) {
aSelect.options[i].selected = true;
}
}
}
function SelectAll(aSelect)
{
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
aSelect.options[i].selected = true;
}
}
// --------------
</SCRIPT>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/reports/reports.tpl
===================================================================
--- branches/5.2.x/admin_templates/reports/reports.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/reports/reports.tpl (revision 14089)
@@ -1,97 +1,97 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="rep" section="in-commerce:reports" title_preset="report_options"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_RunReport" escape="1"/>', function() {
// set_hidden_field('progress_t', '../../plugins/reports/admin_templates/progress');
set_hidden_field('progress_t', 'in-commerce/reports/progress');
// set_hidden_field('reports_finish_t', '../../plugins/reports/admin_templates/results');
set_hidden_field('reports_finish_t', 'in-commerce/reports/results');
submit_event('rep','OnRunReport');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
-<table width="100%" border="0" cellspacing="0" cellpadding="4" class="tableborder">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+<table width="100%" class="bordered">
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="rep" field="ReportType" title="la_fld_ReportType" use_phrases="1"/>
- <inp2:m_RenderElement name="inp_edit_date" prefix="rep" field="FromDateTime" title="!la_fld_FromDateTime!"/>
- <inp2:m_RenderElement name="inp_edit_date" prefix="rep" field="ToDateTime" title="!la_fld_ToDateTime!"/>
+ <inp2:m_RenderElement name="inp_edit_date" prefix="rep" field="FromDateTime" title="la_fld_FromDateTime"/>
+ <inp2:m_RenderElement name="inp_edit_date" prefix="rep" field="ToDateTime" title="la_fld_ToDateTime"/>
<script type="text/javascript">
function updateTimeFrame(option) {
from_date = '';
to_date = '';
if (option == 'last_week') {
from_date = '<inp2:adm_TimeFrame type="last_week_start" format="_regional_InputDateFormat"/>';
to_date = '<inp2:adm_TimeFrame type="last_week_end" format="_regional_InputDateFormat"/>';
}
if (option == 'last_month') {
from_date = '<inp2:adm_TimeFrame type="last_month_start" format="_regional_InputDateFormat"/>';
to_date = '<inp2:adm_TimeFrame type="last_month_end" format="_regional_InputDateFormat"/>';
}
if (option == 'last_quater') {
from_date = '<inp2:adm_TimeFrame type="last_quater_start" format="_regional_InputDateFormat"/>';
to_date = '<inp2:adm_TimeFrame type="last_quater_end" format="_regional_InputDateFormat"/>';
}
if (option == 'last_6months') {
from_date = '<inp2:adm_TimeFrame type="last_6_months_start" format="_regional_InputDateFormat"/>';
to_date = '<inp2:adm_TimeFrame type="last_month_end" format="_regional_InputDateFormat"/>';
}
if (option == 'last_year') {
from_date = '<inp2:adm_TimeFrame type="last_year_start" format="_regional_InputDateFormat"/>';
to_date = '<inp2:adm_TimeFrame type="last_year_end" format="_regional_InputDateFormat"/>';
}
document.getElementById('<inp2:rep_InputName field="FromDateTime_date"/>').value = from_date;
document.getElementById('<inp2:rep_InputName field="ToDateTime_date"/>').value = to_date;
}
</script>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_Phrase label="la_comm_Timeframe"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<select id="timeframe" onchange="updateTimeFrame(this.value)">
<option value=""></option>
<option value="last_week"><inp2:m_Phrase label="lu_comm_LastWeek"/></option>
<option value="last_month"><inp2:m_Phrase label="lu_comm_LastMonth"/></option>
<option value="last_quater"><inp2:m_Phrase label="lu_comm_LastQuater"/></option>
<option value="last_6months"><inp2:m_Phrase label="lu_comm_Last6Months"/></option>
<option value="last_year"><inp2:m_Phrase label="lu_comm_LastYear"/></option>
</select>
</td>
</tr>
<!--<inp2:m_RenderElement name="inp_edit_checkbox" prefix="rep" field="Recursive" title="la_fld_Recursive"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="rep" field="SkipEmpty" title="la_fld_SkipEmpty"/>-->
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/export/export.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/export/export.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/export/export.tpl (revision 14089)
@@ -1,174 +1,171 @@
<inp2:adm_SetPopupSize width="780" height="670"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord.export" section="in-commerce:orders" title_preset="orders_export"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
document.getElementById('hidden_export_columns').value = select_to_string('<inp2:ord.export_InputName field="ExportColumns"/>');
submit_event('ord.export', 'OnExportBegin');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('ord.export', 'OnGoBack');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<inp2:ord.export_SaveWarning name="grid_save_warning"/>
<inp2:ord.export_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="ord.export" field="ExportFormat" title="la_fld_ExportFormat" use_phrases="0"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="ord.export" field="FieldsSeparatedBy" title="la_fld_FieldsSeparatedBy" size="2" maxlength="1"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="ord.export" field="FieldsEnclosedBy" title="la_fld_FieldsEnclosedBy" size="2" maxlength="1"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="ord.export" field="LineEndings" title="la_fld_LineEndings" use_phrases="0"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="ord.export" field="LineEndingsInside" title="la_fld_LineEndingsInside" use_phrases="0"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord.export" field="IncludeFieldTitles" title="la_fld_IncludeFieldTitles"/>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="ord.export" field="ExportPresets" title="la_fld_ExportPresets"/>
+ <inp2:m_RenderElement design="form_row" prefix="ord.export" field="ExportPresets" title="la_fld_ExportPresets">
<td class="control-cell">
<select tabindex="<inp2:m_get param="tab_index"/>" name="<inp2:ord.export_InputName field="ExportPresets"/>" id="<inp2:ord.export_InputName field="ExportPresets"/>" onchange="update_fields(this.value)">
<inp2:ord.export_PredefinedOptions field="ExportPresets" block="inp_option_item" selected="selected"/>
</select>
&nbsp;&nbsp;
<input class="button" type="button" value="<inp2:m_Phrase label="la_Text_Delete"/>" onclick="delete_preset()">
</td>
- </tr>
+ </inp2:m_RenderElement>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="ord.export" field="ExportColumns" title="la_fld_ExportColumns"/>
+ <inp2:m_RenderElement design="form_row" prefix="ord.export" field="ExportColumns" title="la_fld_ExportColumns">
<td class="control-cell">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<input type="button" value="<inp2:m_phrase name="la_btn_Up"/>" onclick="move_options_up('<inp2:ord.export_InputName field="ExportColumns"/>', 1)" class="button">
<input type="button" value="<inp2:m_phrase name="la_btn_Down"/>" onclick="move_options_down('<inp2:ord.export_InputName field="ExportColumns"/>', 1)" class="button"><br />
<img src="img/s.gif" width="1" height="5" alt=""><br />
</td>
<td><img src="img/s.gif" width="45" height="1" alt=""><br></td>
<td><inp2:m_phrase name="la_fld_AvailableColumns"/>:</td>
</tr>
<tr>
<td>
<select multiple id="<inp2:ord.export_InputName field="ExportColumns"/>" size="15" style="width: 225px;">
<inp2:ord.export_PredefinedOptions field="ExportColumns" block="inp_option_item" selected="selected"/>
</select>
<input type="hidden" id="hidden_export_columns" name="<inp2:ord.export_InputName field="ExportColumns"/>" value="<inp2:ord.export_Field field="ExportColumns"/>" />
</td>
<td align="center">
<input type="button" value="&nbsp;&laquo;&laquo;&nbsp;" onclick="move_selected('<inp2:ord.export_InputName field="AvailableColumns"/>', '<inp2:ord.export_InputName field="ExportColumns"/>')" class="button"><br>
<img src="img/s.gif" width="1" height="4" alt=""><br>
<input type="button" value="&nbsp;&raquo;&raquo;&nbsp;" onclick="move_selected('<inp2:ord.export_InputName field="ExportColumns"/>', '<inp2:ord.export_InputName field="AvailableColumns"/>'); select_sort('<inp2:ord.export_InputName field="AvailableColumns"/>');" class="button">
</td>
<td>
<select multiple id="<inp2:ord.export_InputName field="AvailableColumns"/>" size="15" style="width: 225px;">
<inp2:ord.export_PredefinedOptions field="AvailableColumns" block="inp_option_item" selected="selected"/>
</select>
</td>
</tr>
</table>
</td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="ord.export" field="ExportColumns"/>
- </tr>
+ </inp2:m_RenderElement>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord.export" field="ExportSavePreset" title="la_fld_ExportSavePreset" size="2" maxlength="1" onclick="update_preset_field(this.checked)"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="ord.export" field="ExportPresetName" title="la_fld_ExportPresetName" size="20" />
<inp2:m_RenderElement name="inp_edit_box" prefix="ord.export" field="ExportFilename" title="la_fld_ExportFilename" size="20" />
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script type="text/javascript" src="incs/ajax.js"></script>
<script type="text/javascript">
var delete_busy = false;
function delete_preset()
{
if (!confirm('<inp2:m_Phrase label="la_ConfirmDeleteExportPreset" js_escape="1"/>')) return;
var $kf = document.getElementById('kernel_form');
tmp = $kf.elements['events[ord.export]'].value;
$kf.elements['events[ord.export]'].value = 'OnDeleteExportPreset';
Request.method = 'POST';
Request.params = Request.serializeForm($kf);
$kf.elements['events[ord.export]'].value = tmp;
Request.makeRequest('<inp2:m_t ajax="1" ord.export_event="OnDeleteExportPreset" js_escape="1" no_amp="1"/>', delete_busy, '', function() {
presets = document.getElementById('<inp2:ord.export_InputName field="ExportPresets"/>');
-
+
for (i=0; i< presets.options.length; i++) {
if (presets.options[i].selected) {
presets.options.remove[i];
}
}
presets.options[0].selected = true;
}, function() {alert('error')} );
}
function update_preset_field(status)
{
if (status) {
presets = document.getElementById('<inp2:ord.export_InputName field="ExportPresets"/>');
if ( presets.value != '' ) {
for (i=0; i< presets.options.length; i++) {
if (presets.options[i].selected) {
preset_name = presets.options[i].text
}
}
document.getElementById('<inp2:ord.export_InputName field="ExportPresetName"/>').value = preset_name;
}
}
document.getElementById('<inp2:ord.export_InputName field="ExportPresetName"/>').disabled = !status;
}
function update_fields(preset)
{
$export = select_to_string(document.getElementById('<inp2:ord.export_InputName field="ExportColumns"/>'));
if ($export != '') {
string_to_selected($export, document.getElementById('<inp2:ord.export_InputName field="ExportColumns"/>'));
move_selected('<inp2:ord.export_InputName field="ExportColumns"/>', '<inp2:ord.export_InputName field="AvailableColumns"/>');
}
av = document.getElementById('<inp2:ord.export_InputName field="AvailableColumns"/>');
fields = preset.split('|');
for (var i=0; i<fields.length; i++) {
fld = fields[i];
var $cur = null;
for (var $i = 0; $i < av.length; $i++)
{
cur = av.options[$i];
if (cur.value == fld) {
av.options[$i].selected = true;
move_selected('<inp2:ord.export_InputName field="AvailableColumns"/>', '<inp2:ord.export_InputName field="ExportColumns"/>');
}
else {
av.options[$i].selected = false;
}
}
}
}
update_preset_field(document.getElementById('<inp2:ord.export_InputName field="ExportPresetName"/>').checked)
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/export/export_finish.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/export/export_finish.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/export/export_finish.tpl (revision 14089)
@@ -1,45 +1,45 @@
<inp2:adm_SetPopupSize width="780" height="670"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord.export" section="in-commerce:orders" title_preset="orders_export"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Close" escape="1"/>', function() {
submit_event('ord.export', 'OnGoBack');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_DownloadExportFile"/>
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<a href="<inp2:ord.export_ExportPath as_url="1"/>"><inp2:ord.export_ExportPath /></a>
</td>
</tr>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/orders_blocks.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/orders_blocks.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/orders_blocks.tpl (revision 14089)
@@ -1,302 +1,302 @@
<inp2:m_DefineElement name="product_image">
<img src="<inp2:m_param name="img_path" />" title="<inp2:m_param name="alt" />" alt="<inp2:m_param name="alt" />" <inp2:m_param name="img_size" /> border="0" />
</inp2:m_DefineElement>
<inp2:m_DefineElement name="order_print_element">
<table cellspacing="0" cellpadding="2" width="100%" border="0" class="order_print_defaults">
<tr>
<td colspan="3" align="left">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td width="50%" align="left" valign="top">
<h2><inp2:m_GetConfig name="Comm_StoreName"/></h2>
</td>
<td width="50%" align="right">
<inp2:m_if check="m_ConfigEquals" name="Comm_AddressLine1" value="" inverse="inverse">
<inp2:m_GetConfig name="Comm_AddressLine1"/><br>
</inp2:m_if>
<inp2:m_if check="m_ConfigEquals" name="Comm_AddressLine2" value="" inverse="inverse">
<inp2:m_GetConfig name="Comm_AddressLine2"/><br>
</inp2:m_if>
<inp2:ord_PrintLocation type="Company"/><br />
E-Mail: <inp2:m_GetConfig name="Comm_Contacts_Email"/><br />
Phone: <inp2:m_GetConfig name="Comm_Contacts_Phone"/><br />
Fax: <inp2:m_GetConfig name="Comm_Contacts_Fax"/><br />
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3">
<br />
<center>
<h3>Order Number: <inp2:ord_Field field="OrderNumber"/></h3>
<inp2:ord_Field field="OrderDate" format="_regional_DateFormat"/><br />
</center>
<br />
</td>
</tr>
<inp2:m_if check="ord_Field" name="ShippingTo">
<tr>
<td width="50%" valign="top">
<br />
<!-- shipping -->
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="order_preview_field_name">Ship To:</td>
<td><inp2:ord_Field field="ShippingTo"/></td>
</tr>
<inp2:m_if check="ord_Field" name="ShippingEmail">
<tr>
<td class="order_preview_field_name">Email Address:</td>
<td><inp2:ord_Field field="ShippingEmail"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="ShippingPhone">
<tr>
<td class="order_preview_field_name">Phone:</td>
<td><inp2:ord_Field field="ShippingPhone"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="ShippingFax">
<tr>
<td class="order_preview_field_name">Fax Number:</td>
<td><inp2:ord_Field field="ShippingFax"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="ShippingCompany">
<tr>
<td class="order_preview_field_name">Company:</td>
<td><inp2:ord_Field field="ShippingCompany"/></td>
</tr>
</inp2:m_if>
<tr>
<td class="order_preview_field_name" style="vertical-align: top;">Address:</td>
<td>
<inp2:m_if check="ord_FieldEquals" field="ShippingAddress1" value="" inverse="inverse" >
<inp2:ord_Field field="ShippingAddress1"/><br>
</inp2:m_if>
<inp2:m_if check="ord_FieldEquals" field="ShippingAddress2" value="" inverse="inverse" >
<inp2:ord_Field field="ShippingAddress2"/><br>
</inp2:m_if>
<inp2:ord_PrintLocation type="Shipping"/>
</td>
</tr>
</table>
</td>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingTo">
<td width="50%" valign="top">
<!-- billing -->
<br />
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="order_preview_field_name">Bill To:</td>
<td><inp2:ord_Field field="BillingTo"/></td>
</tr>
<inp2:m_if check="ord_Field" name="BillingEmail">
<tr>
<td class="order_preview_field_name">Email Address:</td>
<td><inp2:ord_Field field="BillingEmail"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingPhone">
<tr>
<td class="order_preview_field_name">Phone:</td>
<td><inp2:ord_Field field="BillingPhone"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingFax">
<tr>
<td class="order_preview_field_name">Fax Number:</td>
<td><inp2:ord_Field field="BillingFax"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingCompany">
<tr>
<td class="order_preview_field_name">Company:</td>
<td><inp2:ord_Field field="BillingCompany"/></td>
</tr>
</inp2:m_if>
<tr>
<td class="order_preview_field_name" style="vertical-align: top;">Address:</td>
<td>
<inp2:m_if check="ord_FieldEquals" field="BillingAddress1" value="" inverse="inverse" >
<inp2:ord_Field field="BillingAddress1"/><br>
</inp2:m_if>
<inp2:m_if check="ord_FieldEquals" field="BillingAddress2" value="" inverse="inverse" >
<inp2:ord_Field field="BillingAddress2"/><br>
</inp2:m_if>
<inp2:ord_PrintLocation type="Billing"/>
</td>
</tr>
</table>
</td>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="ShippingTo" inverse="inverse"><td width="50%" valign="top">&nbsp;</td></inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingTo" inverse="inverse"><td width="50%" valign="top">&nbsp;</td></inp2:m_if>
</tr>
</table>
<br /><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0" class="orders_print_flat_table"<inp2:m_if check="ord_NextId"> style="page-break-after: always;"</inp2:m_if>>
<tr class="order_print_preview_header">
<td width="70%"<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders"> colspan="2"</inp2:m_if>>Product</td>
<td width="10%">Quantity</td>
<td width="10%">Price</td>
<td width="10%">Total</td>
</tr>
<inp2:m_DefineElement name="option_value_element">
<inp2:m_param name="value"/> <inp2:m_if check="m_ParamEquals" name="price" value=""><inp2:m_else/> (<inp2:m_param name="sign"/><inp2:m_param name="price"/> <inp2:m_param name="price_type"/>)</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="is_last" value="1"><inp2:m_else/>, </inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_element">
<inp2:m_if check="m_ParamEquals" param="type" value="6"> <!-- checkboxes - multiple -->
<strong><inp2:m_param name="option"/>:</strong>
<inp2:PrintOptionValues render_as="option_value_element"/>
<inp2:m_else/>
<strong><inp2:m_param name="option"/>:</strong> <inp2:m_param name="value"/>
<inp2:m_if check="m_ParamEquals" name="price" value=""><inp2:m_else/> (<inp2:m_param name="sign"/><inp2:m_param name="price"/> <inp2:m_param name="price_type"/>)</inp2:m_if>
</inp2:m_if><br/>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_value_element_no_price">
<inp2:m_param name="value"/>
<inp2:m_if check="m_ParamEquals" name="is_last" value="1"><inp2:m_else/>, </inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_element_no_price">
<inp2:m_if check="m_ParamEquals" param="type" value="6"> <!-- checkboxes - multiple -->
<strong><inp2:m_param name="option"/>:</strong>
<inp2:PrintOptionValues render_as="option_value_element_no_price"/>
<inp2:m_else/>
<strong><inp2:m_param name="option"/>:</strong> <inp2:m_param name="value"/>
</inp2:m_if><br/>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="order_detail_row">
<tr>
<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">
<td valign="top" width="120">
<inp2:p_Image render_as="product_image" thumbnail="1" DefaultImage="../../in-commerce/admin_templates/img/itemicons/no_picture_list.gif" MaxWidth="120" MaxHeight="120" DefaultWidth="120" />
</td>
</inp2:m_if>
<td align="left" width="100%">
<inp2:{$PrefixSpecial}_Field field="ProductName"/><br/>
<small><strong>SKU: </strong><inp2:Field field="SKU"/></small>
<inp2:m_if check="HasOptions">
<br/>
<small>
<inp2:m_if check="DisplayOptionsPricing"> <!-- selectable options or overriding combination -->
<inp2:PrintOptions render_as="option_element"/>
<inp2:m_else/> <!-- listed combinations -->
<inp2:PrintOptions render_as="option_element_no_price"/>
</inp2:m_if>
</small>
<br/>
</inp2:m_if>
<inp2:m_if check="HasDiscount">
<br />
<inp2:m_Phrase label="lu_comm_RegularPrice" />: <inp2:Field name="FlatPrice" /><br />
<inp2:m_Phrase label="lu_comm_Discount" />: - <inp2:Field name="ItemDiscount" />
</inp2:m_if>
</td>
<td align="right" nowrap><inp2:{$PrefixSpecial}_Field field="Quantity"/></td>
<td align="right" nowrap><inp2:{$PrefixSpecial}_Field field="Price"/></td>
<td align="right" nowrap><inp2:{$PrefixSpecial}_Field field="ExtendedPrice"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:orditems_PrintList block="order_detail_row" per_page="-1" requery="1"/>
<tr>
<td align="left"<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders"> colspan="2"</inp2:m_if>>
<inp2:m_if check="ord_Field" name="CouponId">
<span class="order_preview_field_name"><inp2:m_Phrase label="la_CouponCode"/>:</span> <inp2:ord_Field field="CouponCode"/><br />
</inp2:m_if>
<inp2:m_if check="ord_FieldEquals" field="DiscountTotal" value="0.00" inverse="inverse">
<span class="order_preview_field_name"><inp2:m_Phrase label="la_TotalSavings"/>:</span> <inp2:ord_Field field="DiscountTotal"/><br />
</inp2:m_if>
</td>
<td align="right" nowrap colspan="2" class="order-totals-name"><inp2:m_Phrase label="la_SubTotal"/></td>
<td align="right" nowrap>
<inp2:m_if check="ord_FieldEquals" name="VAT" value="0.00">
<inp2:ord_Field field="AmountWithoutVAT"/>
<inp2:m_else />
<inp2:ord_Field field="SubTotal"/>
</inp2:m_if>
</td>
</tr>
<inp2:m_DefineElement name="shipping_total">
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_ShippingHandling"/><inp2:m_if check="ord_ShippingType"> (<inp2:ord_ShippingType />)</inp2:m_if></td>
<td align="right" nowrap><inp2:ord_Field field="ShippingCost"/></td>
</tr>
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_Insurance_Fee"/>:</td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="InsuranceFee"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="vat_total">
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_VAT"/> <inp2:ord_Field field="VATPercent"/>%</td>
<td align="right" nowrap><inp2:ord_Field field="VAT"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="processing_total">
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_ProcessingFee"/> :</td>
<td align="right" nowrap><inp2:ord_Field field="ProcessingFee"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="return_total">
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_fld_TotalReturns"/>:</td>
<td align="right" nowrap class="arial2">-<inp2:ord_Field field="ReturnTotal"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:ord_PrintTotals
shipping_render_as="shipping_total"
processing_render_as="processing_total"
vat_render_as="vat_total"
return_render_as="return_total"/>
<inp2:m_if check="ord_Field" field="GiftCertificateId">
<tr>
- <td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="!la_fld_Gift_Certificate_Number!"/>:</td>
+ <td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_fld_Gift_Certificate_Number"/>:</td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="GiftCertificateCode"/></td>
</tr>
<tr>
- <td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="!la_fld_Gift_Certificate_Amount_Applied!"/>:</td>
+ <td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_fld_Gift_Certificate_Amount_Applied"/>:</td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="GiftCertificateDiscount"/></td>
</tr>
</inp2:m_if>
<tr>
<td align="right" colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>"><span class="order_preview_field_name">Total:</span></td>
<td align="right" nowrap><span class="order_preview_field_name"><inp2:ord_Field field="TotalAmount"/></span></td>
</tr>
<inp2:m_if check="ord_HasOriginalAmount" >
<tr>
<td align="right" colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>"><span class="order_preview_field_name">Original Amount:</span></td>
<td align="right" nowrap><span class="order_preview_field_name"><inp2:ord_Field field="OriginalAmount"/></span></td>
</tr>
</inp2:m_if>
</table>
</inp2:m_DefineElement>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/orders_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/orders_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/orders_edit.tpl (revision 14089)
@@ -1,137 +1,129 @@
<inp2:adm_SetPopupSize width="820" height="570"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord" section="in-commerce:orders" title_preset="orders_edit_general" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('ord','<inp2:ord_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('ord','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('ord', '<inp2:ord_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('ord', '<inp2:ord_NextId/>');
}
) );
// a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="ord_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
// a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="ord_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="ord_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="ord" field="Status" db="db"/>
<inp2:ord_SaveWarning name="grid_save_warning"/>
<inp2:ord_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
- <inp2:m_RenderElement name="inp_id_label" prefix="ord" field="OrderId" title="!la_fld_OrderId!"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="ord" field="OrderId" title="la_fld_OrderId"/>
<inp2:m_if check="ord_OrderEditable">
- <inp2:m_if check="ord_FieldVisible" field="Number">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="ord" field="Number" title="!la_fld_OrderNumber!"/>
- <td class="control-cell">
- <input type="text" name="<inp2:ord_InputName field='Number'/>" id="<inp2:ord_InputName field='Number'/>" value="<inp2:ord_Field field='Number' db='db'/>" tabindex="<inp2:m_get param='tab_index'/>" size="6" maxlength="6" class="text">
- -<inp2:m_inc param="tab_index" by="1"/>
- <input type="text" name="<inp2:ord_InputName field='SubNumber'/>" id="<inp2:ord_InputName field='SubNumber' db='db'/>" value="<inp2:ord_Field field='SubNumber'/>" tabindex="<inp2:m_get param='tab_index'/>" size="2" maxlength="3" class="text">
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="ord" field="OrderNumber"/>
- </tr>
- </inp2:m_if>
+ <inp2:m_RenderElement design="form_row" prefix="ord" field="OrderNumber" title="la_fld_OrderNumber">
+ <td class="control-cell">
+ <input type="text" name="<inp2:ord_InputName field='Number'/>" id="<inp2:ord_InputName field='Number'/>" value="<inp2:ord_Field field='Number' db='db'/>" tabindex="<inp2:m_get param='tab_index'/>" size="6" maxlength="6" class="text">
+ -<inp2:m_inc param="tab_index" by="1"/>
+ <input type="text" name="<inp2:ord_InputName field='SubNumber'/>" id="<inp2:ord_InputName field='SubNumber' db='db'/>" value="<inp2:ord_Field field='SubNumber'/>" tabindex="<inp2:m_get param='tab_index'/>" size="2" maxlength="3" class="text">
+ </td>
+ </inp2:m_RenderElement>
<inp2:m_if check="m_IsDebugMode" >
- <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="Status" title="!la_fld_Status!"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="Status" title="la_fld_Status"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="Status" title="!la_fld_Status!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="Status" title="la_fld_Status"/>
</inp2:m_if>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="OrderDate" title="!la_fld_Date!"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="OrderDate" title="la_fld_Date"/>
- <inp2:m_RenderElement name="inp_edit_user" prefix="ord" field="PortalUserId" title="!la_fld_Username!" size="15"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="OrderIP" title="!la_fld_OrderIP!"/>
+ <inp2:m_RenderElement name="inp_edit_user" prefix="ord" field="PortalUserId" title="la_fld_Username" size="15"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="OrderIP" title="la_fld_OrderIP"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord" field="OnHold" title="la_fld_OnHold"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_Affiliate!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Affiliate"/>
<inp2:m_if check="ord_FieldEquals" field="AffiliateId" value="0">
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateId" title="!la_fld_AffiliateUser!" as_label="1"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateId" title="la_fld_AffiliateUser" as_label="1"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateId" title="!la_fld_AffiliateUser!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateId" title="la_fld_AffiliateUser"/>
</inp2:m_if>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateCommission" title="!la_fld_AffiliateCommission!" currency="selected"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateCommission" title="la_fld_AffiliateCommission" currency="selected"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_Comments!"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="ord" field="UserComment" title="!la_fld_UserComment!" control_options="{min_height: 100}" rows="10" cols="40"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="ord" field="AdminComment" title="!la_fld_AdminComment!" control_options="{min_height: 100}" rows="10" cols="40"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Comments"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="ord" field="UserComment" title="la_fld_UserComment" control_options="{min_height: 100}" rows="10" cols="40"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="ord" field="AdminComment" title="la_fld_AdminComment" control_options="{min_height: 100}" rows="10" cols="40"/>
<inp2:m_else/>
- <inp2:m_if check="ord_FieldVisible" field="Number">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="ord" field="Number" title="!la_fld_OrderNumber!"/>
- <td class="control-cell">
- <inp2:ord_Field field="OrderNumber"/>
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="ord" field="OrderNumber"/>
- </tr>
- </inp2:m_if>
-
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="Status" title="!la_fld_Status!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="OrderDate" title="!la_fld_Date!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PortalUserId" title="!la_fld_Username!" size="15"/>
+ <inp2:m_RenderElement design="form_row" prefix="ord" field="OrderNumber" title="la_fld_OrderNumber">
+ <td class="control-cell">
+ <inp2:ord_Field field="OrderNumber"/>
+ </td>
+ </inp2:m_RenderElement>
+
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="Status" title="la_fld_Status"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="OrderDate" title="la_fld_Date"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PortalUserId" title="la_fld_Username" size="15"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="OrderIP" title="!la_fld_OrderIP!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="OrderIP" title="la_fld_OrderIP"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord" field="OnHold" title="la_fld_OnHold"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_Affiliate!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Affiliate"/>
<inp2:m_if check="ord_FieldEquals" field="AffiliateId" value="0">
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateId" title="!la_fld_AffiliateUser!" as_label="1"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateId" title="la_fld_AffiliateUser" as_label="1"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateId" title="!la_fld_AffiliateUser!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateId" title="la_fld_AffiliateUser"/>
</inp2:m_if>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateCommission" title="!la_fld_AffiliateCommission!" currency="selected"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="AffiliateCommission" title="la_fld_AffiliateCommission" currency="selected"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_Comments!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="UserComment" title="!la_fld_UserComment!" control_options="{min_height: 100}" rows="10" cols="40"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="ord" field="AdminComment" title="!la_fld_AdminComment!" control_options="{min_height: 100}" rows="10" cols="40"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Comments"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="UserComment" title="la_fld_UserComment" control_options="{min_height: 100}" rows="10" cols="40"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="ord" field="AdminComment" title="la_fld_AdminComment" control_options="{min_height: 100}" rows="10" cols="40"/>
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/orders_edit_billing.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/orders_edit_billing.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/orders_edit_billing.tpl (revision 14089)
@@ -1,228 +1,218 @@
<inp2:adm_SetPopupSize width="820" height="570"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord" section="in-commerce:orders" title_preset="orders_edit_billing" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('ord','<inp2:ord_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('ord','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('ord', '<inp2:ord_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('ord', '<inp2:ord_NextId/>');
}
) );
<inp2:m_if check="ord_OrderEditable">
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('reset_to_user', '<inp2:m_phrase label="la_ToolTip_ResetToUser" escape="1"/>', function() {
submit_event('ord','OnResetToUser');
}
) );
a_toolbar.AddButton( new ToolBarButton('in-commerce:reset_to_shipping', '<inp2:m_phrase label="la_ToolTip_ResetToShipping" escape="1"/>', function() {
submit_event('ord','OnResetToShipping');
}
) );
</inp2:m_if>
a_toolbar.Render();
<inp2:m_if check="ord_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="ord_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="ord_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function OpenGWResults(field) {
openSelector('ord', '<inp2:m_Link template="in-commerce/orders/gw_results" pass="m,ord"/>&field=' + field, '', '500x400');
}
</script>
<inp2:m_DefineElement name="inp_gwresults" is_last="" as_label="" currency="" is_last="">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
+ <inp2:m_RenderElement design="form_row" pass_params="1">
<td class="control-cell">
<inp2:m_if check="m_Param" name="display_field"><inp2:m_Param name="display_field"/>: <inp2:Field name="$field" format="$display_field"/></inp2:m_if>
<a href="javascript:OpenGWResults('<inp2:m_param name="field"/>')"><inp2:m_Phrase label="la_Details"/></a>
</td>
- <inp2:m_RenderElement name="inp_edit_error" pass_params="1"/>
- </tr>
+ </inp2:m_RenderElement>
</inp2:m_DefineElement>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="ord" field="Status" db="db"/>
<inp2:ord_SaveWarning name="grid_save_warning"/>
<inp2:ord_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_OrderBilling!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_OrderBilling"/>
<inp2:m_if check="ord_OrderEditable">
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingTo" title="!la_fld_BillingTo!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingCompany" title="!la_fld_BillingCompany!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingPhone" title="!la_fld_BillingPhone!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingFax" title="!la_fld_BillingFax!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingEmail" title="!la_fld_BillingEmail!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingAddress1" title="!la_fld_BillingAddress1!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingAddress2" title="!la_fld_BillingAddress2!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingCity" title="!la_fld_BillingCity!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingState" title="!la_fld_BillingState!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingZip" title="!la_fld_BillingZip!" size="10"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="BillingCountry" title="!la_fld_BillingCountry!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="PaymentType" title="!la_fld_PaymentType!" onchange="submit_event('ord','OnPreSave');"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingTo" title="la_fld_BillingTo" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingCompany" title="la_fld_BillingCompany" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingPhone" title="la_fld_BillingPhone" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingFax" title="la_fld_BillingFax" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingEmail" title="la_fld_BillingEmail" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingAddress1" title="la_fld_BillingAddress1" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingAddress2" title="la_fld_BillingAddress2" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingCity" title="la_fld_BillingCity" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingState" title="la_fld_BillingState" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="BillingZip" title="la_fld_BillingZip" size="10"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="BillingCountry" title="la_fld_BillingCountry" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="PaymentType" title="la_fld_PaymentType" onchange="submit_event('ord','OnPreSave');"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord" field="IsRecurringBilling" title="!la_fld_IsRecurringBilling!"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="NextCharge" title="!la_fld_NextCharge!"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord" field="IsRecurringBilling" title="la_fld_IsRecurringBilling"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="NextCharge" title="la_fld_NextCharge"/>
- <!--<inp2:m_RenderElement name="inp_gwresults" prefix="ord" display_field="score" field="VerificationResult" title="!la_fld_VerificationResult!" />-->
+ <!--<inp2:m_RenderElement name="inp_gwresults" prefix="ord" display_field="score" field="VerificationResult" title="la_fld_VerificationResult" />-->
<inp2:m_if check="ord_UsingCreditCard">
- <inp2:m_RenderElement name="subsection" title="!la_section_CreditCard!"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="PaymentCardType" title="!la_fld_PaymentCardType!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="PaymentAccount" title="!la_fld_CreditCardNumber!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="PaymentNameOnCard" title="!la_fld_PaymentNameOnCard!" size="20"/>
-
- <inp2:m_if check="ord_FieldVisible" field="PaymentCCExpDate">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="ord" field="PaymentCCExpDate" title="!la_fld_PaymentCCExpDate!"/>
- <td class="control-cell">
- <input type="text" size="3" maxlength="2" name="<inp2:ord_InputName field="PaymentCCExpMonth"/>" id="<inp2:ord_InputName field="PaymentCCExpMonth"/>" value="<inp2:ord_Field field="PaymentCCExpMonth"/>">
- /
- <input type="text" size="3" maxlength="2" name="<inp2:ord_InputName field="PaymentCCExpYear"/>" id="<inp2:ord_InputName field="PaymentCCExpYear"/>" value="<inp2:ord_Field field="PaymentCCExpYear"/>">
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="ord" field="PaymentCCExpDate"/>
- </tr>
- </inp2:m_if>
-
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="PaymentCVV2" title="!la_fld_PaymentCVV2!" size="5" maxlength="5"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="PaymentExpires" title="!la_fld_PaymentExpires!" size="16"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord" field="ChargeOnNextApprove" title="!la_fld_ChargeOnNextApprove!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_CreditCard"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="PaymentCardType" title="la_fld_PaymentCardType"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="PaymentAccount" title="la_fld_CreditCardNumber" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="PaymentNameOnCard" title="la_fld_PaymentNameOnCard" size="20"/>
+
+ <inp2:m_RenderElement design="form_row" prefix="ord" field="PaymentCCExpDate" title="la_fld_PaymentCCExpDate">
+ <td class="control-cell">
+ <input type="text" size="3" maxlength="2" name="<inp2:ord_InputName field="PaymentCCExpMonth"/>" id="<inp2:ord_InputName field="PaymentCCExpMonth"/>" value="<inp2:ord_Field field="PaymentCCExpMonth"/>">
+ /
+ <input type="text" size="3" maxlength="2" name="<inp2:ord_InputName field="PaymentCCExpYear"/>" id="<inp2:ord_InputName field="PaymentCCExpYear"/>" value="<inp2:ord_Field field="PaymentCCExpYear"/>">
+ </td>
+ </inp2:m_RenderElement>
+
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="PaymentCVV2" title="la_fld_PaymentCVV2" size="5" maxlength="5"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="PaymentExpires" title="la_fld_PaymentExpires" size="16"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord" field="ChargeOnNextApprove" title="la_fld_ChargeOnNextApprove"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="PaymentAccount" title="!la_fld_PaymentAccount!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="PaymentExpires" title="!la_fld_PaymentDate!" size="16"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="PaymentAccount" title="la_fld_PaymentAccount" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="PaymentExpires" title="la_fld_PaymentDate" size="16"/>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="GWResult1" db="db">
- <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="GWResult1" title="!la_fld_AuthorizationResult!" />
+ <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="GWResult1" title="la_fld_AuthorizationResult" />
</inp2:m_if>
<inp2:m_if check="ord_Field" name="GWResult2" db="db">
- <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="GWResult2" title="!la_fld_CaptureResult!" />
+ <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="GWResult2" title="la_fld_CaptureResult" />
</inp2:m_if>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingTo" title="!la_fld_BillingTo!" size="40"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingCompany" title="!la_fld_BillingCompany!" size="40"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingPhone" title="!la_fld_BillingPhone!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingFax" title="!la_fld_BillingFax!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingEmail" title="!la_fld_BillingEmail!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingAddress1" title="!la_fld_BillingAddress1!" size="40"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingAddress2" title="!la_fld_BillingAddress2!" size="40"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingCity" title="!la_fld_BillingCity!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingState" title="!la_fld_BillingState!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingZip" title="!la_fld_BillingZip!" size="10"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingCountry" title="!la_fld_BillingCountry!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentType" title="!la_fld_PaymentType!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingTo" title="la_fld_BillingTo" size="40"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingCompany" title="la_fld_BillingCompany" size="40"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingPhone" title="la_fld_BillingPhone" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingFax" title="la_fld_BillingFax" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingEmail" title="la_fld_BillingEmail" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingAddress1" title="la_fld_BillingAddress1" size="40"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingAddress2" title="la_fld_BillingAddress2" size="40"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingCity" title="la_fld_BillingCity" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingState" title="la_fld_BillingState" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingZip" title="la_fld_BillingZip" size="10"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="BillingCountry" title="la_fld_BillingCountry" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentType" title="la_fld_PaymentType"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord" field="IsRecurringBilling" title="!la_fld_IsRecurringBilling!"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="NextCharge" title="!la_fld_NextCharge!"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="ord" field="IsRecurringBilling" title="la_fld_IsRecurringBilling"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="NextCharge" title="la_fld_NextCharge"/>
- <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="VerificationResult" display_field="score" title="!la_fld_VerificationResult!" />
+ <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="VerificationResult" display_field="score" title="la_fld_VerificationResult" />
<inp2:m_if check="ord_UsingCreditCard">
- <inp2:m_RenderElement name="subsection" title="!la_section_CreditCard!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentCardType" title="!la_fld_PaymentCardType!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentAccount" title="!la_fld_CreditCardNumber!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentNameOnCard" title="!la_fld_PaymentNameOnCard!"/>
-
- <inp2:m_if check="ord_FieldVisible" field="PaymentCCExpDate">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="ord" field="PaymentCCExpDate" title="!la_fld_PaymentCCExpDate!"/>
- <td class="control-cell">
- <inp2:ord_Field field="PaymentCCExpMonth"/> / <inp2:ord_Field field="PaymentCCExpYear"/>
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="ord" field="PaymentCCExpDate"/>
- </tr>
- </inp2:m_if>
+ <inp2:m_RenderElement name="subsection" title="la_section_CreditCard"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentCardType" title="la_fld_PaymentCardType"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentAccount" title="la_fld_CreditCardNumber"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentNameOnCard" title="la_fld_PaymentNameOnCard"/>
+
+ <inp2:m_RenderElement design="form_row" prefix="ord" field="PaymentCCExpDate" title="la_fld_PaymentCCExpDate">
+ <td class="control-cell">
+ <inp2:ord_Field field="PaymentCCExpMonth"/> / <inp2:ord_Field field="PaymentCCExpYear"/>
+ </td>
+ </inp2:m_RenderElement>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentCVV2" title="!la_fld_PaymentCVV2!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentExpires" title="!la_fld_PaymentExpires!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentCVV2" title="la_fld_PaymentCVV2"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentExpires" title="la_fld_PaymentExpires"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentAccount" title="!la_fld_PaymentAccount!"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentExpires" title="!la_fld_PaymentDate!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentAccount" title="la_fld_PaymentAccount"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="PaymentExpires" title="la_fld_PaymentDate"/>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="GWResult1" db="db">
- <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="GWResult1" title="!la_fld_AuthorizationResult!" />
+ <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="GWResult1" title="la_fld_AuthorizationResult" />
</inp2:m_if>
<inp2:m_if check="ord_Field" name="GWResult2" db="db">
- <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="GWResult2" title="!la_fld_CaptureResult!" />
+ <inp2:m_RenderElement name="inp_gwresults" prefix="ord" field="GWResult2" title="la_fld_CaptureResult" />
</inp2:m_if>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="CouponId">
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="CouponCode" title="!la_fld_CouponCode!" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="CouponCode" title="la_fld_CouponCode" />
</inp2:m_if>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="DiscountTotal" title="!la_fld_TotalSavings!" />
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ReturnTotal" title="!la_fld_TotalReturns!" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="DiscountTotal" title="la_fld_TotalSavings" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ReturnTotal" title="la_fld_TotalReturns" />
<inp2:m_if check="ord_FieldEquals" name="VAT" value="0.00">
<inp2:m_else />
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="AmountWithoutVAT" title="!la_fld_SubTotal!" />
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="VAT" title="!la_fld_VAT!" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="AmountWithoutVAT" title="la_fld_SubTotal" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="VAT" title="la_fld_VAT" />
</inp2:m_if>
<inp2:m_if check="ord_Field" name="GiftCertificateId">
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="GiftCertificateCode" title="!la_fld_Gift_Certificate_Number!" />
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="GiftCertificateDiscount" title="!la_fld_Gift_Certificate_Amount_Applied!" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="GiftCertificateCode" title="la_fld_Gift_Certificate_Number" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="GiftCertificateDiscount" title="la_fld_Gift_Certificate_Amount_Applied" />
</inp2:m_if>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="TotalAmount" title="!la_fld_TotalAmount!" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="TotalAmount" title="la_fld_TotalAmount" />
<inp2:m_if check="ord_HasOriginalAmount" >
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="OriginalAmount" title="!la_fld_OriginalAmount!" />
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="OriginalAmount" title="la_fld_OriginalAmount" />
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<input type="hidden" name="to_tab" value="Billing">
<input type="hidden" name="check_billing_address" value="true" />
<inp2:m_if check="ord_UsingCreditCard">
<input type="hidden" name="check_credit_card" value="true" />
</inp2:m_if>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/orders_edit_preview.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/orders_edit_preview.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/orders_edit_preview.tpl (revision 14089)
@@ -1,390 +1,390 @@
<inp2:adm_SetPopupSize width="820" height="570"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord" section="in-commerce:orders" title_preset="orders_edit_preview" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('ord','<inp2:ord_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('ord','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('ord', '<inp2:ord_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('ord', '<inp2:ord_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('print', '<inp2:m_phrase label="la_ToolTip_Print" escape="1"/>', function() {
openSelector('ord', '<inp2:m_Link template="in-commerce/orders/orders_edit_print" pass="all"/>', '', '750x700');
}
) );
<inp2:m_if check="ord_OrderEditable">
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_PlaceOrder" escape="1"/>', function() {
submit_event('ord','OnCompleteOrder');
}
) );
</inp2:m_if>
a_toolbar.Render();
<inp2:m_if check="ord_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="ord_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="ord_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:ord_SaveWarning name="grid_save_warning"/>
<inp2:ord_ErrorWarning name="form_error_warning"/>
-<table width="100%" border="0" cellspacing="0" cellpadding="4" class="tableborder">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+<table class="edit-form">
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text">
<inp2:m_phrase label="la_fld_OrderNumber"/>:
</td>
<td>
<inp2:ord_Field field="OrderNumber"/> (<inp2:ord_Field field="Status"/>)
</td>
<td>&nbsp;</td>
</tr>
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text">
<inp2:m_phrase label="la_fld_Date"/>:
</td>
<td>
<inp2:ord_Field field="OrderDate"/>
</td>
<td>&nbsp;</td>
</tr>
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text">
<inp2:m_phrase label="la_fld_Username"/>:
</td>
<td>
<inp2:ord_Field field="PortalUserId"/> (<inp2:ord_Field field="CustomerName"/>)
</td>
<td>&nbsp;</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" width="100%" class="tableborder">
<tr>
<td>
<table cellspacing="0" cellpadding="2" width="100%" border="0">
<tr class="subsectiontitle">
<td colspan="2">
<inp2:m_Phrase label="la_comm_ShippingBillingInfo"/>
</td>
</tr>
<tr>
<inp2:m_if check="ord_Field" name="ShippingTo">
<td width="50%" class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>" style="vertical-align: top">
<!-- shipping -->
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="la_fld_ShippingTo"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="ShippingTo"/></td>
</tr>
<inp2:m_if check="ord_Field" name="ShippingEmail">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="lu_field_email"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="ShippingEmail"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="ShippingPhone">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="lu_comm_PhoneNumber"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="ShippingPhone"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="ShippingFax">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="lu_comm_FaxNumber"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="ShippingFax"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="ShippingCompany">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="lu_shipping_Company"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="ShippingCompany"/></td>
</tr>
</inp2:m_if>
<tr>
<td class="order_preview_field_name" style="vertical-align: top;">Address:</td>
<td class="order_preview_field_value">
<inp2:m_if check="ord_FieldEquals" field="ShippingAddress1" value="" inverse="inverse" >
<inp2:ord_Field field="ShippingAddress1"/><br>
</inp2:m_if>
<inp2:m_if check="ord_FieldEquals" field="ShippingAddress2" value="" inverse="inverse" >
<inp2:ord_Field field="ShippingAddress2"/><br>
</inp2:m_if>
<inp2:ord_PrintLocation type="Shipping"/>
</td>
</tr>
</table>
</td>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingTo">
<td width="50%" class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>" style="vertical-align: top">
<!-- billing -->
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="la_fld_BillingTo"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="BillingTo"/></td>
</tr>
<inp2:m_if check="ord_Field" name="BillingEmail">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="lu_billing_Email"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="BillingEmail"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingPhone">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="lu_comm_PhoneNumber"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="BillingPhone"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingFax">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="lu_comm_FaxNumber"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="BillingFax"/></td>
</tr>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingCompany">
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="lu_billing_Company"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="BillingCompany"/></td>
</tr>
</inp2:m_if>
<tr>
<td class="order_preview_field_name" style="vertical-align: top;"><inp2:m_phrase label="lu_billing_Address"/>:</td>
<td class="order_preview_field_value">
<inp2:m_if check="ord_FieldEquals" field="BillingAddress1" value="" inverse="inverse" >
<inp2:ord_Field field="BillingAddress1"/><br>
</inp2:m_if>
<inp2:m_if check="ord_FieldEquals" field="BillingAddress2" value="" inverse="inverse" >
<inp2:ord_Field field="BillingAddress2"/><br>
</inp2:m_if>
<inp2:ord_PrintLocation type="Billing"/>
</td>
</tr>
<tr>
<td class="order_preview_field_name"><inp2:m_phrase label="la_fld_PaymentType"/>:</td>
<td class="order_preview_field_value"><inp2:ord_Field field="PaymentType"/></td>
</tr>
</table>
</td>
</inp2:m_if>
<inp2:m_if check="ord_Field" name="ShippingTo" inverse="inverse"><td width="50%" valign="top">&nbsp;</td></inp2:m_if>
<inp2:m_if check="ord_Field" name="BillingTo" inverse="inverse"><td width="50%" valign="top">&nbsp;</td></inp2:m_if>
</tr>
<tr class="subsectiontitle">
<td colspan="2">
<inp2:m_Phrase label="la_comm_OrderContents"/>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" width="100%" border="0" class="orders_flat_table">
<tr class="subsectiontitle">
<td width="70%"<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders"> colspan="2"</inp2:m_if> nowrap><inp2:m_Phrase label="la_col_Product"/></td>
<td width="10%" nowrap style="text-align: center"><inp2:m_Phrase label="la_col_Quantity"/></td>
<td width="10%" nowrap style="text-align: right"><inp2:m_Phrase label="la_col_Price"/></td>
<td width="10%" nowrap style="text-align: right"><inp2:m_Phrase label="la_col_ExtendedPrice"/></td>
</tr>
<inp2:m_DefineElement name="option_value_element">
<inp2:m_param name="value"/> <inp2:m_if check="m_ParamEquals" name="price" value=""><inp2:m_else/> (<inp2:m_param name="sign"/><inp2:m_param name="price"/> <inp2:m_param name="price_type"/>)</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="is_last" value="1"><inp2:m_else/>, </inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_element">
<inp2:m_if check="m_ParamEquals" param="type" value="6"> <!-- checkboxes - multiple -->
<strong><inp2:m_param name="option"/>:</strong>
<inp2:PrintOptionValues render_as="option_value_element"/>
<inp2:m_else/>
<strong><inp2:m_param name="option"/>:</strong> <inp2:m_param name="value"/>
<inp2:m_if check="m_ParamEquals" name="price" value=""><inp2:m_else/> (<inp2:m_param name="sign"/><inp2:m_param name="price"/> <inp2:m_param name="price_type"/>)</inp2:m_if>
</inp2:m_if><br/>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_value_element_no_price">
<inp2:m_param name="value"/>
<inp2:m_if check="m_ParamEquals" name="is_last" value="1"><inp2:m_else/>, </inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_element_no_price">
<inp2:m_if check="m_ParamEquals" param="type" value="6"> <!-- checkboxes - multiple -->
<strong><inp2:m_param name="option"/>:</strong>
<inp2:PrintOptionValues render_as="option_value_element_no_price"/>
<inp2:m_else/>
<strong><inp2:m_param name="option"/>:</strong> <inp2:m_param name="value"/>
</inp2:m_if><br/>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="product_image">
<img src="<inp2:m_param name="img_path" />" title="<inp2:m_param name="alt" />" alt="<inp2:m_param name="alt" />" <inp2:m_param name="img_size" /> border="0" />
</inp2:m_DefineElement>
<inp2:m_DefineElement name="order_detail_row">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">
<td valign="top" width="120">
<inp2:p_Image render_as="product_image" thumbnail="1" DefaultImage="../../in-commerce/admin_templates/img/itemicons/no_picture_list.gif" MaxWidth="120" MaxHeight="120" DefaultWidth="120" />
</td>
</inp2:m_if>
<td align="left" valign="top" width="100%">
<strong><inp2:{$PrefixSpecial}_Field field="ProductName"/></strong><br/>
<small><strong>SKU: </strong><inp2:Field field="SKU"/></small>
<inp2:m_if check="HasOptions">
<br/>
<small>
<inp2:m_if check="DisplayOptionsPricing"> <!-- selectable options or overriding combination -->
<inp2:PrintOptions render_as="option_element"/>
<inp2:m_else/> <!-- listed combinations -->
<inp2:PrintOptions render_as="option_element_no_price"/>
</inp2:m_if>
</small>
<br/>
</inp2:m_if>
<inp2:m_if check="HasDiscount">
<br />
<inp2:m_Phrase label="lu_comm_RegularPrice" />: <inp2:Field name="FlatPrice" /><br />
<inp2:m_Phrase label="lu_comm_Discount" />: - <inp2:Field name="ItemDiscount" />
</inp2:m_if>
</td>
<td align="right" nowrap style="text-align: center"><inp2:{$PrefixSpecial}_Field field="Quantity"/></td>
<td align="right" nowrap><inp2:{$PrefixSpecial}_Field field="Price"/></td>
<td align="right" nowrap><inp2:{$PrefixSpecial}_Field field="ExtendedPrice"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:orditems_PrintList block="order_detail_row" per_page="-1"/>
<tr style="border-top: 2px solid black">
<td align="left"<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders"> colspan="2"</inp2:m_if>>
<inp2:m_if check="ord_Field" name="CouponId">
<span class="order_preview_field_name"><inp2:m_Phrase label="la_CouponCode"/>:</span> <inp2:ord_Field field="CouponCode"/><br />
</inp2:m_if>
<inp2:m_if check="ord_FieldEquals" field="DiscountTotal" value="0.00" inverse="inverse">
<span class="order_preview_field_name"><inp2:m_Phrase label="la_TotalSavings"/>:</span> <inp2:ord_Field field="DiscountTotal"/><br />
</inp2:m_if>
</td>
<td align="right" nowrap colspan="2" class="order-totals-name"><inp2:m_Phrase label="la_SubTotal"/>:</td>
<td align="right" nowrap class="arial2">
<inp2:m_if check="ord_FieldEquals" name="VAT" value="0.00">
<inp2:ord_Field field="AmountWithoutVAT"/>
<inp2:m_else />
<inp2:ord_Field field="SubTotal"/>
</inp2:m_if>
</td>
</tr>
<inp2:m_DefineElement name="shipping_total">
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_ShippingHandling"/><inp2:m_if check="ord_ShippingType"> (<inp2:ord_ShippingType />):</inp2:m_if></td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="ShippingCost"/></td>
</tr>
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_Insurance_Fee"/>:</td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="InsuranceFee"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="vat_total">
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_VAT"/> <inp2:ord_Field field="VATPercent"/>%:</td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="VAT"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="processing_total">
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_ProcessingFee"/>:</td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="ProcessingFee"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="return_total">
<tr>
<td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_fld_TotalReturns"/>:</td>
<td align="right" nowrap class="arial2">-<inp2:ord_Field field="ReturnTotal"/></td>
</tr>
</inp2:m_DefineElement>
<inp2:ord_PrintTotals
shipping_render_as="shipping_total"
processing_render_as="processing_total"
vat_render_as="vat_total"
return_render_as="return_total"/>
<inp2:m_if check="ord_Field" field="GiftCertificateId">
<tr>
- <td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="!la_fld_Gift_Certificate_Number!"/>:</td>
+ <td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_fld_Gift_Certificate_Number"/>:</td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="GiftCertificateCode"/></td>
</tr>
<tr>
- <td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="!la_fld_Gift_Certificate_Amount_Applied!"/>:</td>
+ <td align="right" nowrap colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">4<inp2:m_else/>3</inp2:m_if>" class="order-totals-name"><inp2:m_Phrase label="la_fld_Gift_Certificate_Amount_Applied"/>:</td>
<td align="right" nowrap class="arial2"><inp2:ord_Field field="GiftCertificateDiscount"/></td>
</tr>
</inp2:m_if>
<tr>
<td align="right" colspan="<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders">3<inp2:m_else/>2</inp2:m_if>">&nbsp;</td>
<td align="right"><span class="order_preview_field_name">Total:</span></td>
<td align="right" nowrap><span class="order_preview_field_name"><inp2:ord_Field field="TotalAmount"/></span></td>
</tr>
<inp2:m_if check="ord_HasOriginalAmount" >
<tr>
<td align="right"<inp2:m_if check="m_GetConfig" name="ShowProductImagesInOrders"> colspan="2"</inp2:m_if>>&nbsp;</td>
<td align="right" colspan="2" nowrap><span class="order_preview_field_name"><inp2:m_Phrase label="la_fld_OriginalAmount"/>:</span></td>
<td align="right" nowrap <span class="order_preview_field_name"><inp2:ord_Field field="OriginalAmount"/></span></td>
</tr>
</inp2:m_if>
</table>
</td>
</tr>
</table>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/orders_edit_shipping.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/orders_edit_shipping.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/orders_edit_shipping.tpl (revision 14089)
@@ -1,250 +1,250 @@
<inp2:adm_SetPopupSize width="820" height="570"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord" section="in-commerce:orders" title_preset="orders_edit_shipping" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('ord','<inp2:ord_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('ord','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('ord', '<inp2:ord_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('ord', '<inp2:ord_NextId/>');
}
) );
<inp2:m_if check="ord_OrderEditable">
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('reset_to_user', '<inp2:m_phrase label="la_ToolTip_ResetToUser" escape="1"/>', function() {
submit_event('ord','OnResetToUser');
}
) );
a_toolbar.AddButton( new ToolBarButton('in-commerce:reset_to_billing', '<inp2:m_phrase label="la_ToolTip_ResetToBilling" escape="1"/>', function() {
submit_event('ord','OnResetToBilling');
}
) );
</inp2:m_if>
a_toolbar.Render();
<inp2:m_if check="ord_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="ord_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="ord_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="ord" field="Status" db="db"/>
<inp2:ord_SaveWarning name="grid_save_warning"/>
-<inp2:m_if check="m_Recall" name="usps_errors">
- <table width="100%" border="0" cellspacing="0" cellpadding="4" class="warning-table">
- <tr>
- <td valign="top" class="form-warning">
- <inp2:m_Recall name="usps_errors" />
- <inp2:m_RemoveVar name="usps_errors"/>
- </td>
- </tr>
- </table>
-</inp2:m_if>
+<inp2:m_RenderElement design="form_message" id="sqe_error" style="display: none;" pass_params="1">
+ &nbsp;
+</inp2:m_RenderElement>
<inp2:ord_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_OrderShipping!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_OrderShipping"/>
<inp2:m_if check="ord_OrderEditable">
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingTo" title="!la_fld_ShippingTo!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingCompany" title="!la_fld_ShippingCompany!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingPhone" title="!la_fld_ShippingPhone!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingFax" title="!la_fld_ShippingFax!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingEmail" title="!la_fld_ShippingEmail!" size="20"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingAddress1" title="!la_fld_ShippingAddress1!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingAddress2" title="!la_fld_ShippingAddress2!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingCity" title="!la_fld_ShippingCity!" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingTo" title="la_fld_ShippingTo" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingCompany" title="la_fld_ShippingCompany" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingPhone" title="la_fld_ShippingPhone" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingFax" title="la_fld_ShippingFax" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingEmail" title="la_fld_ShippingEmail" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingAddress1" title="la_fld_ShippingAddress1" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingAddress2" title="la_fld_ShippingAddress2" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingCity" title="la_fld_ShippingCity" size="20"/>
<script type="text/javascript">
function update_address()
{
submit_event('ord','OnQuietPreSave');
}
</script>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingState" title="!la_fld_ShippingState!" size="20" />
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingZip" title="!la_fld_ShippingZip!" size="10"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="ShippingCountry" title="!la_fld_ShippingCountry!" size="20" />
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingState" title="la_fld_ShippingState" size="20" />
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingZip" title="la_fld_ShippingZip" size="10"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="ord" field="ShippingCountry" title="la_fld_ShippingCountry" size="20" />
<inp2:m_DefineElement name="order_option">
<input onclick="submit_event('ord','OnQuietPreSave');" class="simple" type="radio" <inp2:m_param name="checked"/> name="<inp2:InputName field="$field"/>" id="<inp2:InputName field="$field"/>_<inp2:m_param name="key"/>" value="<inp2:m_param name="key"/>"><label for="<inp2:InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_phrase label="$option"/></label>&nbsp;<br>
</inp2:m_DefineElement>
- <!-- <inp2:m_RenderElement name="inp_edit_radio" prefix="ord" field="ShippingOption" title="!la_fld_ShippingOption!" size="20" /> -->
+ <!-- <inp2:m_RenderElement name="inp_edit_radio" prefix="ord" field="ShippingOption" title="la_fld_ShippingOption" size="20" /> -->
<inp2:m_DefineElement name="order_shipping_type">
<option <inp2:m_param name="selected"/> value="<inp2:m_param name="ShippingId"/>"><inp2:m_param name="ShippingName"/> (<inp2:m_param name="TotalCost"/>)
</inp2:m_DefineElement>
<inp2:m_DefineElement name="order_shipment">
<tr class="<inp2:m_odd_even var="shipping_odd_even" odd="table-color1" even="table-color2"/>">
<td style="border-right: 1px solid black"><inp2:m_param name="shipment"/></td>
<td>
<select style="width:230px;" name="<inp2:m_param name="field_name"/>" id="<inp2:m_param name="field_name"/>">
- <inp2:ord_PrintShippingTypes block="order_shipping_type" />
+ <inp2:ord_PrintShippingTypes block="order_shipping_type" currency="selected"/>
</select>
</td>
</tr>
</inp2:m_DefineElement>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_Phrase label="la_fld_ShippingOptions"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<inp2:ord_PredefinedOptions field="ShippingOption" block="order_option" selected="checked" />
</td>
</tr>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_Phrase label="la_fld_ShippingType"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<table border="0" cellspacing="1" cellpadding="3" width="100%" style="border: 1px solid black; border-collapse: collapse">
<tr class="subsectiontitle" style="border-bottom: 1px solid black">
<td width="25%" style="border-right: 1px solid black"><b><inp2:m_Phrase label="lu_ship_Shipment" /></b></td>
<td width="45%" style="border-right: 1px solid black"><b><inp2:m_Phrase label="lu_ship_ShippingType" /></b></td>
</tr>
- <inp2:ord_PrintShippings block="order_shipment"/>
+ <inp2:ord_PrintShippings block="order_shipment" currency="selected"/>
</table>
</td>
</tr>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingCost" title="!la_fld_ShippingCost!" size="10"/>
-
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="InsuranceFee" title="!la_fld_InsuranceFee!" size="10" format="$ %.2f"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingCustomerAccount" title="!la_fld_ShippingCustomerAccount!" size="30"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingTracking" title="!la_fld_ShippingTracking!" size="30"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="ShippingDate" title="!la_fld_ShippingDate!" size="16"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingCost" title="la_fld_ShippingCost" size="10"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="InsuranceFee" title="la_fld_InsuranceFee" size="10" currency="selected"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingCustomerAccount" title="la_fld_ShippingCustomerAccount" size="30"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="ord" field="ShippingTracking" title="la_fld_ShippingTracking" size="30"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="ord" field="ShippingDate" title="la_fld_ShippingDate" size="16"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingTo" title="!la_fld_ShippingTo!" size="40"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCompany" title="!la_fld_ShippingCompany!" size="40"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingPhone" title="!la_fld_ShippingPhone!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingFax" title="!la_fld_ShippingFax!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingEmail" title="!la_fld_ShippingEmail!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingAddress1" title="!la_fld_ShippingAddress1!" size="40"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingAddress2" title="!la_fld_ShippingAddress2!" size="40"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCity" title="!la_fld_ShippingCity!" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingTo" title="la_fld_ShippingTo" size="40"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCompany" title="la_fld_ShippingCompany" size="40"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingPhone" title="la_fld_ShippingPhone" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingFax" title="la_fld_ShippingFax" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingEmail" title="la_fld_ShippingEmail" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingAddress1" title="la_fld_ShippingAddress1" size="40"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingAddress2" title="la_fld_ShippingAddress2" size="40"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCity" title="la_fld_ShippingCity" size="20"/>
<script type="text/javascript">
function update_address()
{
submit_event('ord','OnQuietPreSave');
}
</script>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCountry" title="!la_fld_ShippingCountry!" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingState" title="!la_fld_ShippingState!" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCountry" title="la_fld_ShippingCountry" size="20"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingState" title="la_fld_ShippingState" size="20"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingZip" title="!la_fld_ShippingZip!" size="10"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingZip" title="la_fld_ShippingZip" size="10"/>
<inp2:m_DefineElement name="order_option_label">
<inp2:m_param name="key"/> <inp2:m_phrase label="$option"/>
</inp2:m_DefineElement>
- <!--inp2:m_ParseBlock name="inp_edit_radio" prefix="ord" field="ShippingOption" title="!la_fld_ShippingOption!" size="20"/-->
+ <!--inp2:m_ParseBlock name="inp_edit_radio" prefix="ord" field="ShippingOption" title="la_fld_ShippingOption" size="20"/-->
<inp2:m_DefineElement name="order_shipping_type">
<option <inp2:m_param name="selected"/> value="<inp2:m_param name="ShippingId"/>"><inp2:m_param name="ShippingName"/> (<inp2:m_param name="TotalCost"/>)
</inp2:m_DefineElement>
<inp2:m_DefineElement name="order_shipment_label">
- <inp2:m_param name="shipment"/> - <inp2:ord_PrintShippingTypes block="order_shipping_type" selected_only="1"/>
+ <inp2:m_param name="shipment"/> - <inp2:ord_PrintShippingTypes block="order_shipping_type" currency="selected" selected_only="1"/>
</inp2:m_DefineElement>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingOption" title="!la_fld_ShippingOptions!" size="10"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingOption" title="la_fld_ShippingOptions" size="10"/>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_Phrase label="la_fld_ShippingType"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
- <inp2:ord_PrintShippings block="order_shipment_label"/>
+ <inp2:ord_PrintShippings block="order_shipment_label" currency="selected"/>
</td>
</tr>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCost" title="!la_fld_ShippingCost!" size="10" format="$ %.2f"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCost" title="la_fld_ShippingCost" size="10" format="$ %.2f"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="InsuranceFee" title="!la_fld_InsuranceFee!" size="10" format="$ %.2f"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCustomerAccount" title="!la_fld_ShippingCustomerAccount!" size="30"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="InsuranceFee" title="la_fld_InsuranceFee" size="10" format="$ %.2f"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingCustomerAccount" title="la_fld_ShippingCustomerAccount" size="30"/>
<inp2:m_DefineElement name="inp_shipping_label" is_last="" as_label="" currency="" is_last="">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
+ <inp2:m_RenderElement design="form_row" pass_params="1">
<td valign="top" class="control-cell">
<inp2:{$prefix}_Field field="$field" as_label="$as_label" currency="$currency"/>
<inp2:m_if check="{$prefix}_USPSLabelFound" field="$field">
&nbsp; &nbsp;<a href="#" onClick="javascript:submit_event('<inp2:m_Param name="prefix"/>', 'OnDownloadLabel'); return false;"><inp2:m_Phrase label="la_ViewLabel"/></a>
</inp2:m_if>
</td>
- </tr>
+ </inp2:m_RenderElement>
</inp2:m_DefineElement>
- <inp2:m_RenderElement name="inp_shipping_label" prefix="ord" field="ShippingTracking" title="!la_fld_ShippingTracking!" size="30"/>
+ <inp2:m_RenderElement name="inp_shipping_label" prefix="ord" field="ShippingTracking" title="la_fld_ShippingTracking" size="30"/>
- <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingDate" title="!la_fld_ShippingDate!" size="16"/>
+ <inp2:m_RenderElement name="inp_label" prefix="ord" field="ShippingDate" title="la_fld_ShippingDate" size="16"/>
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<input type="hidden" name="to_tab" value="Shipping">
<input type="hidden" name="check_shipping_address" value="true" />
+<inp2:m_if check="m_Recall" name="sqe_error">
+ <script type="text/javascript">
+ var $error_table = $('#sqe_error');
+ $('td:first', $error_table).html('<inp2:m_Recall name="sqe_error" js_escape="1"/>');
+ $error_table.show();
+ <inp2:m_RemoveVar name="sqe_error"/>
+ </script>
+</inp2:m_if>
+
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/orders_search_list.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/orders_search_list.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/orders_search_list.tpl (revision 14089)
@@ -1,71 +1,71 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord.search" section="in-commerce:orders" grid="Search" title_preset="orders_search" pagination="1" tabs="in-commerce/orders/orders_list_tabs"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
//do not rename - this function is used in default grid for double click!
function edit()
{
set_hidden_field('remove_specials[ord.search]',1);
std_edit_item('ord.search', 'in-commerce/orders/orders_edit');
}
var a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('in-commerce:goto_order', '<inp2:m_phrase label="la_ToolTip_GoToOrder" escape="1"/>',
function() {
submit_event('ord.search','OnGoToOrder');
} ) );
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('export', '<inp2:m_phrase label="la_ToolTip_Export" escape="1"/>', function() {
set_hidden_field('export_finish_t', 'in-commerce/orders/export/export_finish');
set_hidden_field('export_progress_t', 'in-commerce/orders/export/export_progress');
open_popup('ord.search', 'OnExport', 'in-commerce/orders/export/export');
}
) );
a_toolbar.AddButton( new ToolBarButton('print', '<inp2:m_phrase label="la_ToolTip_Print" escape="1"/>', function() {
print_orders('ord.search', 'in-commerce/orders/orders_print');
}
) );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="ord.search" grid="Search"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="ord.search" IdField="OrderId" grid="Search" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="ord.search" IdField="OrderId" grid="Search"/>
<script type="text/javascript">
Grids['ord.search'].SetDependantToolbarButtons( new Array('edit','delete','print','goto_order','archive') );
function processUserSelector($field, $selector) {
var $user_id = parseInt( $selector.Grids['u'].GetSelected() );
var $field_mask = '<inp2:ord.search_SearchInputName field="#FIELD_NAME#" filter_type="like" grid="Search"/>';
document.getElementById( $field_mask.replace('#FIELD_NAME#', $field) ).value = $selector.$user_logins[ $user_id ];
}
</script>
<inp2:m_include t="incs/footer"/>
<script type="text/javascript">
set_hidden_field('order_type','search');
</script>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/orders_toship_list.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/orders_toship_list.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/orders_toship_list.tpl (revision 14089)
@@ -1,84 +1,82 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord.toship" section="in-commerce:orders" title_preset="orders_toship" pagination="1" tabs="in-commerce/orders/orders_list_tabs"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
//do not rename - this function is used in default grid for double click!
function edit()
{
set_hidden_field('remove_specials[ord.toship]',1);
std_edit_item('ord.toship', 'in-commerce/orders/orders_edit');
}
var a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('clone', '<inp2:m_phrase label="la_ToolTip_Clone" escape="1"/>', function() {
set_hidden_field('remove_specials[ord.toship]',1);
submit_event('ord.toship','OnMassClone');
}
) );
a_toolbar.AddButton( new ToolBarButton('in-commerce:ship', '<inp2:m_phrase label="la_ToolTip_Ship" escape="1"/>', function() {
submit_event('ord.toship','OnMassOrderShip');
}
) );
a_toolbar.AddButton( new ToolBarButton('deny', '<inp2:m_phrase label="la_ToolTip_Deny" escape="1"/>', function() {
submit_event('ord.toship','OnMassOrderDeny');
}
) );
a_toolbar.AddButton( new ToolBarButton('archive', '<inp2:m_phrase label="la_ToolTip_Archive" escape="1"/>', function() {
submit_event('ord.toship','OnMassOrderArchive');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep4') );
a_toolbar.AddButton( new ToolBarButton('print', '<inp2:m_phrase label="la_ToolTip_Print" escape="1"/>', function() {
print_orders('ord.toship', 'in-commerce/orders/orders_print');
}
) );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="ord.toship" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_DefineElement name="usps_errors">
- <table width="100%" border="0" cellspacing="0" cellpadding="4" class="warning-table">
- <tr>
- <td valign="top" class="form-warning">
- Order: <inp2:m_Param name="order_number"/>. USPS error: <inp2:m_Param name="error_description"/>
- </td>
- </tr>
- </table>
+<inp2:m_DefineElement name="sqe_error_element">
+ Order: <inp2:m_Param name="order_number"/>. Error: <inp2:m_Param name="error_description"/><br/>
</inp2:m_DefineElement>
-<inp2:ord_PrintUSPSErrors render_as="usps_errors" />
+<inp2:m_if check="m_Recall" name="sqe_errors">
+ <inp2:m_RenderElement design="form_message" pass_params="1">
+ <inp2:ord_PrintSQEErrors render_as="sqe_error_element" />
+ </inp2:m_RenderElement>
+</inp2:m_if>
<inp2:m_RenderElement name="grid" PrefixSpecial="ord.toship" IdField="OrderId" grid="Default"/>
<script type="text/javascript">
Grids['ord.toship'].SetDependantToolbarButtons( new Array('edit','delete','clone','ship','deny','archive','print') );
</script>
<inp2:m_include t="incs/footer"/>
<script type="text/javascript">
set_hidden_field('order_type','toship');
</script>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/orders/order_product_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/orders/order_product_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/orders/order_product_edit.tpl (revision 14089)
@@ -1,159 +1,155 @@
<inp2:adm_SetPopupSize width="820" height="570"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="ord" section="in-commerce:orders" title_preset="orders_product_edit"/>
<inp2:m_SetParam use_grid="0"/>
<inp2:m_if check="p_ShouldListOptions">
<inp2:m_if check="p_FieldEquals" field="OptionsSelectionMode" value="1"> <!-- Listable options (combinations) -->
<inp2:m_SetParam use_grid="1"/>
</inp2:m_if>
</inp2:m_if>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
if (Grids['poc']) {
if (Grids['poc'].SelectedCount == 0) {
return;
}
set_hidden_field('qty[<inp2:p_Field name="ProductId"/>]['+Grids['poc'].GetSelected()[0]+']',1)
}
submit_event('ord','<inp2:m_if check="orditems_IsNewItem">OnAddToCart<inp2:m_else/>OnUpdateItemOptions</inp2:m_if>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('orditems','OnCancel');
}
) );
<inp2:m_if check="m_Param" name="use_grid">
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
</inp2:m_if>
a_toolbar.Render();
</script>
</td>
<inp2:m_if check="m_Param" name="use_grid">
<inp2:m_RenderElement name="search_main_toolbar" prefix="poc" grid="Radio"/>
</inp2:m_if>
</tr>
</tbody>
</table>
<inp2:m_if check="p_ShouldListOptions">
<input type="hidden" name="p_id" value="<inp2:p_Field name='ProductId'/>">
<inp2:m_if check="p_OptionsHaveError">
- <table width="100%" border="0" cellspacing="0" cellpadding="4" class="warning-table">
- <tr>
- <td valign="top" class="hint_red">
- <inp2:p_OptionsError required="lu_comm_OptionsRequired" not_available="lu_comm_OptionsNotAvailable"/>
- </td>
- </tr>
- </table>
+ <inp2:m_RenderElement design="form_message" pass_params="1">
+ <inp2:p_OptionsError required="lu_comm_OptionsRequired" not_available="lu_comm_OptionsNotAvailable"/>
+ </inp2:m_RenderElement>
</inp2:m_if>
<inp2:m_if check="p_FieldEquals" field="OptionsSelectionMode" value="1"> <!-- Listable options (combinations) -->
<script type="text/javascript">
function edit() {
set_hidden_field('qty[<inp2:p_Field name="ProductId"/>]['+Grids['poc'].GetSelected()[0]+']',1)
submit_event('ord','<inp2:m_if check="orditems_IsNewItem">OnAddToCart<inp2:m_else/>OnUpdateItemOptions</inp2:m_if>');
}
</script>
<inp2:m_DefineElement name="combination_option_element">
<strong><inp2:m_Param name="option_name" />: </strong>
<inp2:m_Param name="option_value" /><inp2:m_if check="m_ParamEquals" param="is_last" value="1"><inp2:m_else/>, </inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_combination_td">
<inp2:ShowCombination render_as="combination_option_element"/>
</inp2:m_DefineElement>
<inp2:m_RenderElement name="grid" main_special="" PrefixSpecial="poc" IdField="CombinationId" grid="Radio"/>
<inp2:m_else/> <!-- Selectable options -->
<inp2:m_DefineElement name="option_select_element">
<option value="<inp2:m_param name="id"/>" <inp2:m_param name="selected"/>><inp2:m_param name="value"/><inp2:m_if check="m_ParamEquals" name="price" value=""><inp2:m_else/>: (<inp2:m_param name="sign"/><inp2:m_param name="price"/> <inp2:m_param name="price_type"/>)</inp2:m_if></option>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_cb_element">
<input type="checkbox" <inp2:m_param name="selected"/>
name="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>][]"
id="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>]_<inp2:m_param name="id"/>"
value="<inp2:m_param name="id"/>" />
<label for="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>]_<inp2:m_param name="id"/>">
<inp2:m_param name="value"/><inp2:m_if check="m_ParamEquals" name="price" value=""><inp2:m_else/>: (<inp2:m_param name="sign"/><inp2:m_param name="price"/> <inp2:m_param name="price_type"/>)</inp2:m_if>&nbsp;&nbsp;
</label>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_radio_element">
<input type="radio" <inp2:m_param name="selected"/>
name="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>]"
id="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>]_<inp2:m_param name="id"/>"
value="<inp2:m_param name="id"/>" />
<label for="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>]_<inp2:m_param name="id"/>">
<inp2:m_param name="value"/><inp2:m_if check="m_ParamEquals" name="price" value=""><inp2:m_else/>: (<inp2:m_param name="sign"/><inp2:m_param name="price"/> <inp2:m_param name="price_type"/>)</inp2:m_if>&nbsp;&nbsp;
</label>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_element">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:Field name="Name"/><inp2:m_if check="FieldEquals" field="Required" value="1"><span class="error">*</span></inp2:m_if>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<inp2:m_if check="FieldEquals" field="OptionType" value="1"> <!-- drop-down -->
<select name="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>]">
<option value=""></option>
<inp2:ShowOptions render_as="option_select_element" currency="selected" preselect_first="1"/>
</select>
</inp2:m_if>
<inp2:m_if check="FieldEquals" field="OptionType" value="5"> <!-- editbox -->
<input type="text" name="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>]" value="<inp2:OptionData/>"/>
</inp2:m_if>
<inp2:m_if check="FieldEquals" field="OptionType" value="4"> <!-- textarea -->
<textarea cols="50" rows="5" name="options[<inp2:p_Field name="ProductId"/>][<inp2:Field name="ProductOptionId"/>]"><inp2:OptionData/></textarea>
</inp2:m_if>
<inp2:m_if check="FieldEquals" field="OptionType" value="6"> <!-- checkboxeS -->
<inp2:ShowOptions render_as="option_cb_element" currency="selected"/>
</inp2:m_if>
<inp2:m_if check="FieldEquals" field="OptionType" value="3"> <!-- radio buttons -->
<inp2:ShowOptions render_as="option_radio_element" currency="selected" preselect_first="1"/>
</inp2:m_if>
</td>
</tr>
</inp2:m_DefineElement>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!lu_comm_SelectOptions!"/>
+ <inp2:m_RenderElement name="subsection" title="lu_comm_SelectOptions"/>
<inp2:p_ListOptions no_table="1" per_page="-1" render_as="option_element" row_start_render_as="html:" row_end_render_as="html:"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
</inp2:m_if>
<inp2:m_else/>
Product Doesn't Use Options.
</inp2:m_if>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/currencies/currencies_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/currencies/currencies_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/currencies/currencies_edit.tpl (revision 14089)
@@ -1,122 +1,114 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="curr" section="in-commerce:currencies" title_preset="currencies_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('curr','<inp2:curr_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('curr','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('curr', '<inp2:curr_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('curr', '<inp2:curr_NextId/>');
}
) );
a_toolbar.Render();
<inp2:m_if check="curr_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="curr_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="curr_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:curr_SaveWarning name="grid_save_warning"/>
<inp2:curr_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_Currency!"/>
- <inp2:m_RenderElement name="inp_label" prefix="curr" field="CurrencyId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_label" prefix="curr" field="ISO" title="!la_fld_ISOCode!"/>
-
- <inp2:m_if check="curr_FieldVisible" field="RateToPrimary">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="curr" field="RateToPrimary" title="!la_fld_RateToPrimary!" />
- <td class="control-cell">
- <input type="text" name="<inp2:curr_InputName field='RateToPrimary'/>" id="<inp2:curr_InputName field='RateToPrimary'/>" value="<inp2:curr_Field field='RateToPrimary'/>" size="10">
- <input type="button" class="button" onclick="submit_event('curr', 'OnUpdateRate')" value="<inp2:m_phrase label='la_UpdateRate'/>">
- <span class="small">1 <inp2:curr_Field field="ISO"/> = ? <inp2:curr_PrimaryCurrencyISO /></span>
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="curr" field="RateToPrimary"/>
- </tr>
- </inp2:m_if>
-
- <inp2:m_if check="curr_FieldVisible" field="Symbol">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="curr" field="Symbol" title="!la_fld_CurrencySymbol!"/>
- <td class="control-cell">
- <input type="text" name="<inp2:curr_InputName field='Symbol'/>" id="<inp2:curr_InputName field='Symbol'/>" value="<inp2:curr_Field field='Symbol'/>" tabindex="<inp2:m_get param='tab_index'/>" size="10">
- <span class="small"><inp2:m_phrase label="la_ISOUsedIfBlank" /></span>
- <inp2:curr_Error field="Symbol"/>
- </td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="curr" field="Symbol"/>
- </tr>
- </inp2:m_if>
-
- <inp2:m_RenderElement name="inp_edit_radio" prefix="curr" field="SymbolPosition" title="!la_fld_CurrencySymbolPosition!"/>
-
- <inp2:m_RenderElement name="inp_edit_box" prefix="curr" field="Name" title="!la_fld_CurrencyName!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="curr" field="IsPrimary" title="!la_fld_Primary!" onchange="check_status()"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="curr" field="Status" title="!la_fld_Enabled!" onchange="check_primary()"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="curr" field="Priority" title="!la_fld_Priority!" size="5"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Currency"/>
+ <inp2:m_RenderElement name="inp_label" prefix="curr" field="CurrencyId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_label" prefix="curr" field="ISO" title="la_fld_ISOCode"/>
+
+ <inp2:m_RenderElement design="form_row" prefix="curr" field="RateToPrimary" title="la_fld_RateToPrimary">
+ <td class="control-cell">
+ <input type="text" name="<inp2:curr_InputName field='RateToPrimary'/>" id="<inp2:curr_InputName field='RateToPrimary'/>" value="<inp2:curr_Field field='RateToPrimary'/>" size="10">
+ <input type="button" class="button" onclick="submit_event('curr', 'OnUpdateRate')" value="<inp2:m_phrase label='la_UpdateRate'/>">
+ <span class="small">1 <inp2:curr_Field field="ISO"/> = ? <inp2:curr_PrimaryCurrencyISO /></span>
+ </td>
+ </inp2:m_RenderElement>
+
+ <inp2:m_RenderElement design="form_row" prefix="curr" field="Symbol" title="la_fld_CurrencySymbol">
+ <td class="control-cell">
+ <input type="text" name="<inp2:curr_InputName field='Symbol'/>" id="<inp2:curr_InputName field='Symbol'/>" value="<inp2:curr_Field field='Symbol'/>" tabindex="<inp2:m_get param='tab_index'/>" size="10">
+ <span class="small"><inp2:m_phrase label="la_ISOUsedIfBlank" /></span>
+ <inp2:curr_Error field="Symbol"/>
+ </td>
+ </inp2:m_RenderElement>
+
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="curr" field="SymbolPosition" title="la_fld_CurrencySymbolPosition"/>
+
+ <inp2:m_RenderElement name="inp_edit_box" prefix="curr" field="Name" title="la_fld_CurrencyName" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="curr" field="IsPrimary" title="la_fld_Primary" onchange="check_status()"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="curr" field="Status" title="la_fld_Enabled" onchange="check_primary()"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="curr" field="Priority" title="la_fld_Priority" size="5"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script type="text/javascript">
if(document.getElementById('_cb_curr[<inp2:curr_field field="CurrencyId" />][IsPrimary]').checked)
{
document.getElementById('_cb_curr[<inp2:curr_field field="CurrencyId" />][IsPrimary]').disabled = true;
document.getElementById('_cb_curr[<inp2:curr_field field="CurrencyId" />][Status]').disabled = true;
}
function check_status()
{
if(document.getElementById('_cb_curr[<inp2:curr_field field="CurrencyId" />][IsPrimary]').checked)
{
document.getElementById('_cb_curr[<inp2:curr_field field="CurrencyId" />][Status]').checked = true;
document.getElementById('<inp2:curr_InputName field="Status"/>').value = 1;
}
}
function check_primary()
{
if(!document.getElementById('_cb_curr[<inp2:curr_field field="CurrencyId" />][Status]').checked)
{
document.getElementById('_cb_curr[<inp2:curr_field field="CurrencyId" />][IsPrimary]').checked = false;
document.getElementById('<inp2:curr_InputName field="IsPrimary"/>').value = 0;
}
}
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/access_pricing_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/access_pricing_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/access_pricing_edit.tpl (revision 14089)
@@ -1,62 +1,62 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="pricing_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('pr','<inp2:pr_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('pr','OnCancel');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<inp2:pr_SaveWarning name="grid_save_warning"/>
<inp2:pr_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_PriceBracket!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_PriceBracket"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="pr" field="ProductId"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="AccessDuration" title="!la_fld_AccessDuration!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="pr" field="AccessUnit" title="!la_fld_AccessDurationUnit!" size="20"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="AccessDuration" title="la_fld_AccessDuration" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="pr" field="AccessUnit" title="la_fld_AccessDurationUnit" size="20"/>
- <!-- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="AccessRebillDate" title="!la_fld_AccessRebillDate!" size="5"/> -->
+ <!-- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="AccessRebillDate" title="la_fld_AccessRebillDate" size="5"/> -->
<!-- Customization healtheconomics.org -->
<!--
- <inp2:m_RenderElement name="inp_edit_radio" prefix="pr" field="DurationType" title="!la_fld_DurationType!"/>
- <inp2:m_RenderElement name="inp_edit_date" prefix="pr" field="AccessExpiration" title="!la_fld_AccessExpiration!"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="pr" field="DurationType" title="la_fld_DurationType"/>
+ <inp2:m_RenderElement name="inp_edit_date" prefix="pr" field="AccessExpiration" title="la_fld_AccessExpiration"/>
-->
<!-- //Customization healtheconomics.org -->
- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Description" title="!la_fld_Description!" size="30"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Price" title="!la_fld_Price!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="pr" field="IsPrimary" title="!la_fld_Primary!"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Description" title="la_fld_Description" size="30"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Price" title="la_fld_Price" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="pr" field="IsPrimary" title="la_fld_Primary"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_if check="pr_Field" name="IsPrimary">
<script type="text/javascript">
document.getElementById('_cb_<inp2:pr_InputName field="IsPrimary"/>').disabled = true;
</script>
</inp2:m_if>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_relations.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_relations.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_relations.tpl (revision 14089)
@@ -1,105 +1,105 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="rel" title_preset="relations" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
//Relations related:
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_New_Relation" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
openSelector('rel', '<inp2:adm_SelectorLink prefix="rel" selection_mode="single" tab_prefixes="all"/>', 'TargetId', '950x600');
} ) );
function edit()
{
std_edit_temp_item('rel', 'in-commerce/products/relations_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('rel')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('rel','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('rel','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep4') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="rel" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="rel" IdField="RelationshipId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="rel" IdField="RelationshipId" grid="Default"/>
<script type="text/javascript">
Grids['rel'].SetDependantToolbarButtons( new Array('edit','delete','approve','decline') );
</script>
<input type="hidden" name="TargetId" id="TargetId" value="<inp2:m_get name="TargetId"/>">
<input type="hidden" name="TargetType" id="TargetType" value="<inp2:m_get name="TargetType"/>">
<inp2:m_include t="incs/footer"/>
<script type="text/javascript">
var $env = document.getElementById('sid').value+'-:m<inp2:m_get name="m_cat_id"/>-1-1-1-s';
</script>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_pricing_grid.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_pricing_grid.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_pricing_grid.tpl (revision 14089)
@@ -1,103 +1,103 @@
<inp2:m_RequireLogin permissions="in-portal:browse.view" system="1"/>
<inp2:m_if check="m_ParamEquals" name="tab_init" value="1">
<div id="<inp2:m_param name="item_prefix"/>_div" prefix="<inp2:m_param name="item_prefix"/>" group_id="-1"></div>
<script type="text/javascript">$BracketManager.registerTab('<inp2:m_param name="item_prefix"/>');</script>
<inp2:m_else/>
<inp2:lang.current_Field name="Charset" result_to_var="charset"/>
<inp2:m_Header data="Content-type: text/plain; charset=$charset"/>
if ($request_visible) {
document.getElementById('<inp2:m_get name="item_prefix"/>_div').setAttribute('group_id', <inp2:m_get name="group_id"/>);
maximizeElement( jq('#<inp2:m_get name="item_prefix"/>_div') );
}
<inp2:m_if check="c_SaveWarning">
document.getElementById('save_warning').style.display = 'block';
$edit_mode = true;
</inp2:m_if>
#separator#
<inp2:m_DefineElement name="pr_edit_box" >
<td>
<input type="text" size="<inp2:m_param name="size"/>" name="pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
tabindex="<inp2:m_get param="tab_index"/>"
value="<inp2:m_param name="$field"/>"
>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="pr_edit_checkbox" >
<td>
<input type="hidden" name="pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]" id="pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]" tabindex="<inp2:m_get param="tab_index"/>" value="<inp2:m_param name="$field"/>">
<input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:m_param name="field"/>" name="_cb_<inp2:m_param name="field"/>"
<inp2:m_if check="m_paramequals" param="$field" value="1" >
checked
</inp2:m_if> class="<inp2:m_param name="field_class"/>" onclick="update_checkbox(this, document.getElementById('pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]'))">
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="pr_edit_max" >
<td>
<input type="text" size="10" name="pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
tabindex="<inp2:m_get param="tab_index"/>"
value="<inp2:m_param name="max"/>"
<inp2:m_if check="m_paramequals" param="next_min_id" value="" >
<inp2:m_else />
onchange="set_start(<inp2:m_param name="id"/>, <inp2:m_param name="next_min_id"/>)"
</inp2:m_if>
>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="pr_edit_min" >
<td>
<input type="hidden" name="pr.tang[<inp2:m_param name="id"/>][PriceId]" id="pr.tang[<inp2:m_param name="id"/>][PriceId]" value="<inp2:m_param name="id"/>">
<input type="text" size="10"
<inp2:m_if check="m_paramequals" param="first" value="1" >
<inp2:m_inc param="tab_index" by="1"/>
tabindex="<inp2:m_get param="tab_index"/>"
<inp2:m_else/>
readonly
</inp2:m_if>
name="pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
id="pr.tang[<inp2:m_param name="id"/>][<inp2:m_param name="field"/>]"
value="<inp2:m_param name="min"/>"
<inp2:m_if check="m_paramequals" param="first" value="1" ><inp2:m_else/>disabled</inp2:m_if>
>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="prbracket">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
- <inp2:m_RenderElement name="pr_edit_min" IdField="$IdField" PrefixSpecial="pr.tang" field="MinQty" title="!la_fld_Title!" size="40" pass_params="true"/>
+ <inp2:m_RenderElement name="pr_edit_min" IdField="$IdField" PrefixSpecial="pr.tang" field="MinQty" title="la_fld_Title" size="40" pass_params="true"/>
- <inp2:m_RenderElement name="pr_edit_max" IdField="$IdField" PrefixSpecial="pr.tang" field="MaxQty" title="!la_fld_Title!" size="40" pass_params="true"/>
+ <inp2:m_RenderElement name="pr_edit_max" IdField="$IdField" PrefixSpecial="pr.tang" field="MaxQty" title="la_fld_Title" size="40" pass_params="true"/>
- <inp2:m_RenderElement name="pr_edit_box" IdField="$IdField" PrefixSpecial="pr.tang" field="Cost" title="!la_fld_Title!" size="4" pass_params="true"/>
+ <inp2:m_RenderElement name="pr_edit_box" IdField="$IdField" PrefixSpecial="pr.tang" field="Cost" title="la_fld_Title" size="4" pass_params="true"/>
- <inp2:m_RenderElement name="pr_edit_box" IdField="$IdField" PrefixSpecial="pr.tang" field="Price" title="!la_fld_Title!" size="4" pass_params="true"/>
+ <inp2:m_RenderElement name="pr_edit_box" IdField="$IdField" PrefixSpecial="pr.tang" field="Price" title="la_fld_Title" size="4" pass_params="true"/>
<!--##
- <inp2:m_RenderElement name="pr_edit_box" IdField="$IdField" PrefixSpecial="pr.tang" field="Points" title="!la_fld_Title!" size="4" pass_params="true"/>
+ <inp2:m_RenderElement name="pr_edit_box" IdField="$IdField" PrefixSpecial="pr.tang" field="Points" title="la_fld_Title" size="4" pass_params="true"/>
##-->
- <inp2:m_RenderElement name="pr_edit_checkbox" IdField="$IdField" PrefixSpecial="pr.tang" field="Negotiated" title="!la_fld_Title!" pass_params="true"/>
+ <inp2:m_RenderElement name="pr_edit_checkbox" IdField="$IdField" PrefixSpecial="pr.tang" field="Negotiated" title="la_fld_Title" pass_params="true"/>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="pr_grid_th" width="">
<td class="columntitle_small"<inp2:m_if check="m_Param" name="width"> style="width: <inp2:m_Param name='width'/>"</inp2:m_if>><inp2:m_phrase label="$phrase" /></td>
</inp2:m_DefineElement>
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="tableborder">
<tr nowrap="nowrap" class="grid-header-row-0">
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_minqty!" width="15%"/>
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_maxqty!" width="15%"/>
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_cost!" width="10%"/>
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_price!" width="10%"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_minqty" width="15%"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_maxqty" width="15%"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_cost" width="10%"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_price" width="10%"/>
<!--##
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_points!" width="10%"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_points" width="10%"/>
##-->
- <inp2:m_RenderElement name="pr_grid_th" phrase="!la_col_negotiated!"/>
+ <inp2:m_RenderElement name="pr_grid_th" phrase="la_col_negotiated"/>
</tr>
<inp2:pr.tang_ShowPricingForm block="prbracket" IdField="PriceId"/>
</table>
</inp2:m_if>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/file_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/file_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/file_edit.tpl (revision 14089)
@@ -1,70 +1,70 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="file_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('file','<inp2:file_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('file','OnCancel');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<inp2:file_SaveWarning name="grid_save_warning"/>
<inp2:file_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_File!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_File"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="file" field="ProductId"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="file" field="Name" title="!la_fld_Name!" size="50" />
- <inp2:m_RenderElement name="inp_edit_box" prefix="file" field="Version" title="!la_fld_Version!" size="10" />
- <inp2:m_RenderElement name="inp_edit_upload" prefix="file" field="RealPath" title="!la_fld_FilePath!" />
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="file" field="Status" title="!la_fld_Enabled!" onchange="check_primary()" />
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="file" field="IsPrimary" title="!la_fld_Primary!" onchange="check_status()" />
- <inp2:m_RenderElement name="inp_edit_box" prefix="file" field="Priority" title="!la_fld_Priority!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_date" prefix="file" field="AddedOn" title="!la_fld_AddedOn!" />
+ <inp2:m_RenderElement name="inp_edit_box" prefix="file" field="Name" title="la_fld_Name" size="50" />
+ <inp2:m_RenderElement name="inp_edit_box" prefix="file" field="Version" title="la_fld_Version" size="10" />
+ <inp2:m_RenderElement name="inp_edit_upload" prefix="file" field="RealPath" title="la_fld_FilePath" />
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="file" field="Status" title="la_fld_Enabled" onchange="check_primary()" />
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="file" field="IsPrimary" title="la_fld_Primary" onchange="check_status()" />
+ <inp2:m_RenderElement name="inp_edit_box" prefix="file" field="Priority" title="la_fld_Priority" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_date" prefix="file" field="AddedOn" title="la_fld_AddedOn" />
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script type="text/javascript">
<inp2:m_if check="file_Field" name="IsPrimary">
document.getElementById('_cb_<inp2:file_InputName field="IsPrimary" />').disabled = true;
document.getElementById('_cb_<inp2:file_InputName field="Status" />').disabled = true;
</inp2:m_if>
function check_status()
{
if(document.getElementById('_cb_<inp2:file_InputName field="IsPrimary" />').checked)
{
document.getElementById('_cb_<inp2:file_InputName field="Status" />').checked = true;
document.getElementById('<inp2:file_InputName field="Status"/>').value = 1;
}
}
function check_primary()
{
if(!document.getElementById('_cb_<inp2:file_InputName field="Status" />').checked)
{
document.getElementById('_cb_<inp2:file_InputName field="IsPrimary" />').checked = false;
document.getElementById('<inp2:file_InputName field="IsPrimary"/>').value = 0;
}
}
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_access.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_access.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_access.tpl (revision 14089)
@@ -1,104 +1,104 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="pr" grid="Access" title_preset="access" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
// a_toolbar.AddButton( new ToolBarSeparator('sep3') );
//Pricing related:
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_NewPricing" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_new_item('pr', 'in-commerce/products/access_pricing_edit')
} ) );
function edit()
{
std_edit_temp_item('pr', 'in-commerce/products/access_pricing_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('pr')
} ) );
a_toolbar.AddButton( new ToolBarButton('setprimary', '<inp2:m_phrase label="la_ToolTip_SetPrimary" escape="1"/>', function() {
submit_event('pr','OnSetPrimary');
}
) );
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
// a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="pr" grid="Access"/>
</tr>
</tbody>
</table>
<div id="scroll_container" mode="minimal">
<table class="edit-form" style="border-bottom: 1px solid black;">
- <inp2:m_RenderElement name="subsection" title="!la_section_Product!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Product"/>
<inp2:m_RenderElement name="inp_edit_options" prefix="p" field="AccessGroupId" title="la_fld_AccessGroup" has_empty="1"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="IsRecurringBilling" title="la_fld_IsRecurringBilling"/>
<!-- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="PayPalRecurring" title="la_fld_IsPayPalRecurring"/> -->
- <!-- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="AccessDuration" title="!la_fld_AccessDuration!" size="4" /> -->
- <!-- <inp2:m_RenderElement name="inp_edit_options" prefix="p" field="AccessDurationType" title="!la_fld_AccessDurationType!" size="20"/> -->
- <!-- <inp2:m_RenderElement name="inp_edit_date_time" prefix="p" field="AccessStart" title="!la_fld_AccessStart!" size="10" /> -->
- <!-- <inp2:m_RenderElement name="inp_edit_date_time" prefix="p" field="AccessEnd" title="!la_fld_AccessEnd!" size="10" /> -->
+ <!-- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="AccessDuration" title="la_fld_AccessDuration" size="4" /> -->
+ <!-- <inp2:m_RenderElement name="inp_edit_options" prefix="p" field="AccessDurationType" title="la_fld_AccessDurationType" size="20"/> -->
+ <!-- <inp2:m_RenderElement name="inp_edit_date_time" prefix="p" field="AccessStart" title="la_fld_AccessStart" size="10" /> -->
+ <!-- <inp2:m_RenderElement name="inp_edit_date_time" prefix="p" field="AccessEnd" title="la_fld_AccessEnd" size="10" /> -->
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_RenderElement name="grid" PrefixSpecial="pr" IdField="PriceId" grid="Access" />
<script type="text/javascript">
Grids['pr'].SetDependantToolbarButtons( new Array('edit','delete', 'setprimary') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_files.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_files.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_files.tpl (revision 14089)
@@ -1,129 +1,129 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="file" title_preset="files" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_NewFile" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_new_item('file', 'in-commerce/products/file_edit')
} ) );
function edit()
{
std_edit_temp_item('file', 'in-commerce/products/file_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('file')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('move_up', '<inp2:m_phrase label="la_ToolTip_MoveUp" escape="1"/>', function() {
submit_event('file','OnMassMoveUp');
}
) );
a_toolbar.AddButton( new ToolBarButton('move_down', '<inp2:m_phrase label="la_ToolTip_MoveDown" escape="1"/>', function() {
submit_event('file','OnMassMoveDown');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep4') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('file','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('file','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep5') );
a_toolbar.AddButton( new ToolBarButton('setprimary', '<inp2:m_phrase label="la_ToolTip_SetPrimary" escape="1"/>', function() {
submit_event('file','OnSetPrimary');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep6') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="file" grid="Default"/>
</tr>
</tbody>
</table>
<div id="scroll_container" mode="minimal">
<table class="edit-form" style="border-bottom: 1px solid black;">
- <inp2:m_RenderElement name="subsection" title="!la_section_Product!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Price" title="!la_fld_Price!" style="width: 100px;"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Product"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Price" title="la_fld_Price" style="width: 100px;"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_Files!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Files"/>
</table>
</div>
<inp2:m_DefineElement name="file_caption_td" module="">
<inp2:Field field="$field" grid="$grid"/><inp2:m_ifnot check="Field" field="Priority" equals_to="0"><span class="priority"><sup><inp2:Field field="Priority" /></sup></span></inp2:m_ifnot>
</inp2:m_DefineElement>
<inp2:m_RenderElement name="grid" PrefixSpecial="file" IdField="FileId" grid="Default"/>
<script type="text/javascript">
Grids['file'].SetDependantToolbarButtons( new Array('edit','delete','setprimary','move_up','move_down','approve','decline') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_images.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_images.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_images.tpl (revision 14089)
@@ -1,107 +1,107 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="img" title_preset="images" tab_preset="Default"/>
<inp2:m_include t="incs/image_blocks"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
function edit()
{
std_edit_temp_item('img', 'in-commerce/products/images_edit');
}
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_New_Images" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_new_item('img', 'in-commerce/products/images_edit')
} ) );
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('img')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('move_up', '<inp2:m_phrase label="la_ToolTip_MoveUp" escape="1"/>', function() {
submit_event('img','OnMassMoveUp');
}
) );
a_toolbar.AddButton( new ToolBarButton('move_down', '<inp2:m_phrase label="la_ToolTip_MoveDown" escape="1"/>', function() {
submit_event('img','OnMassMoveDown');
}
) );
a_toolbar.AddButton( new ToolBarButton('setprimary', '<inp2:m_phrase label="la_ToolTip_SetPrimary" escape="1"/>', function() {
submit_event('img','OnSetPrimary');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep4') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="img" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="img" IdField="ImageId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="img" IdField="ImageId" grid="Default"/>
<script type="text/javascript">
Grids['img'].SetDependantToolbarButtons( new Array('edit','delete','move_up','move_down','setprimary') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/shipping_options.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/shipping_options.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/shipping_options.tpl (revision 14089)
@@ -1,78 +1,78 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="shipping_options"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
document.getElementById('<inp2:p_InputName field="ShippingLimitation"/>').value = select_to_string('selected_types');
submit_event('p','OnPreSavePopup');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Close" escape="1"/>', function() {
window_close();
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<inp2:p_SaveWarning name="grid_save_warning"/>
<inp2:p_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_Text_Properties!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Properties"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="p" field="ShippingLimitation"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="ShippingMode" title="!la_fld_ShippingMode!"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="ShippingMode" title="la_fld_ShippingMode"/>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_fld_ShippingTypes"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<table>
<tr>
<td>
<inp2:m_DefineElement name="shipping_type">
<option value="<inp2:m_param name="_Id"/>"><inp2:m_param name="_Name"/></option>
</inp2:m_DefineElement>
<inp2:m_phrase label="la_fld_AllowedShippingTypes"/><br />
<select id="selected_types" multiple="multiple" size="20" style="width: 200px">
<inp2:p_ListShippingTypes mode="selected" render_as="shipping_type"/>
</select>
</td>
<td align="center">
<input type="button" value="&nbsp;&laquo;&laquo;&nbsp;" onclick="move_selected('available_types', 'selected_types'); select_sort('selected_types')" class="button"><br>
<img src="img/s.gif" width="1" height="4" alt=""><br>
<input type="button" value="&nbsp;&raquo;&raquo;&nbsp;" onclick="move_selected('selected_types', 'available_types'); select_sort('available_types');" class="button">
</td>
<td>
<inp2:m_phrase label="la_fld_AvailableShippingTypes"/><br />
<select id="available_types" multiple="multiple" size="20" style="width: 200px">
- <inp2:p_ListShippingTypes render_as="shipping_type"/>
+ <inp2:p_ListShippingTypes mode="available" render_as="shipping_type"/>
</select>
</td>
</tr>
</table>
</td>
</tr>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/pricing_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/pricing_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/pricing_edit.tpl (revision 14089)
@@ -1,46 +1,46 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="pricing_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('pr','<inp2:pr_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('pr','OnCancel');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<inp2:pr_SaveWarning name="grid_save_warning"/>
<inp2:pr_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_PriceBracket!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_PriceBracket"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="pr" field="ProductId"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="MinQty" title="!la_fld_MinQty!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="MaxQty" title="!la_fld_MaxQty!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Price" title="!la_fld_Price!" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="MinQty" title="la_fld_MinQty" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="MaxQty" title="la_fld_MaxQty" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Price" title="la_fld_Price" size="4"/>
<!--## temporarily commented out
- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Points" title="!la_fld_Points!" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Points" title="la_fld_Points" size="4"/>
##-->
- <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Cost" title="!la_fld_Cost!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="pr" field="Negotiated" title="!la_fld_Negotiated!" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pr" field="Cost" title="la_fld_Cost" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="pr" field="Negotiated" title="la_fld_Negotiated" size="4"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/relations_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/relations_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/relations_edit.tpl (revision 14089)
@@ -1,65 +1,65 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="relations_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('rel','<inp2:rel_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('rel','OnCancel');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="rel_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="rel_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="rel_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_include t="categories/ci_blocks"/>
<inp2:rel_SaveWarning name="grid_save_warning"/>
<inp2:rel_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_Relation!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Relation"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="rel" field="SourceId"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="rel" field="SourceType"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="rel" field="TargetId"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="rel" field="TargetType"/>
- <inp2:m_RenderElement name="inp_id_label" prefix="rel" field="RelationshipId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_relation" prefix="rel" field="TargetId" title="!la_fld_TargetId!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="rel" field="Type" title="!la_fld_RelationshipType!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="rel" field="Enabled" title="!la_fld_Enabled!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="rel" field="Priority" title="!la_fld_Priority!" size="4"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="rel" field="RelationshipId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_relation" prefix="rel" field="TargetId" title="la_fld_TargetId"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="rel" field="Type" title="la_fld_RelationshipType"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="rel" field="Enabled" title="la_fld_Enabled"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="rel" field="Priority" title="la_fld_Priority" size="4"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/review_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/review_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/review_edit.tpl (revision 14089)
@@ -1,59 +1,59 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="reviews_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('rev','<inp2:rev_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('rev','OnCancel');
}
) );
a_toolbar.Render();
<inp2:m_if check="rev_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="rev_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="rev_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:rev_SaveWarning name="grid_save_warning"/>
<inp2:rev_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_Text_Review!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Review"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="rev" field="ItemId"/>
<inp2:m_RenderElement name="inp_edit_checkbox_allow_html" prefix="rev" field="TextFormat"/>
- <inp2:m_RenderElement name="inp_label" prefix="rev" field="ReviewId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_user" prefix="rev" field="CreatedById" title="!la_fld_CreatedById!" class="text"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="rev" field="ReviewText" title="!la_fld_ReviewText!" cols="70" rows="8"/>
- <inp2:m_RenderElement name="subsection" title="!la_Text_General!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="rev" field="Status" title="!la_fld_Status!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="rev" field="Priority" title="!la_fld_Priority!" size="3" class="text"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="rev" field="CreatedOn" title="!la_fld_CreatedOn!" size="20" class="text"/>
+ <inp2:m_RenderElement name="inp_label" prefix="rev" field="ReviewId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_user" prefix="rev" field="CreatedById" title="la_fld_CreatedById" class="text"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="rev" field="ReviewText" title="la_fld_ReviewText" cols="70" rows="8"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_General"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="rev" field="Status" title="la_fld_Status"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="rev" field="Priority" title="la_fld_Priority" size="3" class="text"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="rev" field="CreatedOn" title="la_fld_CreatedOn" size="20" class="text"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_reviews.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_reviews.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_reviews.tpl (revision 14089)
@@ -1,115 +1,115 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="rev" title_preset="reviews" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
//Pricing related:
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_NewReview" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_new_item('rev', 'in-commerce/products/review_edit')
} ) );
function edit()
{
std_edit_temp_item('rev', 'in-commerce/products/review_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('rev')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('rev','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('rev','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep4') );
a_toolbar.AddButton( new ToolBarButton('move_up', '<inp2:m_phrase label="la_ToolTip_MoveUp" escape="1"/>', function() {
submit_event('rev','OnMassMoveUp');
}
) );
a_toolbar.AddButton( new ToolBarButton('move_down', '<inp2:m_phrase label="la_ToolTip_MoveDown" escape="1"/>', function() {
submit_event('rev','OnMassMoveDown');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep5') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="rev" grid="Default"/>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="reviewtext_checkbox_td">
<inp2:Field field="$field" no_special="no_special" cut_first="100"/>
</inp2:m_DefineElement>
-<inp2:m_RenderElement name="grid" PrefixSpecial="rev" IdField="ReviewId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="rev" IdField="ReviewId" grid="Default"/>
<script type="text/javascript">
Grids['rev'].SetDependantToolbarButtons( new Array('edit','delete','approve','decline','move_up','move_down') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_edit.tpl (revision 14089)
@@ -1,181 +1,181 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="products_edit" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
//a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="ml_selector" prefix="p"/>
</tr>
</tbody>
</table>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="p" field="Type" db="db"/>
<inp2:p_SaveWarning name="grid_save_warning"/>
<inp2:p_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_Product!"/>
- <inp2:m_RenderElement name="inp_label" prefix="p" field="ProductId" title="!la_fld_Id!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Product"/>
+ <inp2:m_RenderElement name="inp_label" prefix="p" field="ProductId" title="la_fld_Id"/>
<inp2:m_if check="m_IsDebugMode" >
- <inp2:m_RenderElement name="inp_label" prefix="p" field="Type" title="!la_fld_ProductType!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="p" field="Type" title="la_fld_ProductType"/>
</inp2:m_if>
- <inp2:m_RenderElement name="inp_edit_box_ml" prefix="p" field="Name" title="!la_fld_Title!" size="70"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="SKU" title="!la_fld_SKU!" size="70"/>
+ <inp2:m_RenderElement name="inp_edit_box_ml" prefix="p" field="Name" title="la_fld_Title" size="70"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="SKU" title="la_fld_SKU" size="70"/>
- <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="p" field="Description" title="!la_fld_Description!" cols="70" rows="5"/>
- <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="p" field="DescriptionExcerpt" title="!la_fld_DescriptionExcerpt!" cols="70" rows="3"/>
+ <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="p" field="Description" title="la_fld_Description" cols="70" rows="5"/>
+ <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="p" field="DescriptionExcerpt" title="la_fld_DescriptionExcerpt" cols="70" rows="3"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="AutomaticFilename" title="la_fld_AutomaticFilename" onchange="reflect_filename()"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Filename" title="la_fld_Filename" size="70"/>
<inp2:m_RenderElement name="inp_edit_options" prefix="p" field="CategoryId" title="la_fld_ParentSection" display_original="1"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_Properties!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Properties"/>
<inp2:m_if check="p_FieldEquals" field="Type" value="1" >
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="MinQtyFreePromoShipping" title="!la_fld_ProductFreeShipping!" size="5"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="MinQtyFreePromoShipping" title="la_fld_ProductFreeShipping" size="5"/>
</inp2:m_if>
<inp2:m_if check="p_FieldEquals" field="Type" value="1">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<td class="label-cell">
<inp2:m_phrase label="la_fld_ManageShipping"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<a href="javascript:openShipping()">Open</a>
</td>
</tr>
</inp2:m_if>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<td class="label-cell">
<inp2:m_phrase label="la_fld_AssignedCoupon"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<inp2:p_Field name="AssignedCoupon" />&nbsp;<a href="javascript:openCouponSelector()">Open</a>
</td>
</tr>
- <inp2:m_RenderElement name="inp_edit_options" prefix="p" field="ManufacturerId" title="!la_fld_Manufacturer!" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="p" field="ManufacturerId" title="la_fld_Manufacturer" size="4"/>
<inp2:m_if check="p_FieldEquals" field="Type" value="3">
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Price" title="!la_fld_Price!" size="5"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Price" title="la_fld_Price" size="5"/>
</inp2:m_if>
<inp2:m_if check="p_FieldEquals" field="Type" value="6">
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Price" title="!la_fld_Price!" size="5"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Price" title="la_fld_Price" size="5"/>
</inp2:m_if>
<inp2:m_if check="p_FieldEquals" field="Type" value="1" >
- <inp2:m_RenderElement name="inp_edit_weight" prefix="p" field="Weight" title="!la_fld_Weight!" size="5"/>
+ <inp2:m_RenderElement name="inp_edit_weight" prefix="p" field="Weight" title="la_fld_Weight" size="5"/>
</inp2:m_if>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="MSRP" title="!la_fld_MSRP!" size="5"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="Status" title="!la_fld_Status!"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="MSRP" title="la_fld_MSRP" size="5"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="Status" title="la_fld_Status"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="NewItem" title="!la_fld_New!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="HotItem" title="!la_fld_TopSeller!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="PopItem" title="!la_fld_Pop!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="EditorsPick" title="!la_fld_EditorsPick!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="Featured" title="!la_fld_Featured!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="OnSale" title="!la_fld_OnSale!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Priority" title="!la_fld_Priority!" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="NewItem" title="la_fld_New"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="HotItem" title="la_fld_TopSeller"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="PopItem" title="la_fld_Pop"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="EditorsPick" title="la_fld_EditorsPick"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="Featured" title="la_fld_Featured"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="p" field="OnSale" title="la_fld_OnSale"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Priority" title="la_fld_Priority" size="4"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="p" field="CreatedOn" title="!la_fld_CreatedOn!" size="12"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="p" field="Expire" title="!la_fld_Expire!" size="12"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="p" field="CreatedOn" title="la_fld_CreatedOn" size="12"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="p" field="Expire" title="la_fld_Expire" size="12"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="MetaKeywords" title="!la_fld_MetaKeywords!" size="70"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="p" field="MetaDescription" title="!la_fld_MetaDescription!" cols="70" rows="5"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="MetaKeywords" title="la_fld_MetaKeywords" size="70"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="p" field="MetaDescription" title="la_fld_MetaDescription" cols="70" rows="5"/>
<inp2:m_if check="p_FieldEquals" field="Type" value="1" >
- <inp2:m_RenderElement name="subsection" title="!la_section_Backordering!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="BackOrder" title="!la_fld_BackOrder!"/>
- <inp2:m_RenderElement name="inp_edit_date_time" format="mm/dd/y" prefix="p" field="BackOrderDate" title="!la_fld_BackOrderDate!" size="12"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="QtyInStockMin" title="!la_fld_QtyInStockMin!" size="4"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Backordering"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="BackOrder" title="la_fld_BackOrder"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" format="mm/dd/y" prefix="p" field="BackOrderDate" title="la_fld_BackOrderDate" size="12"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="QtyInStockMin" title="la_fld_QtyInStockMin" size="4"/>
</inp2:m_if>
- <inp2:m_RenderElement name="subsection" title="!la_section_Counters!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="CachedRating" title="!la_fld_Rating!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="CachedVotesQty" title="!la_fld_Votes!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Hits" title="!la_fld_QtySold!" size="4"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Counters"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="CachedRating" title="la_fld_Rating" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="CachedVotesQty" title="la_fld_Votes" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="p" field="Hits" title="la_fld_QtySold" size="4"/>
<input type="hidden" name="Hits_original" id="Hits_original" value="<inp2:p_Field name="Hits" db="db" />" />
<!-- custom fields: begin -->
<inp2:m_include t="incs/custom_blocks"/>
<inp2:cf.general_PrintList render_as="cv_row_block" SourcePrefix="p" value_field="Value" per_page="-1" grid="Default" />
<!-- custom fields: end -->
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script language="javascript" type="text/javascript">
$(document).ready(reflect_filename);
disable_categories('<inp2:p_InputName name="CategoryId"/>', <inp2:p_AllowedCategoriesJSON/>);
function reflect_filename() {
var $checked = document.getElementById('_cb_<inp2:p_InputName field="AutomaticFilename"/>').checked;
document.getElementById('<inp2:p_InputName field="Filename"/>').readOnly = $checked;
}
function openShipping() {
openSelector('p','<inp2:m_link t="in-commerce/products/shipping_options" pass="all"/>', 'ShippingOption', '800x600', 'OnPreSaveAndOpenPopup');
}
function openCouponSelector() {
openSelector('p','<inp2:m_link t="in-commerce/discounts/coupon_selector" pass="all"/>', 'AssignedCoupon', '800x400', 'OnPreSaveAndOpenPopup');
}
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_categories.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_categories.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_categories.tpl (revision 14089)
@@ -1,84 +1,84 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="p-ci" title_preset="categories" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
function edit(){ }
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
//Category related:
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_New_Category" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
openSelector('p', '<inp2:adm_SelectorLink prefix="p" selection_mode="multi" tab_prefixes="none"/>', 'ItemCategory');
} ) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('p-ci')
} ) );
a_toolbar.AddButton( new ToolBarButton('setprimary', '<inp2:m_phrase label="la_ToolTip_SetPrimary" escape="1"/>', function() {
submit_event('p-ci','OnSetPrimary');
}
) );
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="p-ci" grid="Default"/>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="grid_checkbox_category_td">
- <inp2:CategoryName field="$field" primary_title="!la_PrimaryCategory!" no_special="1"/>
+ <inp2:CategoryName field="$field" primary_title="la_PrimaryCategory" no_special="1"/>
</inp2:m_DefineElement>
<inp2:m_RenderElement name="grid" PrefixSpecial="p-ci" IdField="CategoryId" grid="Default"/>
<script type="text/javascript">
Grids['p-ci'].SetDependantToolbarButtons( new Array('delete','setprimary') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_packagecontent.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_packagecontent.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_packagecontent.tpl (revision 14089)
@@ -1,95 +1,95 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="p.content" title_preset="content" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_Add_Items" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
openSelector('p', '<inp2:adm_SelectorLink prefix="p" selection_mode="multi" tab_prefixes="p"/>', 'PackageContent', null, 'OnSaveItems');
} ) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
submit_event('p.content','OnRemovePackageItem');
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
function edit()
{
alert();
}
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="p.content" grid="Default"/>
</tr>
</tbody>
</table>
<inp2:m_include t="categories/ci_blocks"/>
<inp2:m_DefineElement name="qty_td" >
<inp2:Field field="QtyInStock" grid="$grid"/>/<inp2:Field field="QtyReserved" grid="$grid"/>
</inp2:m_DefineElement>
-<inp2:m_RenderElement name="grid" PrefixSpecial="p.content" IdField="ProductId" grid="Default" menu_filters="yes" types="content"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="p.content" IdField="ProductId" grid="Default" types="content"/>
<input type="hidden" name="TargetId" id="TargetId" value="<inp2:m_get name="TargetId"/>">
<input type="hidden" name="TargetType" id="TargetType" value="<inp2:m_get name="TargetType"/>">
<input type="hidden" name="main_prefix" id="main_prefix" value="p">
<inp2:m_include t="incs/footer"/>
<script type="text/javascript">
var $env = document.getElementById('sid').value+'-:m<inp2:m_get name="m_cat_id"/>-1-1-1-s';
</script>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/images_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/images_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/images_edit.tpl (revision 14089)
@@ -1,77 +1,77 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="images_edit"/>
<inp2:m_include t="incs/image_blocks"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('img','<inp2:img_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('img','OnCancel');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="img_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="img_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="img_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:img_SaveWarning name="grid_save_warning"/>
<inp2:img_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_Image!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Image"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="img" field="ResourceId"/>
- <inp2:m_RenderElement name="inp_id_label" prefix="img" field="ImageId" title="!la_fld_Id!"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="img" field="ImageId" title="la_fld_Id"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="img" field="Name" title="!la_fld_Name!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="img" field="AltName" title="!la_fld_AltValue!" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="img" field="Name" title="la_fld_Name" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="img" field="AltName" title="la_fld_AltValue" size="40"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="img" field="Enabled" title="!la_fld_Enabled!" onchange="check_primary()" />
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="img" field="DefaultImg" title="!la_fld_Primary!" onchange="check_status()" />
- <inp2:m_RenderElement name="inp_edit_box" prefix="img" field="Priority" title="!la_fld_Priority!" size="5"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="img" field="Enabled" title="la_fld_Enabled" onchange="check_primary()" />
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="img" field="DefaultImg" title="la_fld_Primary" onchange="check_status()" />
+ <inp2:m_RenderElement name="inp_edit_box" prefix="img" field="Priority" title="la_fld_Priority" size="5"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_ThumbnailImage!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_ThumbnailImage"/>
<inp2:m_RenderElement name="thumbnail_section" prefix="img"/>
- <inp2:m_RenderElement name="subsection" title="!la_section_FullSizeImage!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="img" field="SameImages" title="!la_fld_SameAsThumb!" onchange="toggle_fullsize()"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_FullSizeImage"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="img" field="SameImages" title="la_fld_SameAsThumb" onchange="toggle_fullsize()"/>
<inp2:m_RenderElement name="fullsize_section" prefix="img"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script type="text/javascript">
<inp2:m_RenderElement name="images_edit_js" prefix="img"/>
toggle_fullsize();
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/option_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/option_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/option_edit.tpl (revision 14089)
@@ -1,324 +1,324 @@
<inp2:adm_SetPopupSize width="780" height="590"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="options_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
PrepareData();
submit_event('po','<inp2:po_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('po','OnCancel');
}
) );
a_toolbar.Render();
</script>
</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
var edit_id = null;
var prices = {};
var price_types = {};
NumberFormatter.ThousandsSep = '<inp2:lang.current_Field name="ThousandSep" js_escape="1"/>';
NumberFormatter.DecimalSep = '<inp2:lang.current_Field name="DecimalPoint" js_escape="1"/>';
// var formatter = new NumberFormat();
// formatter.setInputDecimal('<inp2:lang.current_Field name="DecimalPoint" js_escape="1"/>');
// formatter.setSeparators(true, '<inp2:lang.current_Field name="ThousandSep" js_escape="1"/>', '<inp2:lang.current_Field name="DecimalPoint" js_escape="1"/>');
function PrepareData() {
SelectToString('options_list[]', '<inp2:po_InputName field="Values"/>');
prices_str = '';
for (var i in prices) {
if (prices[i] == null) continue;
// formatter.setNumber(prices[i]);
// prices[i] = formatter.pars
prices_str += i.replace(/\|/g, '\\|').replace(/\=/g, '\\=') + '=' + prices[i] + '|'; // .replace(/\|/g, '\\|').replace(/\=/g, '\\=') + '|'
}
if(prices_str.length > 0) prices_str = prices_str.substring(0,prices_str.length-1);
// alert('prices str: '+prices_str)
document.getElementById('<inp2:po_InputName field="Prices"/>').value = prices_str;
price_types_str = '';
for (var i in price_types) {
if (price_types[i] == null) continue;
price_types_str += i.replace(/\|/g, '\\|').replace(/\=/g, '\\=') + '=' + price_types[i].replace(/\|/g, '\\|').replace(/\=/g, '\\=') + '|'
}
if(price_types_str.length > 0) price_types_str = price_types_str.substring(0,price_types_str.length-1);
document.getElementById('<inp2:po_InputName field="PriceTypes"/>').value = price_types_str;
}
function SelectToString(aSelectId, aStringId) {
aSelect = document.getElementById(aSelectId);
// written by Slava, patched by Alex, modified by SergeyG
var result = '';
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
result += cur.value+',';
}
if(result.length > 0) result = result.substring(0,result.length-1);
document.getElementById(aStringId).value = result;
return result;
}
function add_option(aSelectId) {
aSelect = document.getElementById(aSelectId);
var el = document.getElementById('option_value');
price = document.getElementById('option_price');
price_val = NumberFormatter.Parse(price.value);
price_type = document.getElementById('kernel_form').elements['option_price_type'];
price_mod = '';
if (price_type[0].checked) {
price_mod = '$'
}
if (price_type[1].checked) {
price_mod = '%'
}
if (price_val < 0) {
sign = '-';
}
else {
sign = '+';
}
if (price.value != '') {
option_text = el.value + ': ' + sign + price_val + ' ' + price_mod;
}
else {
option_text = el.value;
}
if (el)
{
if (el.value=='') return;
var found = false;
var valueArray;
for (i = 0; i < aSelect.options.length; i++){
if (aSelect.options[i].value == edit_id){
found = true;
break;
}
}
if (!found){
aSelect.options[aSelect.length] = new Option(option_text, el.value);
}
else {
aSelect.options[i].text = option_text;
aSelect.options[i].value = el.value;
}
//alert('set '+price.value+' unformatted is '+price_val)
prices[el.value] = price_val
price_types[el.value] = price_mod;
el.value='';
price.value = '';
price_type[0].checked = false;
price_type[1].checked = false;
edit_id = null;
document.getElementById('option_save').value = '<inp2:m_phrase label="la_button_add"/>';
}
}
function cancel_edit() {
var el = document.getElementById('option_value');
document.getElementById('option_save').value = '<inp2:m_phrase label="la_button_add"/>';
el.value = '';
document.getElementById('option_price').value = '';
document.getElementById('kernel_form').elements['option_price_type'][0].checked = false;
document.getElementById('kernel_form').elements['option_price_type'][1].checked = false;
edit_id = null;
}
function htmlspecialchars(str) {
return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;");
}
function edit_option(aSelectId) {
aSelect = document.getElementById(aSelectId);
for (var i=0; i < aSelect.length; i++)
{
cur = aSelect.options[i];
if(aSelect.options[i].selected == true) {
edit_id = aSelect.options[i].value;
document.getElementById('option_value').value = aSelect.options[i].value;
// alert('setting: '+prices[edit_id]+' formatted is '+NumberFormatter.Format(prices[edit_id]))
var formatted = NumberFormatter.Format(prices[edit_id]) ;
document.getElementById('option_price').value = formatted == 0 ? '' : formatted;
if (price_types[edit_id] == '$') {
document.getElementById('kernel_form').elements['option_price_type'][0].checked = true;
}
if (price_types[edit_id] == '%') {
document.getElementById('kernel_form').elements['option_price_type'][1].checked = true;
}
}
}
document.getElementById('option_save').value = '<inp2:m_phrase label="la_Text_Save"/>';
}
function delete_option(aSelectId) {
aSelect = document.getElementById(aSelectId);
if (!confirm('<inp2:m_phrase label="la_Delete_Confirm"/>')) return;
for (var i=aSelect.length-1; i >= 0; i--)
{
cur = aSelect.options[i];
if(aSelect.options[i].selected == true) {
prices[aSelect.options[i].value] = null;
price_types[aSelect.options[i].value] = null;
aSelect.remove(i);
}
}
}
function catchEnter(e) {
if (!e) return;
//enter
if (e.keyCode == 13) {
add_option('options_list[]')
}
}
function update_type(type) {
switch (type) {
case '1': //drop-down
switch_option_values(1);
break;
case '5': //edit-box
switch_option_values(0);
break;
case '4': //text-area
switch_option_values(0);
break;
case '6': //checkboxes
switch_option_values(1);
break;
case '3': //radio-buttons
switch_option_values(1);
break;
default:
switch_option_values(0);
}
}
function switch_option_values(mode) {
var elems = new Array('option_value', 'option_price', 'option_price_type_$','option_price_type_%','options_list[]', 'option_save', 'option_cancel', 'opt_edit_but', 'opt_del_but', 'opt_moveup_but', 'opt_movedown_but');
for (var i = 0; i < elems.length; i++) {
the_elem = document.getElementById(elems[i]);
the_elem.disabled = !mode;
if (the_elem.tagName == 'INPUT' && the_elem.getAttribute('type') == 'button') {
the_elem.className = mode ? 'button':'button-disabled';
}
}
}
</script>
<inp2:m_DefineElement name="option_block">
<option value="<inp2:m_param name="id"/>" <inp2:m_param name="selected"/>><inp2:m_param name="value"/>: <inp2:m_param name="sign"/><inp2:m_param name="price"/> <inp2:m_param name="price_type"/></option>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_block_js">
prices['<inp2:m_param name="id"/>'] = '<inp2:m_param name="price"/>';
price_types['<inp2:m_param name="id"/>'] = '<inp2:m_param name="price_type"/>';
</inp2:m_DefineElement>
<inp2:m_DefineElement name="options_list">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_fld_OptionValue"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<input type="text" name="option_value" id="option_value" value="" style="width: 300px" onkeydown="catchEnter(event)">&nbsp;<br/>
</td>
</tr>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_fld_OptionPrice"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<input type="text" name="option_price" id="option_price" value="" style="width: 40px">&nbsp;
<input type="radio" name="option_price_type" value="$" id="option_price_type_$">&nbsp;<label for="option_price_type_$">$</label>&nbsp;&nbsp;
<input type="radio" name="option_price_type" value="%" id="option_price_type_%">&nbsp;<label for="option_price_type_%">%</label>&nbsp;&nbsp;
<br/>
<input type="button" id="option_save" class="button" style="width: 80px" value="<inp2:m_phrase label="la_button_add"/>" onclick="add_option('options_list[]')">&nbsp;
<input type="button" id="option_cancel" class="button" value="<inp2:m_phrase label="la_Cancel"/>" onclick="cancel_edit()">&nbsp;
</td>
</tr>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">&nbsp;</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<input type="hidden" value="" name="<inp2:po_InputName field="Values"/>" id="<inp2:po_InputName field="Values"/>">
<input type="hidden" value="" name="<inp2:po_InputName field="Prices"/>" id="<inp2:po_InputName field="Prices"/>">
<input type="hidden" value="" name="<inp2:po_InputName field="PriceTypes"/>" id="<inp2:po_InputName field="PriceTypes"/>">
<table style="padding: 0px; margin: 0px">
<tr>
<td style="padding: 0px; margin: 0px">
<select style="padding-left: 0px; width: 300px" name="options_list[]" id="options_list[]" multiple onchange="PrepareData()" ondblclick="edit_option('options_list[]')" size="10" style="width: 200px">
<inp2:po_ShowOptions render_as="option_block" show="current" no_currency="1"/>
</select>
<script type="text/javascript">
<inp2:po_ShowOptions render_as="option_block_js" show="current" js="1"/>
</script>
</td>
<td style="padding-left: 5px; vertical-align: top">
<input type="button" id="opt_edit_but" class="button" style="width: 90px" onclick="edit_option('options_list[]')" value="<inp2:m_phrase label="la_Text_Edit"/>"><br/>
<input type="button" id="opt_del_but" class="button" style="width: 90px" onclick="delete_option('options_list[]')" value="<inp2:m_phrase label="la_Text_Delete"/>"><br/>
<br/><br/><br/>
<input type="button" id="opt_moveup_but" class="button" style="width: 90px" onclick="move_options_up('options_list[]', 1)" value="<inp2:m_phrase label="la_prompt_moveup"/>"><br/>
<input type="button" id="opt_movedown_but" class="button" style="width: 90px" onclick="move_options_down('options_list[]', 1)" value="<inp2:m_phrase label="la_prompt_movedown"/>"><br/>
</td>
</tr>
</table>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:po_SaveWarning name="grid_save_warning"/>
<inp2:po_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_Text_Option!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Option"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="po" field="ProductId"/>
- <inp2:m_RenderElement name="inp_label" prefix="po" field="ProductOptionId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="po" field="Name" title="!la_fld_Name!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="po" field="Required" title="!la_fld_Required!"/>
- <!--<inp2:m_RenderElement name="inp_edit_checkbox" prefix="po" field="Listable" title="!la_fld_Listable!"/>-->
- <inp2:m_RenderElement name="inp_edit_options" prefix="po" field="OptionType" has_empty="1" empty_value="0" title="!la_fld_OptionType!" onchange="update_type(this.value)"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="po" field="Priority" title="!la_fld_Priority!" size="2"/>
- <inp2:m_RenderElement name="options_list" prefix="po" field="Values" title="!la_fld_Values!" size="2"/>
+ <inp2:m_RenderElement name="inp_label" prefix="po" field="ProductOptionId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="po" field="Name" title="la_fld_Name" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="po" field="Required" title="la_fld_Required"/>
+ <!--<inp2:m_RenderElement name="inp_edit_checkbox" prefix="po" field="Listable" title="la_fld_Listable"/>-->
+ <inp2:m_RenderElement name="inp_edit_options" prefix="po" field="OptionType" has_empty="1" empty_value="0" title="la_fld_OptionType" onchange="update_type(this.value)"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="po" field="Priority" title="la_fld_Priority" size="2"/>
+ <inp2:m_RenderElement name="options_list" prefix="po" field="Values" title="la_fld_Values" size="2"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script type="text/javascript">
update_type(document.getElementById('<inp2:po_InputName field="OptionType"/>').value);
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/option_combinations.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/option_combinations.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/option_combinations.tpl (revision 14089)
@@ -1,161 +1,161 @@
<inp2:adm_SetPopupSize width="830" height="720"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="poc.grid" title_preset="options_combinations"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
function edit()
{
set_hidden_field('remove_specials[poc.grid]', 1);
set_hidden_field('poc_id', '');
submit_event('poc','')
}
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Close" escape="1"/>', function() {
window_close();
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('poc.grid')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('move_up', '<inp2:m_phrase label="la_ToolTip_MoveUp" escape="1"/>', function() {
submit_event('poc.grid','OnMassMoveUp');
}
) );
a_toolbar.AddButton( new ToolBarButton('move_down', '<inp2:m_phrase label="la_ToolTip_MoveDown" escape="1"/>', function() {
submit_event('poc.grid','OnMassMoveDown');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="poc.grid" grid="Default"/>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="option_value_block">
<option value="<inp2:m_param name="id"/>" <inp2:m_param name="selected"/>><inp2:m_param name="value"/></option>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_value_cb_block">
<input type="checkbox"
name="poc[<inp2:poc_Field name="CombinationId"/>][Combination][<inp2:Field name="ProductOptionId"/>][]"
id="poc[<inp2:poc_Field name="CombinationId"/>][Combination][<inp2:Field name="ProductOptionId"/>]_<inp2:m_param name="id"/>"
value="<inp2:m_param name="id"/>" <inp2:m_param name="selected"/>>
<label for="poc[<inp2:poc_Field name="CombinationId"/>][Combination][<inp2:Field name="ProductOptionId"/>]_<inp2:m_param name="id"/>"><inp2:m_param name="value"/></label>&nbsp;
</inp2:m_DefineElement>
<inp2:m_DefineElement name="option_block">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:Field name="Name"/>:
</td>
<td class="control-mid">&nbsp;</td>
<script type="text/javascript">
if (typeof(fields['poc']) == 'undefined') {
fields['poc'] = new Object();
}
fields['poc']['Combination[<inp2:Field name="ProductOptionId"/>]'] = '<inp2:Field name="Name" js_escape="1"/>';
</script>
<td class="control-cell">
<inp2:m_if check="FieldEquals" field="OptionType" value="6">
<inp2:ShowOptions render_as="option_value_cb_block" mode="selected" combination_prefix="poc" combination_field="Combination"/>
<span class="error"><inp2:poc_Error field="Combination"/></span>
<inp2:m_else/>
<select style="padding-left: 0px; width: 300px" name="poc[<inp2:poc_Field name="CombinationId"/>][Combination][<inp2:Field name="ProductOptionId"/>]" id="poc[<inp2:poc_Field name="CombinationId"/>][Combination][<inp2:Field name="ProductOptionId"/>]" style="width: 200px">
<option value=""></option>
<option value="_ANY_"><inp2:m_phrase label="la_comm_Any"/></option>
<inp2:ShowOptions render_as="option_value_block" mode="selected" combination_prefix="poc" combination_field="Combination"/>
</select>
</inp2:m_if>
</td>
<script type="text/javascript">
add_form_error('poc', 'Combination[<inp2:Field name="ProductOptionId"/>]', '<inp2:poc_InputName field="Combination"/>[<inp2:Field name="ProductOptionId"/>]', '<inp2:poc_Error field="Combination" js_escape="1"/>');
</script>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="combination_buttons">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">&nbsp;</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<input class="button" style="width: 80px" type="button" onclick="submit_event('poc', '<inp2:poc_SaveEvent/>')" value="<inp2:m_if check="m_GetEquals" var="poc_SaveEvent" value="OnCreate"><inp2:m_Phrase label="la_Button_Add"/><inp2:m_else/><inp2:m_Phrase label="la_Button_Save"/></inp2:m_if>">&nbsp
<input class="button" style="width: 80px" type="button" onclick="submit_event('poc', 'OnNew')" value="<inp2:m_Phrase label="la_Cancel"/>">&nbsp;&nbsp;
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_combination_td">
<inp2:Field field="$field" grid="$grid" no_special="1"/>
<inp2:m_ifnot check="Field" field="Priority" equals_to="0"><span class="priority"><sup><inp2:Field field="Priority" /></sup></span></inp2:m_ifnot>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="price_td" >
<inp2:m_if check="FieldEquals" field="PriceType" value="1">
=
<inp2:Field field="$field" grid="$grid" format="%.2f"/>&nbsp;
$
</inp2:m_if>
<inp2:m_if check="FieldEquals" field="PriceType" value="2">
<inp2:Field field="$field" grid="$grid" format="%+.2f"/>&nbsp;
$
</inp2:m_if>
<inp2:m_if check="FieldEquals" field="PriceType" value="3">
<inp2:Field field="$field" grid="$grid" format="%+ 6.2f"/>&nbsp;
%
</inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="weight_td" >
<inp2:Field field="$field" grid="$grid"/>
</inp2:m_DefineElement>
<!--<inp2:poc_SaveWarning name="grid_save_warning"/>-->
<inp2:poc_ErrorWarning name="form_error_warning"/>
<div id="scroll_container" style="height: 250px;">
<table class="edit-form" style="border-bottom: 1px solid black;">
- <inp2:m_RenderElement name="subsection" title="!la_Text_Combination!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Combination"/>
<inp2:po.edit_PrintList2 per_page="-1" selectable_only="1" render_as="option_block" main_special=""/>
- <inp2:m_RenderElement name="subsection" title="!la_Text_Properties!"/>
+ <inp2:m_RenderElement name="subsection" title="la_Text_Properties"/>
<inp2:m_RenderElement name="inp_edit_hidden" prefix="poc" field="ProductId"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="poc" field="Availability" title="!la_fld_Availability!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="poc" field="PriceType" title="!la_fld_PriceType!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="poc" field="Price" title="!la_fld_Price!" size="4"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="poc" field="SKU" title="!la_fld_SKU!" size="40"/>
- <!--<inp2:m_RenderElement name="inp_edit_radio" prefix="poc" field="WeightType" title="!la_fld_WeightType!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="poc" field="Weight" title="!la_fld_Weight!" size="4"/>-->
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="poc" field="Availability" title="la_fld_Availability"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="poc" field="PriceType" title="la_fld_PriceType"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="poc" field="Price" title="la_fld_Price" size="4"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="poc" field="SKU" title="la_fld_SKU" size="40"/>
+ <!--<inp2:m_RenderElement name="inp_edit_radio" prefix="poc" field="WeightType" title="la_fld_WeightType"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="poc" field="Weight" title="la_fld_Weight" size="4"/>-->
<inp2:m_RenderElement name="combination_buttons"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
-<inp2:m_RenderElement name="grid" main_special="" PrefixSpecial="poc.grid" IdField="CombinationId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" main_special="" PrefixSpecial="poc.grid" IdField="CombinationId" grid="Default"/>
<script type="text/javascript">
Grids['poc.grid'].SetDependantToolbarButtons( new Array('delete', 'move_up', 'move_down') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_options.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_options.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_options.tpl (revision 14089)
@@ -1,128 +1,128 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="po" title_preset="options" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
//Pricing related:
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_NewOption" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_new_item('po', 'in-commerce/products/option_edit')
} ) );
function edit()
{
std_edit_temp_item('po', 'in-commerce/products/option_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('po')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('move_up', '<inp2:m_phrase label="la_ToolTip_MoveUp" escape="1"/>', function() {
submit_event('po','OnMassMoveUp');
}
) );
a_toolbar.AddButton( new ToolBarButton('move_down', '<inp2:m_phrase label="la_ToolTip_MoveDown" escape="1"/>', function() {
submit_event('po','OnMassMoveDown');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep5') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="po" grid="Default"/>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="option_name_td">
<inp2:Field field="$field" grid="$grid"/><inp2:m_ifnot check="Field" field="Priority" equals_to="0"><span class="priority"><sup><inp2:Field field="Priority" /></sup></span></inp2:m_ifnot>
</inp2:m_DefineElement>
<script type="text/javascript">
function openCombinations() {
set_hidden_field('events[poc.edit]', 'OnNew');
openSelector('p', '<inp2:m_Link t="in-commerce/products/option_combinations" pass="all,poc" poc_id=""/>', '', '800x600');
}
</script>
<div id="scroll_container" mode="minimal">
<table class="edit-form" style="border-bottom: 1px solid black;">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_fld_ManageCombinations"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<a href="javascript:openCombinations();">Open</a>
</td>
</tr>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="OptionsSelectionMode" title="!la_fld_OptionsSelectionMode!"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="OptionsSelectionMode" title="la_fld_OptionsSelectionMode"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_RenderElement name="grid" PrefixSpecial="po" IdField="ProductOptionId" grid="Default"/>
<script type="text/javascript">
Grids['po'].SetDependantToolbarButtons( new Array('edit','delete','approve','decline','move_up','move_down') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_pricing.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_pricing.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_pricing.tpl (revision 14089)
@@ -1,238 +1,238 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
-<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="g" grid="Radio" title_preset="pricing" tab_preset="Default"/>
+<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="pricing" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript" src='js/catalog.js'></script>
<script type="text/javascript">
Request.progressText = '<inp2:m_phrase name="la_title_Loading" escape="1"/>';
Catalog.prototype.AfterInit = function () {
var $default_group = <inp2:conf_ConfigValue name="User_LoggedInGroup"/>;
set_hidden_field('group_id', $default_group);
$('#current_group_id').val($default_group).change();
}
Catalog.prototype.go_to_group = function($group_id) {
this.refreshTab('pr.tang', 'pr.tang_div');
}
Catalog.prototype.refreshTab = function($prefix, $div_id, $force) {
var $group_id = $('#current_group_id').val();
var $tab_group_id = document.getElementById($div_id).getAttribute('group_id');
if ($group_id != $tab_group_id || $force) {
// query tab content only in case if not queried or category don't match
var $url = this.URLMask.replace('#ITEM_PREFIX#', $prefix).replace('#GROUP_ID#', $group_id);
this.BusyRequest[$prefix] = false;
Request.makeRequest($url, this.BusyRequest[$prefix], $div_id, this.successCallback, this.errorCallback, $div_id, this);
}
}
// adds information about tab to tab_registry
Catalog.prototype.registerTab = function($tab_id) {
var $tab = document.getElementById($tab_id + '_div');
var $index = this.TabRegistry.length;
this.TabRegistry[$index] = new Array();
this.TabRegistry[$index]['tab_id'] = $tab_id;
this.TabRegistry[$index]['prefix'] = $tab.getAttribute('prefix');
this.TabRegistry[$index]['dep_buttons'] = new Array();
this.TabRegistry[$index]['index'] = $index;
}
Catalog.prototype.displaySearch = function ($prefix) {
}
Catalog.prototype.submit_event = function($prefix_special, $event, $t, $return_result) {
var $prev_template = get_hidden_field('t');
if (isset($event)) set_hidden_field('events[' + $prefix_special + ']', $event);
if (isset($t)) set_hidden_field('t', $t);
var $tab_id = this.queryTabRegistry('prefix', this.ActivePrefix, 'tab_id');
if ($return_result)
this.submit_kernel_form($tab_id);
else
this.submit_kernel_form();
set_hidden_field('t', $prev_template);
}
var $BracketManager = new Catalog('<inp2:m_Link template="in-commerce/products/products_pricing_grid" item_prefix="#ITEM_PREFIX#" group_id="#GROUP_ID#" no_amp="1" pass="m,p,pr.tang"/>', 'permmanager_', 'ProductPriceBracketManager');
</script>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
function add_brackets()
{
//submit_event('pr.tang', 'OnMoreBrackets')
set_hidden_field('group_id', get_hidden_field('current_group_id'));
set_hidden_field('item_prefix', $BracketManager.ActivePrefix);
$BracketManager.submit_event('pr.tang', 'OnMoreBrackets', 'in-commerce/products/products_pricing_grid', true);
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:more_brackets', '<inp2:m_phrase label="la_ToolTip_MoreBrackets" escape="1"/>', add_brackets) );
function infinity()
{
//submit_event('pr.tang', 'OnInfinity');
set_hidden_field('group_id', get_hidden_field('current_group_id'));
set_hidden_field('item_prefix', $BracketManager.ActivePrefix);
$BracketManager.submit_event('pr.tang', 'OnInfinity', 'in-commerce/products/products_pricing_grid', true);
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:infinity', '<inp2:m_phrase label="la_ToolTip_Infinity" escape="1"/>', infinity) );
function arrange_brackets()
{
//submit_event('pr.tang', 'OnArrange')
set_hidden_field('group_id', get_hidden_field('current_group_id'));
set_hidden_field('item_prefix', $BracketManager.ActivePrefix);
$BracketManager.submit_event('pr.tang', 'OnArrange', 'in-commerce/products/products_pricing_grid', true);
//$BracketManager.refreshTab('pr.tang', 'pr.tang_div', true);
}
a_toolbar.AddButton( new ToolBarButton('in-commerce:arrange', '<inp2:m_phrase label="la_ToolTip_Arrange" escape="1"/>', arrange_brackets) );
function edit(){ }
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="g" grid="Radio"/>
</tr>
</tbody>
</table>
<script type="text/javascript">
function set_start(id, next_id)
{
//var next_id = id - 1;
var input_id = ('pr.tang[' + next_id) + '][MinQty]';
var orig_id = ('pr.tang[' + id) + '][MinQty]';
if(document.getElementById(input_id) != null)
{
var new_value = parseInt(document.getElementById('pr.tang[' + id + '][MaxQty]').value);
if( isNaN(new_value) ) new_value = 0;
document.getElementById('pr.tang[' + id + '][MaxQty]').value = new_value;
document.getElementById(input_id).value = new_value;
}
}
function enableKernelFormFields()
{
var kForm = document.forms.kernel_form;
var elem = false;
for (var i=0; i<kForm.elements.length; i++){
elem = kForm.elements[i];
if (elem.type == "text" && elem.disabled == true){
elem.disabled = false;
}
}
}
</script>
<inp2:pr.tang_SaveWarning name="grid_save_warning"/>
<div id="scroll_container" mode="minimal">
<table class="edit-form" style="border-bottom: 1px solid black;">
<inp2:m_RenderElement name="subsection" title="la_section_General"/>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<td class="label-cell">
<inp2:m_Phrase name="la_fld_Group"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<select name="current_group_id" id="current_group_id">
<inp2:m_DefineElement name="group_element">
<option value="<inp2:Field name='GroupId'/>"><inp2:Field name="Name"/></option>
</inp2:m_DefineElement>
<inp2:g_PrintList render_as="group_element" per_page="-1"/>
</select>
</td>
</tr>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="in-commerce/products/products_pricing_grid" tab_init="1" item_prefix="pr.tang"/>
<inp2:m_include t="incs/footer"/>
<script type="text/javascript">
var $last_group_id = false;
$(document).ready(
function() {
$('#current_group_id').change(
function ($e) {
var $group_id = $(this).val();
if ($last_group_id !== false) {
// save pricings from previous selected group
set_hidden_field('group_id', $last_group_id);
set_hidden_field('item_prefix', $BracketManager.ActivePrefix);
$BracketManager.submit_event('pr.tang', 'OnArrange', 'in-commerce/products/products_pricing_grid', false);
}
// get prices from new group
set_hidden_field('group_id', $group_id);
$BracketManager.go_to_group($group_id);
// remember previous selected group
$last_group_id = $group_id;
}
);
$BracketManager.Init(false);
}
);
document.forms.kernel_form.onsubmit = enableKernelFormFields;
</script>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/products/products_inventory.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_inventory.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/products/products_inventory.tpl (revision 14089)
@@ -1,201 +1,194 @@
<inp2:adm_SetPopupSize width="1000" height="680"/>
<inp2:m_include t="incs/header"/>
<inp2:m_if check="p_Field" name="InventoryStatus" equals_to="2" db="db">
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" pagination="1" pagination_prefix="poc.grid" grid="Inventory" title_preset="inventory" tab_preset="Default"/>
<inp2:m_else/>
<inp2:m_RenderElement name="combined_header" prefix="p" section="in-portal:browse" title_preset="inventory" tab_preset="Default"/>
</inp2:m_if>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
function edit() {
}
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('p','<inp2:p_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('p', '<inp2:p_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('p', '<inp2:p_NextId/>');
}
) );
<inp2:m_if check="p_Field" name="InventoryStatus" equals_to="2" db="db">
a_toolbar.AddButton( new ToolBarSeparator('sep4') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
</inp2:m_if>
a_toolbar.Render();
<inp2:m_if check="p_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="p_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="p_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
<inp2:m_if check="p_Field" name="InventoryStatus" equals_to="2" db="db">
<inp2:m_RenderElement name="search_main_toolbar" prefix="poc.grid" grid="Inventory"/>
</inp2:m_if>
</tr>
</tbody>
</table>
-<!-- block definitions: begin -->
-<inp2:m_DefineElement name="inp_edit_inventory">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title"/>
- <td class="control-cell">
- <input type="text" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" />&nbsp;
- <input type="button" class="button" id="Add" value="<inp2:m_phrase label="la_btn_Add"/>" onclick="processButton('p', 'OnQtyAdd')">&nbsp;
- <input type="button" class="button" id="Remove" value="<inp2:m_phrase label="la_btn_Remove"/>" onclick="processButton('p', 'OnQtyRemove')">&nbsp;
- <input type="button" class="button" id="Order" value="<inp2:m_phrase label="la_btn_Order"/>" onclick="processButton('p', 'OnQtyOrder')">&nbsp;
- <input type="button" class="button" id="ReceiveOrder" value="<inp2:m_phrase label="la_btn_ReceiveOrder"/>" onclick="processButton('p', 'OnQtyReceiveOrder')">&nbsp;
- <input type="button" class="button" id="CancelOrder" value="<inp2:m_phrase label="la_btn_CancelOrder"/>" onclick="processButton('p', 'OnQtyCancelOrder')">&nbsp;
- </td>
- <inp2:m_RenderElement name="inp_edit_error" pass_params="1"/>
- </tr>
-</inp2:m_DefineElement>
-<!-- block definitions: end -->
-
<inp2:m_ifnot check="p_Field" name="InventoryStatus" equals_to="2" db="db">
<inp2:p_SaveWarning name="grid_save_warning"/>
</inp2:m_ifnot>
<inp2:p_ErrorWarning name="form_error_warning"/>
<div id="scroll_container"<inp2:m_if check="p_Field" name="InventoryStatus" equals_to="2" db="db"> style="height: 142px;"</inp2:m_if>>
<table class="edit-form"<inp2:m_if check="p_Field" name="InventoryStatus" equals_to="2" db="db"> style="border-bottom: 1px solid black;"</inp2:m_if>>
- <inp2:m_RenderElement name="subsection" title="!la_section_Product!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_Product"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="p" field="InventoryStatus" title="la_fld_InventoryStatus" onchange="change_inventory_status()"/>
<inp2:m_ifnot check="p_Field" name="InventoryStatus" db="db" equals_to="2">
<!-- inventory by product / inventory disabled -->
- <inp2:m_RenderElement name="inp_label" prefix="p" field="QtyInStock" title="!la_fld_QtyInStock!"/>
- <inp2:m_RenderElement name="inp_label" prefix="p" field="QtyReserved" title="!la_fld_QtyReserved!"/>
- <inp2:m_RenderElement name="inp_label" prefix="p" field="QtyBackOrdered" title="!la_fld_QtyBackOrdered!"/>
- <inp2:m_RenderElement name="inp_label" prefix="p" field="QtyOnOrder" title="!la_fld_QtyOnOrder!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="p" field="QtyInStock" title="la_fld_QtyInStock"/>
+ <inp2:m_RenderElement name="inp_label" prefix="p" field="QtyReserved" title="la_fld_QtyReserved"/>
+ <inp2:m_RenderElement name="inp_label" prefix="p" field="QtyBackOrdered" title="la_fld_QtyBackOrdered"/>
+ <inp2:m_RenderElement name="inp_label" prefix="p" field="QtyOnOrder" title="la_fld_QtyOnOrder"/>
</inp2:m_ifnot>
- <inp2:m_RenderElement name="inp_edit_inventory" prefix="p" field="Qty" title="!la_fld_Qty!" size="3"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="p" field="InventoryComment" title="!la_fld_Comment!" cols="40" rows="3"/>
+ <inp2:m_RenderElement design="form_row" prefix="p" field="Qty" title="la_fld_Qty" size="3">
+ <td class="control-cell">
+ <input type="text" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" />&nbsp;
+ <input type="button" class="button" id="Add" value="<inp2:m_phrase label="la_btn_Add"/>" onclick="processButton('p', 'OnQtyAdd')">&nbsp;
+ <input type="button" class="button" id="Remove" value="<inp2:m_phrase label="la_btn_Remove"/>" onclick="processButton('p', 'OnQtyRemove')">&nbsp;
+ <input type="button" class="button" id="Order" value="<inp2:m_phrase label="la_btn_Order"/>" onclick="processButton('p', 'OnQtyOrder')">&nbsp;
+ <input type="button" class="button" id="ReceiveOrder" value="<inp2:m_phrase label="la_btn_ReceiveOrder"/>" onclick="processButton('p', 'OnQtyReceiveOrder')">&nbsp;
+ <input type="button" class="button" id="CancelOrder" value="<inp2:m_phrase label="la_btn_CancelOrder"/>" onclick="processButton('p', 'OnQtyCancelOrder')">&nbsp;
+ </td>
+ </inp2:m_RenderElement>
+
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="p" field="InventoryComment" title="la_fld_Comment" cols="40" rows="3"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_if check="p_Field" name="InventoryStatus" equals_to="2" db="db">
<!-- inventory by product options -->
<inp2:m_DefineElement name="grid_combination_td">
<inp2:Field field="$field" grid="$grid" no_special="1"/>
<inp2:m_ifnot check="Field" field="Priority" equals_to="0"><span class="priority"><sup><inp2:Field field="Priority" /></sup></span></inp2:m_ifnot>
</inp2:m_DefineElement>
<inp2:m_RenderElement name="grid" main_special="" PrefixSpecial="poc.grid" IdField="CombinationId" grid="Inventory"/>
</inp2:m_if>
<script type="text/javascript">
var $inventory_status = <inp2:p_Field name="InventoryStatus" db="db"/>;
function getInventoryStatus() {
var $i = 0;
var $status_id = '<inp2:p_InputName field="InventoryStatus"/>';
while ($i <= 2) {
if (document.getElementById($status_id + '_' + $i).checked) {
return $i;
}
$i++;
}
return 0;
}
function change_inventory_status()
{
var $new_inventory_status = getInventoryStatus();
if (confirm('<inp2:m_phrase label="la_warning_ChangeInventoryStatus" />')) {
$inventory_status = $new_inventory_status;
affect_dependent_elements();
go_to_tab('p', t);
}
else {
var $status_id = '<inp2:p_InputName field="InventoryStatus"/>';
document.getElementById($status_id + '_' + $new_inventory_status).checked = false;
document.getElementById($status_id + '_' + $inventory_status).checked = true;
document.getElementById($status_id + '_' + $inventory_status).focus();
}
}
function iterateButtons($disabled, $class_name) {
var $i = 0;
var $buttons = Array('Add', 'Remove', 'Order', 'ReceiveOrder', 'CancelOrder');
while ($i < $buttons.length) {
document.getElementById($buttons[$i]).disabled = $disabled;
document.getElementById($buttons[$i]).className = $class_name;
$i++;
}
}
function processButton($prefix, $event) {
if ($inventory_status == 2) {
if (Grids['poc.grid'].GetSelected().length == 0) {
alert('<inp2:m_phrase name="la_warning_SelectOptionCombination" escape="1"/>')
}
else {
// go next if option combination is selected
submit_event($prefix, $event);
}
}
else {
// go next if not using option combination inventory
submit_event($prefix, $event);
}
}
function affect_dependent_elements()
{
var $inventory_disabled = document.getElementById('<inp2:p_InputName field="InventoryStatus"/>_0').checked;
iterateButtons($inventory_disabled, $inventory_disabled ? 'button-disabled' : 'button');
document.getElementById('<inp2:p_InputName field="Qty"/>').disabled = $inventory_disabled;
document.getElementById('<inp2:p_InputName field="InventoryComment"/>').disabled = $inventory_disabled;
document.getElementById('<inp2:p_InputName field="InventoryStatus"/>_2').disabled = <inp2:poc.grid_TotalRecords/> > 0 ? false : true;
}
affect_dependent_elements();
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/import.tpl
===================================================================
--- branches/5.2.x/admin_templates/import.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/import.tpl (revision 14089)
@@ -1,232 +1,223 @@
<inp2:adm_SetPopupSize width="780" height="670"/>
<inp2:m_include t="incs/header"/>
<inp2:p.import_PresetFormFields/>
<inp2:m_RenderElement name="combined_header" prefix="adm" section="in-portal:main_import" title_preset="import"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('import', '<inp2:m_phrase label="la_ToolTip_Import" escape="1"/>', function() {
document.getElementById('export_columns').value = select_to_string('<inp2:p.import_InputName field="ExportColumns"/>');
submit_event('p.import','OnExportBegin');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('p.import','OnGoBack');
}
) );
a_toolbar.Render();
function check_radio($id)
{
document.getElementById($id).checked = true;
}
// gets value of checked radio button
function get_checked($field_name) {
var $ret = false;
var $fields = document.getElementsByName($field_name);
for(var $i = 0; $i < $fields.length; $i++) {
if ($fields[$i].checked) {
$ret = $fields[$i].value;
break;
}
}
return $ret;
}
// enable/disable form fields based on other field values
function reflectFormFields()
{
var $auto_fields = get_checked('<inp2:p.import_InputName field="FieldTitles"/>') == 1 ? true : false;
if ($auto_fields) {
document.getElementById('_cb_<inp2:p.import_InputName field="SkipFirstRow"/>').checked = true;
}
document.getElementById('_cb_<inp2:p.import_InputName field="SkipFirstRow"/>').onchange();
document.getElementById('<inp2:p.import_InputName field="ExportColumns"/>').disabled = $auto_fields;
document.getElementById('<inp2:p.import_InputName field="AvailableColumns"/>').disabled = $auto_fields;
var $btn = null;
var $btns = Array('up', 'down', 'left', 'right');
var $i = 0;
while ($i < $btns.length) {
$btn = document.getElementById('btn_move_'+$btns[$i]);
$btn.disabled = $auto_fields;
$btn.className = $auto_fields ? 'button-disabled' : 'button';
$i++;
}
}
Application.setHook('p.import:OnBeforeOpenSelector',
function() {
document.getElementById('export_columns').value = select_to_string('<inp2:p.import_InputName field="ExportColumns"/>');
}
);
$(document).ready(
function() {
$('#step_number').text(3);
}
);
</script>
</td>
</tr>
</tbody>
</table>
<inp2:p.import_SaveWarning name="grid_save_warning"/>
<inp2:p.import_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
-
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="p.import" field="ImportSource" title="la_fld_ImportFilename"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
+ <inp2:m_RenderElement design="form_row" prefix="p.import" field="ImportSource" title="la_fld_ImportFilename">
<td class="control-cell">
<table border="0">
<tr>
<td>
<input type="radio" name="<inp2:p.import_InputName field="ImportSource"/>" id="<inp2:p.import_InputName field="ImportSource"/>_1"<inp2:m_if check="p.import_FieldEquals" field="ImportSource" value="1"> checked</inp2:m_if> value="1" />
</td>
<td>
<label for="<inp2:p.import_InputName field="ImportSource"/>_1">upload</label>
</td>
<td>
<input type="file" name="<inp2:p.import_InputName field="ImportFilename"/>" id="<inp2:p.import_InputName field="ImportFilename"/>" onclick="check_radio('<inp2:p.import_InputName field="ImportSource"/>_1');">
</td>
</tr>
<tr>
<td>
<input type="radio" name="<inp2:p.import_InputName field="ImportSource"/>" id="<inp2:p.import_InputName field="ImportSource"/>_2"<inp2:m_if check="p.import_FieldEquals" field="ImportSource" value="2"> checked</inp2:m_if> value="2" />
</td>
<td>
<label for="<inp2:p.import_InputName field="ImportSource"/>_2">select</label>
</td>
<td>
<select name="<inp2:p.import_InputName field="ImportLocalFilename"/>" onclick="check_radio('<inp2:p.import_InputName field="ImportSource"/>_2');">
<inp2:p.import_PredefinedOptions field="ImportLocalFilename" block="inp_option_item" selected="selected"/>
</select>
</td>
</tr>
</table>
</td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="p.import" field="ImportSource"/>
- </tr>
+ </inp2:m_RenderElement>
<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="FieldsSeparatedBy" title="la_fld_FieldsSeparatedBy" size="2" maxlength="1"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="FieldsEnclosedBy" title="la_fld_FieldsEnclosedBy" size="2" maxlength="1"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="p.import" field="LineEndings" title="la_fld_LineEndings" use_phrases="0"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p.import" field="SkipFirstRow" title="la_fld_SkipFirstRow"/>
<inp2:m_RenderElement name="inp_edit_radio" prefix="p.import" field="FieldTitles" title="la_fld_FieldTitles" onclick="reflectFormFields();"/>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="p.import" field="ExportColumns" title="la_fld_ImportColumns"/>
+ <inp2:m_RenderElement design="form_row" prefix="p.import" field="ExportColumns" title="la_fld_ImportColumns">
<td class="control-cell">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<input type="button" value="<inp2:m_phrase name="la_btn_Up"/>" id="btn_move_up" onclick="move_options_up('<inp2:p.import_InputName field="ExportColumns"/>', 1)" class="button">
<input type="button" value="<inp2:m_phrase name="la_btn_Down"/>" id="btn_move_down" onclick="move_options_down('<inp2:p.import_InputName field="ExportColumns"/>', 1)" class="button"><br />
<img src="img/spacer.gif" width="1" height="5" alt=""><br />
</td>
<td><img src="img/spacer.gif" width="45" height="1" alt=""><br></td>
<td><inp2:m_phrase name="la_fld_AvailableColumns"/>:</td>
</tr>
<tr>
<td>
<select multiple id="<inp2:p.import_InputName field="ExportColumns"/>" size="15" style="width: 225px;">
<inp2:p.import_PredefinedOptions field="ExportColumns" block="inp_option_item" selected="selected"/>
</select>
<input type="hidden" id="export_columns" name="<inp2:p.import_InputName field="ExportColumns"/>" value="<inp2:p.import_Field field="ExportColumns"/>" />
</td>
<td align="center">
<input type="button" value="&nbsp;&laquo;&laquo;&nbsp;" id="btn_move_left" onclick="move_selected('<inp2:p.import_InputName field="AvailableColumns"/>', '<inp2:p.import_InputName field="ExportColumns"/>')" class="button"><br>
<img src="img/spacer.gif" width="1" height="4" alt=""><br>
<input type="button" value="&nbsp;&raquo;&raquo;&nbsp;" id="btn_move_right" onclick="move_selected('<inp2:p.import_InputName field="ExportColumns"/>', '<inp2:p.import_InputName field="AvailableColumns"/>'); select_sort('<inp2:p.import_InputName field="AvailableColumns"/>');" class="button">
</td>
<td>
<select multiple id="<inp2:p.import_InputName field="AvailableColumns"/>" size="15" style="width: 225px;">
<inp2:p.import_PredefinedOptions field="AvailableColumns" block="inp_option_item" selected="selected"/>
</select>
</td>
</tr>
</table>
</td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="p.import" field="ExportColumns"/>
- </tr>
+ </inp2:m_RenderElement>
<!-- CATEGORY SELECTOR: BEGIN -->
<inp2:m_DefineElement name="root_cat_caption">
<inp2:m_Phrase name="la_rootcategory_name"/>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="category_caption">
<inp2:m_param name="separator"/><inp2:m_param name="cat_name"/>
</inp2:m_DefineElement>
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="p.import" field="CategoryId" title="la_fld_ImportCategory"/>
+ <inp2:m_RenderElement design="form_row" prefix="p.import" field="CategoryId" title="la_fld_ImportCategory">
<td class="control-cell">
<b><inp2:p.import_CategoryPath separator=" &gt; " root_cat_render_as="root_cat_caption" render_as="category_caption" session_var="ImportCategory"/></b>
<input type="hidden" name="<inp2:p.import_InputName field='CategoryId'/>" value="<inp2:p.import_Field field='CategoryId' db='db'/>" />
<a href="javascript:openSelector('p.import', '<inp2:adm_SelectorLink prefix="p.import" selection_mode="single" tab_prefixes="none"/>', 'ImportCategory', null, 'OnSaveSettings');"><img src="img/icons/icon24_cat.gif" border="0" align="absmiddle" /></a>
</td>
- <td class="error"><inp2:p.import_Error field="CategoryId"/>&nbsp;</td>
- </tr>
+ </inp2:m_RenderElement>
<!-- CATEGORY SELECTOR: END -->
<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="CategorySeparator" title="la_fld_CategorySeparator" size="2" maxlength="1"/>
<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p.import" field="ReplaceDuplicates" title="la_fld_ReplaceDuplicates" />
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="p.import" field="CheckDuplicatesMethod" title="la_fld_CheckDuplicatesMethod"/>
+ <inp2:m_RenderElement design="form_row" prefix="p.import" field="CheckDuplicatesMethod" title="la_fld_CheckDuplicatesMethod">
<td class="control-cell">
<table cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
<input type="radio"<inp2:m_if check="p.import_FieldEquals" field="CheckDuplicatesMethod" value="1"> checked</inp2:m_if> name="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>" id="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_1" value="1" />
</td>
<td>
<label for="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_1"><inp2:m_phrase name="la_IDField" />: PRODUCTID</label>
</td>
</tr>
<tr>
<td valign="top">
<input type="radio"<inp2:m_if check="p.import_FieldEquals" field="CheckDuplicatesMethod" value="2"> checked</inp2:m_if> name="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>" id="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_2" value="2" />
</td>
<td>
<label for="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_2"><inp2:m_phrase name="la_OtherFields" />: </label>
<inp2:p.import_PredefinedOptions prefix="p.import" field="DuplicateCheckFields" block="inp_checkbox_item" selected="checked"/>
<inp2:m_RenderElement prefix="p.import" name="inp_edit_hidden" field="DuplicateCheckFields"/>
</td>
</tr>
</table>
</td>
- <inp2:m_RenderElement name="inp_edit_error" prefix="p.import" field="CheckDuplicatesMethod"/>
- </tr>
+ </inp2:m_RenderElement>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<script language="javascript" type="text/javascript">
reflectFormFields();
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/discounts/coupons_list.tpl
===================================================================
--- branches/5.2.x/admin_templates/discounts/coupons_list.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/discounts/coupons_list.tpl (revision 14089)
@@ -1,67 +1,67 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="coup" section="in-commerce:coupons" title_preset="coupons_list" pagination="1" tabs="in-commerce/discounts/discounts_list_tabs"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
//do not rename - this function is used in default grid for double click!
function edit()
{
std_edit_item('coup', 'in-commerce/discounts/coupon_edit');
}
var a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_New_Coupon" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_precreate_item('coup', 'in-commerce/discounts/coupon_edit')
} ) );
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('coup')
} ) );
a_toolbar.AddButton( new ToolBarButton('clone', '<inp2:m_phrase label="la_ToolTip_Clone" escape="1"/>',
function() {
//set_event('sc', 'OnSaveCreated');
openSelector('coup', '<inp2:m_t t="in-commerce/discounts/coupon_clone_selector" pass="all"/>', '', '500x260');
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('coup','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('coup','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="coup" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="coup" IdField="CouponId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="coup" IdField="CouponId" grid="Default"/>
<script type="text/javascript">
Grids['coup'].SetDependantToolbarButtons( new Array('edit','delete','approve','decline','clone') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/discounts/coupon_selector.tpl
===================================================================
--- branches/5.2.x/admin_templates/discounts/coupon_selector.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/discounts/coupon_selector.tpl (revision 14089)
@@ -1,47 +1,47 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="coup" section="in-commerce:coupons" grid="Radio" title_preset="coupon_selector" pagination="1"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
function edit()
{
//do nothing;
}
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
set_hidden_field('selected_ids', Grids['coup'].GetSelected());
submit_event('<inp2:m_recall name="main_prefix"/>', 'OnProcessSelected');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Close" escape="1"/>', function() {
window_close();
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="coup" grid="Radio"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="coup" IdField="CouponId" grid="Radio" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="coup" IdField="CouponId" grid="Radio"/>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/discounts/discounts_list.tpl
===================================================================
--- branches/5.2.x/admin_templates/discounts/discounts_list.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/discounts/discounts_list.tpl (revision 14089)
@@ -1,61 +1,61 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="d" section="in-commerce:discounts" title_preset="discounts_list" pagination="1" tabs="in-commerce/discounts/discounts_list_tabs"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
//do not rename - this function is used in default grid for double click!
function edit()
{
std_edit_item('d', 'in-commerce/discounts/discount_edit');
}
var a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_New_Discount" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_precreate_item('d', 'in-commerce/discounts/discount_edit')
} ) );
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('d')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('d','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('d','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="d" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="d" IdField="DiscountId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="d" IdField="DiscountId" grid="Default"/>
<script type="text/javascript">
Grids['d'].SetDependantToolbarButtons( new Array('edit','delete','approve','decline') );
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/discounts/gift_certificate_list.tpl
===================================================================
--- branches/5.2.x/admin_templates/discounts/gift_certificate_list.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/discounts/gift_certificate_list.tpl (revision 14089)
@@ -1,63 +1,63 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="gc" section="in-commerce:gift-certificates" title_preset="gift_certificates_list" pagination="1" tabs="in-commerce/discounts/discounts_list_tabs"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
//do not rename - this function is used in default grid for double click!
function edit()
{
std_edit_item('gc', 'in-commerce/discounts/gift_certificate_edit');
}
var a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_NewGiftCertificate" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_precreate_item('gc', 'in-commerce/discounts/gift_certificate_edit')
} ) );
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('gc')
} ) );
a_toolbar.AddButton( new ToolBarButton('e-mail', '<inp2:m_phrase label="la_ToolTip_SendMail" escape="1"/>', function() {
submit_event('gc', 'OnEmailGiftCertificate');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="gc" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="gc" IdField="GiftCertificateId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="gc" IdField="GiftCertificateId" grid="Default"/>
<script type="text/javascript">
Grids['gc'].SetDependantToolbarButtons( new Array('edit','delete','e-mail') );
addLoadEvent(
function() {
<inp2:m_if check="m_Recall" name="print_certificate_id">
openSelector('gc', '<inp2:gc_PrintLink template="in-commerce/discounts/gift_certificate_print" no_amp="1"/>');
</inp2:m_if>
}
);
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/discounts/coupon_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/discounts/coupon_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/discounts/coupon_edit.tpl (revision 14089)
@@ -1,124 +1,110 @@
<inp2:adm_SetPopupSize width="870" height="600"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="coup" section="in-commerce:coupons" title_preset="coupons_edit" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('coup','<inp2:coup_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('coup','OnCancel');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('coup', '<inp2:coup_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('coup', '<inp2:coup_NextId/>');
}
) );
//a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="coup_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="coup_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="coup_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<script language="JavaScript">
function Random(N) {
return Math.floor(N * (Math.random() % 1));
}
function generateRandomCode(elementId){
var j, S = "", d;
for (j = 0; j < 10; j++) {
d=Random(2);
if (d==1)
S += String.fromCharCode(65 + Random(26));
else
S += String(Random(9));
}
document.getElementById(elementId).value=S;
}
</script>
-<inp2:m_DefineElement name="inp_edit_box_generate" is_last="0">
- <inp2:m_if check="{$prefix}_FieldVisible" field="$field">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
- <td class="control-cell">
- <input type="text" name="<inp2:{$prefix}_InputName field='$field'/>" id="<inp2:{$prefix}_InputName field='$field'/>" value="<inp2:{$prefix}_Field field='$field'/>" tabindex="<inp2:m_get param='tab_index'/>" size="<inp2:m_param name='size'/>">
- <input type="button" class="button" onClick="generateRandomCode('<inp2:{$prefix}_InputName field='$field'/>')" value="<inp2:m_Phrase label='la_GenerateCode' />" />
- </td>
- <inp2:m_RenderElement name="inp_edit_error" pass_params="1"/>
- </tr>
- </inp2:m_if>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="inp_edit_box_comment" is_last="0">
- <inp2:m_if check="{$prefix}_FieldVisible" field="$field">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
- <td class="control-cell">
- <input type="text" name="<inp2:{$prefix}_InputName field='$field'/>" id="<inp2:{$prefix}_InputName field='$field'/>" value="<inp2:{$prefix}_Field field='$field'/>" tabindex="<inp2:m_get param='tab_index'/>" size="<inp2:m_param name='size'/>">
- <inp2:m_Phrase label="la_comment_LeaveBlank" />
- </td>
- <inp2:m_RenderElement name="inp_edit_error" pass_params="1"/>
- </tr>
- </inp2:m_if>
-</inp2:m_DefineElement>
-
<inp2:coup_SaveWarning name="grid_save_warning"/>
<inp2:coup_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
- <inp2:m_RenderElement name="inp_label" prefix="coup" field="CouponId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="coup" field="Status" title="!la_fld_Status!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="coup" field="Name" title="!la_fld_Name!" size="35"/>
- <inp2:m_RenderElement name="inp_edit_box_generate" prefix="coup" field="Code" title="!la_fld_CouponCode!" size="35"/>
-
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="coup" field="Expiration" title="!la_fld_Expiration!" size="10"/>
-
- <inp2:m_RenderElement name="inp_edit_options" prefix="coup" field="Type" title="!la_fld_Type!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="coup" field="Amount" title="!la_fld_Amount!" size="4"/>
-
- <inp2:m_RenderElement name="inp_label" prefix="coup" field="LastUsedBy" title="!la_fld_LastUsedBy!" size="15"/>
- <inp2:m_RenderElement name="inp_label" prefix="coup" field="LastUsedOn" title="!la_fld_LastUsedOn!" size="10"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
+ <inp2:m_RenderElement name="inp_label" prefix="coup" field="CouponId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="coup" field="Status" title="la_fld_Status"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="coup" field="Name" title="la_fld_Name" size="35"/>
+
+ <inp2:m_RenderElement design="form_row" prefix="coup" field="Code" title="la_fld_CouponCode" size="35">
+ <td class="control-cell">
+ <input type="text" name="<inp2:{$prefix}_InputName field='$field'/>" id="<inp2:{$prefix}_InputName field='$field'/>" value="<inp2:{$prefix}_Field field='$field'/>" tabindex="<inp2:m_get param='tab_index'/>" size="<inp2:m_param name='size'/>">
+ <input type="button" class="button" onClick="generateRandomCode('<inp2:{$prefix}_InputName field='$field'/>')" value="<inp2:m_Phrase label='la_GenerateCode' />" />
+ </td>
+ </inp2:m_RenderElement>
+
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="coup" field="Expiration" title="la_fld_Expiration" size="10"/>
+
+ <inp2:m_RenderElement name="inp_edit_options" prefix="coup" field="Type" title="la_fld_Type"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="coup" field="Amount" title="la_fld_Amount" size="4"/>
+
+ <inp2:m_RenderElement name="inp_label" prefix="coup" field="LastUsedBy" title="la_fld_LastUsedBy" size="15"/>
+ <inp2:m_RenderElement name="inp_label" prefix="coup" field="LastUsedOn" title="la_fld_LastUsedOn" size="10"/>
+
+ <inp2:m_RenderElement design="form_row" prefix="coup" field="NumberOfUses" title="la_fld_NumberOfUses" size="4">
+ <td class="control-cell">
+ <input type="text" name="<inp2:{$prefix}_InputName field='$field'/>" id="<inp2:{$prefix}_InputName field='$field'/>" value="<inp2:{$prefix}_Field field='$field'/>" tabindex="<inp2:m_get param='tab_index'/>" size="<inp2:m_param name='size'/>">
+ <inp2:m_Phrase label="la_comment_LeaveBlank" />
+ </td>
+ </inp2:m_RenderElement>
- <inp2:m_RenderElement name="inp_edit_box_comment" prefix="coup" field="NumberOfUses" title="!la_fld_NumberOfUses!" size="4"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/discounts/discount_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/discounts/discount_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/discounts/discount_edit.tpl (revision 14089)
@@ -1,74 +1,74 @@
<inp2:adm_SetPopupSize width="870" height="600"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="d" section="in-commerce:discounts" title_preset="discount_edit" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('d','<inp2:d_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('d','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('d', '<inp2:d_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('d', '<inp2:d_NextId/>');
}
) );
//a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.Render();
<inp2:m_if check="d_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="d_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="d_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:d_SaveWarning name="grid_save_warning"/>
<inp2:d_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
- <inp2:m_RenderElement name="inp_label" prefix="d" field="DiscountId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="d" field="Status" title="!la_fld_Status!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="d" field="Name" title="!la_fld_Name!" size="35"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="d" field="Start" title="!la_fld_Start!" size="10"/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="d" field="End" title="!la_fld_End!" size="10"/>
- <inp2:m_RenderElement name="inp_edit_options" prefix="d" field="GroupId" title="!la_fld_Group!" has_empty="1"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="d" field="Type" title="!la_fld_Type!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="d" field="Amount" title="!la_fld_Amount!" size="4"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
+ <inp2:m_RenderElement name="inp_label" prefix="d" field="DiscountId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="d" field="Status" title="la_fld_Status"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="d" field="Name" title="la_fld_Name" size="35"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="d" field="Start" title="la_fld_Start" size="10"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="d" field="End" title="la_fld_End" size="10"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="d" field="GroupId" title="la_fld_Group" has_empty="1"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="d" field="Type" title="la_fld_Type"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="d" field="Amount" title="la_fld_Amount" size="4"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/discounts/gift_certificate_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/discounts/gift_certificate_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/discounts/gift_certificate_edit.tpl (revision 14089)
@@ -1,171 +1,164 @@
<inp2:adm_SetPopupSize width="780" height="640"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="gc" section="in-commerce:gift-certificates" title_preset="gift_certificates_edit"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('gc','<inp2:gc_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('in-commerce:save_and_print', '<inp2:m_phrase label="la_ToolTip_SaveAndPrint" escape="1"/>', function() {
set_hidden_field('print_certificate', 1);
submit_event('gc','<inp2:gc_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('gc','OnCancel');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('gc', '<inp2:gc_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('gc', '<inp2:gc_NextId/>');
}
) );
a_toolbar.Render();
<inp2:m_if check="gc_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="gc_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="gc_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<script language="JavaScript">
function Random(N) {
return Math.floor(N * (Math.random() % 1));
}
function generateRandomCode(elementId){
var j, S = "", d;
for (j = 0; j < 10; j++) {
d=Random(2);
if (d==1)
S += String.fromCharCode(65 + Random(26));
else
S += String(Random(9));
}
document.getElementById(elementId).value=S;
}
</script>
-<inp2:m_DefineElement name="inp_edit_box_generate" class="" onblur="" maxlength="" is_last="0">
- <inp2:m_if check="{$prefix}_FieldVisible" field="$field">
- <tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
- <inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
- <td class="control-cell">
- <input type="text" name="<inp2:{$prefix}_InputName field='$field'/>" id="<inp2:{$prefix}_InputName field='$field'/>" value="<inp2:{$prefix}_Field field='$field'/>" tabindex="<inp2:m_get param='tab_index'/>" size="<inp2:m_param name='size'/>">
- <input type="button" class="button" onClick="generateRandomCode('<inp2:{$prefix}_InputName field='$field'/>')" value="<inp2:m_Phrase label='la_GenerateCode' />" />
- </td>
- <inp2:m_RenderElement name="inp_edit_error" pass_params="1"/>
- </tr>
- </inp2:m_if>
-</inp2:m_DefineElement>
-
<inp2:gc_SaveWarning name="grid_save_warning"/>
<inp2:gc_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_General"/>
<inp2:m_RenderElement name="inp_id_label" prefix="gc" field="GiftCertificateId" title="la_fld_Id"/>
<inp2:m_if check="gc_HasOrder">
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="Purchaser" title="!la_fld_SenderName!" size="35"/>
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="Recipient" title="!la_fld_RecipientName!" size="35"/>
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="Message" title="!la_fld_MessageText!" cols="35" rows="7"/>
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="Amount" title="!la_fld_Amount!" size="7"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="Purchaser" title="la_fld_SenderName" size="35"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="Recipient" title="la_fld_RecipientName" size="35"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="Message" title="la_fld_MessageText" cols="35" rows="7"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="Amount" title="la_fld_Amount" size="7"/>
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="SendVia" title="!la_fld_DeliveryMethod!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="SendVia" title="la_fld_DeliveryMethod"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="Purchaser" title="!la_fld_SenderName!" size="35"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="Recipient" title="!la_fld_RecipientName!" size="35"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="gc" field="Message" title="!la_fld_MessageText!" cols="35" rows="7"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="Amount" title="!la_fld_Amount!" size="7"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="Purchaser" title="la_fld_SenderName" size="35"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="Recipient" title="la_fld_RecipientName" size="35"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="gc" field="Message" title="la_fld_MessageText" cols="35" rows="7"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="Amount" title="la_fld_Amount" size="7"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="gc" field="SendVia" title="!la_fld_DeliveryMethod!"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="gc" field="SendVia" title="la_fld_DeliveryMethod"/>
</inp2:m_if>
- <inp2:m_RenderElement name="subsection" title="!la_section_EmailDelivery!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_EmailDelivery"/>
<inp2:m_if check="gc_HasOrder">
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientEmail" title="!la_fld_Email!" size="35"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientEmail" title="la_fld_Email" size="35"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientEmail" title="!la_fld_Email!" size="35"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientEmail" title="la_fld_Email" size="35"/>
</inp2:m_if>
- <inp2:m_RenderElement name="subsection" title="!la_section_PostalDelivery!"/>
+ <inp2:m_RenderElement name="subsection" title="la_section_PostalDelivery"/>
<inp2:m_if check="gc_HasOrder">
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientFirstname" title="la_fld_FirstName" size="35"/>
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientLastname" title="la_fld_LastName" size="35"/>
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientAddress1" title="la_fld_AddressLine1"/>
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientAddress2" title="la_fld_AddressLine2"/>
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientCity" title="la_fld_City"/>
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientZipcode" title="la_fld_Zip"/>
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientState" title="la_fld_State"/>
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientCountry" title="la_fld_Country"/>
<inp2:m_RenderElement name="inp_label" prefix="gc" field="RecipientPhone" title="la_fld_Phone"/>
<inp2:m_else/>
<inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientFirstname" title="la_fld_FirstName" size="35"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientLastname" title="la_fld_LastName" size="35"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientAddress1" title="la_fld_AddressLine1"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientAddress2" title="la_fld_AddressLine2"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientCity" title="la_fld_City"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientZipcode" title="la_fld_Zip"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientState" title="la_fld_State"/>
<inp2:m_RenderElement name="inp_edit_options" prefix="gc" field="RecipientCountry" title="la_fld_Country" has_empty="1"/>
<inp2:m_RenderElement name="inp_edit_box" prefix="gc" field="RecipientPhone" title="la_fld_Phone"/>
</inp2:m_if>
<inp2:m_RenderElement name="subsection" title="la_section_Properties"/>
- <inp2:m_RenderElement name="inp_edit_radio" prefix="gc" field="Status" title="!la_fld_Status!"/>
+ <inp2:m_RenderElement name="inp_edit_radio" prefix="gc" field="Status" title="la_fld_Status"/>
<inp2:m_if check="gc_HasOrder">
<inp2:m_RenderElement name="inp_label" prefix="gc" field="AddDate" title="la_fld_CreatedOn"/>
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="Code" title="!la_fld_Code!" size="35"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="Code" title="la_fld_Code" size="35"/>
<inp2:m_else/>
<inp2:m_RenderElement name="inp_edit_date_time" prefix="gc" field="AddDate" title="la_fld_CreatedOn"/>
- <inp2:m_RenderElement name="inp_edit_box_generate" prefix="gc" field="Code" title="!la_fld_Code!" size="35"/>
+
+ <inp2:m_RenderElement design="form_row" prefix="gc" field="Code" title="la_fld_Code" size="35">
+ <td class="control-cell">
+ <input type="text" name="<inp2:{$prefix}_InputName field='$field'/>" id="<inp2:{$prefix}_InputName field='$field'/>" value="<inp2:{$prefix}_Field field='$field'/>" tabindex="<inp2:m_get param='tab_index'/>" size="<inp2:m_param name='size'/>">
+ <input type="button" class="button" onClick="generateRandomCode('<inp2:{$prefix}_InputName field='$field'/>')" value="<inp2:m_Phrase label='la_GenerateCode' />" />
+ </td>
+ </inp2:m_RenderElement>
</inp2:m_if>
<inp2:m_if check="gc_IsNewItem" inverse="inverse">
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="Debit" title="!la_fld_RemainingAmount!" size="7"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="Debit" title="la_fld_RemainingAmount" size="7"/>
</inp2:m_if>
<inp2:m_if check="gc_HasOrder">
- <inp2:m_RenderElement name="inp_label" prefix="gc" field="Expiration" title="!la_fld_Expiration!" size="10"/>
+ <inp2:m_RenderElement name="inp_label" prefix="gc" field="Expiration" title="la_fld_Expiration" size="10"/>
<inp2:m_else/>
- <inp2:m_RenderElement name="inp_edit_date_time" prefix="gc" field="Expiration" title="!la_fld_Expiration!" size="10"/>
+ <inp2:m_RenderElement name="inp_edit_date_time" prefix="gc" field="Expiration" title="la_fld_Expiration" size="10"/>
</inp2:m_if>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/payment_type/payment_type_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/payment_type/payment_type_edit.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/payment_type/payment_type_edit.tpl (revision 14089)
@@ -1,71 +1,71 @@
<inp2:adm_SetPopupSize width="790" height="520"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="pt" section="in-commerce:payment_types" title_preset="payment_type_edit" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('pt','<inp2:pt_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('pt','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('pt', '<inp2:pt_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('pt', '<inp2:pt_NextId/>');
}
) );
a_toolbar.Render();
<inp2:m_if check="pt_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="pt_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="pt_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:pt_SaveWarning name="grid_save_warning"/>
<inp2:pt_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="inp_id_label" prefix="pt" field="PaymentTypeId" title="!la_fld_Id!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pt" field="Name" title="!la_fld_Name!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pt" field="Description" title="!la_fld_Description!" size="40"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="pt" field="Instructions" title="!la_fld_Instructions!" cols="40" rows="5"/>
- <inp2:m_RenderElement name="inp_edit_textarea" prefix="pt" field="AdminComments" title="!la_fld_AdminComments!" cols="40" rows="5"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="pt" field="Status" title="!la_fld_Enabled!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="pt" field="PlacedOrdersEdit" title="!la_fld_PlacedOrdersEdit!"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pt" field="Priority" title="!la_fld_Priority!" size="3"/>
- <inp2:m_RenderElement name="inp_edit_box" prefix="pt" field="ProcessingFee" title="!la_fld_ProcessingFee!" size="4"/>
+ <inp2:m_RenderElement name="inp_id_label" prefix="pt" field="PaymentTypeId" title="la_fld_Id"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pt" field="Name" title="la_fld_Name" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pt" field="Description" title="la_fld_Description" size="40"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="pt" field="Instructions" title="la_fld_Instructions" cols="40" rows="5"/>
+ <inp2:m_RenderElement name="inp_edit_textarea" prefix="pt" field="AdminComments" title="la_fld_AdminComments" cols="40" rows="5"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="pt" field="Status" title="la_fld_Enabled"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="pt" field="PlacedOrdersEdit" title="la_fld_PlacedOrdersEdit"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pt" field="Priority" title="la_fld_Priority" size="3"/>
+ <inp2:m_RenderElement name="inp_edit_box" prefix="pt" field="ProcessingFee" title="la_fld_ProcessingFee" size="4"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/payment_type/payment_type_list.tpl
===================================================================
--- branches/5.2.x/admin_templates/payment_type/payment_type_list.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/payment_type/payment_type_list.tpl (revision 14089)
@@ -1,104 +1,104 @@
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="pt" section="in-commerce:payment_types" title_preset="payment_type_list" pagination="1"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
//do not rename - this function is used in default grid for double click!
function edit()
{
std_edit_item('pt', 'in-commerce/payment_type/payment_type_edit');
}
var a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('new_item', '<inp2:m_phrase label="la_ToolTip_NewPaymentType" escape="1"/>::<inp2:m_phrase label="la_ToolTip_Add" escape="1"/>',
function() {
std_precreate_item('pt', 'in-commerce/payment_type/payment_type_edit')
} ) );
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('pt')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('setprimary', '<inp2:m_phrase label="la_ToolTip_setPrimary" escape="1"/>', function() {
submit_event('pt','OnSetPrimary');
}
) );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('pt','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('pt','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
a_toolbar.AddButton( new ToolBarButton('move_up', '<inp2:m_phrase label="la_ToolTip_MoveUp" escape="1"/>', function() {
submit_event('pt','OnMassMoveUp');
}
) );
a_toolbar.AddButton( new ToolBarButton('move_down', '<inp2:m_phrase label="la_ToolTip_MoveDown" escape="1"/>', function() {
submit_event('pt','OnMassMoveDown');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
<inp2:m_RenderElement name="search_main_toolbar" prefix="pt" grid="Default"/>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="payment_caption_td">
<inp2:Field field="$field" grid="$grid"/>
<span class="priority"><inp2:m_if check="FieldEquals" field="Priority" value="0"><inp2:m_else/><sup><inp2:Field field="Priority" /></sup></inp2:m_if></span>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="primary_type_delete_error">
<script type="text/javascript">
alert('<inp2:m_Phrase label="la_error_CannotDeletePaymentType"/>');
</script>
</inp2:m_DefineElement>
-<inp2:m_RenderElement name="grid" PrefixSpecial="pt" IdField="PaymentTypeId" grid="Default" menu_filters="yes"/>
+<inp2:m_RenderElement name="grid" PrefixSpecial="pt" IdField="PaymentTypeId" grid="Default"/>
<script type="text/javascript">
Grids['pt'].SetDependantToolbarButtons( new Array('edit', 'delete', 'approve', 'decline', 'setprimary', 'move_up', 'move_down') );
</script>
<inp2:m_DefineElement name="remove_unused_warning">
<input type="hidden" name="unused_ids" id="unused_ids" value="<inp2:m_param name="unused_ids" />">
<script type="text/javascript">
if(inpConfirm('<inp2:m_phrase label="la_WarningCurrenciesNotUsed" />: <inp2:m_param name="unused_iso" />. <inp2:m_phrase label="la_WarningRemoveUnusedCurrencies" />?'))
{
submit_event('curr', 'OnDisableUnused');
}
</script>
</inp2:m_DefineElement>
<inp2:curr_DisableUnusedWarning block="remove_unused_warning" />
<inp2:pt_DeleteError block="primary_type_delete_error"/>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/payment_type/payment_type_groups.tpl
===================================================================
--- branches/5.2.x/admin_templates/payment_type/payment_type_groups.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/payment_type/payment_type_groups.tpl (revision 14089)
@@ -1,116 +1,116 @@
<inp2:adm_SetPopupSize width="790" height="520"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="pt" section="in-commerce:payment_types" title_preset="group_list" tab_preset="Default"/>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
document.getElementById('<inp2:pt_InputName field="PortalGroups"/>').value = select_to_string('selected_groups');
submit_event('pt','<inp2:pt_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('pt','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('pt', '<inp2:pt_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('pt', '<inp2:pt_NextId/>');
}
) );
a_toolbar.Render();
<inp2:m_if check="pt_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="pt_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="pt_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
function go_to_tab(prefix_special, tab)
{
set_hidden_field(prefix_special+'_GoTab', tab);
document.getElementById('<inp2:pt_InputName field="PortalGroups"/>').value = select_to_string('selected_groups');
submit_event(prefix_special,'OnPreSaveAndGoToTab',null);
}
function go_to_id(prefix_special, id)
{
set_hidden_field(prefix_special+'_GoId', id);
document.getElementById('<inp2:pt_InputName field="PortalGroups"/>').value = select_to_string('selected_groups');
submit_event(prefix_special,'OnPreSaveAndGo')
}
</script>
</td>
</tr>
</tbody>
</table>
<inp2:pt_SaveWarning name="grid_save_warning"/>
<inp2:pt_ErrorWarning name="form_error_warning"/>
-<inp2:m_RenderElement name="inp_edit_hidden" prefix="pt" field="PortalGroups" title="!la_fld_UserGroups!" size="40"/>
+<inp2:m_RenderElement name="inp_edit_hidden" prefix="pt" field="PortalGroups" title="la_fld_UserGroups" size="40"/>
<div id="scroll_container">
<table class="edit-form">
- <inp2:m_RenderElement name="inp_label" prefix="pt" field="PaymentTypeId" title="!la_fld_Id!"/>
+ <inp2:m_RenderElement name="inp_label" prefix="pt" field="PaymentTypeId" title="la_fld_Id"/>
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:m_phrase label="la_fld_UserGroups"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<table style="width: 300px">
<tr>
<td>
<inp2:m_DefineElement name="group_option">
<option value="<inp2:m_param name="GroupId"/>"><inp2:m_param name="Name"/></option>
</inp2:m_DefineElement>
<inp2:m_phrase label="la_fld_SelectedGroups"/>
<select id="selected_groups" name="selected_groups[]" multiple="multiple" size="15" style="width: 200px">
<inp2:pt_ListGroups mode="selected" render_as="group_option"/>
</select>
</td>
<td align="center">
<input type="button" value="&nbsp;&laquo;&laquo;&nbsp;" onclick="move_selected('available_groups', 'selected_groups'); select_sort('selected_groups')" class="button"><br>
<img src="img/s.gif" width="1" height="4" alt=""><br>
<input type="button" value="&nbsp;&raquo;&raquo;&nbsp;" onclick="move_selected('selected_groups', 'available_groups'); select_sort('available_groups');" class="button">
</td>
<td>
<inp2:m_phrase label="la_fld_AvailableGroups"/>
<select id="available_groups" name="available_groups[]" multiple="multiple" size="15" style="width: 200px">
<inp2:pt_ListGroups render_as="group_option"/>
</select>
</td>
</tr>
</table>
</td>
</tr>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/admin_templates/payment_type/payment_type_gateway.tpl
===================================================================
--- branches/5.2.x/admin_templates/payment_type/payment_type_gateway.tpl (revision 14088)
+++ branches/5.2.x/admin_templates/payment_type/payment_type_gateway.tpl (revision 14089)
@@ -1,133 +1,133 @@
<inp2:adm_SetPopupSize width="790" height="520"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="combined_header" prefix="pt" section="in-commerce:payment_types" title_preset="gateway" tab_preset="Default"/>
<inp2:m_DefineElement name="GatewayFieldsDiv">
<inp2:m_RenderElement name="grid_data_td" />
</inp2:m_DefineElement>
<inp2:m_DefineElement name="dummy">
</inp2:m_DefineElement>
<!-- ToolBar -->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
submit_event('pt','<inp2:pt_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('pt','OnCancelEdit');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
go_to_id('pt', '<inp2:pt_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('pt', '<inp2:pt_NextId/>');
}
) );
a_toolbar.Render();
<inp2:m_if check="pt_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
<inp2:m_else/>
<inp2:m_if check="pt_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="pt_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function refresh_fields() {
var $dropdown=document.getElementById('pt[<inp2:m_get name="pt_id" />][GatewayId]');
var $table=document.getElementById('gateway_fields');
var $display_style='';
var $i=0;
if (is.gecko || !is.ie) {
on_style = 'table-row';
}
else {
on_style = 'block';
}
while($i<$table.rows.length)
{
$row=$table.rows[$i];
if( isset($row.getAttribute('GatewayId')) )
{
$display_style=($row.getAttribute('GatewayId') == $dropdown.options[$dropdown.selectedIndex].value) ? on_style : 'none';
// alert('current display is '+$row.style.display+' setting it to '+$display_style);
$row.style.display = $display_style;
// alert('set');
}
$i++;
}
}
</script>
<inp2:m_DefineElement name="gw_input_text">
<input type="text" name="<inp2:gwf_InputName field="Value"/>" id="<inp2:gwf_InputName field="Value"/>" value="<inp2:gwf_gwConfigValue/>" tabindex="<inp2:m_get param="tab_index"/>" style="width:80%">
</inp2:m_DefineElement>
<inp2:m_DefineElement name="gw_input_select">
<select tabindex="<inp2:m_get param="tab_index"/>" name="<inp2:gwf_InputName field="Value"/>" id="<inp2:gwf_InputName field="Value"/>">
<inp2:PredefinedOptions field="Value" block="inp_option_phrase" selected="selected"/>
</select>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="gw_input_checkbox">
<input type="hidden" id="<inp2:gwf_InputName field="Value"/>" name="<inp2:gwf_InputName field="Value"/>" value="<inp2:gwf_gwConfigValue/>">
<input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:gwf_InputName field="Value"/>" name="_cb_<inp2:gwf_InputName field="Value"/>" <inp2:gwf_gwConfigValue checked="checked"/> class="<inp2:m_param name="class"/>" onchange="update_checkbox(this, document.getElementById('<inp2:gwf_InputName field="Value"/>'));">
</inp2:m_DefineElement>
<inp2:m_DefineElement name="gateway_field">
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>" GatewayId="<inp2:m_param name="gateway_id"/>" style="display: <inp2:m_param name="display"/>;">
<inp2:m_inc param="tab_index" by="1"/>
<td class="label-cell">
<inp2:gwf_Field field="FieldName"/>:
</td>
<td class="control-mid">&nbsp;</td>
<td class="control-cell">
<inp2:m_RenderElement name="$input_block" pass_params="true"/>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:gwf_initGWConfigValues/>
<inp2:pt_SaveWarning name="grid_save_warning"/>
<inp2:pt_ErrorWarning name="form_error_warning"/>
<div id="scroll_container">
<table class="edit-form" id="gateway_fields">
- <inp2:m_RenderElement name="inp_edit_options" prefix="pt" field="GatewayId" title="!la_fld_Gateway!" onchange="refresh_fields()"/>
+ <inp2:m_RenderElement name="inp_edit_options" prefix="pt" field="GatewayId" title="la_fld_Gateway" onchange="refresh_fields()"/>
<inp2:gwf_PrintList block="gateway_field" input_block_prefix="gw_input_" per_page="-1"/>
<inp2:m_RenderElement name="inp_edit_filler"/>
</table>
</div>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: branches/5.2.x/install/upgrades.php
===================================================================
--- branches/5.2.x/install/upgrades.php (revision 14088)
+++ branches/5.2.x/install/upgrades.php (revision 14089)
@@ -1,154 +1,158 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$upgrade_class = 'InCommerceUpgrades';
/**
* Class, that holds all upgrade scripts for "In-Commerce" module
*
*/
class InCommerceUpgrades extends kUpgradeHelper {
function InCommerceUpgrades()
{
parent::kHelper();
$this->dependencies = Array (
'4.3.9' => Array ('Core' => '4.3.9'),
'5.0.0' => Array ('Core' => '5.0.0'),
'5.0.1' => Array ('Core' => '5.0.1'),
'5.0.2-B1' => Array ('Core' => '5.0.2-B1'),
'5.0.2-B2' => Array ('Core' => '5.0.2-B2'),
'5.0.2-RC1' => Array ('Core' => '5.0.2-RC1'),
'5.0.2' => Array ('Core' => '5.0.2'),
'5.0.3-B1' => Array ('Core' => '5.0.3-B1'),
'5.0.3-B2' => Array ('Core' => '5.0.3-B2'),
'5.0.3-RC1' => Array ('Core' => '5.0.3-RC1'),
'5.0.3' => Array ('Core' => '5.0.3'),
'5.0.4-B1' => Array ('Core' => '5.0.4-B1'),
'5.0.4-B2' => Array ('Core' => '5.0.4-B2'),
'5.0.4' => Array ('Core' => '5.0.4'),
'5.1.0-B1' => Array ('Core' => '5.1.0-B1'),
'5.1.0-B2' => Array ('Core' => '5.1.0-B2'),
'5.1.0-RC1' => Array ('Core' => '5.1.0-RC1'),
'5.1.0' => Array ('Core' => '5.1.0'),
+ '5.1.1-B1' => Array ('Core' => '5.1.1-B1'),
+ '5.1.1-B2' => Array ('Core' => '5.1.1-B2'),
+ '5.1.1-RC1' => Array ('Core' => '5.1.1-RC1'),
+ '5.1.1' => Array ('Core' => '5.1.1'),
);
}
/**
* Changes table structure, where multilingual fields of TEXT type are present
*
* @param string $mode when called mode {before, after)
*/
function Upgrade_5_0_0($mode)
{
if ($mode == 'after') {
// update icon
$root_category = $this->Application->findModule('Name', 'In-Commerce', 'RootCat');
$sql = 'UPDATE ' . $this->Application->getUnitOption('c', 'TableName') . '
SET UseMenuIconUrl = 1, MenuIconUrl = "in-commerce/img/menu_products.gif"
WHERE ' . $this->Application->getUnitOption('c', 'IDField') . ' = ' . $root_category;
$this->Conn->Query($sql);
$this->_updateDetailTemplate('p', 'in-commerce/product/details', 'in-commerce/designs/detail');
// copy store name to company name
$store_name = $this->Application->ConfigValue('Comm_StoreName');
$sql = 'UPDATE ' . TABLE_PREFIX . 'ConfigurationValues
SET VariableValue = ' . $this->Conn->qstr($store_name) . '
WHERE VariableName = "Comm_CompanyName"';
$this->Conn->Query($sql);
}
}
/**
* Replaces deprecated detail template design with new one
*
* @param string $prefix
* @param string $from_template
* @param string $to_template
*/
function _updateDetailTemplate($prefix, $from_template, $to_template)
{
$sql = 'SELECT CustomFieldId
FROM ' . TABLE_PREFIX . 'CustomField
WHERE FieldName = "' . $prefix . '_ItemTemplate"';
$custom_field_id = $this->Conn->GetOne($sql);
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
/* @var $ml_formatter kMultiLanguage */
$field = $ml_formatter->LangFieldName('cust_' . $custom_field_id, true);
$sql = 'UPDATE ' . TABLE_PREFIX . 'CategoryCustomData
SET ' . $field . ' = "' . $to_template . '"
WHERE ' . $field . ' = "' . $from_template . '"';
$this->Conn->Query($sql);
}
/**
* Update to 5.0.1, update details template
*
* @param string $mode when called mode {before, after)
*/
function Upgrade_5_0_1($mode)
{
if ($mode == 'after') {
$this->_updateDetailTemplate('p', 'in-commerce/designs/detail', 'in-commerce/products/product_detail');
// clean incomplete orders 5+ hours old
// don't use ORDER_STATUS_INCOMPLETE constant, since it's not available upgrade
$delete_timestamp = mktime() - (3600 * 5);
$sql = 'SELECT OrderId FROM ' . TABLE_PREFIX . 'Orders
WHERE Status = ' . 0 . '
AND OrderDate < ' . $delete_timestamp;
$orders_to_delete = $this->Conn->GetCol($sql);
if ( $orders_to_delete && is_array($orders_to_delete) ) {
$this->Conn->Query( 'DELETE FROM ' . TABLE_PREFIX . 'OrderItems
WHERE OrderId IN ( ' . implode(',', $orders_to_delete) . ' )' );
$this->Conn->Query( 'DELETE FROM ' . TABLE_PREFIX . 'Orders
WHERE Status = ' . 0 . '
AND OrderDate < ' . $delete_timestamp );
}
// delete old events
$events_to_delete = Array ( 'SITE.SUGGEST' );
$sql = 'SELECT EventId FROM ' . TABLE_PREFIX . 'Events
WHERE Event IN ("' . implode('","', $events_to_delete) . '")';
$event_ids = $this->Conn->GetCol($sql);
if ($event_ids) {
$sql = 'DELETE FROM ' . TABLE_PREFIX . 'EmailMessage
WHERE EventId IN (' . implode(',', $event_ids) . ')';
$this->Conn->Query($sql);
$sql = 'DELETE FROM ' . TABLE_PREFIX . 'Events
WHERE EventId IN (' . implode(',', $event_ids) . ')';
$this->Conn->Query($sql);
$sql = 'DELETE FROM ' . TABLE_PREFIX . 'Phrase
WHERE Phrase IN ("la_event_user.suggest_site")';
$this->Conn->Query($sql);
}
}
}
}
\ No newline at end of file
Index: branches/5.2.x/install/install_schema.sql
===================================================================
--- branches/5.2.x/install/install_schema.sql (revision 14088)
+++ branches/5.2.x/install/install_schema.sql (revision 14089)
@@ -1,728 +1,728 @@
CREATE TABLE Addresses (
AddressId int(11) NOT NULL auto_increment,
PortalUserId int(11) NOT NULL default '0',
`To` varchar(255) NOT NULL default '',
Company varchar(255) NOT NULL default '',
Phone varchar(255) NOT NULL default '',
Fax varchar(255) NOT NULL default '',
Email varchar(255) NOT NULL default '',
Address1 varchar(255) NOT NULL default '',
Address2 varchar(255) NOT NULL default '',
City varchar(255) NOT NULL default '',
State char(2) NOT NULL default '',
Zip varchar(20) NOT NULL default '',
Country char(3) NOT NULL default '',
LastUsedAsBilling tinyint(4) unsigned NOT NULL default '0',
LastUsedAsShipping tinyint(4) unsigned NOT NULL default '0',
IsProfileAddress tinyint(4) NOT NULL default '0',
PRIMARY KEY (AddressId),
KEY PortalUserId (PortalUserId),
KEY LastUsedAsBilling (LastUsedAsBilling),
KEY LastUsedAsShipping (LastUsedAsShipping),
KEY IsProfileAddress (IsProfileAddress)
);
CREATE TABLE Currencies (
CurrencyId int(11) NOT NULL AUTO_INCREMENT,
ISO char(3) NOT NULL DEFAULT '',
Symbol varchar(255) DEFAULT NULL,
SymbolPosition tinyint(4) DEFAULT NULL,
`Name` varchar(255) NOT NULL DEFAULT '',
RateToPrimary double NOT NULL DEFAULT '1',
Modified int(11) DEFAULT NULL,
`Status` smallint(6) NOT NULL DEFAULT '1',
IsPrimary smallint(6) NOT NULL DEFAULT '0',
Priority int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (CurrencyId),
KEY Priority (Priority),
KEY IsPrimary (IsPrimary),
KEY Modified (Modified)
);
CREATE TABLE GatewayConfigFields (
GWConfigFieldId int(11) NOT NULL AUTO_INCREMENT,
SystemFieldName varchar(50) NOT NULL DEFAULT '',
FieldName varchar(100) NOT NULL DEFAULT '',
ElementType varchar(30) NOT NULL DEFAULT 'text',
ValueList mediumtext,
GatewayId int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (GWConfigFieldId),
KEY GatewayId (GatewayId)
);
CREATE TABLE GatewayConfigValues (
GWConfigValueId int(11) NOT NULL auto_increment,
GWConfigFieldId int(11) NOT NULL default '0',
PaymentTypeId int(11) NOT NULL default '0',
Value varchar(255) default NULL,
PRIMARY KEY (GWConfigValueId),
KEY GWConfigFieldId (GWConfigFieldId),
KEY PaymentTypeId (PaymentTypeId)
);
CREATE TABLE Gateways (
GatewayId int(11) NOT NULL auto_increment,
Name varchar(100) NOT NULL default '',
ClassName varchar(150) NOT NULL default '',
ClassFile varchar(255) NOT NULL default '',
RequireCCFields tinyint(4) NOT NULL default '0',
PRIMARY KEY (GatewayId)
);
CREATE TABLE Manufacturers (
ManufacturerId int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(255) NOT NULL DEFAULT '',
Description text,
URL varchar(255) NOT NULL DEFAULT '',
Logo varchar(255) NOT NULL DEFAULT '',
IsPopular int(10) unsigned NOT NULL DEFAULT '0',
Address1 varchar(255) DEFAULT NULL,
Address2 varchar(255) DEFAULT NULL,
City varchar(255) DEFAULT NULL,
State varchar(50) DEFAULT NULL,
Zip varchar(50) DEFAULT NULL,
Country varchar(255) DEFAULT NULL,
Phone varchar(50) DEFAULT NULL,
Fax varchar(50) DEFAULT NULL,
Email varchar(255) DEFAULT NULL,
PRIMARY KEY (ManufacturerId)
);
CREATE TABLE OrderItems (
OrderItemId int(11) NOT NULL auto_increment,
OrderId int(11) NOT NULL default '0',
ProductId int(11) NOT NULL default '0',
ProductName varchar(255) NOT NULL default '',
Quantity int(11) NOT NULL default '0',
QuantityReserved int(11) default NULL,
FlatPrice decimal(10,4) NOT NULL default '0.0000',
Price decimal(10,4) NOT NULL default '0.0000',
Cost double(10,4) NOT NULL default '0.0000',
BackOrderFlag tinyint(4) default '0',
Weight double default NULL,
ShippingTypeId varchar(255) default NULL,
ItemData text,
OptionsSalt int(11) default '0',
SplitShippingGroup int(11) NOT NULL default '0',
PackageNum int(11) NOT NULL default '0',
ReturnType tinyint(3) unsigned NOT NULL default '0',
ReturnAmount decimal(10,2) NOT NULL default '0.00',
ReturnedOn int(10) unsigned default NULL,
PRIMARY KEY (OrderItemId),
KEY OrderId (OrderId),
KEY ProductId (ProductId),
KEY BackOrderFlag (BackOrderFlag),
KEY PackageNum (PackageNum),
KEY ReturnType (ReturnType),
KEY ReturnedOn (ReturnedOn),
KEY Quantity (Quantity),
KEY QuantityReserved (QuantityReserved),
KEY OptionsSalt (OptionsSalt),
KEY SplitShippingGroup (SplitShippingGroup)
);
CREATE TABLE Orders (
OrderId int(11) NOT NULL AUTO_INCREMENT,
Number mediumint(9) NOT NULL DEFAULT '0',
SubNumber smallint(6) NOT NULL DEFAULT '0',
`Status` tinyint(3) unsigned NOT NULL DEFAULT '0',
OnHold tinyint(3) unsigned NOT NULL DEFAULT '0',
OrderDate int(10) unsigned DEFAULT NULL,
PortalUserId int(11) NOT NULL DEFAULT '-1',
OrderIP varchar(30) NOT NULL DEFAULT '',
UserComment text,
AdminComment text,
BillingTo varchar(255) NOT NULL DEFAULT '',
BillingCompany varchar(255) NOT NULL DEFAULT '',
BillingPhone varchar(255) NOT NULL DEFAULT '',
BillingFax varchar(255) NOT NULL DEFAULT '',
BillingEmail varchar(255) NOT NULL DEFAULT '',
BillingAddress1 varchar(255) NOT NULL DEFAULT '',
BillingAddress2 varchar(255) NOT NULL DEFAULT '',
BillingCity varchar(255) NOT NULL DEFAULT '',
BillingState varchar(255) NOT NULL DEFAULT '',
BillingZip varchar(255) NOT NULL DEFAULT '',
BillingCountry varchar(255) NOT NULL DEFAULT 'USA',
VAT decimal(20,4) NOT NULL DEFAULT '0.0000',
VATPercent decimal(20,4) NOT NULL DEFAULT '0.0000',
PaymentType tinyint(3) unsigned NOT NULL DEFAULT '0',
PaymentAccount varchar(255) NOT NULL DEFAULT '',
PaymentExpires int(10) unsigned DEFAULT NULL,
PaymentNameOnCard varchar(255) NOT NULL DEFAULT '',
PaymentCCExpDate varchar(5) NOT NULL DEFAULT '',
PaymentCardType varchar(255) NOT NULL DEFAULT '',
ShippingTo varchar(255) NOT NULL DEFAULT '',
ShippingCompany varchar(255) NOT NULL DEFAULT '',
ShippingPhone varchar(255) NOT NULL DEFAULT '',
ShippingFax varchar(255) NOT NULL DEFAULT '',
ShippingEmail varchar(255) NOT NULL DEFAULT '',
ShippingAddress1 varchar(255) NOT NULL DEFAULT '',
ShippingAddress2 varchar(255) NOT NULL DEFAULT '',
ShippingCity varchar(255) NOT NULL DEFAULT '',
ShippingState varchar(255) NOT NULL DEFAULT '',
ShippingZip varchar(255) NOT NULL DEFAULT '',
ShippingCountry varchar(255) NOT NULL DEFAULT 'USA',
ShippingType int(11) NOT NULL DEFAULT '0',
ShippingCost decimal(20,4) NOT NULL DEFAULT '0.0000',
ShippingCustomerAccount varchar(255) NOT NULL DEFAULT '',
ShippingTracking varchar(255) NOT NULL DEFAULT '',
ShippingDate int(11) DEFAULT NULL,
SubTotal decimal(20,4) unsigned NOT NULL DEFAULT '0.0000',
ReturnTotal decimal(20,4) NOT NULL DEFAULT '0.0000',
CostTotal decimal(20,4) NOT NULL DEFAULT '0.0000',
OriginalAmount decimal(20,4) NOT NULL DEFAULT '0.0000',
- ShippingOption tinyint(4) DEFAULT NULL,
+ ShippingOption tinyint(4) NOT NULL DEFAULT '0',
ShippingInfo text,
CouponId int(11) DEFAULT NULL,
CouponDiscount decimal(20,4) NOT NULL DEFAULT '0.0000',
DiscountTotal decimal(10,4) NOT NULL DEFAULT '0.0000',
TransactionStatus tinyint(3) unsigned NOT NULL DEFAULT '2',
GWResult1 mediumtext,
GWResult2 mediumtext,
AffiliateId int(10) unsigned NOT NULL DEFAULT '0',
VisitId int(10) unsigned NOT NULL DEFAULT '0',
AffiliateCommission decimal(10,4) NOT NULL DEFAULT '0.0000',
ProcessingFee decimal(20,4) DEFAULT '0.0000',
InsuranceFee decimal(20,4) NOT NULL DEFAULT '0.0000',
ShippingTaxable tinyint(1) NOT NULL DEFAULT '0',
ProcessingTaxable tinyint(1) NOT NULL DEFAULT '0',
IsRecurringBilling tinyint(4) NOT NULL DEFAULT '0',
NextCharge int(10) unsigned DEFAULT NULL,
GroupId int(10) unsigned NOT NULL DEFAULT '0',
ChargeOnNextApprove tinyint(4) NOT NULL DEFAULT '0',
ShippingGroupOption tinyint(4) NOT NULL DEFAULT '0',
GiftCertificateId int(11) DEFAULT NULL,
GiftCertificateDiscount decimal(20,4) NOT NULL DEFAULT '0.0000',
GoogleOrderNumber bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (OrderId),
KEY AffiliateId (AffiliateId),
KEY VisitId (VisitId),
KEY GoogleOrderNumber (GoogleOrderNumber),
KEY Number (Number),
KEY SubNumber (SubNumber),
KEY `Status` (`Status`),
KEY OrderDate (OrderDate),
KEY PaymentType (PaymentType),
KEY CouponId (CouponId),
KEY GroupId (GroupId),
KEY GiftCertificateId (GiftCertificateId)
);
CREATE TABLE GiftCertificates (
GiftCertificateId int(11) NOT NULL AUTO_INCREMENT,
OrderId int(11) DEFAULT '0',
Purchaser varchar(64) DEFAULT NULL,
Recipient varchar(64) DEFAULT NULL,
SendVia tinyint(1) NOT NULL DEFAULT '0',
RecipientEmail varchar(64) NOT NULL DEFAULT '',
RecipientFirstname varchar(128) DEFAULT NULL,
RecipientLastname varchar(128) DEFAULT NULL,
RecipientAddress1 varchar(255) DEFAULT NULL,
RecipientAddress2 varchar(255) DEFAULT NULL,
RecipientCity varchar(64) DEFAULT NULL,
RecipientState varchar(32) DEFAULT NULL,
RecipientZipcode varchar(32) DEFAULT NULL,
RecipientCountry char(3) NOT NULL DEFAULT 'USA',
RecipientPhone varchar(32) DEFAULT NULL,
Message text,
Amount decimal(12,2) DEFAULT '0.00',
Debit decimal(12,2) DEFAULT '0.00',
`Status` tinyint(1) NOT NULL DEFAULT '2',
AddDate int(11) DEFAULT '0',
Expiration int(11) DEFAULT NULL,
`Code` varchar(255) DEFAULT NULL,
PRIMARY KEY (GiftCertificateId),
UNIQUE KEY `Code` (`Code`),
KEY OrderId (OrderId),
KEY `Status` (`Status`),
KEY AddDate (AddDate)
);
CREATE TABLE PaymentTypeCurrencies (
PaymentTypeCurrencyId int(11) NOT NULL auto_increment,
PaymentTypeId int(11) NOT NULL default '0',
CurrencyId int(11) NOT NULL default '0',
PRIMARY KEY (PaymentTypeCurrencyId),
KEY PaymentTypeId (PaymentTypeId),
KEY CurrencyId (CurrencyId)
);
CREATE TABLE PaymentTypes (
PaymentTypeId int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(100) NOT NULL DEFAULT '',
Description varchar(255) DEFAULT NULL,
Instructions text,
AdminComments text,
`Status` int(11) NOT NULL DEFAULT '0',
Priority int(11) NOT NULL DEFAULT '0',
IsPrimary tinyint(4) NOT NULL DEFAULT '0',
BuiltIn smallint(6) NOT NULL DEFAULT '0',
GatewayId int(11) NOT NULL DEFAULT '1',
PlacedOrdersEdit tinyint(4) NOT NULL DEFAULT '0',
ProcessingFee double NOT NULL DEFAULT '0',
PortalGroups text,
PRIMARY KEY (PaymentTypeId),
KEY `Status` (`Status`),
KEY Priority (Priority),
KEY GatewayId (GatewayId),
KEY BuiltIn (BuiltIn),
KEY IsPrimary (IsPrimary)
);
CREATE TABLE Products (
ProductId int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(255) DEFAULT '',
l1_Name varchar(255) DEFAULT NULL,
l2_Name varchar(255) DEFAULT NULL,
l3_Name varchar(255) DEFAULT NULL,
l4_Name varchar(255) DEFAULT NULL,
l5_Name varchar(255) DEFAULT NULL,
AutomaticFilename tinyint(3) unsigned NOT NULL DEFAULT '1',
SKU varchar(255) DEFAULT NULL,
`Type` tinyint(2) unsigned NOT NULL DEFAULT '1',
Description text,
l1_Description text,
l2_Description text,
l3_Description text,
l4_Description text,
l5_Description text,
DescriptionExcerpt text,
l1_DescriptionExcerpt text,
l2_DescriptionExcerpt text,
l3_DescriptionExcerpt text,
l4_DescriptionExcerpt text,
l5_DescriptionExcerpt text,
Weight double(10,4) DEFAULT NULL,
ManufacturerId int(11) NOT NULL DEFAULT '0',
MSRP double DEFAULT NULL,
BackOrder tinyint(3) unsigned NOT NULL DEFAULT '2',
BackOrderDate int(11) DEFAULT NULL,
CreatedOn int(10) unsigned DEFAULT NULL,
Modified int(10) unsigned DEFAULT NULL,
Expire int(10) unsigned DEFAULT NULL,
Hits double NOT NULL DEFAULT '0',
- CachedRating varchar(10) NOT NULL default '0',
+ CachedRating varchar(10) NOT NULL DEFAULT '0',
CachedVotesQty int(11) NOT NULL DEFAULT '0',
CachedReviewsQty int(11) NOT NULL DEFAULT '0',
- CreatedById int(11) NOT NULL DEFAULT '0',
- ModifiedById int(11) NOT NULL DEFAULT '0',
+ CreatedById int(11) DEFAULT NULL,
+ ModifiedById int(11) DEFAULT NULL,
Priority int(11) NOT NULL DEFAULT '0',
`Status` tinyint(4) NOT NULL DEFAULT '2',
EditorsPick tinyint(4) NOT NULL DEFAULT '0',
Featured tinyint(4) NOT NULL DEFAULT '0',
OnSale tinyint(1) NOT NULL DEFAULT '0',
ResourceId int(11) DEFAULT NULL,
HotItem tinyint(4) NOT NULL DEFAULT '2',
PopItem tinyint(4) NOT NULL DEFAULT '2',
NewItem tinyint(4) NOT NULL DEFAULT '2',
InventoryStatus tinyint(4) NOT NULL DEFAULT '0',
QtyInStock int(11) NOT NULL DEFAULT '0',
QtyInStockMin int(11) NOT NULL DEFAULT '0',
QtyReserved int(11) NOT NULL DEFAULT '0',
QtyBackOrdered int(11) NOT NULL DEFAULT '0',
QtyOnOrder int(11) NOT NULL DEFAULT '0',
InventoryComment text,
AccessGroupId int(11) DEFAULT NULL,
AccessDuration int(11) DEFAULT NULL,
AccessDurationType tinyint(4) DEFAULT NULL,
AccessStart int(11) DEFAULT NULL,
AccessEnd int(11) DEFAULT NULL,
Virtual tinyint(4) NOT NULL DEFAULT '0',
ProcessingData text,
PackageContent mediumtext,
OptionsSelectionMode tinyint(4) DEFAULT '0',
HasRequiredOptions tinyint(1) NOT NULL DEFAULT '0',
IsRecurringBilling tinyint(3) unsigned NOT NULL DEFAULT '0',
ShippingMode tinyint(1) NOT NULL DEFAULT '0',
ShippingLimitation text,
AssignedCoupon int(11) NOT NULL DEFAULT '0',
MinQtyFreePromoShipping int(11) NOT NULL DEFAULT '0',
MetaKeywords varchar(255) DEFAULT NULL,
MetaDescription text,
PRIMARY KEY (ProductId),
KEY ResourceId (ResourceId),
KEY Hits (Hits),
KEY `Name` (`Name`),
KEY EditorsPick (EditorsPick),
KEY CreatedOn (CreatedOn),
KEY Modified (Modified,CreatedOn),
KEY `Status` (`Status`),
KEY l1_Name (l1_Name),
KEY Priority (Priority),
KEY ManufacturerId (ManufacturerId),
KEY NewItem (NewItem),
KEY PopItem (PopItem),
KEY HotItem (HotItem),
KEY Featured (Featured),
KEY OnSale (OnSale),
KEY Expire (Expire),
KEY Virtual (Virtual),
KEY AccessGroupId (AccessGroupId)
);
CREATE TABLE ProductsCouponItems (
CouponItemId int(11) NOT NULL auto_increment,
CouponId int(11) default NULL,
ItemResourceId int(11) default NULL,
ItemType TINYINT(4) NOT NULL DEFAULT '1',
PRIMARY KEY (CouponItemId),
KEY DiscountId (CouponId),
KEY ItemResourceId (ItemResourceId),
KEY ItemType (ItemType)
);
CREATE TABLE ProductsCoupons (
CouponId int(11) NOT NULL auto_increment,
`Status` tinyint(4) NOT NULL default '1',
Name varchar(255) default NULL,
Code varchar(255) default NULL,
Expiration int(11) default NULL,
GroupId int(11) default NULL,
`Type` tinyint(1) NOT NULL default '1',
Amount double default NULL,
LastUsedBy int(11) default NULL,
LastUsedOn int(11) default NULL,
NumberOfUses int(11) default '1',
PRIMARY KEY (CouponId),
KEY `Status` (`Status`),
KEY Code (Code)
);
CREATE TABLE ProductsDiscountItems (
DiscountItemId int(11) NOT NULL auto_increment,
DiscountId int(11) default NULL,
ItemResourceId int(11) default NULL,
ItemType TINYINT(4) NOT NULL DEFAULT '1',
PRIMARY KEY (DiscountItemId),
KEY DiscountId (DiscountId),
KEY ItemResourceId (ItemResourceId),
KEY ItemType (ItemType)
);
CREATE TABLE ProductsDiscounts (
DiscountId int(11) NOT NULL auto_increment,
`Status` tinyint(4) default '2',
`Name` varchar(255) default NULL,
`Start` int(11) default NULL,
`End` int(11) default NULL,
GroupId int(11) default NULL,
`Type` tinyint(1) default '1',
Amount double default NULL,
PRIMARY KEY (DiscountId),
KEY `Status` (`Status`)
);
CREATE TABLE ProductsPricing (
PriceId int(11) NOT NULL auto_increment,
ProductId int(11) NOT NULL default '0',
MinQty int(11) default NULL,
MaxQty int(11) default NULL,
Cost decimal(10,4) default NULL,
Price decimal(10,4) NOT NULL default '0.0000',
Negotiated tinyint(1) default NULL,
Points int(11) default NULL,
AccessDuration int(11) NOT NULL default '0',
AccessUnit int(11) NOT NULL default '0',
Description varchar(255) default NULL,
IsPrimary tinyint(4) NOT NULL default '0',
GroupId int(11) NOT NULL default '0',
PRIMARY KEY (PriceId),
KEY ProductId (ProductId),
KEY GroupId (GroupId),
KEY IsPrimary (IsPrimary)
);
CREATE TABLE ProductFiles (
FileId int(11) NOT NULL AUTO_INCREMENT,
ProductId int(11) NOT NULL DEFAULT '0',
`Name` varchar(255) NOT NULL DEFAULT '',
Version varchar(100) NOT NULL DEFAULT '',
FilePath varchar(255) NOT NULL DEFAULT '',
RealPath varchar(255) NOT NULL DEFAULT '',
Size int(11) NOT NULL DEFAULT '0',
`Status` tinyint(4) NOT NULL DEFAULT '0',
IsPrimary tinyint(4) NOT NULL DEFAULT '0',
Priority smallint(6) NOT NULL DEFAULT '0',
AddedOn int(11) DEFAULT NULL,
- AddedById int(11) NOT NULL DEFAULT '0',
+ AddedById int(11) DEFAULT NULL,
MIMEType varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (FileId),
KEY ProductId (ProductId),
KEY `Status` (`Status`),
KEY IsPrimary (IsPrimary),
KEY Priority (Priority),
KEY AddedOn (AddedOn)
);
CREATE TABLE UserFileAccess (
FileAccessId int(11) NOT NULL AUTO_INCREMENT,
ProductId int(11) NOT NULL DEFAULT '0',
PortalUserId int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (FileAccessId),
KEY ProductId (ProductId),
KEY PortalUserId (PortalUserId)
);
CREATE TABLE UserDownloads (
DownloadId int(11) NOT NULL AUTO_INCREMENT,
PortalUserId int(11) NOT NULL DEFAULT '0',
Username varchar(255) NOT NULL DEFAULT '',
ProductId int(11) NOT NULL DEFAULT '0',
ProductName varchar(255) NOT NULL DEFAULT '',
FileId int(11) NOT NULL DEFAULT '0',
Filename varchar(255) NOT NULL DEFAULT '',
IPAddress varchar(100) NOT NULL DEFAULT '',
StartedOn int(11) DEFAULT NULL,
EndedOn int(11) DEFAULT NULL,
PRIMARY KEY (DownloadId),
KEY PortalUserId (PortalUserId),
KEY ProductId (ProductId)
);
CREATE TABLE ShippingBrackets (
BracketId int(11) NOT NULL auto_increment,
ShippingTypeID int(11) NOT NULL default '0',
Start double NOT NULL default '0',
End double NOT NULL default '0',
PRIMARY KEY (BracketId),
KEY ShippingTypeID (ShippingTypeID),
KEY Start (Start),
KEY End (End)
);
CREATE TABLE ShippingCosts (
ShippingCostId int(11) NOT NULL auto_increment,
ZoneID int(11) NOT NULL default '0',
BracketId int(11) NOT NULL default '0',
Flat decimal(10,4) default NULL,
PerUnit decimal(10,4) default NULL,
PRIMARY KEY (ShippingCostId),
KEY ZoneID (ZoneID),
KEY BracketId (BracketId)
);
CREATE TABLE ShippingQuoteEngines (
EngineId int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(255) NOT NULL DEFAULT '',
FlatSurcharge double NOT NULL DEFAULT '0',
PercentSurcharge double NOT NULL DEFAULT '0',
`Status` smallint(6) NOT NULL DEFAULT '0',
Properties text,
ClassName varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (EngineId),
KEY `Status` (`Status`)
);
CREATE TABLE ShippingType (
ShippingID int(11) NOT NULL AUTO_INCREMENT,
`Code` varchar(25) NOT NULL DEFAULT '',
`Name` varchar(100) NOT NULL DEFAULT '',
SpeedCode varchar(25) NOT NULL DEFAULT '',
LocationFrom int(11) NOT NULL DEFAULT '1',
`Type` int(11) NOT NULL DEFAULT '1',
BaseFee double NOT NULL DEFAULT '0',
CODFlatSurcharge double NOT NULL DEFAULT '0',
CODPercentSurcharge double NOT NULL DEFAULT '0',
`Status` tinyint(4) NOT NULL DEFAULT '1',
CostType tinyint(4) NOT NULL DEFAULT '1',
ZeroIfEmpty tinyint(4) NOT NULL DEFAULT '1',
PrecisionBeforeSep tinyint(4) NOT NULL DEFAULT '2',
PrecisionAfterSep tinyint(4) NOT NULL DEFAULT '2',
PortalGroups text,
FreeShippingMinAmount double(10,4) NOT NULL DEFAULT '0.0000',
IsFreePromoShipping tinyint(1) NOT NULL DEFAULT '0',
InsuranceFee decimal(10,2) DEFAULT NULL,
InsuranceType tinyint(1) NOT NULL DEFAULT '2',
PRIMARY KEY (ShippingID),
KEY `Type` (`Type`),
KEY `Status` (`Status`)
);
CREATE TABLE ShippingZones (
ZoneID int(11) NOT NULL auto_increment,
ShippingTypeID int(11) NOT NULL default '0',
Name varchar(100) NOT NULL default '',
Type int(11) NOT NULL default '1',
CODallowed smallint(6) NOT NULL default '1',
PRIMARY KEY (ZoneID),
KEY ShippingTypeID (ShippingTypeID),
KEY `Type` (`Type`)
);
CREATE TABLE ShippingZonesDestinations (
ZoneDestId int(11) NOT NULL auto_increment,
ShippingZoneId int(11) NOT NULL default '0',
StdDestId int(11) default '0',
DestValue varchar(255) default NULL,
PRIMARY KEY (ZoneDestId),
KEY ShippingZoneId (ShippingZoneId),
KEY StdDestId (StdDestId)
);
CREATE TABLE TaxZones (
TaxZoneId int(11) NOT NULL auto_increment,
Name varchar(100) NOT NULL default '',
Type int(11) NOT NULL default '1',
TaxValue double NOT NULL default '0',
ApplyToShipping TINYINT( 1 ) NOT NULL DEFAULT '0',
ApplyToProcessing TINYINT( 1 ) NOT NULL DEFAULT '0',
PRIMARY KEY (TaxZoneId)
);
CREATE TABLE TaxZonesDestinations (
TaxZoneDestId int(11) NOT NULL auto_increment,
TaxZoneId int(11) NOT NULL default '0',
StdDestId int(11) default '0',
DestValue varchar(255) default NULL,
PRIMARY KEY (TaxZoneDestId),
KEY TaxZoneId (TaxZoneId),
KEY StdDestId (StdDestId)
);
CREATE TABLE AffiliatePayments (
AffiliatePaymentId int(11) NOT NULL AUTO_INCREMENT,
AffiliateId int(10) unsigned NOT NULL DEFAULT '0',
PaymentDate int(10) unsigned DEFAULT NULL,
Amount decimal(10,2) NOT NULL DEFAULT '0.00',
`Comment` text,
PaymentReference varchar(255) NOT NULL DEFAULT '',
PaymentTypeId int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (AffiliatePaymentId),
KEY AffiliateId (AffiliateId),
KEY PaymentDate (PaymentDate),
KEY PaymentTypeId (PaymentTypeId)
);
CREATE TABLE AffiliatePaymentTypes (
PaymentTypeId int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(255) NOT NULL DEFAULT '',
Description text,
IsPrimary tinyint(4) NOT NULL DEFAULT '0',
`Status` tinyint(4) NOT NULL DEFAULT '0',
Priority tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (PaymentTypeId),
KEY IsPrimary (IsPrimary),
KEY `Status` (`Status`),
KEY Priority (Priority)
);
CREATE TABLE AffiliatePlans (
AffiliatePlanId int(11) NOT NULL auto_increment,
Name varchar(255) NOT NULL default '',
PlanType tinyint(3) unsigned NOT NULL default '1',
ResetInterval int(10) unsigned NOT NULL default '0',
PaymentType tinyint(4) NOT NULL default '0',
MinPaymentAmount varchar(255) NOT NULL default '',
Enabled tinyint(4) unsigned NOT NULL default '0',
IsPrimary tinyint(4) NOT NULL default '0',
PRIMARY KEY (AffiliatePlanId),
KEY PaymentType (PaymentType),
KEY Enabled (Enabled),
KEY IsPrimary (IsPrimary)
);
CREATE TABLE AffiliatePlansBrackets (
AffiliateBracketId int(11) NOT NULL auto_increment,
AffiliatePlanId int(11) NOT NULL default '0',
FromAmount decimal(10,4) NOT NULL default '0.0000',
ToAmount decimal(10,4) NOT NULL default '0.0000',
Percent decimal(3,2) NOT NULL default '0.00',
PRIMARY KEY (AffiliateBracketId),
KEY AffiliatePlanId (AffiliatePlanId)
);
CREATE TABLE AffiliatePlansItems (
AffiliateItemId int(11) NOT NULL auto_increment,
AffiliatePlanId int(11) NOT NULL default '0',
ItemResourceId int(10) unsigned NOT NULL default '0',
ItemType tinyint(4) NOT NULL default '1',
PRIMARY KEY (AffiliateItemId),
KEY AffiliatePlanId (AffiliatePlanId),
KEY ItemResourceId (ItemResourceId),
KEY ItemType (ItemType)
);
CREATE TABLE Affiliates (
AffiliateId int(11) NOT NULL AUTO_INCREMENT,
PortalUserId int(10) unsigned NOT NULL DEFAULT '0',
AffiliatePlanId int(10) unsigned NOT NULL DEFAULT '0',
AccumulatedAmount decimal(10,2) NOT NULL DEFAULT '0.00',
AmountToPay decimal(10,2) NOT NULL DEFAULT '0.00',
LastPaymentDate int(11) unsigned DEFAULT NULL,
LastOrderDate int(11) unsigned DEFAULT NULL,
`Status` tinyint(4) NOT NULL DEFAULT '2',
AffiliateCode varchar(30) NOT NULL DEFAULT '',
ItemsSold int(10) unsigned NOT NULL DEFAULT '0',
PaymentTypeId int(11) NOT NULL DEFAULT '0',
SSN varchar(100) NOT NULL DEFAULT '',
Comments text,
CreatedOn int(11) DEFAULT NULL,
PRIMARY KEY (AffiliateId),
UNIQUE KEY PortalUserId (PortalUserId),
UNIQUE KEY AffiliateCode (AffiliateCode),
KEY LastOrderDate (LastOrderDate),
KEY AffiliatePlanId (AffiliatePlanId),
KEY `Status` (`Status`),
KEY PaymentTypeId (PaymentTypeId),
KEY CreatedOn (CreatedOn)
);
CREATE TABLE ProductOptionCombinations (
CombinationId int(11) NOT NULL AUTO_INCREMENT,
ProductId int(11) NOT NULL DEFAULT '0',
Combination text,
CombinationCRC int(11) NOT NULL DEFAULT '0',
PriceType tinyint(1) DEFAULT '3',
Price float DEFAULT NULL,
WeightType tinyint(1) DEFAULT '3',
Weight float DEFAULT NULL,
Availability tinyint(1) NOT NULL DEFAULT '1',
Priority int(11) NOT NULL DEFAULT '0',
QtyInStock int(11) NOT NULL DEFAULT '0',
QtyReserved int(11) NOT NULL DEFAULT '0',
QtyBackOrdered int(11) NOT NULL DEFAULT '0',
QtyOnOrder int(11) NOT NULL DEFAULT '0',
SKU varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (CombinationId),
KEY CombinationCRC (CombinationCRC),
KEY ProductId (ProductId),
KEY Availability (Availability)
);
CREATE TABLE ProductOptions (
ProductOptionId int(11) NOT NULL auto_increment,
ProductId int(11) NOT NULL default '0',
Name varchar(255) NOT NULL default '',
OptionType TINYINT(4) NOT NULL DEFAULT '0',
Required tinyint(4) NOT NULL default '0',
Listable tinyint(4) NOT NULL default '0',
Priority int(11) NOT NULL default '0',
`Values` text,
Prices text,
PriceTypes text,
PRIMARY KEY (ProductOptionId),
KEY ProductId (ProductId,Priority),
KEY OptionType (OptionType),
KEY Listable (Listable)
);
CREATE TABLE ProductsCustomData (
CustomDataId int(11) NOT NULL auto_increment,
ResourceId int(10) unsigned NOT NULL default '0',
KEY ResourceId (ResourceId),
PRIMARY KEY (CustomDataId)
);
ALTER TABLE SiteDomains
ADD COLUMN BillingCountry varchar(3) NOT NULL DEFAULT '',
ADD COLUMN ShippingCountry varchar(3) NOT NULL DEFAULT '',
ADD COLUMN PrimaryCurrencyId int(11) NOT NULL DEFAULT '0',
ADD COLUMN Currencies varchar(255) NOT NULL DEFAULT '',
ADD COLUMN PrimaryPaymentTypeId int(11) NOT NULL DEFAULT '0',
ADD COLUMN PaymentTypes varchar(255) NOT NULL DEFAULT '',
ADD INDEX (BillingCountry),
ADD INDEX (ShippingCountry),
ADD INDEX (PrimaryCurrencyId),
ADD INDEX (Currencies),
ADD INDEX (PrimaryPaymentTypeId),
ADD INDEX (PaymentTypes);
\ No newline at end of file
Index: branches/5.2.x/install/upgrades.sql
===================================================================
--- branches/5.2.x/install/upgrades.sql (revision 14088)
+++ branches/5.2.x/install/upgrades.sql (revision 14089)
@@ -1,182 +1,200 @@
# ===== v 4.3.9 =====
INSERT INTO ImportScripts VALUES (DEFAULT, 'Products from CSV file [In-Commerce]', '', 'p', 'In-Commerce', '', 'CSV', '1');
ALTER TABLE Products ADD OnSale TINYINT(1) NOT NULL default '0' AFTER Featured, ADD INDEX (OnSale);
UPDATE Phrase SET Module = 'In-Commerce' WHERE Phrase IN ('lu_comm_Images', 'lu_comm_ImagesHeader');
# ===== v 5.0.0 =====
UPDATE Category SET Template = '/in-commerce/designs/section' WHERE Template = 'in-commerce/store/category';
UPDATE Category SET CachedTemplate = '/in-commerce/designs/section' WHERE CachedTemplate = 'in-commerce/store/category';
UPDATE ConfigurationValues SET VariableValue = '/in-commerce/designs/section' WHERE VariableName = 'p_CategoryTemplate';
UPDATE ConfigurationValues SET VariableValue = 'in-commerce/designs/detail' WHERE VariableName = 'p_ItemTemplate';
DELETE FROM PersistantSessionData WHERE VariableName IN ('affil_columns_.', 'ap_columns_.', 'apayments_columns_.', 'apayments.log_columns_.', 'd_columns_.', 'coup_columns_.', 'file_columns_.', 'po_columns_.', 'z_columns_.', 'tax_columns_.');
DELETE FROM PersistantSessionData WHERE VariableName LIKE '%ord.%';
INSERT INTO Permissions VALUES (DEFAULT, 'in-commerce:products.view', 11, 1, 1, 0);
INSERT INTO Permissions VALUES (DEFAULT, 'in-commerce:setting_folder.view', 11, 1, 1, 0);
INSERT INTO ShippingQuoteEngines VALUES (DEFAULT, 'USPS.com', 0, 0, 0, 'a:21:{s:12:"AccountLogin";s:0:"";s:15:"AccountPassword";N;s:10:"UPSEnabled";N;s:10:"UPSAccount";s:0:"";s:11:"UPSInvoiced";N;s:10:"FDXEnabled";N;s:10:"FDXAccount";s:0:"";s:10:"DHLEnabled";N;s:10:"DHLAccount";s:0:"";s:11:"DHLInvoiced";N;s:10:"USPEnabled";N;s:10:"USPAccount";s:0:"";s:11:"USPInvoiced";N;s:10:"ARBEnabled";N;s:10:"ARBAccount";s:0:"";s:11:"ARBInvoiced";N;s:10:"1DYEnabled";N;s:10:"2DYEnabled";N;s:10:"3DYEnabled";N;s:10:"GNDEnabled";N;s:10:"ShipMethod";N;}', 'USPS');
INSERT INTO ConfigurationAdmin VALUES ('Comm_CompanyName', 'la_Text_ContactsGeneral', 'la_text_CompanyName', 'text', NULL, NULL, 10.01, 0, 0);
INSERT INTO ConfigurationValues VALUES (DEFAULT, 'Comm_CompanyName', '', 'In-Commerce', 'in-commerce:contacts');
UPDATE ConfigurationAdmin SET prompt = 'la_text_StoreName', DisplayOrder = 10.02 WHERE VariableName = 'Comm_StoreName';
INSERT INTO ConfigurationAdmin VALUES ('Comm_Contacts_Name', 'la_Text_ContactsGeneral', 'la_text_ContactName', 'text', NULL, NULL, 10.03, 0, 0);
INSERT INTO ConfigurationValues VALUES (DEFAULT, 'Comm_Contacts_Name', '', 'In-Commerce', 'in-commerce:contacts');
UPDATE ConfigurationAdmin SET DisplayOrder = 10.04 WHERE VariableName = 'Comm_Contacts_Phone';
UPDATE ConfigurationAdmin SET DisplayOrder = 10.05 WHERE VariableName = 'Comm_Contacts_Fax';
UPDATE ConfigurationAdmin SET DisplayOrder = 10.06 WHERE VariableName = 'Comm_Contacts_Email';
UPDATE ConfigurationAdmin SET DisplayOrder = 10.07 WHERE VariableName = 'Comm_Contacts_Additional';
DELETE FROM Phrase WHERE Phrase IN ('la_fld_ManufacturerId', 'la_fld_DiscountId', 'la_fld_CouponId', 'la_fld_AffiliatePlanId', 'la_fld_AffiliateId', 'la_fld_ZoneId', 'la_fld_EngineId', 'la_fld_ShippingId', 'la_fld_ProductId', 'la_fld_OptionId', 'la_fld_CurrencyId', 'la_fld_Zone_Name');
UPDATE Phrase SET Module = 'In-Commerce' WHERE ((Phrase LIKE '%Product%' OR Phrase LIKE '%Shipping%' OR Phrase LIKE '%Coupon%' OR Phrase LIKE '%Discount%' OR Phrase LIKE '%Report%' OR Phrase LIKE '%Currency%' OR Phrase LIKE '%Cart%') AND (Module = 'Core'));
# ===== v 5.0.1 =====
UPDATE ConfigurationValues SET VariableValue = 'in-commerce/products/product_detail' WHERE VariableName = 'p_ItemTemplate';
UPDATE ConfigurationAdmin SET ValueList = '1=la_opt_Session,2=la_opt_PermanentCookie' WHERE VariableName = 'Comm_AffiliateStorageMethod';
UPDATE ConfigurationAdmin SET ValueList = 'ASC=la_common_Ascending,DESC=la_common_Descending'
WHERE VariableName IN ('product_OrderProductsByDir', 'product_OrderProductsThenByDir');
UPDATE ConfigurationAdmin SET ValueList = '1=la_opt_PriceCalculationByPrimary,2=la_opt_PriceCalculationByOptimal'
WHERE VariableName = 'Comm_PriceBracketCalculation';
UPDATE ConfigurationAdmin
SET ValueList = '1=la_opt_Sec,60=la_opt_Min,3600=la_opt_Hour,86400=la_opt_Day,604800=la_opt_Week,2419200=la_opt_Month,29030400=la_opt_Year'
WHERE VariableName IN ('product_ReviewDelay_Interval', 'product_RatingDelay_Interval');
UPDATE CustomField SET FieldLabel = 'la_fld_cust_p_ItemTemplate', Prompt = 'la_fld_cust_p_ItemTemplate' WHERE FieldName = 'p_ItemTemplate';
UPDATE Events SET Type = 1 WHERE Event = 'BACKORDER.FULLFILL';
UPDATE ConfigurationAdmin SET ValueList = 'style="width: 50px;"' WHERE VariableName IN ('product_RatingDelay_Value', 'product_ReviewDelay_Value');
# ===== v 5.0.2-B1 =====
ALTER TABLE AffiliatePayments
CHANGE Comment Comment text NULL,
CHANGE PaymentDate PaymentDate INT(10) UNSIGNED NULL DEFAULT NULL;
ALTER TABLE AffiliatePaymentTypes CHANGE Description Description text NULL;
ALTER TABLE Affiliates
CHANGE Comments Comments text NULL,
CHANGE CreatedOn CreatedOn INT(11) NULL DEFAULT NULL;
ALTER TABLE Manufacturers CHANGE Description Description text NULL;
ALTER TABLE Orders
CHANGE UserComment UserComment text NULL,
CHANGE AdminComment AdminComment text NULL,
CHANGE GWResult1 GWResult1 MEDIUMTEXT NULL,
CHANGE GWResult2 GWResult2 MEDIUMTEXT NULL,
CHANGE OrderDate OrderDate INT(10) UNSIGNED NULL DEFAULT NULL,
CHANGE PaymentExpires PaymentExpires INT(10) UNSIGNED NULL DEFAULT NULL;
ALTER TABLE PaymentTypes CHANGE PortalGroups PortalGroups text NULL;
ALTER TABLE ProductOptionCombinations CHANGE Combination Combination text NULL;
ALTER TABLE Products
CHANGE ShippingLimitation ShippingLimitation text NULL,
CHANGE PackageContent PackageContent MEDIUMTEXT NULL;
ALTER TABLE ShippingQuoteEngines CHANGE Properties Properties text NULL;
ALTER TABLE ShippingType CHANGE PortalGroups PortalGroups text NULL;
ALTER TABLE ProductFiles
CHANGE ProductId ProductId INT(11) NOT NULL DEFAULT '0',
CHANGE `Name` `Name` VARCHAR(255) NOT NULL DEFAULT '',
CHANGE Version Version VARCHAR(100) NOT NULL DEFAULT '',
CHANGE FilePath FilePath VARCHAR(255) NOT NULL DEFAULT '',
CHANGE RealPath RealPath VARCHAR(255) NOT NULL DEFAULT '',
CHANGE Size Size INT(11) NOT NULL DEFAULT '0',
CHANGE AddedOn AddedOn INT(11) NULL DEFAULT NULL;
ALTER TABLE UserFileAccess
CHANGE ProductId ProductId INT( 11 ) NOT NULL DEFAULT '0',
CHANGE PortalUserId PortalUserId INT( 11 ) NOT NULL DEFAULT '0';
ALTER TABLE GatewayConfigFields CHANGE ValueList ValueList MEDIUMTEXT NULL;
ALTER TABLE Currencies
CHANGE `Status` `Status` SMALLINT(6) NOT NULL DEFAULT '1',
CHANGE Modified Modified INT(11) NULL DEFAULT NULL;
ALTER TABLE GiftCertificates CHANGE `Status` `Status` TINYINT(1) NOT NULL DEFAULT '2';
ALTER TABLE UserDownloads
CHANGE StartedOn StartedOn INT(11) NULL DEFAULT NULL,
CHANGE EndedOn EndedOn INT(11) NULL DEFAULT NULL;
# ===== v 5.0.2-B2 =====
# ===== v 5.0.2-RC1 =====
# ===== v 5.0.2 =====
# ===== v 5.0.3-B1 =====
UPDATE Phrase
SET PhraseType = 1
WHERE Phrase IN (
'la_ship_All_Together', 'la_ship_Backorders_Upon_Avail', 'la_ship_Backorder_Separately',
'lu_ship_Shipment', 'lu_ship_ShippingType'
);
# ===== v 5.0.3-B2 =====
# ===== v 5.0.3-RC1 =====
# ===== v 5.0.3 =====
# ===== v 5.0.4-B1 =====
# ===== v 5.0.4-B2 =====
# ===== v 5.0.4 =====
# ===== v 5.1.0-B1 =====
UPDATE Modules SET Path = 'modules/in-commerce/' WHERE `Name` = 'In-Commerce';
UPDATE ConfigurationValues
SET ValueList = '0=lu_none||<SQL+>SELECT l%3$s_Name AS OptionName, IsoCode AS OptionValue FROM <PREFIX>CountryStates WHERE Type = 1 ORDER BY OptionName</SQL>'
WHERE ValueList = '0=lu_none||<SQL>SELECT DestName AS OptionName, DestAbbr AS OptionValue FROM <PREFIX>StdDestinations WHERE DestParentId IS NULL Order BY OptionName</SQL>';
ALTER TABLE SiteDomains
ADD COLUMN BillingCountry varchar(3) NOT NULL DEFAULT '',
ADD COLUMN ShippingCountry varchar(3) NOT NULL DEFAULT '',
ADD COLUMN PrimaryCurrencyId int(11) NOT NULL DEFAULT '0',
ADD COLUMN Currencies varchar(255) NOT NULL DEFAULT '',
ADD COLUMN PrimaryPaymentTypeId int(11) NOT NULL DEFAULT '0',
ADD COLUMN PaymentTypes varchar(255) NOT NULL DEFAULT '',
ADD INDEX (BillingCountry),
ADD INDEX (ShippingCountry),
ADD INDEX (PrimaryCurrencyId),
ADD INDEX (Currencies),
ADD INDEX (PrimaryPaymentTypeId),
ADD INDEX (PaymentTypes);
UPDATE Phrase SET Module = 'Core' WHERE Phrase IN ('la_btn_Add', 'la_fld_RecipientName', 'la_fld_SenderName');
DELETE FROM Permissions WHERE Permission LIKE 'in-commerce:incommerce_configemail%';
# ===== v 5.1.0-B2 =====
# ===== v 5.1.0-RC1 =====
UPDATE Phrase
SET PhraseType = 1
WHERE Phrase IN (
'la_col_Qty', 'la_col_QtyBackordered', 'la_ItemBackordered', 'la_ship_all_together',
'la_ship_backorders_upon_avail', 'la_ship_backorder_separately', 'la_tooltip_New_Coupon',
'la_tooltip_New_Discount'
);
DELETE FROM Phrase WHERE Phrase = 'la_comm_ProductsByManuf';
# ===== v 5.1.0 =====
ALTER TABLE Products CHANGE CachedRating CachedRating varchar(10) NOT NULL default '0';
+
+# ===== v 5.1.1-B1 =====
+ALTER TABLE Orders CHANGE ShippingOption ShippingOption TINYINT(4) NOT NULL DEFAULT '0';
+
+ALTER TABLE ProductFiles CHANGE AddedById AddedById INT(11) NULL DEFAULT NULL;
+UPDATE ProductFiles SET AddedById = NULL WHERE AddedById = 0;
+
+ALTER TABLE Products
+ CHANGE CreatedById CreatedById INT(11) NULL DEFAULT NULL ,
+ CHANGE ModifiedById ModifiedById INT(11) NULL DEFAULT NULL;
+UPDATE Products SET CreatedById = NULL WHERE CreatedById = 0;
+UPDATE Products SET ModifiedById = NULL WHERE ModifiedById = 0;
+
+# ===== v 5.1.1-B2 =====
+
+# ===== v 5.1.1-RC1 =====
+
+# ===== v 5.1.1 =====
\ No newline at end of file
Index: branches/5.2.x
===================================================================
--- branches/5.2.x (revision 14088)
+++ branches/5.2.x (revision 14089)
Property changes on: branches/5.2.x
___________________________________________________________________
Modified: svn:mergeinfo
## -0,0 +0,2 ##
Merged /w/in-commerce/branches/5.1.x:r13845-14075
Merged /w/in-commerce/releases/5.1.1:r14076-14088

Event Timeline