} if ($length) { Auth::user()->setPreference('admin_site_change_page_size', $length); $limit = " LIMIT :limit OFFSET :offset"; $args['limit'] = $length; $args['offset'] = $start; } else { $limit = ""; } // This becomes a JSON list, not array, so need to fetch with numeric keys. $rows = Database::prepare($sql_select . $where . $order_by . $limit)->execute($args)->fetchAll(PDO::FETCH_OBJ); // Total filtered/unfiltered rows $recordsFiltered = (int) Database::prepare("SELECT FOUND_ROWS()")->fetchOne(); $recordsTotal = (int) Database::prepare("SELECT COUNT(*) FROM `##change`")->fetchOne(); $data = array(); $algorithm = new MyersDiff(); foreach ($rows as $row) { $old_lines = preg_split('/[\\n]+/', $row->old_gedcom, -1, PREG_SPLIT_NO_EMPTY); $new_lines = preg_split('/[\\n]+/', $row->new_gedcom, -1, PREG_SPLIT_NO_EMPTY); $differences = $algorithm->calculate($old_lines, $new_lines); $diff_lines = array(); foreach ($differences as $difference) { switch ($difference[1]) { case MyersDiff::DELETE: $diff_lines[] = '<del>' . $difference[0] . '</del>'; break; case MyersDiff::INSERT: $diff_lines[] = '<ins>' . $difference[0] . '</ins>'; break; default: $diff_lines[] = $difference[0];
/** * Default previewer for plugins with no custom preview. * * @param GedcomRecord $record * * @return string */ public function getActionPreview(GedcomRecord $record) { $old_lines = preg_split('/[\\n]+/', $record->getGedcom()); $new_lines = preg_split('/[\\n]+/', $this->updateRecord($record->getXref(), $record->getGedcom())); $algorithm = new MyersDiff(); $differences = $algorithm->calculate($old_lines, $new_lines); $diff_lines = array(); foreach ($differences as $difference) { switch ($difference[1]) { case MyersDiff::DELETE: $diff_lines[] = self::decorateDeletedText($difference[0]); break; case MyersDiff::INSERT: $diff_lines[] = self::decorateInsertedText($difference[0]); break; default: $diff_lines[] = $difference[0]; } } return '<pre class="gedcom-data">' . self::createEditLinks(implode("\n", $diff_lines)) . '</pre>'; }