1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/webtrees_ynh.git synced 2024-09-03 18:26:37 +02:00
webtrees_ynh/sources/index_edit.php

379 lines
14 KiB
PHP
Raw Normal View History

<?php
/**
* webtrees: online genealogy
* Copyright (C) 2016 webtrees development team
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Fisharebest\Webtrees;
/**
* Defined in session.php
*
* @global Tree $WT_TREE
*/
global $WT_TREE;
use Fisharebest\Webtrees\Controller\PageController;
use Fisharebest\Webtrees\Functions\FunctionsDb;
define('WT_SCRIPT_NAME', 'index_edit.php');
require './includes/session.php';
$controller = new PageController;
// Only one of $user_id and $gedcom_id should be set
$user_id = Filter::get('user_id', WT_REGEX_INTEGER, Filter::post('user_id', WT_REGEX_INTEGER));
$gedcom_id = Filter::get('gedcom_id', WT_REGEX_INTEGER, Filter::post('gedcom_id', WT_REGEX_INTEGER));
if ($user_id) {
$gedcom_id = null;
if ($user_id < 0) {
$controller->setPageTitle(I18N::translate('Set the default blocks for new users'));
$can_reset = false;
} else {
$controller->setPageTitle(I18N::translate('Change the “My page” blocks'));
$can_reset = true;
}
} else {
if ($gedcom_id < 0) {
$controller->setPageTitle(I18N::translate('Set the default blocks for new family trees'));
$can_reset = false;
} else {
$controller->setPageTitle(I18N::translate('Change the “Home page” blocks'));
$can_reset = true;
}
}
// Only an admin can edit the "default" page
// Only managers can edit the "home page"
// Only a user or an admin can edit a users "my page"
if (
$gedcom_id < 0 && !Auth::isAdmin() ||
$gedcom_id > 0 && !Auth::isManager(Tree::findById($gedcom_id)) ||
$user_id && Auth::id() != $user_id && !Auth::isAdmin()
) {
header('Location: ' . WT_BASE_URL);
return;
}
$action = Filter::get('action');
if ($can_reset && Filter::post('default') === '1') {
if ($user_id) {
$defaults = FunctionsDb::getUserBlocks(-1);
} else {
$defaults = FunctionsDb::getTreeBlocks(-1);
}
$main = $defaults['main'];
$right = $defaults['side'];
} else {
if (isset($_REQUEST['main'])) {
$main = $_REQUEST['main'];
} else {
$main = array();
}
if (isset($_REQUEST['right'])) {
$right = $_REQUEST['right'];
} else {
$right = array();
}
}
// Define all the icons we're going to use
$IconUarrow = 'icon-uarrow';
$IconDarrow = 'icon-darrow';
if (I18N::direction() === 'ltr') {
$IconRarrow = 'icon-rarrow';
$IconLarrow = 'icon-larrow';
$IconRDarrow = 'icon-rdarrow';
$IconLDarrow = 'icon-ldarrow';
} else {
$IconRarrow = 'icon-larrow';
$IconLarrow = 'icon-rarrow';
$IconRDarrow = 'icon-ldarrow';
$IconLDarrow = 'icon-rdarrow';
}
$all_blocks = array();
foreach (Module::getActiveBlocks($WT_TREE) as $name => $block) {
if ($user_id && $block->isUserBlock() || $gedcom_id && $block->isGedcomBlock()) {
$all_blocks[$name] = $block;
}
}
if ($user_id) {
$blocks = FunctionsDb::getUserBlocks($user_id);
} else {
$blocks = FunctionsDb::getTreeBlocks($gedcom_id);
}
if ($action === 'update') {
foreach (array('main', 'side') as $location) {
if ($location === 'main') {
$new_blocks = $main;
} else {
$new_blocks = $right;
}
foreach ($new_blocks as $order => $block_name) {
if (is_numeric($block_name)) {
// existing block
Database::prepare("UPDATE `##block` SET block_order=? WHERE block_id=?")->execute(array($order, $block_name));
// existing block moved location
Database::prepare("UPDATE `##block` SET location=? WHERE block_id=?")->execute(array($location, $block_name));
} else {
// new block
if ($user_id) {
Database::prepare("INSERT INTO `##block` (user_id, location, block_order, module_name) VALUES (?, ?, ?, ?)")->execute(array($user_id, $location, $order, $block_name));
} else {
Database::prepare("INSERT INTO `##block` (gedcom_id, location, block_order, module_name) VALUES (?, ?, ?, ?)")->execute(array($gedcom_id, $location, $order, $block_name));
}
}
}
// deleted blocks
foreach ($blocks[$location] as $block_id => $block_name) {
if (!in_array($block_id, $main) && !in_array($block_id, $right)) {
Database::prepare("DELETE FROM `##block_setting` WHERE block_id=?")->execute(array($block_id));
Database::prepare("DELETE FROM `##block` WHERE block_id=?")->execute(array($block_id));
}
}
}
if ($user_id) {
header('Location: ' . WT_BASE_URL . 'index.php?ctype=user&ged=' . $WT_TREE->getNameUrl());
} else {
header('Location: ' . WT_BASE_URL . 'index.php?ctype=gedcom&ged=' . $WT_TREE->getNameUrl());
}
return;
}
$controller
->pageHeader()
->addInlineJavascript('
/**
* Move Up Block Javascript function
*
* This function moves the selected option up in the given select list
*
* @param String section_name the name of the select to move the options
*/
function move_up_block(section_name) {
section_select = document.getElementById(section_name);
if (section_select) {
if (section_select.selectedIndex <= 0) return false;
index = section_select.selectedIndex;
temp = new Option(section_select.options[index-1].text, section_select.options[index-1].value);
section_select.options[index-1] = new Option(section_select.options[index].text, section_select.options[index].value);
section_select.options[index] = temp;
section_select.selectedIndex = index-1;
}
}
/**
* Move Down Block Javascript function
*
* This function moves the selected option down in the given select list
*
* @param String section_name the name of the select to move the options
*/
function move_down_block(section_name) {
section_select = document.getElementById(section_name);
if (section_select) {
if (section_select.selectedIndex < 0) return false;
if (section_select.selectedIndex >= section_select.length-1) return false;
index = section_select.selectedIndex;
temp = new Option(section_select.options[index+1].text, section_select.options[index+1].value);
section_select.options[index+1] = new Option(section_select.options[index].text, section_select.options[index].value);
section_select.options[index] = temp;
section_select.selectedIndex = index+1;
}
}
/**
* Move Block from one column to the other Javascript function
*
* This function moves the selected option down in the given select list
*
* @param String from_column the name of the select to move the option from
* @param String to_column the name of the select to remove the option to
*/
function move_left_right_block(from_column, to_column) {
to_select = document.getElementById(to_column);
from_select = document.getElementById(from_column);
instruct = document.getElementById("instructions");
if ((to_select) && (from_select)) {
add_option = from_select.options[from_select.selectedIndex];
if (to_column != "available_select") {
to_select.options[to_select.length] = new Option(add_option.text, add_option.value);
}
if (from_column != "available_select") {
from_select.options[from_select.selectedIndex] = null; //remove from list
}
}
}
/**
* Select Options Javascript function
*
* This function selects all the options in the multiple select lists
*/
function select_options() {
section_select = document.getElementById("main_select");
if (section_select) {
for (i=0; i<section_select.length; i++) {
section_select.options[i].selected=true;
}
}
section_select = document.getElementById("right_select");
if (section_select) {
for (i=0; i<section_select.length; i++) {
section_select.options[i].selected=true;
}
}
return true;
}
/**
* Show Block Description Javascript function
*
* This function shows a description for the selected option
*
* @param String list_name the name of the select to get the option from
*/
function show_description(list_name) {
list_select = document.getElementById(list_name);
instruct = document.getElementById("instructions");
if (block_descr[list_select.options[list_select.selectedIndex].value] && instruct) {
instruct.innerHTML = block_descr[list_select.options[list_select.selectedIndex].value];
} else {
instruct.innerHTML = block_descr["advice1"];
}
list1 = document.getElementById("main_select");
list2 = document.getElementById("available_select");
list3 = document.getElementById("right_select");
if (list_name=="main_select") {
list2.selectedIndex = -1;
list3.selectedIndex = -1;
}
if (list_name=="available_select") {
list1.selectedIndex = -1;
list3.selectedIndex = -1;
}
if (list_name=="right_select") {
list1.selectedIndex = -1;
list2.selectedIndex = -1;
}
}
var block_descr = new Array();
');
// Load Block Description array for use by javascript
foreach ($all_blocks as $block_name => $block) {
$controller->addInlineJavascript(
'block_descr["' . $block_name . '"] = "' . Filter::escapeJs($block->getDescription()) . '";'
);
}
$controller->addInlineJavascript(
'block_descr["advice1"] = "' . I18N::translate('Select a block and use the arrows to move it.') . '";'
);
?>
<h2><?php echo $controller->getPageTitle(); ?></h2>
<form name="config_setup" method="post" action="index_edit.php?action=update" onsubmit="select_options();" >
<input type="hidden" name="user_id" value="<?php echo $user_id; ?>">
<input type="hidden" name="gedcom_id" value="<?php echo $gedcom_id; ?>">
<table border="1" id="change_blocks">
<tr>
<?php
// NOTE: Row 1: Column legends
echo '<td class="descriptionbox center vmiddle" colspan="2">';
echo '<b>', I18N::translate('Main section blocks'), '</b>';
echo '</td>';
echo '<td class="descriptionbox center vmiddle" colspan="3">';
echo '<b>', I18N::translate('Available blocks'), '</b>';
echo '</td>';
echo '<td class="descriptionbox center vmiddle" colspan="2">';
echo '<b>', I18N::translate('Right section blocks'), '</b>';
echo '</td>';
echo '</tr>';
echo '<tr>';
// NOTE: Row 2 column 1: Up/Down buttons for left (main) block list
echo '<td class="optionbox center vmiddle">';
echo '<a onclick="move_up_block(\'main_select\');" title="', I18N::translate('Move up'), '"class="', $IconUarrow, '"></a>';
echo '<br>';
echo '<a onclick="move_down_block(\'main_select\');" title="', I18N::translate('Move down'), '"class="', $IconDarrow, '"></a>';
echo '<br><br>';
echo '</td>';
// NOTE: Row 2 column 2: Left (Main) block list
echo '<td class="optionbox center">';
echo '<select multiple="multiple" id="main_select" name="main[]" size="10" onchange="show_description(\'main_select\');">';
foreach ($blocks['main'] as $block_id => $block_name) {
echo '<option value="', $block_id, '">', $all_blocks[$block_name]->getTitle(), '</option>';
}
echo '</select>';
echo '</td>';
// NOTE: Row 2 column 3: Left/Right buttons for left (main) block list
echo '<td class="optionbox center vmiddle">';
echo '<a onclick="move_left_right_block(\'main_select\', \'right_select\');" title="', I18N::translate('Move right'), '"class="', $IconRDarrow, '"></a>';
echo '<br>';
echo '<a onclick="move_left_right_block(\'main_select\', \'available_select\');" title="', I18N::translate('Remove'), '"class="', $IconRarrow, '"></a>';
echo '<br>';
echo '<a onclick="move_left_right_block(\'available_select\', \'main_select\');" title="', I18N::translate('Add'), '"class="', $IconLarrow, '"></a>';
echo '<br><br>';
echo '</td>';
// Row 2 column 4: Middle (Available) block list
echo '<td class="optionbox center">';
echo '<select id="available_select" name="available[]" size="10" onchange="show_description(\'available_select\');">';
foreach ($all_blocks as $block_name => $block) {
echo '<option value="', $block_name, '">', $block->getTitle(), '</option>';
}
echo '</select>';
echo '</td>';
// NOTE: Row 2 column 5: Left/Right buttons for right block list
echo '<td class="optionbox center vmiddle">';
echo '<a onclick="move_left_right_block(\'right_select\', \'main_select\');" title="', I18N::translate('Move left'), '"class="', $IconLDarrow, '"></a>';
echo '<br>';
echo '<a onclick="move_left_right_block(\'right_select\', \'available_select\');" title="', I18N::translate('Remove'), '"class="', $IconLarrow, '"></a>';
echo '<br>';
echo '<a onclick="move_left_right_block(\'available_select\', \'right_select\');" title="', I18N::translate('Add'), '"class="', $IconRarrow, '"></a>';
echo '<br><br>';
echo '</td>';
// NOTE: Row 2 column 6: Right block list
echo '<td class="optionbox center">';
echo '<select multiple="multiple" id="right_select" name="right[]" size="10" onchange="show_description(\'right_select\');">';
foreach ($blocks['side'] as $block_id => $block_name) {
echo '<option value="', $block_id, '">', $all_blocks[$block_name]->getTitle(), '</option>';
}
echo '</select>';
echo '</td>';
// NOTE: Row 2 column 7: Up/Down buttons for right block list
echo '<td class="optionbox center vmiddle">';
echo '<a onclick="move_up_block(\'right_select\');" title="', I18N::translate('Move up'), '"class="', $IconUarrow, '"></a>';
echo '<br>';
echo '<a onclick="move_down_block(\'right_select\');" title="', I18N::translate('Move down'), '"class="', $IconDarrow, '"></a>';
echo '<br><br>';
echo '</td>';
echo '</tr>';
// NOTE: Row 3 columns 1-7: Summary description of currently selected block
echo '<tr><td class="descriptionbox wrap" colspan="7"><div id="instructions">';
echo I18N::translate('Select a block and use the arrows to move it.');
echo '</div></td></tr>';
if ($can_reset) {
echo '<tr><td class="topbottombar" colspan="4">';
echo '<input type="checkbox" name="default" value="1">', I18N::translate('Restore the default block layout'), '</td>';
echo '<td class="topbottombar" colspan="3">';
} else {
echo '<td class="topbottombar" colspan="7">';
}
echo '<input type="submit" value="', I18N::translate('save'), '">';
echo '</td></tr></table>';
echo '</form>';