1
0
mirror of https://github.com/monstra-cms/monstra.git synced 2025-07-31 18:30:20 +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

@@ -224,7 +224,11 @@ class Monstra
/**
* Init I18n
*/
I18n::init(Option::get('language'));
if (BACKEND) {
I18n::init('admin', Option::get('language'));
} else {
I18n::init('site', Site::getCurrentSiteLocale());
}
/**
* Init Plugins API
@@ -235,7 +239,7 @@ class Monstra
* Init Notification service
*/
Notification::init();
/**
* Init site module
*/
@@ -315,6 +319,7 @@ class Monstra
if (count($namespaces = Dir::scan(CACHE)) > 0) foreach ($namespaces as $namespace) Dir::delete(CACHE . DS . $namespace);
}
/**
* Initialize Monstra Engine
*

View File

@@ -75,9 +75,9 @@ class I18n
*
* @param string $dir Plugins directory
*/
public static function init($locale)
public static function init($namespace = 'default', $locale)
{
if ( ! isset(self::$instance)) self::$instance = new I18n($locale);
if ( ! isset(self::$instance)) self::$instance = new I18n($namespace, $locale);
return self::$instance;
}
@@ -94,13 +94,13 @@ class I18n
/**
* Construct
*/
protected function __construct($locale)
protected function __construct($namespace = 'default', $locale)
{
// Redefine arguments
$locale = (string) $locale;
// Get lang table for current locale
$lang_table = Cache::get('i18n', $locale);
$lang_table = Cache::get('i18n_'.$namespace, $locale);
// If lang_table is empty then create new
if (! $lang_table) {
@@ -136,7 +136,7 @@ class I18n
}
// Save lang table for current locale
Cache::put('i18n', $locale, $lang_table);
Cache::put('i18n_'.$namespace, $locale, $lang_table);
// Update dictionary
I18n::$dictionary = $lang_table;

View File

@@ -221,4 +221,38 @@ class Site
return __('Powered by', 'system').' <a href="http://monstra.org" target="_blank">Monstra</a> ' . Monstra::VERSION;
}
/**
*
*/
public static function getLocales() {
$language_files = File::scan(PLUGINS_BOX . DS . 'system' . DS . 'languages' . DS, '.lang.php');
foreach ($language_files as $language) {
$parts = explode('.', $language);
$languages_array[$parts[0]] = I18n::$locales[$parts[0]];
}
return $languages_array;
}
/**
*
*/
public static function getDefaultSiteLocale() {
return Option::get('site_language');
}
/**
*
*/
public static function getCurrentSiteLocale() {
$site_locales = Site::getLocales();
if (Uri::segment(0) && array_key_exists(Uri::segment(0), $site_locales)) {
return Uri::segment(0);
} else {
$site_locale = Cookie::get('site_locale');
return !empty($site_locale) ? $site_locale : Option::get('site_language');
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -38,6 +38,18 @@ if (file_exists('install.php')) {
// Load Engine init file
require_once ROOT. DS . 'engine'. DS . '_init.php';
/*
$pages = new Table('pages');
$pages_list = $pages->select(null, 'all');
foreach($pages_list as $page) {
$pages->update($page['id'], array('locale' => 'en'));
}
*/
// Option::add('site_language', 'ru');
// Check for maintenance mod
if ('on' == Option::get('maintenance_status')) {

View File

@@ -64,14 +64,17 @@ class Blog {
*
* @return string
*/
public static function breadcrumbs() {
public static function breadcrumbs($locale = '') {
$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;
}
@@ -96,16 +99,18 @@ class Blog {
*
* @return array
*/
public static function getTagsArray($slug = null) {
public static function getTagsArray($slug = null, $locale='') {
// Init vars
$tags = array();
$tags_string = '';
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
if ($slug == null) {
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published"]', 'all');
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]', 'all');
} else {
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and slug="'.$slug.'"]', 'all');
$posts = Pages::$pages->select('[parent="'.Blog::$parent_page_name.'" and status="published" and slug="'.$slug.'" and locale="'.$locale.'"]', 'all');
}
foreach($posts as $post) {
@@ -151,16 +156,18 @@ class Blog {
* @param integer $num Number of posts to show
* @return string
*/
public static function getPosts($nums = 10) {
public static function getPosts($nums = 10, $locale = '') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
// Get page param
$page = (Request::get('page')) ? (int)Request::get('page') : 1;
if (Request::get('tag')) {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and contains(tags, "'.Request::get('tag').'")]';
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'" and contains(tags, "'.Request::get('tag').'")]';
Notification::set('tag', Request::get('tag'));
} else {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published"]';
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]';
Notification::clean();
}
@@ -183,12 +190,14 @@ class Blog {
if ($start < 0) $start = 0;
// Get posts and sort by DESC
$posts = Pages::$pages->select($query, $nums, $start, array('slug', 'title', 'author', 'date'), 'date', 'DESC');
$posts = Pages::$pages->select($query, $nums, $start, array('slug', 'title', 'author', 'date', 'locale', 'template'), 'date', 'DESC');
// Loop
foreach($posts as $key => $post) {
$post_short = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $post['id'] . '.page.txt')));
$posts[$key]['content'] = Filter::apply('content', $post_short[0]);
$posts[$key]['slug'] = $posts[$key]['slug'];
$posts[$key]['locale'] = ($posts[$key]['locale'] == Site::getCurrentSiteLocale()) ? '' : $posts[$key]['locale'].'/';
}
// Display view
@@ -216,10 +225,12 @@ class Blog {
* @param integer $num Number of posts to show
* @return string
*/
public static function getPostsBlock($nums = 10) {
public static function getPostsBlock($nums = 10, $locale = '') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
// XPath Query
$query = '[parent="'.Blog::$parent_page_name.'" and status="published"]';
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and locale="'.$locale.'"]';
// Get posts and sort by DESC
$posts = Pages::$pages->select($query, $nums, 0, array('slug', 'title', 'author', 'date'), 'date', 'DESC');
@@ -247,14 +258,16 @@ class Blog {
*
* @return string
*/
public static function getRelatedPosts($limit = null) {
public static function getRelatedPosts($limit = null, $locale = '') {
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$related_posts = array();
$tags = Blog::getTagsArray(Page::slug());
foreach($tags as $tag) {
$query = '[parent="'.Blog::$parent_page_name.'" and status="published" and contains(tags, "'.$tag.'") and slug!="'.Page::slug().'"]';
$query = '[parent="'.Blog::$parent_page_name.'" and locale="'.$locale.'" and status="published" and contains(tags, "'.$tag.'") and slug!="'.Page::slug().'"]';
if ($result = Arr::subvalSort(Pages::$pages->select($query, ($limit == null) ? 'all' : (int)$limit), 'date', 'DESC')) {
$related_posts = $result;
@@ -303,9 +316,11 @@ class Blog {
*
* @return string
*/
public static function getPostBeforeCut($slug) {
public static function getPostBeforeCut($slug, $locale = '') {
$page = Pages::$pages->select('[slug="'.$slug.'"]', null);
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$page = Pages::$pages->select('[slug="'.$slug.'" and locale="'.$locale.'"]', null);
// Get post
$post = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt')));
@@ -327,9 +342,11 @@ class Blog {
*
* @return string
*/
public static function getPostAfterCut($slug) {
public static function getPostAfterCut($slug, $locale = '') {
$page = Pages::$pages->select('[slug="'.$slug.'"]', null);
$locale = ($locale == '') ? Site::getCurrentSiteLocale() : $locale;
$page = Pages::$pages->select('[slug="'.$slug.'" and locale="'.$locale.'"]', null);
// Get post
$post = explode("{cut}", Text::toHtml(File::getContent(STORAGE . DS . 'pages' . DS . $page['id'] . '.page.txt')));

View File

@@ -1,5 +1,5 @@
<?php foreach($posts as $post) { ?>
<h3 class="monstra-blog-title"><a href="<?php echo Option::get('siteurl'); ?>/<?php echo Blog::$parent_page_name; ?>/<?php echo $post['slug'] ?>"><?php echo $post['title']; ?></a></h3>
<h3 class="monstra-blog-title"><a href="<?php echo Option::get('siteurl'); ?>/<?php echo $post['locale'] ?><?php echo Blog::$parent_page_name; ?>/<?php echo $post['slug'] ?>"><?php echo $post['title']; ?></a></h3>
<small class="monstra-blog-date"><?php echo Date::format($post['date'], 'd M Y'); ?> / <?php echo $post['author']; ?></small>
<div class="monstra-blog-post">
<?php echo $post['content']; ?>

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')).

View File

@@ -1,3 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
</urlset>
<url>
<loc>http://localhost/projects/monstra-cms/blog</loc>
<lastmod>2014-08-17</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://localhost/projects/monstra-cms/blog/begin</loc>
<lastmod>2014-08-18</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://localhost/projects/monstra-cms/</loc>
<lastmod>2014-08-17</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://localhost/projects/monstra-cms/download</loc>
<lastmod>2014-08-16</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://localhost/projects/monstra-cms/download/system</loc>
<lastmod>2014-08-17</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://localhost/projects/monstra-cms/users</loc>
<lastmod>2015-01-08</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
</urlset>

View File

@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<root><options><autoincrement>21</autoincrement></options><fields><name/><value/></fields><options><id>1</id><uid>527510b419</uid><name>sitename</name><value>Sitename</value></options><options><id>2</id><uid>5fe7b20ebb</uid><name>keywords</name><value>Site keywords</value></options><options><id>3</id><uid>2996da0de2</uid><name>description</name><value>Site description</value></options><options><id>4</id><uid>4056d724b8</uid><name>slogan</name><value>Site slogan</value></options><options><id>5</id><uid>620d3e963e</uid><name>defaultpage</name><value>home</value></options><options><id>6</id><uid>6c9cd389f6</uid><name>siteurl</name><value>http://example.org/</value></options><options><id>7</id><uid>2db8769b1e</uid><name>timezone</name><value>Kwajalein</value></options><options><id>8</id><uid>a0b440adce</uid><name>language</name><value>en</value></options><options><id>9</id><uid>d7bd60ad05</uid><name>maintenance_status</name><value>off</value></options><options><id>10</id><uid>c415980d92</uid><name>maintenance_message</name><value>&lt;h1&gt;Monstra :: Maintenance mode&lt;/h1&gt;</value></options><options><id>11</id><uid>4c4e8f0aa8</uid><name>theme_site_name</name><value>default</value></options><options><id>12</id><uid>4c4e8f0aa8</uid><name>theme_admin_name</name><value>default</value></options><options><id>12</id><uid>4c4e8f0aa8</uid><name>users_frontend_registration</name><value>true</value></options><options><id>18</id><uid>f469fc791c</uid><name>captcha_installed</name><value>true</value></options><options><id>19</id><uid>f119fc791c</uid><name>system_email</name><value>admin@admin.com</value></options><options><id>20</id><uid>f119fc121c</uid><name>styles_version</name><value>1</value></options><options><id>21</id><uid>f119fc133c</uid><name>javascript_version</name><value>1</value></options></root>
<root><options><autoincrement>22</autoincrement></options><fields><name/><value/></fields><options><id>1</id><uid>527510b419</uid><name>sitename</name><value>Test</value></options><options><id>2</id><uid>5fe7b20ebb</uid><name>keywords</name><value>Site keywords</value></options><options><id>3</id><uid>2996da0de2</uid><name>description</name><value>Site description</value></options><options><id>4</id><uid>4056d724b8</uid><name>slogan</name><value>Site slogan</value></options><options><id>5</id><uid>620d3e963e</uid><name>defaultpage</name><value>home</value></options><options><id>6</id><uid>6c9cd389f6</uid><name>siteurl</name><value>http://localhost/projects/monstra-cms</value></options><options><id>7</id><uid>2db8769b1e</uid><name>timezone</name><value>Kwajalein</value></options><options><id>8</id><uid>a0b440adce</uid><name>language</name><value>en</value></options><options><id>9</id><uid>d7bd60ad05</uid><name>maintenance_status</name><value>off</value></options><options><id>10</id><uid>c415980d92</uid><name>maintenance_message</name><value>&lt;h1&gt;Monstra :: Maintenance mode&lt;/h1&gt;</value></options><options><id>11</id><uid>4c4e8f0aa8</uid><name>theme_site_name</name><value>default</value></options><options><id>12</id><uid>4c4e8f0aa8</uid><name>theme_admin_name</name><value>default</value></options><options><id>12</id><uid>4c4e8f0aa8</uid><name>users_frontend_registration</name><value>true</value></options><options><id>18</id><uid>f469fc791c</uid><name>captcha_installed</name><value>true</value></options><options><id>19</id><uid>f119fc791c</uid><name>system_email</name><value>admin@admin.com</value></options><options><id>20</id><uid>f119fc121c</uid><name>styles_version</name><value>1</value></options><options><id>21</id><uid>f119fc133c</uid><name>javascript_version</name><value>1</value></options><options><id>22</id><uid>3f15e35cd1</uid><name>site_language</name><value>ru</value></options></root>

View File

@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<root><options><autoincrement>4</autoincrement></options><fields><slug/><robots_index/><robots_follow/><template/><title/><meta_title/><tags/><parent/><status/><description/><keywords/><content/><date/><author/><expand/><access/></fields><pages><id>1</id><uid>ffa3ab3863</uid><content/><slug>error404</slug><robots_index>index</robots_index><robots_follow>follow</robots_follow><template>index</template><parent/><status>published</status><title>error404</title><description/><keywords/><date>1328270400</date><author>Monstra</author><access>public</access></pages><pages><id>2</id><uid>9c20ad0bf1</uid><content/><slug>home</slug><robots_index>index</robots_index><robots_follow>follow</robots_follow><template>index</template><parent/><status>published</status><title>Home</title><description/><keywords/><date>1333368000</date><author>Monstra</author><access>public</access></pages><pages><id>3</id><uid>a623d720fc</uid><content/><slug>blog</slug><template>blog</template><parent/><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Blog</title><description/><keywords/><date>1388792906</date><author>Monstra</author></pages><pages><id>4</id><uid>f8f3dae331</uid><content/><slug>hello-world</slug><template>blog-post</template><parent>blog</parent><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Hello world!</title><description/><keywords>hello, world</keywords><date>1388872189</date><author>admin</author><meta_title/><tags>hello, world</tags></pages></root>
<root><options><autoincrement>14</autoincrement></options><fields><slug/><robots_index/><robots_follow/><template/><title/><meta_title/><tags/><parent/><status/><description/><keywords/><content/><date/><author/><expand/><access/><locale/></fields><pages><id>1</id><uid>ffa3ab3863</uid><content/><slug>error404</slug><robots_index>index</robots_index><robots_follow>follow</robots_follow><template>index</template><parent/><status>published</status><title>error404</title><description/><keywords/><date>1328270400</date><author>Monstra</author><access>public</access><locale>en</locale></pages><pages><id>2</id><uid>9c20ad0bf1</uid><content/><slug>home</slug><robots_index>index</robots_index><robots_follow>follow</robots_follow><template>index</template><parent/><status>published</status><title>Home</title><description/><keywords/><date>1333368000</date><author>Monstra</author><access>public</access><locale>en</locale></pages><pages><id>3</id><uid>a623d720fc</uid><content/><slug>blog</slug><template>blog</template><parent/><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Blog</title><description/><keywords/><date>1388792906</date><author>Monstra</author><locale>en</locale></pages><pages><id>4</id><uid>f8f3dae331</uid><content/><slug>hello-world</slug><template>blog-post</template><parent>blog</parent><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Hello world!</title><description/><keywords>hello, world</keywords><date>1388872189</date><author>admin</author><meta_title/><tags>hello, world</tags><locale>en</locale></pages><pages><id>8</id><uid>63d18e1bc3</uid><content/><slug>download</slug><template>index</template><parent/><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Скачать</title><meta_title/><description/><keywords/><tags/><date>1408128353</date><locale>ru</locale><author>admin</author></pages><pages><id>9</id><uid>422d3b7b48</uid><content/><slug>download</slug><template>index</template><parent/><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Download</title><meta_title/><description/><keywords/><tags/><date>1408128408</date><locale>en</locale><author>admin</author></pages><pages><id>10</id><uid>c7556bb86f</uid><content/><slug>system</slug><template>index</template><parent>download</parent><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Система</title><meta_title/><description/><keywords/><tags/><date>1408194258</date><locale>ru</locale><author>admin</author></pages><pages><id>11</id><uid>88b0851d0e</uid><content/><slug>system</slug><template>index</template><parent>download</parent><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>System</title><meta_title/><description/><keywords/><tags/><date>1408194484</date><locale>en</locale><author>admin</author></pages><pages><id>12</id><uid>410929e942</uid><content/><slug>home</slug><template>index</template><parent/><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Главная</title><meta_title/><description/><keywords/><tags/><date>1408204659</date><locale>ru</locale><author>admin</author></pages><pages><id>13</id><uid>07efc32e2b</uid><content/><slug>blog</slug><template>blog</template><parent/><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Блог</title><meta_title/><description/><keywords/><tags/><date>1408223205</date><locale>ru</locale><author>admin</author></pages><pages><id>14</id><uid>8fce3545c7</uid><content/><slug>begin</slug><template>index</template><parent>blog</parent><status>published</status><access>public</access><expand>0</expand><robots_index>index</robots_index><robots_follow>follow</robots_follow><title>Начало</title><meta_title/><description/><keywords/><tags>hello</tags><date>1408292795</date><locale>ru</locale><author>admin</author></pages></root>

View File

@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<root><options><autoincrement>0</autoincrement></options><fields><login/><password/><email/><role/><date_registered/><firstname/><lastname/><login/><twitter/><skype/><hash/><about_me/></fields></root>
<root><options><autoincrement>1</autoincrement></options><fields><login/><password/><email/><role/><date_registered/><firstname/><lastname/><login/><twitter/><skype/><hash/><about_me/></fields><users><id>1</id><uid>53dd49c236</uid><firstname/><lastname/><twitter/><skype/><about_me/><login>admin</login><password>5d1e3697d706b0e24e574b56e79affda</password><email>admin@admin.com</email><hash>WTgbbZ00GOGw</hash><date_registered>1408049325</date_registered><role>admin</role></users></root>