diff options
| author | fisharebest <fisharebest@gmail.com> | 2013-06-29 22:33:03 +0000 |
|---|---|---|
| committer | fisharebest <fisharebest@gmail.com> | 2013-06-29 22:33:03 +0000 |
| commit | 660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47 (patch) | |
| tree | ca94e6fcde611712d23b38a8dc1fa74a66753b53 /action.php | |
| parent | e40bcb61e289f4fb6e5802407d3d44fa278da82b (diff) | |
| download | webtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.tar.gz webtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.tar.bz2 webtrees-660cbf5fdbf1c5ece6b6c3aadc752fc09a10fd47.zip | |
Diffstat (limited to 'action.php')
| -rw-r--r-- | action.php | 99 |
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'); } |
