Passed
Push — master ( 719760...59ab2e )
by Angel Fernando Quiroz
18:35
created

add_sub_language()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 12
nc 2
nop 5
dl 0
loc 17
rs 9.8666
c 0
b 0
f 0
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
/**
5
 * This script allows for the addition of sub-languages.
6
 */
7
$cidReset = true;
8
require_once __DIR__.'/../inc/global.inc.php';
9
10
$this_section = SECTION_PLATFORM_ADMIN;
11
api_protect_admin_script();
12
13
/**
14
 *        MAIN CODE.
15
 */
16
// setting the name of the tool
17
$tool_name = get_lang('Create sub-language');
18
19
// setting breadcrumbs
20
$interbreadcrumb[] = ['url' => 'index.php', 'name' => get_lang('Administration')];
21
$interbreadcrumb[] = ['url' => 'languages.php', 'name' => get_lang('Chamilo Portal Languages')];
22
23
//add data
24
if (isset($_GET['sub_language_id']) && $_GET['sub_language_id'] == strval(intval($_GET['sub_language_id']))) {
25
    $language_name = SubLanguageManager::get_name_of_language_by_id($_GET['sub_language_id']);
26
    if (true === SubLanguageManager::languageExistsById($_GET['sub_language_id'])) {
27
        $sub_language_id = $_GET['sub_language_id'];
28
        $sub_language_id_exist = true;
29
    } else {
30
        $sub_language_id_exist = false;
31
    }
32
}
33
$language_details = [];
34
$language_name = '';
35
if (isset($_GET['id']) && $_GET['id'] == strval(intval($_GET['id']))) {
36
    $language_details = SubLanguageManager::get_all_information_of_language($_GET['id']);
37
    $language_name = $language_details['original_name'];
38
    if (true === SubLanguageManager::languageExistsById($_GET['id'])) {
39
        $parent_id = (int) $_GET['id'];
40
        $language_id_exist = true;
41
    } else {
42
        $language_id_exist = false;
43
    }
44
} else {
45
    $language_id_exist = false;
46
}
47
48
//removed and register
49
50
if ((isset($_GET['id']) && $_GET['id'] == strval(intval($_GET['id']))) &&
51
    (isset($_GET['sub_language_id']) && $_GET['sub_language_id'] == strval(intval($_GET['sub_language_id'])))
52
) {
53
    if (true === SubLanguageManager::languageExistsById($_GET['id']) && true === SubLanguageManager::languageExistsById($_GET['sub_language_id'])) {
54
        $get_all_information = SubLanguageManager::getAllInformationOfSubLanguage((int) $_GET['id'], (int) $_GET['sub_language_id']);
55
        $original_name = $get_all_information['original_name'];
56
        $english_name = $get_all_information['english_name'];
57
        $isocode = $get_all_information['isocode'];
58
    }
59
}
60
61
$language_name = get_lang('Create sub-languageForLanguage').' ( '.strtolower($language_name).' )';
62
63
if (true ===  SubLanguageManager::isParentOfSubLanguage($parent_id) &&
64
    isset($_GET['action']) && 'deletesublanguage' == $_GET['action']
65
) {
66
    $language_name = get_lang('Delete sub-language');
67
}
68
69
$msg = '';
70
71
if (isset($_POST['SubmitAddNewLanguage'])) {
72
    $original_name = $_POST['original_name'];
73
    $english_name = $_POST['english_name'];
74
    $isocode = $_POST['isocode'];
75
    $english_name = str_replace(' ', '_', $english_name);
76
    $isocode = str_replace(' ', '_', $isocode);
77
78
    $sublanguage_available = isset($_POST['sub_language_is_visible']) ? (int) $_POST['sub_language_is_visible'] : 0;
79
    $check_information = [];
80
    $check_information = SubLanguageManager::checkIfLanguageExists($original_name, $english_name, $isocode);
81
    foreach ($check_information as $index_information => $value_information) {
82
        $allow_insert_info = false;
83
        if ('original_name' == $index_information) {
84
            $msg .= Display::return_message(
85
                get_lang('Already exists').' "'.get_lang('Original name').'" '.'('.$original_name.')',
86
                'error'
87
            );
88
        }
89
        if ('english_name' == $index_information) {
90
            $msg .= Display::return_message(
91
                get_lang('Already exists').' "'.get_lang('English name').'" '.'('.$english_name.')',
92
                'error'
93
            );
94
        }
95
        if ('isocode' == $index_information) {
96
            $msg .= Display::return_message(get_lang('This code does not exist').': '.$isocode.'', 'error');
97
        }
98
        if ('execute_add' == $index_information && true === $value_information) {
99
            $allow_insert_info = true;
100
        }
101
    }
102
103
    if (strlen($original_name) > 0 && strlen($english_name) > 0 && strlen($isocode) > 0) {
104
        if (true === $allow_insert_info && true === $language_id_exist) {
105
            $english_name = str_replace(' ', '_', $english_name);
106
            //Fixes BT#1636
107
            $english_name = api_strtolower($english_name);
108
109
            $isocode = str_replace(' ', '_', $isocode);
110
            $str_info = '<br/>'.get_lang('Original name').' : '.$original_name.'<br/>'.get_lang('English name').' : '.$english_name.'<br/>'.get_lang('Character set').' : '.$isocode;
111
112
            $mkdir_result = SubLanguageManager::addPoFileForSubLanguage($english_name);
113
            if ($mkdir_result) {
114
                $sl_id = SubLanguageManager::addSubLanguage($original_name, $english_name, $sublanguage_available, $parent_id);
115
                if (false === $sl_id) {
116
                    SubLanguageManager::removePoFileForSubLanguage($english_name);
117
                    $msg .= Display::return_message(get_lang('The /main/lang directory, used on this portal to store the languages, is not writable. Please contact your platform administrator and report this message.'), 'error');
118
                } else {
119
                    Display::addFlash(
120
                        Display::return_message(get_lang('The new sub-language has been added').$str_info, null, false)
121
                    );
122
                    api_location(api_get_path(WEB_CODE_PATH).'admin/languages.php?sub_language_id='.$sl_id);
123
                }
124
            } else {
125
                $msg .= Display::return_message(get_lang('The /main/lang directory, used on this portal to store the languages, is not writable. Please contact your platform administrator and report this message.'), 'error');
126
            }
127
        } else {
128
            if (false === $language_id_exist) {
129
                $msg .= Display::return_message(get_lang('The parent language does not exist.'), 'error');
130
            }
131
        }
132
    } else {
133
        $msg .= Display::return_message(get_lang('The form contains incorrect or incomplete data. Please check your input.'), 'error');
134
    }
135
}
136
137
if (isset($_POST['SubmitAddDeleteLanguage'])) {
138
    $removed = SubLanguageManager::removeSubLanguage($_GET['id'], $_GET['sub_language_id']);
139
    if ($removed) {
140
        Display::addFlash(
141
            Display::return_message(
142
                get_lang(
143
                    'The sub language has been removed.'
144
                )
145
            )
146
        );
147
        api_location(api_get_path(WEB_CODE_PATH).'admin/languages.php');
148
    }
149
}
150
151
Display:: display_header($language_name);
152
153
echo $msg;
154
155
if (isset($_GET['action']) && 'definenewsublanguage' == $_GET['action']) {
156
    $text = $language_name;
157
    $form = new FormValidator(
158
        'addsublanguage',
159
        'post',
160
        'sub_language_add.php?id='.Security::remove_XSS($_GET['id']).'&action=definenewsublanguage'
161
    );
162
    $class = 'add';
163
    $form->addElement('header', '', $text);
164
    $form->addElement('text', 'original_name', get_lang('Original name'), 'class="input_titles"');
165
    $form->addRule('original_name', get_lang('Required field'), 'required');
166
    $form->addElement('text', 'english_name', get_lang('English name'), 'class="input_titles"');
167
    $form->addRule('english_name', get_lang('Required field'), 'required');
168
    $form->addElement('text', 'isocode', get_lang('ISO code'), 'class="input_titles"');
169
    $form->addRule('isocode', get_lang('Required field'), 'required');
170
    $form->addElement('static', null, '&nbsp;', '<i>en, es, fr</i>');
171
    $form->addElement('checkbox', 'sub_language_is_visible', '', get_lang('Visibility'));
172
    $form->addButtonCreate(get_lang('Create sub-language'), 'SubmitAddNewLanguage');
173
    //$values['original_name'] = $language_details['original_name'].'...'; -> cannot be used because of quickform filtering (freeze)
174
    $values['english_name'] = $language_details['english_name'].'2';
175
    $values['isocode'] = $language_details['isocode'];
176
    $form->setDefaults($values);
177
    $form->display();
178
} else {
179
    if (isset($_GET['action']) && 'deletesublanguage' == $_GET['action']) {
180
        $text = $language_name;
181
        $form = new FormValidator(
182
            'deletesublanguage',
183
            'post',
184
            'sub_language_add.php?id='.Security::remove_XSS($_GET['id']).'&sub_language_id='.Security::remove_XSS($_GET['sub_language_id'])
185
        );
186
        $class = 'minus';
187
        $form->addElement('header', '', $text);
188
        $form->addElement('static', '', get_lang('Original name'), $original_name);
189
        $form->addElement('static', '', get_lang('English name'), $english_name);
190
        $form->addElement('static', '', get_lang('Character set'), $isocode);
191
        $form->addButtonCreate(get_lang('Delete sub-language'), 'SubmitAddDeleteLanguage');
192
        $form->display();
193
    }
194
    if (isset($_GET['action']) && 'definenewsublanguage' == $_GET['action']) {
195
        echo Display::return_message(get_lang('The sub-language of this language has been added'));
196
    }
197
}
198
/**
199
 * Footer.
200
 */
201
Display:: display_footer();
202