plugins\i18n\inc\i18n.page.php
<?php
/**
* Page 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.');
require_once cot_incfile('page', 'module');
require_once cot_incfile('forms');
$id = cot_import('id', 'G', 'INT');
$l = cot_import('l', 'G', 'ALP');
if (!$id || $id < 1) cot_die_message(404);
/* === Hook === */
foreach (cot_getextplugins('i18n.page.first') as $pl)
{
include $pl;
}
/* =============*/
$stmt = $db->query("SELECT * FROM $db_pages WHERE page_id = $id");
if ($id > 0 && $stmt->rowCount() == 1)
{
$pag = $stmt->fetch();
$stmt->closeCursor();
$stmt = $db->query("SELECT * FROM $db_i18n_pages WHERE ipage_id = ? AND ipage_locale = ?",
array($id, $i18n_locale));
$pag_i18n = $stmt->rowCount() == 1 ? $stmt->fetch() : false;
$stmt->closeCursor();
if ($a == 'add' && !$pag_i18n)
{
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Submit new translation
$pag_i18n['ipage_id'] = $id;
$i18n_locale = cot_import('locale', 'P', 'ALP');
$pag_i18n['ipage_locale'] = $i18n_locale;
if (!in_array($pag_i18n['ipage_locale'], array_keys($i18n_locales)))
{
cot_error('i18n_incorrect_locale', 'locale');
}
$pag_i18n['ipage_translatorid'] = $usr['id'];
$pag_i18n['ipage_translatorname'] = $usr['name'];
$pag_i18n['ipage_date'] = $sys['now'];
$pag_i18n['ipage_title'] = cot_import('title', 'P', 'TXT');
if (mb_strlen($pag_i18n['ipage_title']) < 2)
{
cot_error('page_titletooshort', 'title');
}
$pag_i18n['ipage_desc'] = cot_import('desc', 'P', 'TXT');
$pag_i18n['ipage_text'] = cot_import('translate_text', 'P', 'HTM');
if (cot_error_found())
{
cot_redirect(cot_url('plug', "e=i18n&m=page&a=add&id=$id", '', true));
exit;
}
$db->insert($db_i18n_pages, $pag_i18n);
/* === Hook === */
foreach (cot_getextplugins('i18n.page.add.done') as $pl)
{
include $pl;
}
/* =============*/
cot_message('Added');
$page_urlp = empty($pag['page_alias']) ? "c={$pag['page_cat']}&id=$id&l=" . $pag_i18n['ipage_locale']
: 'c='.$pag['page_cat'] . '&al=' . $pag['page_alias'] . '&l=' . $pag_i18n['ipage_locale'];
cot_redirect(cot_url('page', $page_urlp, '', true, false, true));
}
$out['subtitle'] = $L['i18n_adding'];
$t = new XTemplate(cot_tplfile('i18n.page', 'plug'));
// Get locales list
$lc_list = $i18n_locales;
// Exclude default lang
unset($lc_list[$cfg['defaultlang']]);
// Exclude existing translations
foreach (cot_i18n_list_page_locales($id) as $lc)
{
unset($lc_list[$lc]);
}
$lc_values = array_keys($lc_list);
$lc_names = array_values($lc_list);
if (empty($pag_i18n['ipage_text']))
{
// Insert original page source into translation tab to keep markup
$pag_i18n['ipage_text'] = $pag['page_text'];
}
$t->assign(array(
'I18N_ACTION' => cot_url('plug', "e=i18n&m=page&a=add&id=$id"),
'I18N_TITLE' => $L['i18n_adding'],
'I18N_ORIGINAL_LANG' => $i18n_locales[$cfg['defaultlang']],
'I18N_LOCALIZED_LANG' => cot_selectbox('', 'locale', $lc_values, $lc_names, false),
'I18N_PAGE_TITLE' => htmlspecialchars($pag['page_title']),
'I18N_PAGE_DESC' => htmlspecialchars($pag['page_desc']),
'I18N_PAGE_TEXT' => cot_parse($pag['page_text'], $cfg['page']['markup']),
'I18N_IPAGE_TITLE' => htmlspecialchars($pag_i18n['ipage_title']),
'I18N_IPAGE_DESC' => htmlspecialchars($pag_i18n['ipage_desc']),
'I18N_IPAGE_TEXT' => cot_textarea('translate_text', $pag_i18n['ipage_text'], 32, 80, '', 'input_textarea_editor')
));
cot_display_messages($t);
/* === Hook === */
foreach (cot_getextplugins('i18n.page.translate.tags') as $pl)
{
include $pl;
}
/* =============*/
}
elseif ($a == 'edit' && $pag_i18n
&& ($i18n_admin || $i18n_edit || $usr['id'] == $pag_i18n['ipage_translatorid']))
{
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Update the translation
$pag_i18n['ipage_date'] = $sys['now'];
$pag_i18n['ipage_title'] = cot_import('title', 'P', 'TXT');
if (mb_strlen($pag_i18n['ipage_title']) < 2)
{
cot_error('page_titletooshort', 'rpagetitle');
}
$pag_i18n['ipage_desc'] = cot_import('desc', 'P', 'TXT');
$pag_i18n['ipage_text'] = cot_import('translate_text', 'P', 'HTM');
if (cot_error_found())
{
cot_redirect(cot_url('plug', "e=i18n&m=page&a=edit&id=$id&l=$i18n_locale", '', true));
exit;
}
$db->update($db_i18n_pages, $pag_i18n, "ipage_id = ? AND ipage_locale = ?", array($id, $i18n_locale));
/* === Hook === */
foreach (cot_getextplugins('i18n.page.edit.update') as $pl)
{
include $pl;
}
/* =============*/
cot_message('Updated');
$page_urlp = empty($pag['page_alias']) ? 'c=' . $pag['page_cat'] . "&id=$id&l=$i18n_locale"
: 'c=' . $pag['page_cat'] . '&al=' . $pag['page_alias'] . '&l=' . $i18n_locale;
cot_redirect(cot_url('page', $page_urlp, '', true, false, true));
}
$out['subtitle'] = $L['i18n_editing'];
$t = new XTemplate(cot_tplfile('i18n.page', 'plug'));
$t->assign(array(
'I18N_ACTION' => cot_url('plug', "e=i18n&m=page&a=edit&id=$id&l=$i18n_locale"),
'I18N_TITLE' => $L['i18n_editing'],
'I18N_ORIGINAL_LANG' => $i18n_locales[$cfg['defaultlang']],
'I18N_LOCALIZED_LANG' => $i18n_locales[$i18n_locale],
'I18N_PAGE_TITLE' => htmlspecialchars($pag['page_title']),
'I18N_PAGE_DESC' => htmlspecialchars($pag['page_desc']),
'I18N_PAGE_TEXT' => cot_parse($pag['page_text'], $cfg['page']['markup']),
'I18N_IPAGE_TITLE' => htmlspecialchars($pag_i18n['ipage_title']),
'I18N_IPAGE_DESC' => htmlspecialchars($pag_i18n['ipage_desc']),
'I18N_IPAGE_TEXT' => cot_textarea('translate_text', $pag_i18n['ipage_text'], 32, 80, '', 'input_textarea_editor')
));
cot_display_messages($t);
/* === Hook === */
foreach (cot_getextplugins('i18n.page.edit.tags') as $pl)
{
include $pl;
}
/* =============*/
}
elseif ($a == 'delete' && ($i18n_admin || $usr['id'] == $pag['ipage_translatorid']))
{
// Send to trashcan if available
if ($cfg['plugin']['trashcan']['trash_page'])
{
require_once cot_incfile('trashcan', 'plug');
$row = $db->query("SELECT * FROM $db_i18n_pages
WHERE ipage_id = $id AND ipage_locale = '$i18n_locale'")->fetch();
cot_trash_put('i18n_page', $L['i18n_translation']." #$id ($i18n_locale) ".$row['ipage_title'], $id, $row);
}
$db->delete($db_i18n_pages, "ipage_id = $id AND ipage_locale = '$i18n_locale'");
/* === Hook === */
foreach (cot_getextplugins('i18n.page.delete.done') as $pl)
{
include $pl;
}
/* =============*/
cot_message('Deleted');
$page_urlp = empty($pag['page_alias']) ? 'c=' . $pag['page_cat'] . "id=$id" : 'c=' . $pag['page_cat'] . 'al=' . $pag['page_alias'];
cot_redirect(cot_url('page', $page_urlp, '', true));
}
}
else
{
cot_die(true, true);
}