From 3e323e5f2f2efff9a6f1aacb1e5f038fffd572c7 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Fri, 8 Dec 2023 13:39:48 -0500 Subject: [PATCH] Add the FieldtypeDoesVersions interface for Fieldtypes that support handling versions of their own page data --- wire/core/Interfaces.php | 52 +++++++++++++++++++++++++++++++++++++ wire/core/PageTraversal.php | 3 +++ 2 files changed, 55 insertions(+) diff --git a/wire/core/Interfaces.php b/wire/core/Interfaces.php index 88829507..326475d9 100644 --- a/wire/core/Interfaces.php +++ b/wire/core/Interfaces.php @@ -236,6 +236,58 @@ interface FieldtypeHasPageimages { public function getPageimages(Page $page, Field $field); } +/** + * Indicates Fieldtype has version support and manages its own versions + * + */ +interface FieldtypeDoesVersions { + + /** + * Get the value for given page, field and version + * + * @param Page $page + * @param Field $field + * @param int $version + * @return mixed + * + */ + public function getPageFieldVersion(Page $page, Field $field, $version); + + /** + * Save version of given page field + * + * @param Page $page + * @param Field $field + * @param int $version + * @return bool + * + */ + public function savePageFieldVersion(Page $page, Field $field, $version); + + /** + * Restore version of given page field to live page + * + * @param Page $page + * @param Field $field + * @param int $version + * @return bool + * + */ + public function restorePageFieldVersion(Page $page, Field $field, $version); + + /** + * Delete version + * + * @param Page $page + * @param Field $field + * @param int $version + * @return bool + * + */ + public function deletePageFieldVersion(Page $page, Field $field, $version); +} + + /** * Indicates that an Inputfield provides tree selection capabilities * diff --git a/wire/core/PageTraversal.php b/wire/core/PageTraversal.php index 834c0430..34230601 100644 --- a/wire/core/PageTraversal.php +++ b/wire/core/PageTraversal.php @@ -881,6 +881,9 @@ class PageTraversal { } if($language && $language->id) $url .= "&language=$language->id"; } + + $version = (int) ((string) $page->get('_version|_repeater_version')); + if($version) $url .= "&version=$version"; $append = $page->wire()->session->getFor($page, 'appendEditUrl');