/**
  * @return string
  */
 public static function getBaseCurrency()
 {
     if (self::$baseCurrency === '') {
         $skipCache = defined('CURRENCY_SKIP_CACHE') && CURRENCY_SKIP_CACHE;
         $tableName = CurrencyTable::getTableName();
         $currencyFound = false;
         $currencyFromCache = false;
         if (!$skipCache) {
             $cacheTime = (int) (defined('CURRENCY_CACHE_TIME') ? CURRENCY_CACHE_TIME : CURRENCY_CACHE_DEFAULT_TIME);
             $managedCache = Application::getInstance()->getManagedCache();
             $currencyFromCache = $managedCache->read($cacheTime, self::CACHE_BASE_CURRENCY_ID, $tableName);
             if ($currencyFromCache) {
                 $currencyFound = true;
                 self::$baseCurrency = (string) $managedCache->get(self::CACHE_BASE_CURRENCY_ID, $tableName);
             }
         }
         if ($skipCache || !$currencyFound) {
             $currencyIterator = CurrencyTable::getList(array('select' => array('CURRENCY'), 'filter' => array('BASE' => 'Y', 'AMOUNT' => 1)));
             if ($currency = $currencyIterator->fetch()) {
                 $currencyFound = true;
                 self::$baseCurrency = $currency['CURRENCY'];
             }
             unset($currency, $currencyIterator);
         }
         if (!$skipCache && $currencyFound && !$currencyFromCache) {
             $managedCache->set(self::CACHE_BASE_CURRENCY_ID, self::$baseCurrency, $tableName);
         }
     }
     return self::$baseCurrency;
 }
예제 #2
0
 /**
  * Update base currency.
  *
  * @param string $currency			Currency id.
  * @return bool
  */
 public static function updateBaseCurrency($currency)
 {
     /** @global \CUser $USER */
     global $USER;
     $currency = CurrencyManager::checkCurrencyID($currency);
     if ($currency === false) {
         return false;
     }
     $event = new Main\Event('currency', self::EVENT_ON_UPDATE_BASE_CURRENCY, array('NEW_BASE_CURRENCY' => $currency));
     $event->send();
     unset($event);
     $conn = Main\Application::getConnection();
     $helper = $conn->getSqlHelper();
     $userID = isset($USER) && $USER instanceof \CUser ? (int) $USER->getID() : 0;
     $tableName = $helper->quote(CurrencyTable::getTableName());
     $baseField = $helper->quote('BASE');
     $dateUpdateField = $helper->quote('DATE_UPDATE');
     $modifiedByField = $helper->quote('MODIFIED_BY');
     $amountField = $helper->quote('AMOUNT');
     $amountCntField = $helper->quote('AMOUNT_CNT');
     $currencyField = $helper->quote('CURRENCY');
     $query = 'update ' . $tableName . ' set ' . $baseField . ' = \'N\', ' . $dateUpdateField . ' = ' . $helper->getCurrentDateTimeFunction() . ', ' . $modifiedByField . ' = ' . ($userID == 0 ? 'NULL' : $userID) . ' where ' . $currencyField . ' <> \'' . $helper->forSql($currency) . '\' and ' . $baseField . ' = \'Y\'';
     $conn->queryExecute($query);
     $query = 'update ' . $tableName . ' set ' . $baseField . ' = \'Y\', ' . $dateUpdateField . ' = ' . $helper->getCurrentDateTimeFunction() . ', ' . $modifiedByField . ' = ' . ($userID == 0 ? 'NULL' : $userID) . ', ' . $amountField . ' = 1, ' . $amountCntField . ' = 1 where ' . $currencyField . ' = \'' . $helper->forSql($currency) . '\'';
     $conn->queryExecute($query);
     static::updateBaseRates();
     $event = new Main\Event('currency', self::EVENT_ON_AFTER_UPDATE_BASE_CURRENCY, array('NEW_BASE_CURRENCY' => $currency));
     $event->send();
     unset($event);
     self::$baseCurrency = '';
     return true;
 }