コード例 #1
0
ファイル: languages.php プロジェクト: askzap/ultimate
             }
         }
     } else {
         fn_tools_update_status($_REQUEST);
         fn_save_languages_integrity();
     }
 }
 if ($mode == 'clone_language') {
     $lang_id = $_REQUEST['lang_id'];
     $lang_data = Languages::get(array('lang_id' => $lang_id), 'lang_id');
     if (!empty($lang_data) && !empty($_REQUEST['lang_code'])) {
         $language = $lang_data[$lang_id];
         $new_language = array('lang_code' => $_REQUEST['lang_code'], 'name' => $language['name'] . '_clone', 'country_code' => $language['country_code'], 'from_lang_code' => $language['lang_code'], 'status' => 'D');
         $lc = Languages::update($new_language, 0);
         if ($lc !== false) {
             fn_save_languages_integrity();
         }
     }
 }
 if ($mode == 'export_language') {
     $lang_id = $_REQUEST['lang_id'];
     $lang_data = Languages::get(array('lang_id' => $lang_id), 'lang_id');
     if (!empty($lang_data)) {
         Languages::export($lang_data[$lang_id]['lang_code']);
     }
 }
 if ($mode == 'delete_language') {
     if (!empty($_REQUEST['lang_id'])) {
         fn_delete_languages($_REQUEST['lang_id']);
     }
     return array(CONTROLLER_STATUS_REDIRECT, 'languages.manage?selected_section=languages');
コード例 #2
0
 /**
  * Installs new language from PO pack
  *
  * @param string $pack_path Path to PO file
  * @param array  $params
  *  reinstall: Skip adding new language
  *  validate_lang_code:Check meta information (lang_code) with updated language data (lang_code) and forbid to update if does not match
  *  force_lang_code: Skip meta lang code and use this one in all laguage variables
  * @return int Language ID
  */
 public static function installLanguagePack($pack_path, $params = array())
 {
     $default_params = array('reinstall' => false, 'validate_lang_code' => '', 'force_lang_code' => '');
     $params = array_merge($default_params, $params);
     if (!file_exists($pack_path)) {
         fn_set_notification('E', __('error'), __('unable_to_read_resource', array('[file]' => fn_get_rel_dir($pack_path))));
         return false;
     }
     $lang_meta = self::getLangPacksMeta(dirname($pack_path) . '/', basename($pack_path), $params['reinstall']);
     if (!self::isValidMeta($lang_meta)) {
         // Failed to read meta data of new language
         fn_set_notification('E', __('error'), __('check_po_file'));
         return false;
     }
     if (!empty($params['validate_lang_code']) && $lang_meta['lang_code'] != $params['validate_lang_code']) {
         fn_set_notification('E', __('error'), __('po_meta_error_validating_lang_code'));
         return false;
     }
     $lc = false;
     if (!Registry::get('runtime.company_id')) {
         if (!$params['reinstall']) {
             $language_data = array('lang_code' => $lang_meta['lang_code'], 'name' => $lang_meta['name'], 'country_code' => $lang_meta['country_code']);
             $lc = self::update($language_data, 0);
         } else {
             $lc = true;
         }
         if ($lc !== false) {
             fn_save_languages_integrity();
             $query = array();
             $original_values_query = array();
             $iteration = 0;
             $max_vars_in_query = 500;
             if (!empty($params['force_lang_code'])) {
                 $lang_meta['lang_code'] = $params['force_lang_code'];
             }
             $lang_data = Po::getValues($pack_path, 'Languages');
             if (!is_array($lang_data)) {
                 fn_set_notification('E', __('error'), $lang_data);
                 return array();
             }
             foreach ($lang_data as $var_name => $var_data) {
                 if (!empty($var_name)) {
                     $id = $var_data['id'];
                     $value = implode('', $var_data['msgstr']);
                     $original_value = $var_data['msgid'];
                     $value = empty($value) ? $original_value : $value;
                     $query[] = db_quote('(?s, ?s, ?s)', $lang_meta['lang_code'], trim($id), trim($value));
                     $original_values_query[] = db_quote('(?s, ?s)', $var_name, trim($original_value));
                 }
                 if ($iteration > $max_vars_in_query) {
                     self::executeLangQueries('language_values', array('lang_code', 'name', 'value'), $query);
                     self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
                     $query = array();
                     $iteration = 0;
                 }
                 $iteration++;
             }
             self::executeLangQueries('language_values', array('lang_code', 'name', 'value'), $query);
             self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
             $settings_sections = Po::getValues($pack_path, 'SettingsSections');
             $query = array();
             $original_values_query = array();
             $iteration = 0;
             foreach ($settings_sections as $var_name => $var_data) {
                 if (!empty($var_name)) {
                     $value = implode('', $var_data['msgstr']);
                     $original_value = $var_data['msgid'];
                     $value = empty($value) ? $original_value : $value;
                     if (!empty($var_data['parent'])) {
                         $parent_id = db_get_field('SELECT section_id FROM ?:settings_sections WHERE name = ?s AND type = ?s', $var_data['parent'], Settings::ADDON_SECTION);
                         $section_id = db_get_field('SELECT section_id FROM ?:settings_sections WHERE name = ?s AND parent_id = ?i', $var_data['id'], $parent_id);
                     } else {
                         $section_id = db_get_field('SELECT section_id FROM ?:settings_sections WHERE name = ?s', $var_data['id']);
                     }
                     if (empty($section_id)) {
                         continue;
                     }
                     $query[] = db_quote('(?i, ?s, ?s, ?s)', $section_id, 'S', $lang_meta['lang_code'], trim($value), trim($original_value));
                     $original_values_query[] = db_quote('(?s, ?s)', trim($var_name), trim($original_value));
                 }
                 if ($iteration > $max_vars_in_query) {
                     self::executeLangQueries('settings_descriptions', array('object_id', 'object_type', 'lang_code', 'value'), $query);
                     self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
                     $query = array();
                     $iteration = 0;
                 }
                 $iteration++;
             }
             self::executeLangQueries('settings_descriptions', array('object_id', 'object_type', 'lang_code', 'value'), $query);
             self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
             $original_values_query = array();
             $setting_options = Po::getValues($pack_path, 'SettingsOptions');
             foreach ($setting_options as $var_name => $var_data) {
                 if (!empty($var_name)) {
                     $value = implode('', $var_data['msgstr']);
                     $original_value = $var_data['msgid'];
                     $value = empty($value) ? $original_value : $value;
                     $object = Settings::instance()->getId($var_data['id'], $var_data['parent']);
                     if (empty($object)) {
                         continue;
                     }
                     $query = array('object_id' => $object, 'object_type' => 'O', 'lang_code' => $lang_meta['lang_code'], 'value' => trim($value));
                     $update = array('value' => trim($value));
                     $original_values_query[] = db_quote('(?s, ?s)', trim($var_name), trim($original_value));
                     db_query('INSERT INTO ?:settings_descriptions ?e ON DUPLICATE KEY UPDATE ?u', $query, $update);
                     self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
                 }
             }
             $original_values_query = array();
             $settings_tooltips = Po::getValues($pack_path, 'SettingsTooltips');
             foreach ($settings_tooltips as $var_name => $var_data) {
                 if (!empty($var_name)) {
                     $value = implode('', $var_data['msgstr']);
                     $original_value = $var_data['msgid'];
                     $value = empty($value) ? $original_value : $value;
                     $object = Settings::instance()->getId($var_data['id'], $var_data['parent']);
                     if (empty($object)) {
                         continue;
                     }
                     $query = array('object_id' => $object, 'object_type' => 'O', 'lang_code' => $lang_meta['lang_code'], 'tooltip' => trim($value));
                     $update = array('tooltip' => trim($value));
                     $original_values_query[] = db_quote('(?s, ?s)', trim($var_name), trim($original_value));
                     db_query('INSERT INTO ?:settings_descriptions ?e ON DUPLICATE KEY UPDATE ?u', $query, $update);
                     self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
                 }
             }
             $setting_variants = Po::getValues($pack_path, 'SettingsVariants');
             $query = array();
             $original_values_query = array();
             $iteration = 0;
             foreach ($setting_variants as $var_name => $var_data) {
                 if (!empty($var_name)) {
                     $value = implode('', $var_data['msgstr']);
                     $original_value = $var_data['msgid'];
                     $value = empty($value) ? $original_value : $value;
                     $object = Settings::instance()->getVariant($var_data['section'], $var_data['parent'], $var_data['id']);
                     if (empty($object)) {
                         continue;
                     }
                     $query[] = db_quote('(?i, ?s, ?s, ?s)', $object['variant_id'], 'V', $lang_meta['lang_code'], trim($value));
                     $original_values_query[] = db_quote('(?s, ?s)', trim($var_name), trim($original_value));
                 }
                 if ($iteration > $max_vars_in_query) {
                     self::executeLangQueries('settings_descriptions', array('variant_id', 'object_type', 'lang_code', 'value'), $query);
                     self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
                     $query = array();
                     $iteration = 0;
                 }
                 $iteration++;
             }
             self::executeLangQueries('settings_descriptions', array('object_id', 'object_type', 'lang_code', 'value'), $query);
             self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
             $addons = Po::getValues($pack_path, 'Addons');
             $query = array();
             $original_values_query = array();
             if (!empty($addons)) {
                 foreach ($addons as $var_name => $var_data) {
                     if (!empty($var_name)) {
                         $value = implode('', $var_data['msgstr']);
                         $original_value = $var_data['msgid'];
                         $value = empty($value) ? $original_value : $value;
                         if ($var_data['parent'] == 'name') {
                             db_query('UPDATE ?:addon_descriptions SET name = ?s WHERE addon = ?s AND lang_code = ?s', trim($value), $var_data['id'], $lang_meta['lang_code']);
                         } else {
                             db_query('UPDATE ?:addon_descriptions SET description = ?s WHERE addon = ?s AND lang_code = ?s', trim($value), $var_data['id'], $lang_meta['lang_code']);
                         }
                         $original_values_query[] = db_quote('(?s, ?s)', trim($var_name), trim($original_value));
                     }
                 }
                 self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
             }
             $profile_fields = Po::getValues($pack_path, 'ProfileFields');
             $query = array();
             $original_values_query = array();
             foreach ($profile_fields as $var_name => $var_data) {
                 if (!empty($var_name)) {
                     $value = implode('', $var_data['msgstr']);
                     $original_value = $var_data['msgid'];
                     $value = empty($value) ? $original_value : $value;
                     $field_ids = db_get_fields('SELECT field_id FROM ?:profile_fields WHERE field_name = ?s', $var_data['id']);
                     if (empty($field_ids)) {
                         continue;
                     }
                     foreach ($field_ids as $field_id) {
                         $query[] = db_quote('(?i, ?s, ?s, ?s)', $field_id, trim($value), 'F', $lang_meta['lang_code']);
                     }
                     $original_values_query[] = db_quote('(?s, ?s)', trim($var_name), trim($original_value));
                 }
             }
             self::executeLangQueries('profile_field_descriptions', array('object_id', 'description', 'object_type', 'lang_code'), $query);
             self::executeLangQueries('original_values', array('msgctxt', 'msgid'), $original_values_query);
             if (!$params['reinstall']) {
                 fn_set_notification('N', __('notice'), __('text_changes_saved'));
             }
             $_suffix = '';
         }
     }
     return $lc;
 }