summaryrefslogtreecommitdiff
path: root/app/Http/Controllers/PendingChangesController.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Http/Controllers/PendingChangesController.php')
-rw-r--r--app/Http/Controllers/PendingChangesController.php507
1 files changed, 258 insertions, 249 deletions
diff --git a/app/Http/Controllers/PendingChangesController.php b/app/Http/Controllers/PendingChangesController.php
index baaeea3459..e4e6ac5640 100644
--- a/app/Http/Controllers/PendingChangesController.php
+++ b/app/Http/Controllers/PendingChangesController.php
@@ -38,295 +38,304 @@ use Symfony\Component\HttpFoundation\Response;
/**
* Show, accept and reject pending changes.
*/
-class PendingChangesController extends AbstractBaseController {
- /**
- * Accept all changes to a tree.
- *
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function acceptAllChanges(Request $request): RedirectResponse {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+class PendingChangesController extends AbstractBaseController
+{
+ /**
+ * Accept all changes to a tree.
+ *
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function acceptAllChanges(Request $request): RedirectResponse
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $url = $request->get('url', '');
+ $url = $request->get('url', '');
- $changes = Database::prepare(
- "SELECT change_id, xref, gedcom_id, old_gedcom, new_gedcom" .
- " FROM `##change` c" .
- " JOIN `##gedcom` g USING (gedcom_id)" .
- " WHERE c.status = 'pending' AND gedcom_id = :tree_id" .
- " ORDER BY change_id"
- )->execute([
- 'tree_id' => $tree->getTreeId(),
- ])->fetchAll();
+ $changes = Database::prepare(
+ "SELECT change_id, xref, gedcom_id, old_gedcom, new_gedcom" .
+ " FROM `##change` c" .
+ " JOIN `##gedcom` g USING (gedcom_id)" .
+ " WHERE c.status = 'pending' AND gedcom_id = :tree_id" .
+ " ORDER BY change_id"
+ )->execute([
+ 'tree_id' => $tree->getTreeId(),
+ ])->fetchAll();
- foreach ($changes as $change) {
- if (empty($change->new_gedcom)) {
- // delete
- FunctionsImport::updateRecord($change->old_gedcom, $tree, true);
- } else {
- // add/update
- FunctionsImport::updateRecord($change->new_gedcom, $tree, false);
- }
+ foreach ($changes as $change) {
+ if (empty($change->new_gedcom)) {
+ // delete
+ FunctionsImport::updateRecord($change->old_gedcom, $tree, true);
+ } else {
+ // add/update
+ FunctionsImport::updateRecord($change->new_gedcom, $tree, false);
+ }
- Database::prepare(
- "UPDATE `##change` SET status = 'accepted' WHERE change_id = :change_id"
- )->execute([
- 'change_id' => $change->change_id,
- ]);
+ Database::prepare(
+ "UPDATE `##change` SET status = 'accepted' WHERE change_id = :change_id"
+ )->execute([
+ 'change_id' => $change->change_id,
+ ]);
- Log::addEditLog('Accepted change ' . $change->change_id . ' for ' . $change->xref . ' / ' . $tree->getName(), $tree);
- }
+ Log::addEditLog('Accepted change ' . $change->change_id . ' for ' . $change->xref . ' / ' . $tree->getName(), $tree);
+ }
- return new RedirectResponse(route('show-pending', [
- 'ged' => $tree->getName(),
- 'url' => $url,
- ]));
- }
+ return new RedirectResponse(route('show-pending', [
+ 'ged' => $tree->getName(),
+ 'url' => $url,
+ ]));
+ }
- /**
- * Accept a change (and all previous changes) to a single record.
- *
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function acceptChange(Request $request): RedirectResponse {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Accept a change (and all previous changes) to a single record.
+ *
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function acceptChange(Request $request): RedirectResponse
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $url = $request->get('url', '');
- $xref = $request->get('xref', '');
- $change_id = (int) $request->get('change_id');
+ $url = $request->get('url', '');
+ $xref = $request->get('xref', '');
+ $change_id = (int)$request->get('change_id');
- $changes = Database::prepare(
- "SELECT change_id, xref, old_gedcom, new_gedcom" .
- " FROM `##change` c" .
- " JOIN `##gedcom` g USING (gedcom_id)" .
- " WHERE c.status = 'pending'" .
- " AND gedcom_id = :tree_id" .
- " AND xref = :xref" .
- " AND change_id <= :change_id" .
- " ORDER BY change_id"
- )->execute([
- 'tree_id' => $tree->getTreeId(),
- 'xref' => $xref,
- 'change_id' => $change_id,
- ])->fetchAll();
+ $changes = Database::prepare(
+ "SELECT change_id, xref, old_gedcom, new_gedcom" .
+ " FROM `##change` c" .
+ " JOIN `##gedcom` g USING (gedcom_id)" .
+ " WHERE c.status = 'pending'" .
+ " AND gedcom_id = :tree_id" .
+ " AND xref = :xref" .
+ " AND change_id <= :change_id" .
+ " ORDER BY change_id"
+ )->execute([
+ 'tree_id' => $tree->getTreeId(),
+ 'xref' => $xref,
+ 'change_id' => $change_id,
+ ])->fetchAll();
- foreach ($changes as $change) {
- if (empty($change->new_gedcom)) {
- // delete
- FunctionsImport::updateRecord($change->old_gedcom, $tree, true);
- } else {
- // add/update
- FunctionsImport::updateRecord($change->new_gedcom, $tree, false);
- }
- Database::prepare(
- "UPDATE `##change` SET status = 'accepted' WHERE change_id = :change_id"
- )->execute([
- 'change_id' => $change->change_id,
- ]);
+ foreach ($changes as $change) {
+ if (empty($change->new_gedcom)) {
+ // delete
+ FunctionsImport::updateRecord($change->old_gedcom, $tree, true);
+ } else {
+ // add/update
+ FunctionsImport::updateRecord($change->new_gedcom, $tree, false);
+ }
+ Database::prepare(
+ "UPDATE `##change` SET status = 'accepted' WHERE change_id = :change_id"
+ )->execute([
+ 'change_id' => $change->change_id,
+ ]);
- Log::addEditLog('Accepted change ' . $change->change_id . ' for ' . $change->xref . ' / ' . $tree->getName(), $tree);
- }
+ Log::addEditLog('Accepted change ' . $change->change_id . ' for ' . $change->xref . ' / ' . $tree->getName(), $tree);
+ }
- return new RedirectResponse(route('show-pending', [
- 'ged' => $tree->getName(),
- 'url' => $url,
- ]));
- }
+ return new RedirectResponse(route('show-pending', [
+ 'ged' => $tree->getName(),
+ 'url' => $url,
+ ]));
+ }
- /**
- * Accept all changes to a single record.
- *
- * @param Request $request
- *
- * @return Response
- */
- public function acceptChanges(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Accept all changes to a single record.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function acceptChanges(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
+ $xref = $request->get('xref', '');
- $record = GedcomRecord::getInstance($xref, $tree);
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, false);
+ $this->checkRecordAccess($record, false);
- if ($record && Auth::isModerator($tree)) {
- if ($record->isPendingDeletion()) {
- FlashMessages::addMessage(/* I18N: %s is the name of a genealogy record */
- I18N::translate('“%s” has been deleted.', $record->getFullName()));
- } else {
- FlashMessages::addMessage(/* I18N: %s is the name of a genealogy record */
- I18N::translate('The changes to “%s” have been accepted.', $record->getFullName()));
- }
- FunctionsImport::acceptAllChanges($record->getXref(), $record->getTree());
- }
+ if ($record && Auth::isModerator($tree)) {
+ if ($record->isPendingDeletion()) {
+ FlashMessages::addMessage(/* I18N: %s is the name of a genealogy record */
+ I18N::translate('“%s” has been deleted.', $record->getFullName()));
+ } else {
+ FlashMessages::addMessage(/* I18N: %s is the name of a genealogy record */
+ I18N::translate('The changes to “%s” have been accepted.', $record->getFullName()));
+ }
+ FunctionsImport::acceptAllChanges($record->getXref(), $record->getTree());
+ }
- return new Response;
- }
+ return new Response;
+ }
- /**
- * Reject all changes to a tree.
- *
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function rejectAllChanges(Request $request): RedirectResponse {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Reject all changes to a tree.
+ *
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function rejectAllChanges(Request $request): RedirectResponse
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $url = $request->get('url', '');
+ $url = $request->get('url', '');
- Database::prepare(
- "UPDATE `##change` SET status = 'rejected' WHERE status = 'pending' AND gedcom_id = :tree_id"
- )->execute([
- 'tree_id' => $tree->getTreeId(),
- ]);
+ Database::prepare(
+ "UPDATE `##change` SET status = 'rejected' WHERE status = 'pending' AND gedcom_id = :tree_id"
+ )->execute([
+ 'tree_id' => $tree->getTreeId(),
+ ]);
- return new RedirectResponse(route('show-pending', [
- 'ged' => $tree->getName(),
- 'url' => $url,
- ]));
- }
+ return new RedirectResponse(route('show-pending', [
+ 'ged' => $tree->getName(),
+ 'url' => $url,
+ ]));
+ }
- /**
- * Reject a change (and all subsequent changes) to a single record.
- *
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function rejectChange(Request $request): RedirectResponse {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Reject a change (and all subsequent changes) to a single record.
+ *
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function rejectChange(Request $request): RedirectResponse
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $url = $request->get('url', '');
- $xref = $request->get('xref', '');
- $change_id = (int) $request->get('change_id');
+ $url = $request->get('url', '');
+ $xref = $request->get('xref', '');
+ $change_id = (int)$request->get('change_id');
- // Reject a change, and subsequent changes to the same record
- Database::prepare(
- "UPDATE `##change`" .
- " SET status = 'rejected'" .
- " WHERE status = 'pending'" .
- " AND gedcom_id = :tree_id" .
- " AND xref = :xref" .
- " AND change_id >= :change_id"
- )->execute([
- 'tree_id' => $tree->getTreeid(),
- 'xref' => $xref,
- 'change_id' => $change_id,
- ]);
+ // Reject a change, and subsequent changes to the same record
+ Database::prepare(
+ "UPDATE `##change`" .
+ " SET status = 'rejected'" .
+ " WHERE status = 'pending'" .
+ " AND gedcom_id = :tree_id" .
+ " AND xref = :xref" .
+ " AND change_id >= :change_id"
+ )->execute([
+ 'tree_id' => $tree->getTreeid(),
+ 'xref' => $xref,
+ 'change_id' => $change_id,
+ ]);
- return new RedirectResponse(route('show-pending', [
- 'ged' => $tree->getName(),
- 'url' => $url,
- ]));
- }
+ return new RedirectResponse(route('show-pending', [
+ 'ged' => $tree->getName(),
+ 'url' => $url,
+ ]));
+ }
- /**
- * Accept all changes to a single record.
- *
- * @param Request $request
- *
- * @return Response
- */
- public function rejectChanges(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Accept all changes to a single record.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function rejectChanges(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $xref = $request->get('xref', '');
+ $xref = $request->get('xref', '');
- $record = GedcomRecord::getInstance($xref, $tree);
+ $record = GedcomRecord::getInstance($xref, $tree);
- $this->checkRecordAccess($record, false);
+ $this->checkRecordAccess($record, false);
- if ($record && Auth::isModerator($tree)) {
- FlashMessages::addMessage(/* I18N: %s is the name of an individual, source or other record */ I18N::translate('The changes to “%s” have been rejected.', $record->getFullName()));
- FunctionsImport::rejectAllChanges($record);
- }
+ if ($record && Auth::isModerator($tree)) {
+ FlashMessages::addMessage(/* I18N: %s is the name of an individual, source or other record */
+ I18N::translate('The changes to “%s” have been rejected.', $record->getFullName()));
+ FunctionsImport::rejectAllChanges($record);
+ }
- return new Response;
- }
+ return new Response;
+ }
- /**
- * Show the pending changes for the current tree.
- *
- * @param Request $request
- *
- * @return Response
- */
- public function showChanges(Request $request): Response {
- /** @var Tree $tree */
- $tree = $request->attributes->get('tree');
+ /**
+ * Show the pending changes for the current tree.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function showChanges(Request $request): Response
+ {
+ /** @var Tree $tree */
+ $tree = $request->attributes->get('tree');
- $url = $request->get('url', route('tree-page', ['ged' => $tree->getName()]));
+ $url = $request->get('url', route('tree-page', ['ged' => $tree->getName()]));
- $rows = Database::prepare(
- "SELECT c.*, UNIX_TIMESTAMP(c.change_time) + :offset AS change_timestamp, u.user_name, u.real_name, g.gedcom_name, new_gedcom, old_gedcom" .
- " FROM `##change` c" .
- " JOIN `##user` u USING (user_id)" .
- " JOIN `##gedcom` g USING (gedcom_id)" .
- " WHERE c.status='pending'" .
- " ORDER BY gedcom_id, c.xref, c.change_id"
- )->execute([
- 'offset' => WT_TIMESTAMP_OFFSET,
- ])->fetchAll();
+ $rows = Database::prepare(
+ "SELECT c.*, UNIX_TIMESTAMP(c.change_time) + :offset AS change_timestamp, u.user_name, u.real_name, g.gedcom_name, new_gedcom, old_gedcom" .
+ " FROM `##change` c" .
+ " JOIN `##user` u USING (user_id)" .
+ " JOIN `##gedcom` g USING (gedcom_id)" .
+ " WHERE c.status='pending'" .
+ " ORDER BY gedcom_id, c.xref, c.change_id"
+ )->execute([
+ 'offset' => WT_TIMESTAMP_OFFSET,
+ ])->fetchAll();
- $changes = [];
- foreach ($rows as $row) {
- $change_tree = Tree::findById($row->gedcom_id);
+ $changes = [];
+ foreach ($rows as $row) {
+ $change_tree = Tree::findById($row->gedcom_id);
- preg_match('/^0 (?:@' . WT_REGEX_XREF . '@ )?(' . WT_REGEX_TAG . ')/', $row->old_gedcom . $row->new_gedcom, $match);
+ preg_match('/^0 (?:@' . WT_REGEX_XREF . '@ )?(' . WT_REGEX_TAG . ')/', $row->old_gedcom . $row->new_gedcom, $match);
- switch ($match[1]) {
- case 'INDI':
- $row->record = new Individual($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
- break;
- case 'FAM':
- $row->record = new Family($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
- break;
- case 'SOUR':
- $row->record = new Source($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
- break;
- case 'REPO':
- $row->record = new Repository($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
- break;
- case 'OBJE':
- $row->record = new Media($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
- break;
- case 'NOTE':
- $row->record = new Note($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
- break;
- default:
- $row->record = new GedcomRecord($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
- break;
- }
+ switch ($match[1]) {
+ case 'INDI':
+ $row->record = new Individual($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
+ break;
+ case 'FAM':
+ $row->record = new Family($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
+ break;
+ case 'SOUR':
+ $row->record = new Source($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
+ break;
+ case 'REPO':
+ $row->record = new Repository($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
+ break;
+ case 'OBJE':
+ $row->record = new Media($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
+ break;
+ case 'NOTE':
+ $row->record = new Note($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
+ break;
+ default:
+ $row->record = new GedcomRecord($row->xref, $row->old_gedcom, $row->new_gedcom, $change_tree);
+ break;
+ }
- $changes[$row->gedcom_id][$row->xref][] = $row;
- }
+ $changes[$row->gedcom_id][$row->xref][] = $row;
+ }
- $title = I18N::translate('Pending changes');
+ $title = I18N::translate('Pending changes');
- // If the current tree has changes, activate that tab. Otherwise activate the first tab.
- if (empty($changes[$tree->getTreeId()])) {
- reset($changes);
- $active_tree_id = key($changes);
- } else {
- $active_tree_id = $tree->getTreeId();
- }
+ // If the current tree has changes, activate that tab. Otherwise activate the first tab.
+ if (empty($changes[$tree->getTreeId()])) {
+ reset($changes);
+ $active_tree_id = key($changes);
+ } else {
+ $active_tree_id = $tree->getTreeId();
+ }
- return $this->viewResponse('pending-changes-page', [
- 'active_tree_id' => $active_tree_id,
- 'changes' => $changes,
- 'title' => $title,
- 'url' => $url,
- ]);
- }
+ return $this->viewResponse('pending-changes-page', [
+ 'active_tree_id' => $active_tree_id,
+ 'changes' => $changes,
+ 'title' => $title,
+ 'url' => $url,
+ ]);
+ }
}