1
0
mirror of https://github.com/monstra-cms/monstra.git synced 2025-08-04 04:07:59 +02:00

Monstra MultiLanguage Development Init Commit

This commit is contained in:
Awilum
2016-04-10 20:42:34 +03:00
parent 5f1746d62e
commit dc8ef1c489
17 changed files with 282 additions and 68 deletions

View File

@@ -19,6 +19,13 @@ class PagesAdmin extends Backend
*/
public static $pages = null;
/**
* Locale
*
* @var string
*/
public static $locale_to_edit = '';
/**
* _pageExpandAjax
*/
@@ -27,7 +34,7 @@ class PagesAdmin extends Backend
if (Request::post('page_slug')) {
if (Security::check(Request::post('token'))) {
$pages = new Table('pages');
$pages->updateWhere('[slug="'.Request::post('page_slug').'"]', array('expand' => Request::post('page_expand')));
$pages->updateWhere('[slug="'.Request::post('page_slug').'" and locale="'.PagesAdmin::$locale_to_edit.'"]', array('expand' => Request::post('page_expand')));
Request::shutdown();
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
@@ -45,6 +52,23 @@ class PagesAdmin extends Backend
$errors = array();
if (Request::get('locale_to_edit')) {
if (Security::check(Request::get('token'))) {
if (Arr::keyExists(Site::getLocales(), Request::get('locale_to_edit'))) {
Cookie::set('locale_to_edit', Request::get('locale_to_edit'));
Request::redirect(Site::url().'/admin/index.php?id=pages');
}
} else { die('Request was denied because it contained an invalid security token. Please refresh the page and try again.'); }
}
if (Cookie::get('locale_to_edit')) {
$locale_to_edit = Cookie::get('locale_to_edit');
} else {
$locale_to_edit = Site::getDefaultSiteLocale();
}
PagesAdmin::$locale_to_edit = $locale_to_edit;
$pages = new Table('pages');
PagesAdmin::$pages = $pages;
@@ -106,6 +130,7 @@ class PagesAdmin extends Backend
'keywords' => $orig_page['keywords'],
'tags' => $orig_page['tags'],
'date' => $orig_page['date'],
'locale' => $orig_page['locale'],
'author' => $orig_page['author']))) {
// Get cloned page ID
@@ -149,7 +174,7 @@ class PagesAdmin extends Backend
//--------------
if (trim(Request::post('page_name')) == '') $errors['pages_empty_name'] = __('Required field', 'pages');
if (trim(Request::post('page_title')) == '') $errors['pages_empty_title'] = __('Required field', 'pages');
if (count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'"]')) != 0) $errors['pages_exists'] = __('This page already exists', 'pages');
if (count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'" and locale="'.$locale_to_edit.'"]')) != 0) $errors['pages_exists'] = __('This page already exists', 'pages');
// Prepare date
if (Valid::date(Request::post('page_date'))) {
@@ -179,6 +204,7 @@ class PagesAdmin extends Backend
'keywords' => Request::post('page_keywords'),
'tags' => Request::post('page_tags'),
'date' => $date,
'locale' => $locale_to_edit,
'author' => $author))) {
// Get inserted page ID
@@ -287,7 +313,7 @@ class PagesAdmin extends Backend
// Validate
//--------------
if (trim(Request::post('page_name')) == '') $errors['pages_empty_name'] = __('Required field', 'pages');
if ((count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'"]')) != 0) and (Security::safeName(Request::post('page_old_name'), '-', true) !== Security::safeName(Request::post('page_name'), '-', true))) $errors['pages_exists'] = __('This page already exists', 'pages');
if ((count($pages->select('[slug="'.Security::safeName(Request::post('page_name'), '-', true).'" and locale="'.$locale_to_edit.'"]')) != 0) and (Security::safeName(Request::post('page_old_name'), '-', true) !== Security::safeName(Request::post('page_name'), '-', true))) $errors['pages_exists'] = __('This page already exists', 'pages');
if (trim(Request::post('page_title')) == '') $errors['pages_empty_title'] = __('Required field', 'pages');
// Save fields
@@ -328,7 +354,7 @@ class PagesAdmin extends Backend
}
}
if ($pages->updateWhere('[slug="'.Request::get('name').'"]',
if ($pages->updateWhere('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]',
array('slug' => Security::safeName(Request::post('page_name'), '-', true),
'template' => Request::post('templates'),
'parent' => $parent_page,
@@ -342,6 +368,7 @@ class PagesAdmin extends Backend
'status' => Request::post('status'),
'access' => Request::post('access'),
'date' => $date,
'locale' => $locale_to_edit,
'author' => $author))) {
File::setContent(STORAGE . DS . 'pages' . DS . Request::post('page_id') . '.page.txt', XML::safe(Request::post('editor')));
@@ -353,7 +380,7 @@ class PagesAdmin extends Backend
} else {
if ($pages->updateWhere('[slug="'.Request::get('name').'"]',
if ($pages->updateWhere('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]',
array('slug' => Security::safeName(Request::post('page_name'), '-', true),
'template' => Request::post('templates'),
'parent' => $parent_page,
@@ -367,6 +394,7 @@ class PagesAdmin extends Backend
'status' => Request::post('status'),
'access' => Request::post('access'),
'date' => $date,
'locale' => $locale_to_edit,
'author' => $author))) {
File::setContent(STORAGE . DS . 'pages' . DS . Request::post('page_id') . '.page.txt', XML::safe(Request::post('editor')));
@@ -412,7 +440,15 @@ class PagesAdmin extends Backend
$templates_array[basename($file,'.template.php')] = basename($file, '.template.php');
}
$page = $pages->select('[slug="'.Request::get('name').'"]', null);
if (Request::get('name') == 'error404') {
$page = $pages->select('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]', null);
if (count($page) == 0) {
}
} else {
$page = $pages->select('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]', null);
}
if ($page) {
@@ -488,7 +524,7 @@ class PagesAdmin extends Backend
if (Security::check(Request::get('token'))) {
// Get specific page
$page = $pages->select('[slug="'.Request::get('name').'"]', null);
$page = $pages->select('[slug="'.Request::get('name').'" and locale="'.$locale_to_edit.'"]', null);
// Delete page and update <parent> fields
if ($pages->deleteWhere('[slug="'.$page['slug'].'" ]')) {
@@ -524,7 +560,7 @@ class PagesAdmin extends Backend
if (Security::check(Request::get('token'))) {
$pages->updateWhere('[slug="'.Request::get('slug').'"]', array('access' => Request::get('access')));
$pages->updateWhere('[slug="'.Request::get('slug').'" and locale="'.$locale_to_edit.'"]', array('access' => Request::get('access')));
// Run delete extra actions
Action::run('admin_pages_action_update_access');
@@ -548,7 +584,7 @@ class PagesAdmin extends Backend
if (Security::check(Request::get('token'))) {
$pages->updateWhere('[slug="'.Request::get('slug').'"]', array('status' => Request::get('status')));
$pages->updateWhere('[slug="'.Request::get('slug').'" and locale="'.$locale_to_edit.'"]', array('status' => Request::get('status')));
// Run delete extra actions
Action::run('admin_pages_action_update_status');
@@ -578,7 +614,7 @@ class PagesAdmin extends Backend
$count = 0;
// Get pages
$pages_list = $pages->select(null, 'all', null, array('slug', 'title', 'status', 'date', 'author', 'expand', 'access', 'parent', 'template', 'tags'));
$pages_list = $pages->select('[locale="'.$locale_to_edit.'"]', 'all', null, array('slug', 'title', 'status', 'date', 'author', 'expand', 'access', 'parent', 'template', 'tags', 'locale'));
// Loop
foreach ($pages_list as $page) {
@@ -595,6 +631,7 @@ class PagesAdmin extends Backend
$pages_array[$count]['expand'] = $page['expand'];
$pages_array[$count]['slug'] = $page['slug'];
$pages_array[$count]['tags'] = $page['tags'];
$pages_array[$count]['locale'] = $page['locale'];
$pages_array[$count]['template']= $page['template'];
if (isset($page['parent'])) {
@@ -605,7 +642,7 @@ class PagesAdmin extends Backend
if ($c_p != '') {
$_page = $pages->select('[slug="'.$page['parent'].'"]', null);
$_page = $pages->select('[slug="'.$page['parent'].'" and locale="'.$locale_to_edit.'"]', null);
if (isset($_page['title'])) {
$_title = $_page['title'];

View File

@@ -57,6 +57,13 @@ class Pages extends Frontend
*/
public static $requested_page = null;
/**
* Locale
*
* @var string
*/
public static $locale = '';
/**
* Main function
*/
@@ -77,7 +84,16 @@ class Pages extends Frontend
$requested_page = Pages::lowLoader(Uri::segments());
Pages::$requested_page = $requested_page;
return Pages::$pages->select('[slug="'.$requested_page.'"]', null);
if($requested_page == 'error404') {
$page = Pages::$pages->select('[slug="'.$requested_page.'" and locale="'.Pages::$locale.'"]', null);
if(count($page) == 0) {
$page = Pages::$pages->select('[slug="'.$requested_page.'" and locale="'.Site::getDefaultSiteLocale().'"]', null);
}
} else {
$page = Pages::$pages->select('[slug="'.$requested_page.'" and locale="'.Pages::$locale.'"]', null);
}
return $page;
}
/**
@@ -91,14 +107,34 @@ class Pages extends Frontend
{
$defpage = Option::get('defaultpage');
if (Arr::keyExists(Site::getLocales(), $data[0])) {
$locale = $data[0];
if ($locale == Site::getDefaultSiteLocale()) {
if ((isset($data[2])) && ($data[2] != '')) {
Request::redirect(Site::url().'/'.$data[1].'/'.$data[2], 301);
} else {
Request::redirect(Site::url().'/'.(isset($data[1]) ? $data[1] : '') , 301);
}
}
$data[0] = isset($data[1]) ? $data[1] : '';
$data[1] = isset($data[2]) ? $data[2] : '';
if ($data[0] == '') unset($data[0]);
if ($data[1] == '') unset($data[1]);
} else {
$locale = Site::getDefaultSiteLocale();
}
Pages::$locale = $locale;
Cookie::set('site_locale', $locale);
// If data count 2 then it has Parent/Child
if (count($data) >= 2) {
// If exists parent file
if (count(Pages::$pages->select('[slug="'.$data[0].'"]')) !== 0) {
if (count(Pages::$pages->select('[slug="'.$data[0].'" and locale="'.$locale.'"]')) !== 0) {
// Get child file and get parent page name
$child_page = Pages::$pages->select('[slug="'.$data[1].'"]', null);
$child_page = Pages::$pages->select('[slug="'.$data[1].'" and locale="'.$locale.'"]', null);
// If child page parent is not empty then get his parent
if (count($child_page) == 0) {
@@ -150,15 +186,17 @@ class Pages extends Frontend
}
} else { // Only parent page come
if (empty($data[0])) {
$id = $defpage;
} else {
// Get current page
$current_page = Pages::$pages->select('[slug="'.$data[0].'"]', null);
$current_page = Pages::$pages->select('[slug="'.$data[0].'" and locale="'.$locale.'"]', null);
// Hack For old Monstra
$current_page['access'] = (isset($current_page['access'])) ? $current_page['access'] : 'public' ;
@@ -176,7 +214,7 @@ class Pages extends Frontend
if ($c_p !== '') {
if ($c_p == $data[0]) {
if (count(Pages::$pages->select('[slug="'.$data[0].'"]', null)) != 0) {
if (count(Pages::$pages->select('[slug="'.$data[0].'"] and locale="'.$locale.'"]', null)) != 0) {
if ((($current_page['status'] == 'published') or
(Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor')))) and
@@ -194,17 +232,17 @@ class Pages extends Frontend
$id = 'error404';
Response::status(404);
}
} else {
} else {
$id = 'error404';
Response::status(404);
}
} else {
} else {
$id = 'error404';
Response::status(404);
}
} else {
if (count(Pages::$pages->select('[slug="'.$data[0].'"]', null)) != 0) {
if (count(Pages::$pages->select('[slug="'.$data[0].'" and locale="'.$locale.'"]', null)) != 0) {
if ((($current_page['status'] == 'published') or
(Session::exists('user_role') && in_array(Session::get('user_role'), array('admin', 'editor')))) and
($current_page['access'] == 'public')) {
@@ -217,11 +255,12 @@ class Pages extends Frontend
$id = $data[0];
} else {
} else {
$id = 'error404';
Response::status(404);
}
} else {
$id = 'error404';
Response::status(404);
}
@@ -248,11 +287,13 @@ class Pages extends Frontend
*
* @return string
*/
public static function content($slug = '')
public static function content($slug = '', $locale = '')
{
if ( ! empty($slug)) {
$page = Table::factory('pages')->select('[slug="'.$slug.'"]', null);
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$page = Table::factory('pages')->select('[slug="'.$slug.'" and locale="'.$locale.'"]', null);
if ( ! empty($page)) {
@@ -318,17 +359,19 @@ class Pages extends Frontend
/**
* Get pages
*/
public static function getPages()
public static function getPages($locale = '')
{
// Init vars
$pages_array = array();
$count = 0;
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
// Get pages table
$pages = new Table('pages');
// Get Pages List
$pages_list = $pages->select('[slug!="error404" and status="published"]');
$pages_list = $pages->select('[slug!="error404" and status="published" and locale="'.$locale.'"]');
foreach ($pages_list as $page) {
@@ -337,6 +380,7 @@ class Pages extends Frontend
$pages_array[$count]['parent'] = $page['parent'];
$pages_array[$count]['date'] = $page['date'];
$pages_array[$count]['author'] = $page['author'];
$pages_array[$count]['locale'] = $page['locale'];
$pages_array[$count]['slug'] = ($page['slug'] == Option::get('defaultpage')) ? '' : $page['slug'] ;
if (isset($page['parent'])) {
@@ -346,7 +390,7 @@ class Pages extends Frontend
}
if ($c_p != '') {
$_page = $pages->select('[slug="'.$page['parent'].'"]', null);
$_page = $pages->select('[slug="'.$page['parent'].'" and locale="'.$locale.'"]', null);
if (isset($_page['title'])) {
$_title = $_page['title'];
@@ -414,9 +458,10 @@ class Page extends Pages
* @param string $parent Parent page
* @return array
*/
public static function children($parent)
public static function children($parent, $locale = '')
{
return Pages::$pages->select('[parent="'.(string) $parent.'"]', 'all');
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
return Pages::$pages->select('[parent="'.(string) $parent.'" and locale="'.$locale.'"]', 'all');
}
/**
@@ -427,9 +472,11 @@ class Page extends Pages
* </code>
*
*/
public static function available()
public static function available($locale = '')
{
$pages = Pages::$pages->select('[parent="'.Pages::$requested_page.'"]', 'all');
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$pages = Pages::$pages->select('[parent="'.Pages::$requested_page.'" and locale="'.$locale.'"]', 'all');
// Display view
View::factory('box/pages/views/frontend/available_pages')
@@ -445,16 +492,17 @@ class Page extends Pages
* </code>
*
*/
public static function breadcrumbs()
public static function breadcrumbs($locale = '')
{
if (Uri::command() == 'pages') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$current_page = Pages::$requested_page;
$parent_page = '';
if ($current_page !== 'error404') {
$page = Pages::$pages->select('[slug="'.$current_page.'"]', null);
$page = Pages::$pages->select('[slug="'.$current_page.'" and locale="'.$locale.'"]', null);
if (trim($page['parent']) !== '') {
$parent = true;
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'"]', null);
$parent_page = Pages::$pages->select('[slug="'.$page['parent'].'" and locale="'.$locale.'"]', null);
} else {
$parent = false;
}

View File

@@ -9,6 +9,20 @@
Html::anchor(__('Edit 404 Page', 'pages'), 'index.php?id=pages&action=edit_page&name=error404', array('title' => __('Create New Page', 'pages'), 'class' => 'btn btn-phone btn-default'))
);
?>
&nbsp;
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
Locale to edit <span class="caret"></span>
</button>
<ul class="dropdown-menu text-left" role="menu">
<?php
$locales = Site::getLocales();
foreach ($locales as $key => $locale) {
?>
<li><a href="<?php echo Site::url(); ?>/admin/index.php?id=pages&locale_to_edit=<?php echo $key; ?>&token=<?php echo Security::token(); ?>"><?php echo $locale; ?> <?php if ($key == PagesAdmin::$locale_to_edit) { ?><i class="glyphicon glyphicon-ok"></i><?php } ?></a></li>
<?php } ?>
</ul>
</div>
</div>
</div>
@@ -39,7 +53,7 @@
<tr <?php echo $visibility; ?> <?php if (trim($page['parent']) !== '') {?> rel="children_<?php echo $page['parent']; ?>" <?php } ?>>
<td>
<?php
if (count(PagesAdmin::$pages->select('[parent="'.(string) $page['slug'].'"]', 'all')) > 0) {
if (count(PagesAdmin::$pages->select('[parent="'.(string) $page['slug'].'" and locale="'.PagesAdmin::$locale_to_edit.'"]', 'all')) > 0) {
if (isset($page['expand']) && $page['expand'] == '1') {
echo '<a href="javascript:;" class="btn-expand parent" token="'.Security::token().'" rel="'.$page['slug'].'">+</a>';
} else {
@@ -50,10 +64,11 @@
</td>
<td>
<?php
$page_locale = ($page['locale'] == Site::getDefaultSiteLocale()) ? '' : $page['locale'].'/';
$_parent = (trim($page['parent']) == '') ? '' : $page['parent'];
$parent = (trim($page['parent']) == '') ? '' : $page['parent'].'/';
echo (trim($page['parent']) == '') ? '' : '&nbsp;';
echo $dash.Html::anchor(Html::toText($page['title']), $site_url.'/'.$parent.$page['slug'], array('target' => '_blank', 'rel' => 'children_'.$_parent));
echo $dash.Html::anchor(Html::toText($page['title']), $site_url.'/'.$page_locale.$parent.$page['slug'], array('target' => '_blank', 'rel' => 'children_'.$_parent));
?>
</td>
<td class="visible-lg hidden-xs">

View File

@@ -57,7 +57,8 @@ class SystemAdmin extends Backend
// Get all pages
$pages_array = array();
$pages_list = $pages->select('[slug!="error404" and parent="" and status="published"]');
$pages_list = $pages->select('[slug!="error404" and parent="" and locale="'.Site::getDefaultSiteLocale().'" and status="published"]');
foreach ($pages_list as $page) {
$pages_array[$page['slug']] = Html::toText($page['title']);
}
@@ -131,6 +132,7 @@ class SystemAdmin extends Backend
'timezone' => Request::post('system_timezone'),
'system_email' => Request::post('system_email'),
'language' => Request::post('system_language'),
'site_language' => Request::post('site_language'),
'maintenance_message' => Request::post('site_maintenance_message')));
Notification::set('success', __('Your changes have been saved.', 'system'));

View File

@@ -34,4 +34,4 @@ if (Session::exists('user_role') && in_array(Session::get('user_role'), array('a
}
Plugin::Admin('system', 'box');
Plugin::Admin('system', 'box');

View File

@@ -80,12 +80,20 @@
<div class="form-group">
<?php
echo (
Form::label('system_language', __('Language', 'system')).
Form::label('system_language', __('Common Language', 'system')).
Form::select('system_language', $languages_array, Option::get('language'), array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('site_language', __('Site Language', 'system')).
Form::select('site_language', $languages_array, Option::get('site_language'), array('class' => 'form-control'))
);
?>
</div>
<div class="form-group">
<?php
echo (
Form::label('system_email', __('Email', 'system')).