BxDevPolyglotManage.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup Developer Developer
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. define('BX_DEV_PGT_CATEGORY_SYSTEM', 1);
  12. define('BX_DEV_PGT_CATEGORY_CUSTOM', 2);
  13. class BxDevPolyglotManage extends BxTemplStudioGrid
  14. {
  15. private $sAllUri = 'all';
  16. private $aActions = array(
  17. 'restore' => 'eraser',
  18. 'recompile' => 'sync'
  19. );
  20. protected $oModule;
  21. protected $aLanguages;
  22. function __construct($aOptions, $oTemplate = false)
  23. {
  24. parent::__construct($aOptions, $oTemplate);
  25. $this->oModule = BxDolModule::getInstance('bx_developer');
  26. $this->aLanguages = BxDolLanguages::getInstance()->getLanguages();
  27. $iWidth = floor(100 / (count($this->aLanguages) + 1));
  28. $this->_aOptions['fields']['title']['width'] = $iWidth;
  29. foreach($this->aLanguages as $sName => $sTitle)
  30. $this->_aOptions['fields'][$sName] = array(
  31. 'title' => $sTitle,
  32. 'width' => $iWidth,
  33. 'translatable' => '0',
  34. 'chars_limit' => '0'
  35. );
  36. }
  37. public function performActionAddKeys()
  38. {
  39. $sAction = 'add_keys';
  40. $sFormObject = $this->oModule->_oConfig->getObject('form_pgt_keys');
  41. $sFormDisplay = $this->oModule->_oConfig->getObject('form_display_pgt_keys_add');
  42. $oForm = BxDolForm::getObjectInstance($sFormObject, $sFormDisplay, $this->oModule->_oTemplate);
  43. $oForm->aFormAttrs['action'] = BX_DOL_URL_ROOT . 'grid.php?o=' . $this->_sObject . '&a=' . $sAction;
  44. $this->fillInSelects($oForm->aInputs);
  45. $oForm->initChecker();
  46. if($oForm->isSubmittedAndValid()) {
  47. $oXmlParser = BxDolXmlParser::getInstance();
  48. $oLanguages = BxDolStudioLanguagesUtils::getInstance();
  49. $aLanguages = $oForm->getCleanValue('language');
  50. $aLanguages = !empty($aLanguages) ? array($aLanguages) : array_keys($oLanguages->getLanguages(true));
  51. $iCategory = $oForm->getCleanValue('category');
  52. $sContent = '<strings>' . $oForm->getCleanValue('content') . '</strings>';
  53. $aKeys = $oXmlParser->getValues($sContent, 'string');
  54. $iReplace = $oForm->getCleanValue('replace');
  55. $iKeys = 0;
  56. foreach($aLanguages as $iLanguage) {
  57. foreach($aKeys as $sKey => $sValue) {
  58. $bAdded = $oLanguages->addLanguageString($sKey, $sValue, $iLanguage, $iCategory, false) !== false;
  59. if(!$bAdded && !$iReplace)
  60. continue;
  61. if(!$bAdded) {
  62. $oLanguages->deleteLanguageString($sKey, $iLanguage, false);
  63. if($oLanguages->addLanguageString($sKey, $sValue, $iLanguage, $iCategory, false) === false)
  64. continue;
  65. }
  66. $iKeys += 1;
  67. }
  68. $oLanguages->compileLanguage($iLanguage, true);
  69. }
  70. return echoJson(array('msg' => _t('_bx_dev_pgt_msg_keys_added', $iKeys)));
  71. }
  72. $sContent = BxTemplStudioFunctions::getInstance()->popupBox('bx-dev-pgt-keys-add-popup', _t('_bx_dev_pgt_txt_keys_add_popup'), $this->oModule->_oTemplate->parseHtmlByName('pgt_add_keys.html', array(
  73. 'form_id' => $oForm->aFormAttrs['id'],
  74. 'form' => $oForm->getCode(true),
  75. 'object' => $this->_sObject,
  76. 'action' => $sAction
  77. )));
  78. return echoJson(array('popup' => array('html' => $sContent, 'options' => array('closeOnOuterClick' => false))));
  79. }
  80. public function performActionRecompile()
  81. {
  82. $aResult = array('msg' => _t(BxDolStudioLanguagesUtils::getInstance()->compileLanguage() ? '_adm_pgt_scs_recompiled' : '_adm_pgt_err_cannot_recompile_lang'));
  83. echoJson($aResult);
  84. }
  85. public function performActionRestore()
  86. {
  87. $aResult = array('msg' => _t(BxDolStudioLanguagesUtils::getInstance()->restoreLanguage() ? '_adm_pgt_scs_restored' : '_adm_pgt_err_cannot_restore_lang'));
  88. echoJson($aResult);
  89. }
  90. protected function _getCellDefault($mixedValue, $sKey, $aField, $aRow)
  91. {
  92. $sJsObject = $this->oModule->_oConfig->getJsObject('polyglot');
  93. $aLangNames = array_keys($this->aLanguages);
  94. if(in_array($sKey, $aLangNames)) {
  95. $bAll = false;
  96. $aActions = array('restore');
  97. $sOnclickMask = "javascript:%s.%s('%s', '%s')";
  98. if($aRow['uri'] == $this->sAllUri) {
  99. $bAll = true;
  100. $aActions[] = 'recompile';
  101. $sOnclickMask = "javascript:%s.%s('%s')";
  102. }
  103. $mixedValue = '';
  104. foreach($aActions as $sAction) {
  105. $sIcon = $this->aActions[$sAction];
  106. $sTitle = _t('_bx_dev_pgt_txt_manage_' . $sAction . '_title' . ($bAll ? '_plur' : '_sing'));
  107. $mixedValue .= $this->_oTemplate->parseButton($this->_oTemplate->parseIcon($sIcon), array(
  108. 'class' => 'bx-btn bx-def-margin-sec-left-auto',
  109. 'title' => sprintf($sTitle, $aField['title'], $aRow['title']),
  110. 'onclick' => sprintf($sOnclickMask, $sJsObject, $sAction, $sKey, $aRow['uri'])
  111. ));
  112. }
  113. }
  114. return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
  115. }
  116. protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
  117. {
  118. $this->_aOptions['source'] .= " AND `name`<>'system'";
  119. $aData = array(
  120. array('id' => 0, 'title' => _t('_bx_dev_pgt_txt_manage_modules_all'), 'uri' => $this->sAllUri)
  121. );
  122. return array_merge($aData, parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage));
  123. }
  124. private function fillInSelects(&$aInputs)
  125. {
  126. $oLanguages = BxDolLanguagesQuery::getInstance();
  127. $aInputs['language']['values'] = array_merge(array(0 => _t('_sys_please_select')), $oLanguages->getLanguages(true));
  128. $aInputs['language']['value'] = '';
  129. $aInputs['category']['values'] = $oLanguages->getCategories();
  130. $aInputs['category']['value'] = BX_DEV_PGT_CATEGORY_CUSTOM;
  131. }
  132. }
  133. /** @} */