';
switch ($action) {
case 'undo':
$gedcom_id=WT_DB::prepare("SELECT gedcom_id FROM `##change` WHERE change_id=?")->execute(array($change_id))->fetchOne();
$xref =WT_DB::prepare("SELECT xref FROM `##change` WHERE change_id=?")->execute(array($change_id))->fetchOne();
// Undo a change, and subsequent changes to the same record
WT_DB::prepare(
"UPDATE `##change`".
" SET status = 'rejected'".
" WHERE status = 'pending'".
" AND gedcom_id = ?".
" AND xref = ?".
" AND change_id >= ?"
)->execute(array($gedcom_id, $xref, $change_id));
break;
case 'accept':
$gedcom_id=WT_DB::prepare("SELECT gedcom_id FROM `##change` WHERE change_id=?")->execute(array($change_id))->fetchOne();
$xref =WT_DB::prepare("SELECT xref FROM `##change` WHERE change_id=?")->execute(array($change_id))->fetchOne();
// Accept a change, and all previous changes to the same record
$changes=WT_DB::prepare(
"SELECT change_id, gedcom_id, gedcom_name, xref, old_gedcom, new_gedcom".
" FROM `##change` c".
" JOIN `##gedcom` g USING (gedcom_id)".
" WHERE c.status = 'pending'".
" AND gedcom_id = ?".
" AND xref = ?".
" AND change_id <= ?".
" ORDER BY change_id"
)->execute(array($gedcom_id, $xref, $change_id))->fetchAll();
foreach ($changes as $change) {
if (empty($change->new_gedcom)) {
// delete
update_record($change->old_gedcom, $gedcom_id, true);
} else {
// add/update
update_record($change->new_gedcom, $gedcom_id, false);
}
WT_DB::prepare("UPDATE `##change` SET status='accepted' WHERE change_id=?")->execute(array($change->change_id));
Log::addEditLog("Accepted change {$change->change_id} for {$change->xref} / {$change->gedcom_name} into database");
}
break;
case 'undoall':
WT_DB::prepare(
"UPDATE `##change`".
" SET status='rejected'".
" WHERE status='pending' AND gedcom_id=?"
)->execute(array(WT_GED_ID));
break;
case 'acceptall':
$changes=WT_DB::prepare(
"SELECT change_id, gedcom_id, gedcom_name, xref, old_gedcom, new_gedcom".
" FROM `##change` c".
" JOIN `##gedcom` g USING (gedcom_id)".
" WHERE c.status='pending' AND gedcom_id=?".
" ORDER BY change_id"
)->execute(array(WT_GED_ID))->fetchAll();
foreach ($changes as $change) {
if (empty($change->new_gedcom)) {
// delete
update_record($change->old_gedcom, $change->gedcom_id, true);
} else {
// add/update
update_record($change->new_gedcom, $change->gedcom_id, false);
}
WT_DB::prepare("UPDATE `##change` SET status='accepted' WHERE change_id=?")->execute(array($change->change_id));
Log::addEditLog("Accepted change {$change->change_id} for {$change->xref} / {$change->gedcom_name} into database");
}
break;
}
$changed_gedcoms=WT_DB::prepare(
"SELECT g.gedcom_name".
" FROM `##change` c".
" JOIN `##gedcom` g USING (gedcom_id)".
" WHERE c.status='pending'".
" GROUP BY g.gedcom_name"
)->fetchOneColumn();
if ($changed_gedcoms) {
$changes=WT_DB::prepare(
"SELECT c.*, 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"
)->fetchAll();
$output = '
';
$prev_xref=null;
$prev_gedcom_id=null;
foreach ($changes as $change) {
preg_match('/^0 @' . WT_REGEX_XREF . '@ (' . WT_REGEX_TAG . ')/', $change->old_gedcom . $change->new_gedcom, $match);
switch ($match[1]) {
case 'INDI':
$record = new WT_Individual($change->xref, $change->old_gedcom, $change->new_gedcom, $change->gedcom_id);
break;
case 'FAM':
$record = new WT_Family($change->xref, $change->old_gedcom, $change->new_gedcom, $change->gedcom_id);
break;
case 'SOUR':
$record = new WT_Source($change->xref, $change->old_gedcom, $change->new_gedcom, $change->gedcom_id);
break;
case 'REPO':
$record = new WT_Repository($change->xref, $change->old_gedcom, $change->new_gedcom, $change->gedcom_id);
break;
case 'OBJE':
$record = new WT_Media($change->xref, $change->old_gedcom, $change->new_gedcom, $change->gedcom_id);
break;
case 'NOTE':
$record = new WT_Note($change->xref, $change->old_gedcom, $change->new_gedcom, $change->gedcom_id);
break;
default:
$record = new WT_GedcomRecord($change->xref, $change->old_gedcom, $change->new_gedcom, $change->gedcom_id);
break;
}
if ($change->xref != $prev_xref || $change->gedcom_id != $prev_gedcom_id) {
if ($prev_xref) {
$output.='
';
} else {
// No pending changes - refresh the parent window and close this one
$controller->addInlineJavascript('closePopupAndReloadParent();');
}
echo '