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.
 
 
 
 
 
 

282 lines
13 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$
require_once('tiki-setup.php');
$structlib = TikiLib::lib('struct');
$categlib = TikiLib::lib('categ');
include_once("lib/ziplib.php");
$access->check_feature(['feature_wiki', 'feature_wiki_structure']);
$access->check_permission('tiki_p_view');
// start security hardened section
if ($tiki_p_edit_structures == 'y') {
if (isset($_REQUEST['rremove'])) {
$structure_info = $structlib->s_get_structure_info($_REQUEST['rremove']);
if (! $tikilib->user_has_perm_on_object($user, $structure_info["pageName"], 'wiki page', 'tiki_p_edit')) {
$smarty->assign('errortype', 401);
$smarty->assign('msg', tra("You do not have permission to edit this page."));
$smarty->display("error.tpl");
die;
}
$access->check_authenticity();
$structlib->s_remove_page($_REQUEST["rremove"], false, empty($_REQUEST['page']) ? '' : $_REQUEST['page']);
}
if (isset($_REQUEST['rremovex'])) {
$structure_info = $structlib->s_get_structure_info($_REQUEST['rremovex']);
if (! $tikilib->user_has_perm_on_object($user, $structure_info["pageName"], 'wiki page', 'tiki_p_edit')) {
$smarty->assign('errortype', 401);
$smarty->assign('msg', tra("You do not have permission to edit this page."));
$smarty->display("error.tpl");
die;
}
$access->check_authenticity();
$structlib->s_remove_page($_REQUEST["rremovex"], true, empty($_REQUEST['page']) ? '' : $_REQUEST['page']);
}
if (isset($_REQUEST['export'])) {
check_ticket('admin-structures');
$structure_info = $structlib->s_get_structure_info($_REQUEST['export']);
if ($prefs['feature_wiki_export'] != 'y' || $tiki_p_admin_wiki != 'y' || ! $tikilib->user_has_perm_on_object($user, $structure_info["pageName"], 'wiki page', 'tiki_p_view')) {
$smarty->assign('errortype', 401);
$smarty->assign('msg', tra('You do not have permission to view this page.'));
$smarty->display("error.tpl");
die;
}
$structlib->s_export_structure($_REQUEST['export']);
}
if (isset($_REQUEST['zip']) && $tiki_p_admin == 'y') {
check_ticket('admin-structures');
include_once('lib/wiki/xmllib.php');
$xmllib = new XmlLib();
$zipFile = 'dump/xml.zip';
$config['debug'] = false;
if ($xmllib->export_pages(null, $_REQUEST['zip'], $zipFile, $config)) {
if (! $config['debug']) {
header("location: $zipFile");
die;
}
} else {
$smarty->assign('error', $xmllib->get_error());
}
}
if (isset($_REQUEST['export_tree'])) {
check_ticket('admin-structures');
$structure_info = $structlib->s_get_structure_info($_REQUEST['export_tree']);
if (! $tikilib->user_has_perm_on_object($user, $structure_info["pageName"], 'wiki page', 'tiki_p_view')) {
$smarty->assign('errortype', 401);
$smarty->assign('msg', tra('You do not have permission to view this page.'));
$smarty->display("error.tpl");
die;
}
header("content-type: text/plain");
$structlib->s_export_structure_tree($_REQUEST['export_tree']);
die;
}
if (isset($_REQUEST['batchaction'])) {
check_ticket('admin-structures');
foreach ($_REQUEST['action'] as $batchid) {
$structure_info = $structlib->s_get_structure_info($batchid);
if (! $tikilib->user_has_perm_on_object($user, $structure_info['pageName'], 'wiki page', 'tiki_p_edit')) {
continue;
}
if ($_REQUEST['batchaction'] == 'delete') {
$structlib->s_remove_page($batchid, false, $structure_info['pageName']);
} elseif ($_REQUEST['batchaction'] == 'delete_with_page') {
$structlib->s_remove_page($batchid, true, $structure_info['pageName']);
}
}
}
$smarty->assign('askremove', 'n');
if (isset($_REQUEST['remove'])) {
check_ticket('admin-structures');
$structure_info = $structlib->s_get_structure_info($_REQUEST['remove']);
if (! $tikilib->user_has_perm_on_object($user, $structure_info["pageName"], 'wiki page', 'tiki_p_edit')) {
$smarty->assign('errortype', 401);
$smarty->assign('msg', tra("You do not have permission to edit this page."));
$smarty->display("error.tpl");
die;
}
$smarty->assign('askremove', 'y');
$smarty->assign('removename', $structure_info["pageName"]);
$smarty->assign('remove', $_REQUEST['remove']);
}
$alert_in_st = [];
$alert_categorized = [];
$alert_to_remove_cats = [];
$alert_to_remove_extra_cats = [];
$cat_type = 'wiki page';
$cat_objid = '';
$smarty->assign('just_created', 'n');
if (isset($_REQUEST["create"])) {
check_ticket('admin-structures');
if ((empty($_REQUEST['name']))) {
$smarty->assign('msg', tra("You must specify a page name, it will be created if it doesn't exist."));
$smarty->display("error.tpl");
die;
}
//try to add a new structure
$structure_id = $structlib->s_create_page(null, null, $_REQUEST['name'], $_REQUEST['alias'], null);
//Cannot create a structure if a structure already exists
if (! isset($structure_id)) {
$smarty->assign('msg', $_REQUEST['name'] . " " . tra("page not added (Exists)"));
$smarty->display("error.tpl");
die;
}
$cat_name = $_REQUEST['name'];
$cat_objid = $cat_name;
$cat_href = "tiki-index.php?page=" . urlencode($cat_name);
$cat_desc = '';
$cat_type = 'wiki page';
include_once("categorize.php");
$categories = []; // needed to prevent double entering (the first time when page is being categorized in categorize.php)
include_once("categorize_list.php"); // needs to be up here to avoid picking up selection of cats from other existing sub-pages
$smarty->assign('just_created', $structure_id);
$smarty->assign('just_created_name', $_REQUEST['name']);
// Locking: only needed on new structures, ajax locks existing ones
if ($prefs['lock_wiki_structures'] === 'y') {
if (! empty($_REQUEST['locked'])) {
TikiLib::lib('attribute')->set_attribute('wiki structure', $_REQUEST['name'], 'tiki.object.lock', $_REQUEST['locked']);
}
}
$parents[0] = $structure_id;
$last_pages[0] = null;
$tree_lines = explode("\n", $_REQUEST["tree"]);
foreach ($tree_lines as $full_line) {
$names = explode("->", $full_line);
$line = $names[0];
$line = rtrim($line);
// count the depth level (leading spaces indicate it)
$tabs = strlen($line) - strlen(ltrim($line));
// Is there smth else 'cept spaces?
if (strlen($line = trim($line))) {
$parent_id = $parents[$tabs];
if (isset($last_pages[$tabs])) {
$last_page = $last_pages[$tabs];
} else {
$last_page = null;
}
$alias = '';
if (! empty($names[1])) {
$alias = $names[1];
}
if ($tikilib->page_exists(trim($line))) {
$strucs = $structlib->get_page_structures(trim($line));
if (count($strucs) > 0) {
$alert_in_st[] = trim($line);
}
}
$new_page_ref_id = $structlib->s_create_page($parent_id, $last_page, trim($line), trim($alias), $structure_id);
if (isset($new_page_ref_id)) {
$parents[$tabs + 1] = $new_page_ref_id;
$last_pages[$tabs] = $new_page_ref_id;
$cat_name = trim($line);
$cat_objid = $cat_name;
$cat_href = "tiki-index.php?page=" . urlencode($cat_name);
$catObjectId = $categlib->is_categorized($cat_type, $cat_objid);
if ($prefs['feature_wiki_categorize_structure'] == 'y' && ! $catObjectId) {
// page that is added is not categorized -> categorize it if necessary
if (isset($_REQUEST["cat_categorize"]) && $_REQUEST["cat_categorize"] == 'on' && isset($_REQUEST["cat_categories"])) {
$catObjectId = $categlib->add_categorized_object($cat_type, $cat_objid, $cat_desc, $cat_name, $cat_href);
$alert_categorized[] = $cat_name;
foreach ($_REQUEST["cat_categories"] as $cat_acat) {
$categlib->categorize($catObjectId, $cat_acat);
}
}
} elseif ($prefs['feature_wiki_categorize_structure'] == 'y') {
// page that is added is categorized
if (! isset($_REQUEST["cat_categories"]) || ! isset($_REQUEST["cat_categorize"]) || isset($_REQUEST["cat_categorize"]) && $_REQUEST["cat_categorize"] != 'on') {
// alert that current pages are categorized
$alert_to_remove_cats[] = $cat_name;
} else {
// add categories and alert that current pages have different categories
$cats = $categlib->get_object_categories($cat_type, $cat_objid);
$numberofcats = count($cats);
$alert_categorized[] = $cat_name;
foreach ($_REQUEST["cat_categories"] as $cat_acat) {
if (! in_array($cat_acat, $cats, true)) {
$categlib->categorize($catObjectId, $cat_acat);
$numberofcats += 1;
}
}
if ($numberofcats > count($_REQUEST["cat_categories"])) {
$alert_to_remove_extra_cats[] = $cat_name;
}
}
}
}
}
}
}
$smarty->assign('alert_in_st', $alert_in_st);
$smarty->assign('alert_categorized', $alert_categorized);
$smarty->assign('alert_to_remove_cats', $alert_to_remove_cats);
$smarty->assign('alert_to_remove_extra_cats', $alert_to_remove_extra_cats);
} // end of security hardening
if ($prefs['feature_categories'] == 'y') {
include_once("categorize_list.php");
}
if (! isset($_REQUEST["sort_mode"])) {
$sort_mode = 'pageName_asc';
} else {
$sort_mode = $_REQUEST["sort_mode"];
}
if (! isset($_REQUEST["offset"])) {
$offset = 0;
} else {
$offset = $_REQUEST["offset"];
}
$smarty->assign_by_ref('offset', $offset);
if (isset($_REQUEST["find"])) {
$find = $_REQUEST["find"];
} else {
$find = '';
}
$smarty->assign('find', $find);
$smarty->assign_by_ref('sort_mode', $sort_mode);
// default $maxRecords defined in tiki-setup.php
if (isset($_REQUEST['maxRecords'])) {
$maxRecords = $_REQUEST['maxRecords'];
}
$filter = '';
if (! empty($_REQUEST['lang'])) {
$filter['lang'] = $_REQUEST['lang'];
$smarty->assign_by_ref('find_lang', $_REQUEST['lang']);
}
if (! empty($_REQUEST['categId'])) {
$filter['categId'] = $_REQUEST['categId'];
$smarty->assign_by_ref('find_categId', $_REQUEST['categId']);
}
if (isset($_REQUEST["exact_match"])) {
$exact_match = true;
$smarty->assign('exact_match', 'y');
} else {
$exact_match = false;
$smarty->assign('exact_match', 'n');
}
if ($prefs['feature_multilingual'] == 'y') {
$languages = [];
$langLib = TikiLib::lib('language');
$languages = $langLib->list_languages(false, 'y');
$smarty->assign_by_ref('languages', $languages);
}
$channels = $structlib->list_structures($offset, $maxRecords, $sort_mode, $find, $exact_match, $filter);
$smarty->assign('cant', $channels["cant"]);
$smarty->assign_by_ref('channels', $channels["data"]);
ask_ticket('admin-structures');
include_once('tiki-section_options.php');
// disallow robots to index page:
$smarty->assign('metatag_robots', 'NOINDEX, NOFOLLOW');
$smarty->assign('pdf_export', ($prefs['print_pdf_from_url'] != 'none') ? 'y' : 'n');
// Display the template
$smarty->assign('mid', 'tiki-admin_structures.tpl');
$smarty->display("tiki.tpl");