Index: branches/5.2.x/units/products/products_config.php
===================================================================
--- branches/5.2.x/units/products/products_config.php	(revision 16675)
+++ branches/5.2.x/units/products/products_config.php	(revision 16676)
@@ -1,701 +1,710 @@
 <?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', 'build_event' => 'OnItemBuild'),
 	'ListClass' => Array ('class' => 'kCatDBList', 'file' => '', 'build_event' => 'OnListBuild'),
 	'EventHandlerClass' => Array ('class' => 'ProductsEventHandler', 'file' => 'products_event_handler.php', 'build_event' => 'OnBuild'),
 	'TagProcessorClass' => Array ('class' => 'ProductsTagProcessor', 'file' => 'products_tag_processor.php', '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' => 'CategoryItemRewrite:RewriteListener',
 
 	'Hooks' => Array (
 		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' => hBEFORE,
 			'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', 'add', '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', 'add', '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', 'add', 'edit'),
 			'priority' => 10,
 			'type' => stTREE,
 		),
 	),
 
 	'FilterMenu' => Array (
 		'Groups' => Array (
 			Array ('mode' => 'AND', 'filters' => Array ('show_new'), 'type' => kDBList::HAVING_FILTER),
 			Array ('mode' => 'AND', 'filters' => Array ('show_hot'), 'type' => kDBList::HAVING_FILTER),
 			Array ('mode' => 'AND', 'filters' => Array ('show_pop'), 'type' => kDBList::HAVING_FILTER),
 			Array ('mode' => 'AND', 'filters' => Array ('show_pick'), 'type' => kDBList::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',
 	'CustomDataTableName' => TABLE_PREFIX . 'ProductsCustomData',
 
 	'CalculatedFields' => Array (
 		'' => Array (
+			'ModifiedBy' => 'IF (ISNULL(modified.Username), IF (%1$s.ModifiedById = ' . USER_ROOT . ', "root", IF (%1$s.ModifiedById = ' . USER_GUEST . ', "Guest", "n/a")), IF(modified.Username = "", modified.Email, modified.Username))',
 			'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.'Categories.ParentPath',
 			'Manufacturer' => TABLE_PREFIX.'Manufacturers.Name',
 			'Filename' => TABLE_PREFIX.'%3$sCategoryItems.Filename',
 			'CategoryFilename' => TABLE_PREFIX.'Categories.NamedParentPath',
 			'FileSize' => 'files.Size',
 			'FilePath' => 'files.FilePath',
 			'FileVersion' => 'files.Version',
 		),
 
 		'showall' => Array (
+			'ModifiedBy' => 'IF (ISNULL(modified.Username), IF (%1$s.ModifiedById = ' . USER_ROOT . ', "root", IF (%1$s.ModifiedById = ' . USER_GUEST . ', "Guest", "n/a")), IF(modified.Username = "", modified.Email, modified.Username))',
 			'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.'Categories.NamedParentPath',
 		),
 	),
 
 	'CacheModRewrite' => true,
 
 	'ListSQLs' => Array (
 		'' => '	SELECT %1$s.* %2$s
 					FROM %1$s
 					LEFT JOIN '.TABLE_PREFIX.'UserGroups ON '.TABLE_PREFIX.'UserGroups.GroupId = %1$s.AccessGroupId
 					LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
 					{PERM_JOIN}
 					LEFT JOIN '.TABLE_PREFIX.'Categories ON '.TABLE_PREFIX.'Categories.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
 					LEFT JOIN '.TABLE_PREFIX.'%3$sCatalogImages 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 . 'Users modified ON %1$s.ModifiedById = modified.PortalUserId
 					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
 					{PERM_JOIN}
 					LEFT JOIN '.TABLE_PREFIX.'Categories ON '.TABLE_PREFIX.'Categories.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
+					LEFT JOIN ' . TABLE_PREFIX . 'Users modified ON %1$s.ModifiedById = modified.PortalUserId
 					LEFT JOIN '.TABLE_PREFIX.'%3$sProductsCustomData cust ON %1$s.ResourceId = cust.ResourceId',
 	),
 
 	'ListSortings' => Array (
 		'' => Array (
 			'ForcedSorting' => Array ('EditorsPick' => 'desc', 'Priority' => 'desc'),
 			'Sorting' => Array ('Name' => 'asc'),
 		)
 	),
 
 	'ItemSQLs' => Array (
 		'' => '	SELECT %1$s.* %2$s
 				FROM %1$s
 				LEFT JOIN '.TABLE_PREFIX.'UserGroups 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.'Categories ON '.TABLE_PREFIX.'Categories.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
 				LEFT JOIN '.TABLE_PREFIX.'%3$sCatalogImages 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 . 'Users modified ON %1$s.ModifiedById = modified.PortalUserId
 				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', '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_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',
 			'formatter' => 'kOptionsFormatter', 'use_phrases' => 1,
 			'options' => Array (
 				PRODUCT_TYPE_TANGIBLE => 'la_product_tangible',
 				PRODUCT_TYPE_SUBSCRIPTION => 'la_product_subscription',
 				PRODUCT_TYPE_SERVICE => 'la_product_service',
 				PRODUCT_TYPE_DOWNLOADABLE => 'la_product_downloadable',
 				/* PRODUCT_TYPE_PACKAGE => 'la_product_package', */
 			),
 			'not_null' => 1, 'default' => 1,
 		),
-		'Modified' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
-		'ModifiedById' => Array ('type' => 'int', 'default' => NULL),
+		'Modified' => array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
+		'ModifiedById' => 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 . 'Users WHERE %s', 'left_key_field' => 'PortalUserId', 'left_title_field' => USER_TITLE_FIELD, 'default' => null),
 		'CreatedById' => Array (
 			'type' => 'int',
 			'formatter' => 'kLEFTFormatter',
 			'options' => Array (USER_ROOT => 'root', USER_GUEST => 'Guest'),
 			'left_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'Users WHERE %s',
 			'left_key_field' => 'PortalUserId', 'left_title_field' => USER_TITLE_FIELD,
 			'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'),
 			'sample_value' => 'Guest', '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', '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.'UserGroups 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',
 			'formatter' => 'kLEFTFormatter', 'options' => Array (0 => 'None'),
 			'left_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'ProductsCoupons WHERE %s',
 			'left_key_field' => 'CouponId', 'left_title_field' => 'Name',
 			'not_null' => 1, 'default' => 0,
 		),
 		'MinQtyFreePromoShipping' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 		'MetaKeywords' => Array ('type' => 'string', 'default' => null),
 		'MetaDescription' => Array ('type' => 'string', 'default' => null),
 	),
 
 	'VirtualFields' => Array (
 		'Relevance' => Array ('type' => 'float', 'default' => 0),
+		'ModifiedBy' => array('type' => 'string', 'default' => ''),
 		'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),
 		'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, 'default' => 1,
 		),
 		'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, '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 . '/', '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', 'default' => ''),
 		'CachedNavbar' => Array ('type' => 'string', 'default' => ''),
 		'ParentPath' => Array ('type' => 'string', 'default' => ''),
 
 		'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' => 'column:la_fld_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, ),
 				'Priority' => Array ('filter_block' => 'grid_range_filter', 'width' => 65),
 				'Type' => Array ('title' => 'column:la_fld_ProductType', 'filter_block' => 'grid_options_filter', 'width' => 80, ),
 				'Manufacturer' => Array ('filter_block' => 'grid_like_filter', 'width' => 100, ),
 				'Price' => Array ('filter_block' => 'grid_range_filter', 'width' => 70, ),
 				'Status' => Array ('filter_block' => 'grid_options_filter', 'width' => 70, ),
 				'QtyInStock' => Array ('title' => 'column:la_fld_Qty', 'data_block' => 'qty_td', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
 				'QtyBackOrdered' => Array ('title' => 'column:la_fld_QtyBackOrdered', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
 				'OnSale' => Array ('title' => 'column:la_fld_OnSale', 'filter_block' => 'grid_options_filter', 'width' => 70, ),
+				'Modified' => array('filter_block' => 'grid_date_range_filter', 'width' => 140),
+				'ModifiedBy' => array('filter_block' => 'grid_like_filter', 'width' => 100),
 				/*'Weight' => Array ( 'title' => 'la_col_ProductWeight', 'filter_block' => 'grid_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' => 'column:la_fld_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, ),
 				'Priority' => Array ('filter_block' => 'grid_range_filter', 'width' => 65),
 				'Type' => Array ('title' => 'column:la_fld_ProductType', 'filter_block' => 'grid_options_filter', 'width' => 80, ),
 				'Manufacturer' => Array ('filter_block' => 'grid_like_filter', 'width' => 100, ),
 				'Price' => Array ('filter_block' => 'grid_range_filter', 'width' => 70, ),
 				'Status' => Array ('filter_block' => 'grid_options_filter', 'width' => 70, ),
 				'QtyInStock' => Array ('title' => 'column:la_fld_Qty', 'data_block' => 'qty_td', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
 				'QtyBackOrdered' => Array ('title' => 'column:la_fld_QtyBackOrdered', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
-
+				'Modified' => array('filter_block' => 'grid_date_range_filter', 'width' => 140),
+				'ModifiedBy' => array('filter_block' => 'grid_like_filter', 'width' => 100),
 			),
 		),
 	),
 
 	'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/admin_templates/products/products_edit.tpl
===================================================================
--- branches/5.2.x/admin_templates/products/products_edit.tpl	(revision 16675)
+++ branches/5.2.x/admin_templates/products/products_edit.tpl	(revision 16676)
@@ -1,181 +1,187 @@
 <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_if check="m_IsDebugMode" >
 				<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_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_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_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" has_empty="1"/>
 
 			<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_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_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_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_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_if check="p_Field" name="ModifiedById" db="db">
+				<inp2:m_RenderElement name="inp_label" prefix="p" field="Modified"/>
+				<inp2:m_RenderElement name="inp_label" prefix="p" field="ModifiedBy"/>
+			</inp2:m_if>
+
 			<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_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_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"/>
 			<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" no_amp="1" js_escape="1"/>', 'ShippingOption', '800x600', 'OnPreSaveAndOpenPopup');
 	}
 
 	function openCouponSelector() {
 		openSelector('p','<inp2:m_link t="in-commerce/discounts/coupon_selector" pass="all" no_amp="1" js_escape="1"/>', 'AssignedCoupon', '800x400', 'OnPreSaveAndOpenPopup');
 	}
 </script>
 
 <inp2:m_include t="incs/footer"/>