summaryrefslogtreecommitdiff
path: root/action.php
diff options
context:
space:
mode:
authorfisharebest <fisharebest@gmail.com>2013-06-29 22:33:03 +0000
committerfisharebest <fisharebest@gmail.com>2013-06-29 22:33:03 +0000
commit660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47 (patch)
treeca94e6fcde611712d23b38a8dc1fa74a66753b53 /action.php
parente40bcb61e289f4fb6e5802407d3d44fa278da82b (diff)
downloadwebtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.tar.gz
webtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.tar.bz2
webtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.zip
Diffstat (limited to 'action.php')
-rw-r--r--action.php99
1 files changed, 65 insertions, 34 deletions
diff --git a/action.php b/action.php
index 5e3611b82c..084685aacb 100644
--- a/action.php
+++ b/action.php
@@ -20,7 +20,7 @@
// the correct response for both success/error.
//
// webtrees: Web based Family History software
-// Copyright (C) 2011 webtrees development team.
+// Copyright (C) 2013 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
@@ -48,9 +48,9 @@ case 'accept-changes':
// Accept all the pending changes for a record
require WT_ROOT.'includes/functions/functions_edit.php';
$record=WT_GedcomRecord::getInstance(safe_POST_xref('xref'));
- if ($record && WT_USER_CAN_ACCEPT && $record->canDisplayDetails() && $record->canEdit()) {
+ if ($record && WT_USER_CAN_ACCEPT && $record->canShow() && $record->canEdit()) {
WT_FlashMessages::addMessage(/* I18N: %s is the name of an individual, source or other record */ WT_I18N::translate('The changes to “%s” have been accepted.', $record->getFullName()));
- accept_all_changes($record->getXref(), $record->getGedId());
+ accept_all_changes($record->getXref(), $record->getGedcomId());
} else {
header('HTTP/1.0 406 Not Acceptable');
}
@@ -58,30 +58,61 @@ case 'accept-changes':
case 'copy-fact':
// Copy a fact to the clipboard
- // The calling page may want to reload, to refresh its "paste" buffer
require WT_ROOT.'includes/functions/functions_edit.php';
- $fact=new WT_Event(rawurldecode(safe_POST('factgedcom', WT_REGEX_UNSAFE)), null, 0);
- // Where can we paste this?
- if (preg_match('/^(NOTE|SOUR|OBJE)$/', $fact->getTag())) {
- // Some facts can be pasted to any record
- $type='all';
- } else {
- // Other facts can only be pasted records of the same type
- $type=safe_POST('type', array('INDI','FAM','SOUR','REPO','OBJE','NOTE'));
- }
- if (!is_array($WT_SESSION->clipboard)) {
- $WT_SESSION->clipboard=array();
+ $xref = safe_POST_xref('xref');
+ $fact_id = safe_POST('fact_id');
+
+ $record = WT_GedcomRecord::getInstance($xref);
+
+ if ($record && $record->canEdit()) {
+ foreach ($record->getFacts() as $fact) {
+ if ($fact->getfactId() == $fact_id) {
+ switch ($fact->getTag()) {
+ case 'NOTE':
+ case 'SOUR':
+ case 'OBJE':
+ $type = 'all'; // paste this anywhere
+ break;
+ default:
+ $type = $record::RECORD_TYPE; // paste only to the same record type
+ break;
+ }
+ if (!is_array($WT_SESSION->clipboard)) {
+ $WT_SESSION->clipboard=array();
+ }
+ $WT_SESSION->clipboard[]=array(
+ 'type' =>$type,
+ 'factrec'=>$fact->getGedcom(),
+ 'fact' =>$fact->getTag()
+ );
+ // The clipboard only holds 10 facts
+ while (count($WT_SESSION->clipboard)>10) {
+ array_pop($WT_SESSION->clipboard);
+ }
+ WT_FlashMessages::addMessage(WT_I18N::translate('Record copied to clipboard'));
+ break 2;
+ }
+ }
}
- $WT_SESSION->clipboard[]=array(
- 'type' =>$type,
- 'factrec'=>$fact->getGedcomRecord(),
- 'fact' =>$fact->getTag()
- );
- // The clipboard only holds 10 facts
- while (count($WT_SESSION->clipboard)>10) {
- array_pop($WT_SESSION->clipboard);
+ break;
+
+case 'delete-fact':
+ require WT_ROOT.'includes/functions/functions_edit.php';
+ $xref = safe_POST_xref('xref');
+ $fact_id = safe_POST('fact_id');
+
+ $record = WT_GedcomRecord::getInstance($xref);
+ if ($record && $record->canEdit()) {
+ foreach ($record->getFacts() as $fact) {
+ if ($fact->getfactId() == $fact_id && $fact->canShow() && $fact->canEdit()) {
+ $record->updateFact($fact_id, '', true);
+ break 2;
+ }
+ }
}
- WT_FlashMessages::addMessage(WT_I18N::translate('Record copied to clipboard'));
+
+ // Can’t find the record/fact, or don’t have permission to delete it.
+ header('HTTP/1.0 406 Not Acceptable');
break;
case 'delete-family':
@@ -92,34 +123,34 @@ case 'delete-repository':
case 'delete-source':
require WT_ROOT.'includes/functions/functions_edit.php';
$record=WT_GedcomRecord::getInstance(safe_POST_xref('xref'));
- if ($record && WT_USER_CAN_EDIT && $record->canDisplayDetails() && $record->canEdit()) {
+ if ($record && WT_USER_CAN_EDIT && $record->canShow() && $record->canEdit()) {
// Delete links to this record
- foreach (fetch_all_links($record->getXref(), $record->getGedId()) as $xref) {
+ foreach (fetch_all_links($record->getXref(), $record->getGedcomId()) as $xref) {
$linker = WT_GedcomRecord::getInstance($xref);
- $gedrec = find_gedcom_record($xref, $record->getGedId(), true);
+ $gedrec = find_gedcom_record($xref, $record->getGedcomId(), true);
$gedrec = remove_links($gedrec, $record->getXref());
// If we have removed a link from a family to an individual, and it has only one member
if (preg_match('/^0 @'.WT_REGEX_XREF.'@ FAM/', $gedrec) && preg_match_all('/\n1 (HUSB|WIFE|CHIL) @(' . WT_REGEX_XREF . ')@/', $gedrec, $match)<2) {
// Delete the family
$family = WT_GedcomRecord::getInstance($xref);
WT_FlashMessages::addMessage(/* I18N: %s is the name of a family group, e.g. “Husband name + Wife name” */ WT_I18N::translate('The family “%s” has been deleted, as it only has one member.', $family->getFullName()));
- delete_gedrec($family->getXref(), $family->getGedId());
+ $family->deleteRecord();
// Delete any remaining link to this family
if ($match) {
$relict = WT_GedcomRecord::getInstance($match[2][0]);
- $gedrec = find_gedcom_record($relict->getXref(), $relict->getGedId(), true);
+ $gedrec = find_gedcom_record($relict->getXref(), $relict->getGedcomId(), true);
$gedrec = remove_links($gedrec, $linker->getXref());
- replace_gedrec($relict->getXref(), $relict->getGedId(), $gedrec, false);
+ replace_gedrec($relict->getXref(), $relict->getGedcomId(), $gedrec, false);
WT_FlashMessages::addMessage(/* I18N: %s are names of records, such as sources, repositories or individuals */ WT_I18N::translate('The link from “%1$s” to “%2$s” has been deleted.', $relict->getFullName(), $family->getFullName()));
}
} else {
// Remove links from $linker to $record
WT_FlashMessages::addMessage(/* I18N: %s are names of records, such as sources, repositories or individuals */ WT_I18N::translate('The link from “%1$s” to “%2$s” has been deleted.', $linker->getFullName(), $record->getFullName()));
- replace_gedrec($linker->getXref(), $linker->getGedId(), $gedrec, false);
+ replace_gedrec($linker->getXref(), $linker->getGedcomId(), $gedrec, false);
}
}
// Delete the record itself
- delete_gedrec($record->getXref(), $record->getGedId());
+ $record->deleteRecord();
} else {
header('HTTP/1.0 406 Not Acceptable');
}
@@ -129,9 +160,9 @@ case 'reject-changes':
// Reject all the pending changes for a record
require WT_ROOT.'includes/functions/functions_edit.php';
$record=WT_GedcomRecord::getInstance(safe_POST_xref('xref'));
- if ($record && WT_USER_CAN_ACCEPT && $record->canDisplayDetails() && $record->canEdit()) {
+ if ($record && WT_USER_CAN_ACCEPT && $record->canShow() && $record->canEdit()) {
WT_FlashMessages::addMessage(/* I18N: %s is the name of an individual, source or other record */ WT_I18N::translate('The changes to “%s” have been rejected.', $record->getFullName()));
- reject_all_changes($record->getXref(), $record->getGedId());
+ reject_all_changes($record->getXref(), $record->getGedcomId());
} else {
header('HTTP/1.0 406 Not Acceptable');
}