Index: branches/5.3.x/units/currencies/currencies_event_handler.php
===================================================================
--- branches/5.3.x/units/currencies/currencies_event_handler.php	(revision 15582)
+++ branches/5.3.x/units/currencies/currencies_event_handler.php	(revision 15583)
@@ -1,322 +1,300 @@
 <?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 CurrenciesEventHandler extends kDBEventHandler {
 
 	/**
 	 * Allows to override standard permission mapping
 	 *
 	 * @return void
 	 * @access protected
 	 * @see kEventHandler::$permMapping
 	 */
 	protected function mapPermissions()
 	{
 		parent::mapPermissions();
 
 		$permissions = Array (
 			// admin
 			'OnUpdateRate' => Array ('self' => 'add|edit'),
 			'OnUpdateRates' => Array ('self' => 'advanced:update_rate|add|edit'),
 			'OnDisableUnused' => Array ('self' => 'edit'),
 
 			// front
 			'OnChangeCurrency' => Array ('self' => true),
 			'OnItemBuild' => Array ('self' => true),
 		);
 
 		$this->permMapping = array_merge($this->permMapping, $permissions);
 	}
 
 	/**
 	 * Returns ID of current item to be edited
 	 * by checking ID passed in get/post as prefix_id
 	 * or by looking at first from selected ids, stored.
 	 * Returned id is also stored in Session in case
 	 * it was explicitly passed as get/post
 	 *
 	 * @param kEvent $event
 	 * @return int
 	 * @access public
 	 */
 	public function getPassedID(kEvent $event)
 	{
 		if ( $event->Special == 'current' ) {
 			return Array ('ISO' => $this->Application->RecallVar('curr_iso'));
 		}
 
 		return parent::getPassedID($event);
 	}
 
 	/**
 	 * Enter description here...
 	 *
 	 * @param kEvent $event
 	 */
 	function OnSetPrimary($event)
 	{
 		if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
 			$event->status = kEvent::erFAIL;
 			return;
 		}
 
 		$object = $event->getObject();
 		/* @var $object kDBItem */
 
 		$object->SetDBField('IsPrimary', 1);
 		$object->Update();
 	}
 
 	/**
 	 * Occurs before updating item
 	 *
 	 * @param kEvent $event
 	 * @return void
 	 * @access protected
 	 */
 	protected function OnBeforeItemUpdate(kEvent $event)
 	{
 		parent::OnBeforeItemUpdate($event);
 
 		$object = $event->getObject();
 		/* @var $object kDBItem */
 
 		if ( $object->GetDBField('IsPrimary') && $object->Validate() ) {
 			$sql = 'UPDATE ' . $this->Application->getUnitOption($this->Prefix, 'TableName') . '
 					SET IsPrimary = 0
 					WHERE CurrencyId <> ' . $object->GetDBField('CurrencyId');
 			$this->Conn->Query($sql);
 
 			$object->SetDBField('Status', 1);
 		}
 
 		$object->SetDBField('Modified_date', adodb_mktime());
 		$object->SetDBField('Modified_time', adodb_mktime());
 
 		if ( $object->GetDBField('Status') == 0 ) {
 			$sql = 'DELETE FROM ' . $this->Application->getUnitOption('ptc', 'TableName') . '
 					WHERE CurrencyId = ' . $object->GetDBField('CurrencyId');
 			$this->Conn->Query($sql);
 		}
 	}
 
 	/**
 	 * Apply any custom changes to list's sql query
 	 *
 	 * @param kEvent $event
 	 * @return void
 	 * @access protected
 	 * @see kDBEventHandler::OnListBuild()
 	 */
 	protected function SetCustomQuery(kEvent $event)
 	{
 		parent::SetCustomQuery($event);
 
 		$object = $event->getObject();
 		/* @var $object kDBList */
 
 		if ( $event->Special == 'active' ) {
 			$object->addFilter('status_filter', '%1$s.Status = 1');
 		}
 
 		if ( !$this->Application->isAdminUser ) {
 			$object->addFilter('status_filter', $object->TableName . '.Status = 1');
 		}
 
 		// site domain currency picker
 		if ( $event->Special == 'selected' || $event->Special == 'available' ) {
 			$edit_picker_helper = $this->Application->recallObject('EditPickerHelper');
 			/* @var $edit_picker_helper EditPickerHelper */
 
 			$edit_picker_helper->applyFilter($event, 'Currencies');
 			$object->addFilter('status_filter', '%1$s.Status = ' . STATUS_ACTIVE);
 		}
 
 		// apply domain-based currency filtering
 		$currencies = $this->Application->siteDomainField('Currencies');
 
 		if ( strlen($currencies) ) {
 			$currencies = explode('|', substr($currencies, 1, -1));
 			$object->addFilter('domain_filter', '%1$s.CurrencyId IN (' . implode(',', $currencies) . ')');
 		}
 	}
 
 	/**
 	 * Saves content of temp table into live and
 	 * redirects to event' default redirect (normally grid template)
 	 *
 	 * @param kEvent $event
 	 * @return void
 	 * @access protected
 	 */
 	protected function OnSave(kEvent $event)
 	{
 		$this->Application->StoreVar('saved_curr_ids', $this->Application->RecallVar($event->Prefix . '_selected_ids'));
 
 		parent::OnSave($event);
 	}
 
 	/**
 	 * Enter description here...
 	 *
 	 * @param kEvent $event
 	 */
 	function OnDisableUnused($event)
 	{
 		$unused_ids = $this->Application->GetVar('unused_ids');
 
 		if ( $unused_ids ) {
 			$sql = 'UPDATE ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . '
 					SET Status = 0
 					WHERE CurrencyId IN(' . $unused_ids . ') AND IsPrimary <> 1';
 			$this->Conn->Query($sql);
 		}
 	}
 
 	/**
 	 * Enter description here...
 	 *
 	 * @param kEvent $event
 	 */
 	function OnUpdateRate($event)
 	{
 		if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
 			$event->status = kEvent::erFAIL;
 			return;
 		}
 
 		$event->CallSubEvent('OnPreSave');
 		$rate_source = $this->Application->ConfigValue('Comm_ExchangeRateSource');
 		$rate_source_classes = Array(	2 => 'FRNYCurrencyRates',
 										3 => 'ECBCurrencyRates',
 										1 => 'BankLVCurrencyRates'
 									);
 		$rates_class = $rate_source_classes[$rate_source];
 		$rates = $this->Application->recallObject($rates_class);
 
 		$rates->GetRatesData();
 
 		$object = $event->getObject();
 		/* @var $object kDBItem */
 
 		$iso = $object->GetDBField('ISO');
 		$rates->StoreRates($iso);
 		if($rates->GetRate($iso, 'PRIMARY'))
 		{
 			$event->status=kEvent::erSUCCESS;
 		}
 		else
 		{
 			$event->status=kEvent::erFAIL;
 			$event->redirect=false;
 			$object->SetError('RateToPrimary', 'couldnt_retrieve_rate', 'la_couldnt_retrieve_rate');
 		}
 	}
 
 	/**
 	 * Enter description here...
 	 *
 	 * @param kEvent $event
 	 */
 	function OnUpdateRates($event)
 	{
 		if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
 			$event->status = kEvent::erFAIL;
 			return;
 		}
 
 		$ids = $this->StoreSelectedIDs($event);
 		$event->setEventParam('ids', $ids);
 		$ids = $event->getEventParam('ids');
 
 		$object = $event->getObject();
 		if(is_array($ids) && $ids[0])
 		{
 			$sql = 'SELECT ISO FROM '.$object->TableName.' WHERE CurrencyId IN ('.implode(',', $ids).')';
 			$iso_list = $this->Conn->GetCol($sql);
 		}
 
 		$rate_source = $this->Application->ConfigValue('Comm_ExchangeRateSource');
 		$rate_source_classes = Array(	2 => 'FRNYCurrencyRates',
 										3 => 'ECBCurrencyRates',
 										1 => 'BankLVCurrencyRates'
 									);
 		$rates_class = $rate_source_classes[$rate_source];
 		$rates = $this->Application->recallObject($rates_class);
 
 		$rates->GetRatesData();
 
 		if($iso_list)
 		{
 			$rates->StoreRates($iso_list);
 		}
 		else
 		{
 			$rates->StoreRates();
 		}
 	}
 
 	/**
 	 * Allows to change currency to given one
 	 *
 	 * @param kEvent $event
 	 * @return void
 	 * @access protected
 	 */
 	protected function OnChangeCurrency($event)
 	{
 		$currency_iso = $this->Application->GetVar('curr_iso');
 		$available_currencies = $this->Application->siteDomainField('Currencies');
 
 		if ($available_currencies) {
 			if (strpos($available_currencies, '|' . $currency_iso . '|') === false) {
 				// currency isn't allowed in site domain
 				return ;
 			}
 		}
 
 		$this->Application->StoreVar('curr_iso', $currency_iso);
 
 		$passed = explode(',', $this->Application->GetVar('passed'));
 		$prefix_index = array_search($event->getPrefixSpecial(), $passed);
 
 		if ( $prefix_index !== false ) {
 			unset($passed[$prefix_index]);
 			$this->Application->SetVar('passed', implode(',', $passed));
 		}
 	}
-
-	/**
-	 * Changes default module to custom (when available)
-	 *
-	 * @param kEvent $event
-	 * @return void
-	 * @access protected
-	 */
-	protected function OnAfterConfigRead(kEvent $event)
-	{
-		parent::OnAfterConfigRead($event);
-
-		// make sure, that currency Translation is on current language
-		$language_id = $this->Application->GetVar('m_lang');
-		$calculated_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields');
-
-		foreach ($calculated_fields[''] as $field_name => $field_expression) {
-			$calculated_fields[''][$field_name] = str_replace('%4$s', $language_id, $field_expression);
-		}
-
-		$this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calculated_fields);
-	}
 }
\ No newline at end of file
Index: branches/5.3.x/units/currencies/currencies_config.php
===================================================================
--- branches/5.3.x/units/currencies/currencies_config.php	(revision 15582)
+++ branches/5.3.x/units/currencies/currencies_config.php	(revision 15583)
@@ -1,147 +1,147 @@
 <?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'			=>	'curr',
 					'ItemClass'			=>	Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
 					'ListClass'			=>	Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
 					'EventHandlerClass'	=>	Array ('class' => 'CurrenciesEventHandler', 'file' => 'currencies_event_handler.php', 'build_event' => 'OnBuild'),
 					'TagProcessorClass' =>	Array ('class' => 'CurrenciesTagProcessor', 'file' => 'currencies_tag_processor.php', 'build_event' => 'OnBuild'),
 					'AutoLoad'			=>	true,
 					'hooks'				=>	Array (),
 					'QueryString'		=>	Array (
 												1 => 'id',
 												2 => 'Page',
 												3 => 'PerPage',
 												4 => 'event',
 												5 => 'mode',
 											),
 
 					/*'Hooks'				=>	Array (
 							Array (
 								'Mode' => hBEFORE,
 								'Conditional' => true,
 								'HookToPrefix' => 'tax',
 								'HookToSpecial' => '',
 								'HookToEvent' => Array ( 'onEdit' ),
 								'DoPrefix' => '',
 								'DoSpecial' => '',
 								'DoEvent' => 'OnLoadZoneForm',
 							),
 						),*/
 					'IDField' 			=>	'CurrencyId',
 					'StatusField'		=>	Array ('Status', 'IsPrimary'),
 					'TitleField'		=>  'ISO',
 					'TitlePresets'		=>	Array (
 												'default'	=>	Array (	'new_status_labels'		=> Array ('curr' => '!la_title_AddingCurrency!'),
 																		'edit_status_labels'	=> Array ('curr' => '!la_title_EditingCurrency!'),
 																		'new_titlefield'		=> Array ('curr' => '!la_title_NewCurrency!'),
 																),
 												'currencies_list' =>Array (	'prefixes'				=> Array ('curr_List'),
 																			'format'				=>	"!la_title_Currencies!",
 																),
 												'currencies_edit' =>Array (	'prefixes'				=> Array ('curr'),
 																			'new_titlefield'		=> Array ('curr' => '!la_title_NewCurrency!'),
 																			'format'				=> "#curr_status# '#curr_titlefield#' - !la_title_General!",
 																),
 											),
 
 					'PermSection'		=>	Array ('main' => 'in-commerce:currencies'),
 
 					'Sections'			=>	Array (
 						'in-commerce:currencies'	=>	Array (
 							'parent'		=>	'in-commerce:setting_folder',
 							'icon'			=>	'conf_currencies',
 							'label'			=>	'la_tab_Currencies',
 							'url'			=>	Array ('t' => 'in-commerce/currencies/currencies_list', 'pass' => 'm'),
 							'permissions'	=>	Array ('view', 'add', 'edit', 'delete', 'advanced:move_up', 'advanced:move_down', 'advanced:update_rate', 'advanced:set_primary'),
 							'priority'		=>	3,
 							'type'			=>	stTREE,
 						),
 					),
 
 					'TableName'			=>	TABLE_PREFIX.'Currencies',
 					'AutoDelete'	=>	true,
 					'AutoClone'	=> true,
 
 					'SubItems' =>	Array (),
 
 					'ListSQLs' => Array (
 						'' => '	SELECT %1$s.* %2$s
 								FROM %1$s
 								LEFT JOIN '.TABLE_PREFIX.'LanguageLabels phr ON %1$s.Name = phr.Phrase'
 					),
 
 					'CalculatedFields' => Array (
 						''	=>	Array (
-							'Translation' => 'phr.l%4$s_Translation',
+							'Translation' => 'phr.l%2$s_Translation',
 						),
 					),
 
 					'ListSortings'	=> 	Array (
 												'' => Array (
 													'ForcedSorting' => Array ('IsPrimary' => 'desc', 'Priority' => 'desc', 'Status' => 'desc'),
 													'Sorting' => Array ('ISO' => 'asc'),
 												)
 											),
 					'Fields' => Array (
 			            'CurrencyId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 			            'ISO' => Array ('type' => 'string', 'not_null' => '1', 'default' => ''),
 			            'Symbol' => Array ('type' => 'string', 'default' => null),
 			            'SymbolPosition' => Array ('type' => 'int', 'default' => null, 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_Left', 1 => 'la_Right'), 'use_phrases' => '1'),
 			            'Name' => Array ('type' => 'string', 'not_null' => '1', 'default' => ''),
 			            'RateToPrimary' => Array ('type' => 'float', 'not_null' => 1, 'min_value_exc' => 0, 'formatter' => 'kFormatter', 'format' => '%0.4f', 'default' => 1),
 			            'Modified' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
 			            'Status' => Array (
 			            	'type' => 'int',
 							'formatter' => 'kOptionsFormatter',
 			            	'options' => Array ( 1 => 'la_Active', 0 => 'la_Disabled' ), 'use_phrases' => 1,
 							'not_null' => 1, 'default' => 1,
 						),
 			            'IsPrimary' => Array (
 			            	'type' => 'int',
 							'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),
 			        ),
 
 					'VirtualFields' => Array (
 						'Translation' => 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 (
 								'CurrencyId' => Array ( 'title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
 								'ISO' => Array ( 'title' => 'column:la_fld_ISOCode', 'data_block' => 'currency_caption_td', 'filter_block' => 'grid_like_filter', 'width' => 90, ),
 								'Translation' => Array ( 'title' => 'column:la_fld_CurrencyName', 'use_phrases' => 1, 'filter_block' => 'grid_like_filter', 'width' => 250, ),
 								'RateToPrimary' => Array ( 'title' => 'column:la_fld_RateToPrimary', 'filter_block' => 'grid_range_filter', 'width' => 130, ),
 								'Modified' => Array ( 'title' => 'la_col_LastUpdated', 'filter_block' => 'grid_date_range_filter', 'width' => 150, ),
 								'Status' => Array ( 'filter_block' => 'grid_options_filter', 'width' => 100, ),
 																		),
 
 																),
 													),
 	);
\ No newline at end of file