First commit
This commit is contained in:
commit
c6e2478c40
13918 changed files with 2303184 additions and 0 deletions
108
sites/all/modules/civicrm/Civi/API/Subscriber/I18nSubscriber.php
Normal file
108
sites/all/modules/civicrm/Civi/API/Subscriber/I18nSubscriber.php
Normal file
|
@ -0,0 +1,108 @@
|
|||
<?php
|
||||
/*
|
||||
+--------------------------------------------------------------------+
|
||||
| CiviCRM version 4.7 |
|
||||
+--------------------------------------------------------------------+
|
||||
| Copyright CiviCRM LLC (c) 2004-2017 |
|
||||
+--------------------------------------------------------------------+
|
||||
| This file is a part of CiviCRM. |
|
||||
| |
|
||||
| CiviCRM is free software; you can copy, modify, and distribute it |
|
||||
| under the terms of the GNU Affero General Public License |
|
||||
| Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
|
||||
| |
|
||||
| CiviCRM is distributed in the hope that it will be useful, but |
|
||||
| WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
|
||||
| See the GNU Affero General Public License for more details. |
|
||||
| |
|
||||
| You should have received a copy of the GNU Affero General Public |
|
||||
| License and the CiviCRM Licensing Exception along |
|
||||
| with this program; if not, contact CiviCRM LLC |
|
||||
| at info[AT]civicrm[DOT]org. If you have questions about the |
|
||||
| GNU Affero General Public License or the licensing of CiviCRM, |
|
||||
| see the CiviCRM license FAQ at http://civicrm.org/licensing |
|
||||
+--------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
namespace Civi\API\Subscriber;
|
||||
|
||||
use Civi\API\Events;
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
|
||||
/**
|
||||
* Class I18nSubscriber
|
||||
* @package Civi\API\Subscriber
|
||||
*/
|
||||
class I18nSubscriber implements EventSubscriberInterface {
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function getSubscribedEvents() {
|
||||
return array(
|
||||
Events::PREPARE => array('onApiPrepare', Events::W_MIDDLE),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Civi\API\Event\Event $event
|
||||
* API preparation event.
|
||||
*
|
||||
* @throws \API_Exception
|
||||
*/
|
||||
public function onApiPrepare(\Civi\API\Event\Event $event) {
|
||||
$apiRequest = $event->getApiRequest();
|
||||
|
||||
// support multi-lingual requests
|
||||
if ($language = \CRM_Utils_Array::value('option.language', $apiRequest['params'])) {
|
||||
$this->setLocale($language);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the tsLocale and dbLocale for multi-lingual sites.
|
||||
* Some code duplication from CRM/Core/BAO/ConfigSetting.php retrieve()
|
||||
* to avoid regressions from refactoring.
|
||||
* @param $lcMessagesRequest
|
||||
* @throws \API_Exception
|
||||
*/
|
||||
public function setLocale($lcMessagesRequest) {
|
||||
// We must validate whether the locale is valid, otherwise setting a bad
|
||||
// dbLocale could probably lead to sql-injection.
|
||||
$domain = new \CRM_Core_DAO_Domain();
|
||||
$domain->id = \CRM_Core_Config::domainID();
|
||||
$domain->find(TRUE);
|
||||
|
||||
// are we in a multi-language setup?
|
||||
$multiLang = $domain->locales ? TRUE : FALSE;
|
||||
$lcMessages = NULL;
|
||||
|
||||
// on multi-lang sites based on request and civicrm_uf_match
|
||||
if ($multiLang) {
|
||||
$config = \CRM_Core_Config::singleton();
|
||||
$languageLimit = array();
|
||||
if (isset($config->languageLimit) and $config->languageLimit) {
|
||||
$languageLimit = $config->languageLimit;
|
||||
}
|
||||
|
||||
if (in_array($lcMessagesRequest, array_keys($languageLimit))) {
|
||||
$lcMessages = $lcMessagesRequest;
|
||||
}
|
||||
else {
|
||||
throw new \API_Exception(ts('Language not enabled: %1', array(1 => $lcMessagesRequest)));
|
||||
}
|
||||
}
|
||||
|
||||
global $dbLocale;
|
||||
|
||||
// set suffix for table names - use views if more than one language
|
||||
if ($lcMessages) {
|
||||
$dbLocale = $multiLang && $lcMessages ? "_{$lcMessages}" : '';
|
||||
|
||||
// FIXME: an ugly hack to fix CRM-4041
|
||||
global $tsLocale;
|
||||
$tsLocale = $lcMessages;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue