PageRenderTime 26ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/osCommerce/OM/Core/Site/Setup/Language.php

https://github.com/azouts/oscommerce
PHP | 132 lines | 95 code | 29 blank | 8 comment | 23 complexity | 8ba7bbee110afb32a66d8d1a57391367 MD5 | raw file
  1. <?php
  2. /*
  3. osCommerce Online Merchant $osCommerce-SIG$
  4. Copyright (c) 2010 osCommerce (http://www.oscommerce.com)
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License v2 (1991)
  7. as published by the Free Software Foundation.
  8. */
  9. namespace osCommerce\OM\Core\Site\Setup;
  10. use osCommerce\OM\Core\DirectoryListing;
  11. use osCommerce\OM\Core\OSCOM;
  12. use osCommerce\OM\Core\XML;
  13. class Language extends \osCommerce\OM\Core\Site\Admin\Language {
  14. public function __construct() {
  15. $DLlang = new DirectoryListing(OSCOM::BASE_DIRECTORY . 'Core/Site/Shop/Languages');
  16. $DLlang->setIncludeDirectories(false);
  17. $DLlang->setCheckExtension('xml');
  18. foreach ( $DLlang->getFiles() as $file ) {
  19. $lang = XML::toArray(simplexml_load_file(OSCOM::BASE_DIRECTORY . 'Core/Site/Shop/Languages/' . $file['name']));
  20. if ( !isset($lang['language']) ) { // create root element (simpleXML does not use root element)
  21. $lang = array('language' => $lang);
  22. }
  23. $this->_languages[$lang['language']['data']['code']] = array('id' => 1, //HPDL to remove
  24. 'code' => $lang['language']['data']['code'],
  25. 'name' => $lang['language']['data']['title'],
  26. 'locale' => $lang['language']['data']['locale'],
  27. 'charset' => $lang['language']['data']['character_set'],
  28. 'date_format_short' => $lang['language']['data']['date_format_short'],
  29. 'date_format_long' => $lang['language']['data']['date_format_long'],
  30. 'time_format' => $lang['language']['data']['time_format'],
  31. 'text_direction' => $lang['language']['data']['text_direction'],
  32. 'parent_id' => 0);
  33. }
  34. unset($lang);
  35. $language = (isset($_GET['language']) && !empty($_GET['language']) ? $_GET['language'] : '');
  36. $this->set($language);
  37. header('Content-Type: text/html; charset=' . $this->getCharacterSet());
  38. setlocale(LC_TIME, explode(',', $this->getLocale()));
  39. $this->loadIniFile();
  40. $this->loadIniFile(OSCOM::getSiteApplication() . '.php');
  41. }
  42. function set($code = null) {
  43. $this->_code = $code;
  44. if ( empty($this->_code) ) {
  45. if ( isset($_COOKIE[OSCOM::getSite()]['language']) ) {
  46. $this->_code = $_COOKIE[OSCOM::getSite()]['language'];
  47. } else {
  48. $this->_code = $this->getBrowserSetting();
  49. }
  50. }
  51. if ( empty($this->_code) || !$this->exists($this->_code) ) {
  52. $this->_code = 'en_US';
  53. }
  54. if ( !isset($_COOKIE[OSCOM::getSite()]['language']) || ($_COOKIE[OSCOM::getSite()]['language'] != $this->_code) ) {
  55. osc_setcookie(OSCOM::getSite() . '[language]', $this->_code, time()+60*60*24*90);
  56. }
  57. }
  58. public function loadIniFile($filename = null, $comment = '#', $language_code = null) {
  59. if ( is_null($language_code) ) {
  60. $language_code = $this->_code;
  61. }
  62. if ( $this->_languages[$language_code]['parent_id'] > 0 ) {
  63. $this->loadIniFile($filename, $comment, $this->getCodeFromID($this->_languages[$language_code]['parent_id']));
  64. }
  65. if ( is_null($filename) ) {
  66. if ( file_exists(OSCOM::BASE_DIRECTORY . 'Core/Site/' . OSCOM::getSite() . '/Languages/' . $language_code . '.php') ) {
  67. $contents = file(OSCOM::BASE_DIRECTORY . 'Core/Site/' . OSCOM::getSite() . '/Languages/' . $language_code . '.php');
  68. } else {
  69. return array();
  70. }
  71. } else {
  72. if ( substr(realpath(OSCOM::BASE_DIRECTORY . 'Core/Site/' . OSCOM::getSite() . '/Languages/' . $language_code . '/' . $filename), 0, strlen(realpath(OSCOM::BASE_DIRECTORY . 'Core/Site/' . OSCOM::getSite() . '/Languages/' . $language_code))) != realpath(OSCOM::BASE_DIRECTORY . 'Core/Site/' . OSCOM::getSite() . '/Languages/' . $language_code) ) {
  73. return array();
  74. }
  75. if ( !file_exists(OSCOM::BASE_DIRECTORY . 'Core/Site/' . OSCOM::getSite() . '/Languages/' . $language_code . '/' . $filename) ) {
  76. return array();
  77. }
  78. $contents = file(OSCOM::BASE_DIRECTORY . 'Core/Site/' . OSCOM::getSite() . '/Languages/' . $language_code . '/' . $filename);
  79. }
  80. $ini_array = array();
  81. foreach ( $contents as $line ) {
  82. $line = trim($line);
  83. $firstchar = substr($line, 0, 1);
  84. if ( !empty($line) && ( $firstchar != $comment) ) {
  85. $delimiter = strpos($line, '=');
  86. if ( $delimiter !== false ) {
  87. $key = trim(substr($line, 0, $delimiter));
  88. $value = trim(substr($line, $delimiter + 1));
  89. $ini_array[$key] = $value;
  90. } elseif ( isset($key) ) {
  91. $ini_array[$key] .= trim($line);
  92. }
  93. }
  94. }
  95. unset($contents);
  96. $this->_definitions = array_merge($this->_definitions, $ini_array);
  97. }
  98. function getCode($id = null) {
  99. return $this->_code;
  100. }
  101. }
  102. ?>