Page MenuHomeIn-Portal Phabricator

in-commerce
No OneTemporary

File Metadata

Created
Wed, Jul 16, 7:29 AM

in-commerce

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

Event Timeline