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