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

378 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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>';