Alex Trofimov 12 лет назад
Родитель
Сommit
e21aaa5a35
1 измененных файлов с 169 добавлено и 0 удалено
  1. 169 0
      scripts/merge_langs.php

+ 169 - 0
scripts/merge_langs.php

@@ -0,0 +1,169 @@
+<?php
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ */
+
+require_once( './../inc/header.inc.php' );
+require_once( BX_DIRECTORY_PATH_INC . 'design.inc.php' );
+
+// --------------- page variables and login
+
+$_page['name_index'] = 1;
+
+check_logged();
+
+$_page['header'] = "Merge Langs";
+$_page['header_text'] = $_page['header'];
+
+// --------------- page components
+
+$_ni = $_page['name_index'];
+$_page_cont[$_ni]['page_main_code'] = PageCompPageMainCode();
+
+// --------------- [END] page components
+
+PageCode();
+
+// --------------- page components functions
+
+/**
+ * page code function
+ */
+function PageCompPageMainCode()
+{
+    $aForm = array(
+        'form_attrs' => array(
+            'id' => 'test_email_templates',
+            'action' => BX_DOL_URL_ROOT . '_ml.php',
+            'method' => 'post',
+        ),
+        'params' => array (
+            'db' => array(
+                'submit_name' => 'do_submit',
+            ),
+        ),
+        'inputs' => array(
+            'l_new' => array(
+                'type' => 'textarea',
+                'name' => 'l_new',
+                'caption' => 'New Language',
+            ),
+            'l_old' => array(
+                'type' => 'textarea',
+                'name' => 'l_old',
+                'caption' => 'Old Language',
+            ),
+
+            'module_lang_file' => array(
+                'type' => 'checkbox',
+                'name' => 'module_lang_file',
+                'caption' => 'Module language file',
+                'value' => 1,
+                'checked' => true,
+            ),
+            'submit' => array(
+                'type' => 'submit',
+                'name' => 'do_submit',
+                'value' => _t('_Submit'),
+            ),
+        ),
+    );
+
+    $oForm = new BxTemplFormView($aForm);
+    $oForm->initChecker();
+
+    if ($oForm->isSubmittedAndValid()) {
+
+        $isModuleLangFile = $_POST['module_lang_file'] ? true : false;
+        $aLang71 = getLangArray(process_pass_data($_POST['l_new']), $isModuleLangFile);
+        $aLang70 = getLangArray(process_pass_data($_POST['l_old']), $isModuleLangFile);
+
+        if (is_array($aLang71) && is_array($aLang70)) {
+
+            $s .= prepareTextarea ('Added Keys', findAddedKeys($aLang71, $aLang70));
+            $s .= prepareTextarea ('Changed Keys', findChangedKeys($aLang71, $aLang70));
+
+            $aDeletedKeys = findDeletedKeys($aLang71, $aLang70);
+            $s .= prepareTextarea ('Deleted Keys', $aDeletedKeys);
+            $s .= prepareTextareaWithDeltedKeys ($aDeletedKeys);
+
+        } else {
+            $s = MsgBox("Invalid arrays") . $oForm->getCode();
+        }
+
+    } else {
+
+        $s = $oForm->getCode();
+
+    }
+
+    return DesignBoxContent($GLOBALS['_page']['header'], $s, 11);
+}
+
+function getLangArray ($s, $isModuleLangFile)
+{
+    eval($s);
+    return $isModuleLangFile ? $aLangContent : $LANG;
+}
+
+function findDeletedKeys ($aLang71, $aLang70)
+{
+    $a = array ();
+    foreach ($aLang70 as $k => $v)
+        if (!isset($aLang71[$k]))
+            $a[$k] = $v;
+    return $a;
+}
+
+function findAddedKeys ($aLang71, $aLang70)
+{
+    $a = array ();
+    foreach ($aLang71 as $k => $v)
+        if (!isset($aLang70[$k]))
+            $a[$k] = $v;
+    return $a;
+}
+
+function findChangedKeys ($aLang71, $aLang70)
+{
+    $a = array ();
+    foreach ($aLang71 as $k => $v)
+        if (isset($aLang70[$k]) && $aLang70[$k] != $aLang71[$k])
+            $a[$k] = $v;
+    return $a;
+}
+
+function prepareTextarea ($sTitle, $a)
+{
+    ksort($a);
+    return '<h2>' . $sTitle . '</h2>
+        <textarea style="width:800px; height:400px;">' . var_export($a, 1) . '</textarea>
+        <hr class="bx-def-hr bx-def-margin-top bx-def-margin-bottom" />';
+}
+
+function prepareTextareaWithDeltedKeys ($a)
+{
+    $iGroupBy = 75;
+    ksort($a);
+    $aKeys = array_keys($a);
+    for ($i = 0; $i < count($aKeys) ; $i+=$iGroupBy)  {
+        $sKeys = '';
+        $aKeysSlice = array ();
+        $aKeysSlice = array_slice($aKeys, $i, $iGroupBy, true);
+        foreach ($aKeysSlice as $k)
+            $sKeys .= "'" . str_replace("'", "\\'", $k) . "',";
+        $sKeys = trim($sKeys, ',');
+        $s .= "
+
+DELETE `sys_localization_strings` FROM `sys_localization_strings`, `sys_localization_keys` WHERE `sys_localization_keys`.`ID` = `sys_localization_strings`.`IDKey` AND `sys_localization_keys`.`Key` IN($sKeys);
+DELETE FROM `sys_localization_keys` WHERE `Key` IN($sKeys);";
+    }
+
+    return "<h2>Deleted Keys SQL</h2>
+        <textarea style=\"width:800px; height:300px;\">
+-- delete unused language keys
+$s
+        </textarea>
+        <hr class=\"bx-def-hr bx-def-margin-top bx-def-margin-bottom\" />";
+}