plugins\i18n\inc\i18n.structure.php
<?php
/**
* Structure translation tool
*
* @package I18n
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
defined('COT_CODE') or die('Wrong URL.');
cot_block($i18n_admin);
$maxperpage = ($cfg['maxrowsperpage'] && is_numeric($cfg['maxrowsperpage']) && $cfg['maxrowsperpage'] > 0) ? $cfg['maxrowsperpage'] : 15;
list($pg, $d, $durl) = cot_import_pagenav('d', $maxperpage);
$out['subtitle'] = $L['i18n_structure'];
/* === Hook === */
foreach (cot_getextplugins('i18n.structure.first') as $pl)
{
include $pl;
}
/* =============*/
// Refresh i18n struct data
cot_i18n_load_structure();
$cache && $cache->db->store('structure', $i18n_structure, 'i18n');
if (empty($i18n_locale) || $i18n_locale == $cfg['defaultlang'])
{
// Locale selection
$t = new XTemplate(cot_tplfile('i18n.locales', 'plug'));
foreach ($i18n_locales as $lc => $title)
{
if ($lc != $cfg['defaultlang'])
{
$t->assign(array(
'I18N_LOCALE_ROW_URL' => cot_url('plug', "e=i18n&m=structure&l=$lc", false, true),
'I18N_LOCALE_ROW_TITLE' => $title
));
$t->parse('MAIN.I18N_LOCALE_ROW');
}
}
}
else
{
// Structure translation for selected locale
if ($a == 'update' && $_SERVER['REQUEST_METHOD'] == 'POST')
{
// Update stucture translations
$codes = cot_import('code', 'P', 'ARR');
$titles = cot_import('title', 'P', 'ARR');
$descs = cot_import('desc', 'P', 'ARR');
$cnt = count($codes);
$inserted_cnt = 0;
$removed_cnt = 0;
$updated_cnt = 0;
for ($i = 0; $i < $cnt; $i++)
{
$code = cot_import($codes[$i], 'D', 'TXT');
if (isset($titles[$i]))
{
// Updating a translation
$title = cot_import($titles[$i], 'D', 'TXT');
$desc = cot_import($descs[$i], 'D', 'TXT');
if (!isset($i18n_structure[$code][$i18n_locale]['title'])
|| $title != $i18n_structure[$code][$i18n_locale]['title']
|| $desc != $i18n_structure[$code][$i18n_locale]['title'])
{
// Something has been changed
if (empty($title))
{
// Remove
$removed_cnt += $db->delete($db_i18n_structure,
"istructure_code = ".$db->quote($code)." AND istructure_locale = '$i18n_locale'");
}
elseif (empty($i18n_structure[$code][$i18n_locale]['title']))
{
// Insert
$inserted_cnt += $db->insert($db_i18n_structure, array(
'istructure_code' => $code,
'istructure_locale' => $i18n_locale,
'istructure_title' => $title,
'istructure_desc' => $desc
));
}
else
{
// Update
$updated_cnt += $db->update($db_i18n_structure, array(
'istructure_title' => $title,
'istructure_desc' => $desc
), "istructure_code = ".$db->quote($code)." AND istructure_locale = '$i18n_locale'");
}
}
}
}
// Done
/* === Hook === */
foreach (cot_getextplugins('i18n.structure.update.done') as $pl)
{
include $pl;
}
/* =============*/
if ($inserted_cnt > 0)
{
cot_message(cot_rc('i18n_items_added', array('cnt' => $inserted_cnt)));
}
if ($updated_cnt > 0)
{
cot_message(cot_rc('i18n_items_updated', array('cnt' => $updated_cnt)));
}
if ($removed_cnt > 0)
{
cot_message(cot_rc('i18n_items_removed', array('cnt' => $removed_cnt)));
}
cot_redirect(cot_url('plug', "e=i18n&m=structure&l=$i18n_locale&d=$durl", '', true));
}
$t = new XTemplate(cot_tplfile('i18n.structure', 'plug'));
// Render table
$ii = 0;
$k = -1;
/* === Hook - Part1 : Set === */
$extp = cot_getextplugins('i18n.structure.loop');
/* ===== */
foreach ($structure['page'] as $code => $row)
{
if (cot_i18n_enabled($code))
{
$k++;
if ($k < $d || $ii == $maxperpage)
{
continue;
}
$cat_i18n = $i18n_structure[$code][$i18n_locale];
$t->assign(array(
'I18N_CATEGORY_ROW_TITLE' => htmlspecialchars($row['title']),
'I18N_CATEGORY_ROW_DESC' => htmlspecialchars($row['desc']),
'I18N_CATEGORY_ROW_CODE_NAME' => "code[$ii]",
'I18N_CATEGORY_ROW_CODE_VALUE' => $code,
'I18N_CATEGORY_ROW_ITITLE_NAME' => "title[$ii]",
'I18N_CATEGORY_ROW_ITITLE_VALUE' => htmlspecialchars($cat_i18n['title']),
'I18N_CATEGORY_ROW_IDESC_NAME' => "desc[$ii]",
'I18N_CATEGORY_ROW_IDESC_VALUE' => htmlspecialchars($cat_i18n['desc']),
'I18N_CATEGORY_ROW_ODDEVEN' => cot_build_oddeven($ii)
));
/* === Hook - Part2 : Include === */
foreach ($extp as $pl)
{
include $pl;
}
/* ===== */
$t->parse('MAIN.I18N_CATEGORY_ROW');
$ii++;
}
}
$totalitems = $k + 1;
$pagenav = cot_pagenav('plug', 'e=i18n&m=structure&l='.$i18n_locale, $d, $totalitems,
$maxperpage, 'd', '', $cfg['jquery'] && $cfg['turnajax']);
$t->assign(array(
'I18N_ACTION' => cot_url('plug', 'e=i18n&m=structure&l='.$i18n_locale.'&a=update&d='.$durl),
'I18N_ORIGINAL_LANG' => $i18n_locales[$cfg['defaultlang']],
'I18N_TARGET_LANG' => $i18n_locales[$i18n_locale],
'I18N_PAGINATION_PREV' => $pagenav['prev'],
'I18N_PAGNAV' => $pagenav['main'],
'I18N_PAGINATION_NEXT' => $pagenav['next']
));
cot_display_messages($t);
/* === Hook === */
foreach (cot_getextplugins('i18n.structure.tags') as $pl)
{
include $pl;
}
/* =============*/
}