You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

211 lines
6.1 KiB

<?php
/**
* @package tikiwiki
*/
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
include_once('tiki-setup.php');
$tikilib = TikiLib::lib('tiki');
$wikilib = TikiLib::lib('wiki');
$semanticlib = TikiLib::lib('semantic');
$multilinguallib = TikiLib::lib('multilingual');
$access->check_feature([ 'feature_wiki', 'feature_multilingual' ]);
$access->check_permission('tiki_p_edit');
compute_relevant_languages();
create_pages_if_necessary();
display();
function create_pages_if_necessary()
{
$smarty = TikiLib::lib('smarty');
$template_name = null;
if (isset($_REQUEST['template_name'])) {
$template_name = $_REQUEST['template_name'];
}
$pages_to_create = get_pages_to_create();
list($inexistant_page, $existing_pages)
= check_for_existence_of_pages($pages_to_create);
$smarty->assign('pages_created', $inexistant_page);
$smarty->assign('pages_not_created', $existing_pages);
if (count($inexistant_page) > 0 || count($existing_pages) > 0) {
$smarty->assign('display_creation_result', 'y');
} else {
$smarty->assign('display_creation_result', 'n');
}
foreach ($inexistant_page as $lang => $page_name) {
create_page($page_name, $lang, $template_name);
}
make_pages_translations_of_each_other($inexistant_page);
}
/**
* @param $page_name
* @param $lang
* @param null $template_name
*/
function create_page($page_name, $lang, $template_name = null)
{
global $user;
$multilinguallib = TikiLib::lib('multilingual');
$tikilib = TikiLib::lib('tiki');
$content = '';
if ($template_name != null) {
$template_id = $multilinguallib->getTemplateIDInLanguage('wiki', $template_name, $lang);
$template_data = $templateslib->get_template($template_id, $lang);
$content = $template_data['content'];
}
$tikilib->create_page($page_name, 0, $content, null, '', null, $user, '', $lang);
}
/**
* @param $pages
*/
function make_pages_translations_of_each_other($pages)
{
$multilinguallib = TikiLib::lib('multilingual');
$tikilib = TikiLib::lib('tiki');
if (count($pages) == 0) {
return;
}
$first_page_id = null;
foreach ($pages as $this_page_lang => $this_page_name) {
if ($first_page_id == null) {
$first_page_id = $tikilib->get_page_id_from_name($this_page_name);
$first_page_lang = $this_page_lang;
} else {
$this_page_info = $tikilib->get_page_info($this_page_name);
$this_page_id = $this_page_info['page_id'];
$multilinguallib->insertTranslation('wiki page', $first_page_id, $first_page_lang, $this_page_id, $this_page_lang);
}
}
}
/**
* @return array
*/
function compute_relevant_languages()
{
global $prefs;
$multilinguallib = TikiLib::lib('multilingual');
$smarty = TikiLib::lib('smarty');
$all_languages_with_country_codes = $prefs['available_languages'];
$all_languages = strip_country_code_from_lang_ids($all_languages_with_country_codes);
$user_languages_with_country_codes = $multilinguallib->preferredLangs();
$user_languages = strip_country_code_from_lang_ids($user_languages_with_country_codes);
$other_languages = [];
foreach ($all_languages as $index => $lang) {
if (! in_array($lang, $user_languages)) {
$other_languages[] = $lang;
}
}
$smarty->assign('user_languages', $user_languages);
$smarty->assign('other_languages', $other_languages);
$result = [$user_languages, $other_languages, $all_languages];
return $result;
}
/**
* @return array
*/
function get_pages_to_create()
{
$pages_to_create = [];
foreach ($_REQUEST as $arg_name => $arg_val) {
if (preg_match('/page_name_([\s\S]*)/', $arg_name, $matches)) {
if ($arg_val != '') {
$lang = $matches[1];
$pages_to_create[$lang] = $arg_val;
}
}
}
set_smarty_page_links($pages_to_create);
return $pages_to_create;
}
/**
* @param $pages_to_create
* @return array
*/
function check_for_existence_of_pages($pages_to_create)
{
$tikilib = TikiLib::lib('tiki');
$semantic = TikiLib::lib('semantic');
$non_existant_pages = [];
$existing_pages = [];
foreach ($pages_to_create as $lang => $page_name) {
$exists = false;
if ($tikilib->page_exists($page_name)) {
$exists = true;
} else {
$aliases = $semanticlib->getAliasContaining($page_name, true);
if (count($aliases) > 0) {
$exists = true;
}
}
if ($exists) {
$existing_pages[$lang] = $page_name;
} else {
$non_existant_pages[$lang] = $page_name;
}
}
return [$non_existant_pages, $existing_pages];
}
/**
* @param $page_names
*/
function set_smarty_page_links($page_names)
{
$smarty = TikiLib::lib('smarty');
$wikilib = TikiLib::lib('wiki');
$page_links = [];
foreach ($page_names as $a_page_name) {
$page_links[$a_page_name] =
"<a href=\"" . $wikilib->url_for_operation_on_a_page('tiki-index.php', $a_page_name, false) . "\">$a_page_name</a>";
}
$smarty->assign('page_links', $page_links);
}
function display()
{
$smarty = TikiLib::lib('smarty');
// disallow robots to index page:
$smarty->assign('metatag_robots', 'NOINDEX, NOFOLLOW');
$smarty->assign('mid', 'tiki-create_multilang_pages.tpl');
$smarty->display('tiki.tpl');
}
/**
* @param $lang_ids_with_country_code
* @return array
*/
function strip_country_code_from_lang_ids($lang_ids_with_country_code)
{
$lang_ids = [];
foreach ($lang_ids_with_country_code as $index => $this_lang_id) {
if (strlen($this_lang_id) > 2) {
preg_match('/^([^\-]*)-/', $this_lang_id, $matches);
$this_lang_id = $matches[1];
}
if (! in_array($this_lang_id, $lang_ids)) {
$lang_ids[] = $this_lang_id;
}
}
return $lang_ids;
}