I stopped due to the fact (and built in automation has the same) - The event "page updated" or "page status changed" fires after the page is persisted with the content status.
So - When my automation - or Scriptrunner listener - sets the content status back from "Verified" to "In Progress" - the will be an extra Page version (14) shown as "Verified" in the History, but it has actually changed from the actually verified (13):
For this to be acceptable, we needed to change the Content Status due save, before creating a new version with "Verified"
This was a test for using Content Status in Cloud:
Listener
A listener that:
- Maintain latest approved version in a Page property
- If a "Verified" version is Edited, move the Page to "In Progres"
Code
import groovy.json.JsonSlurper Boolean propertyExists = true Integer propertyVersionInt = 0 String pageId = page.id String lastVerifiedVersion = 0 //Get Page State def result1 = Unirest.get("https://site.atlassian.net/wiki/rest/api/content/" + pageId + "/state") .header("Accept", "application/json") .asJson(); def json1 = new JsonSlurper().parseText(result1.getBody().toString()) def contentStatus = json1.contentState.name //Get Page Version: def result2 = Unirest.get("https://site.atlassian.net/wiki/rest/api/content/" + pageId + "/version") .header("Accept", "application/json") .asJson(); def json2 = new JsonSlurper().parseText(result2.getBody().toString()) def pageVersion = json2.results.number[0] //Does property and Key exist: def result3 = Unirest.get("https://site.atlassian.net/wiki/rest/api/content/" + pageId + "/property/lastVerififedVersion") .header("Accept", "application/json") .asJson(); if (result3.getStatus().toString() == "404") { propertyExists = false } else { def json3 = new JsonSlurper().parseText(result3.getBody().toString()) lastVerifiedVersion = json3.value.verified def propertyVersion = json3.version.number propertyVersionInt = propertyVersion.toInteger() + 1 } if (contentStatus == "Verified") { logger.info("Page Version: " + pageVersion) logger.info("Last Verified Version: "+ lastVerifiedVersion) if (pageVersion.toInteger() > lastVerifiedVersion.toInteger()-1) { logger.info ("Page updated by a User in Verified Mode - Bump back to In progress") //Get space key def result5 = Unirest.get("https://site.atlassian.net/wiki/rest/api/content/" + pageId) .header("Accept", "application/json") .header("Content-Type", "application/json") .asJson(); def json5 = new JsonSlurper().parseText(result5.getBody().toString()) def spaceKey = json5.space.key //Get Space content status def result6 = Unirest.get("https://site.atlassian.net/wiki/rest/api/space/" + spaceKey + "/state/settings") .header("Accept", "application/json") .header("Content-Type", "application/json") .asJson(); def json6 = new JsonSlurper().parseText(result6.getBody().toString()) def inProgressId = json6.spaceContentStates.find{it.name == "In progress"}.id def inProgressColor= json6.spaceContentStates.find{it.name == "In progress"}.color def inProgressName ="In progress" // Set Content Status to "In progress" logger.info("Set Content Status to: In progress") def result7 = Unirest.put("https://site.atlassian.net/wiki/rest/api/content/" + pageId + "/state?status=current") .header("Accept", "application/json") .header("Content-Type", "application/json") .body("{\"id\":\"" + inProgressId.toString() + "\",\"color\":\"" + inProgressColor + "\",\"name\":\"" + inProgressName + "\"}") .asJson(); } else { if (!propertyExists) { //Create property logger.info ("Create property: lastVerififedVersion") def result4 = Unirest.post("https://site.atlassian.net/wiki/rest/api/content/" + pageId + "/property/lastVerififedVersion") .header("Accept", "application/json") .header("Content-Type", "application/json") .body("{\"key\":\"lastVerififedVersion\",\"value\":{\"verified\":\"" + pageVersion + "\"}}") .asJson(); } else { //Update property logger.info ("Update property: lastVerififedVersion - new version: " + pageVersion) def result4 = Unirest.put("https://site.atlassian.net/wiki/rest/api/content/" +pageId + "/property/lastVerififedVersion") .header("Accept", "application/json") .header("Content-Type", "application/json") .body("{\"key\":\"lastVerififedVersion\",\"value\":{\"verified\":\"" + pageVersion + "\"},\"version\":{\"number\":" + propertyVersionInt + "}}") .asJson(); } } }
Macro
That shows if You are on the newest Verified version or not:
Code
import groovy.json.JsonSlurper //Get Page: def result1 = Unirest.get("https://site.atlassian.net/wiki/rest/api/content/" + parameters.pageId + "/version") .header("Accept", "application/json") .asJson(); def json1 = new JsonSlurper().parseText(result1.getBody().toString()) logger.info ("Result: " + result1.getBody().toString()) def currentVersion = json1.results.number[0] //Get Last verified version: def result2 = Unirest.get("https://site.atlassian.net/wiki/rest/api/content/" + parameters.pageId + "/property/lastVerififedVersion") .header("Accept", "application/json") .asJson(); def json2 = new JsonSlurper().parseText(result2.getBody().toString()) def lastVerifiedVersion = json2.value.verified logger.info ("Current: " + currentVersion) logger.info ("Latest: " + lastVerifiedVersion) if (currentVersion.toInteger() == lastVerifiedVersion.toInteger()) { return "<ac:structured-macro ac:name=\"tip\" ac:schema-version=\"1\" ac:macro-id=\"3733808d-4209-48db-9a27-2086bf26ab7f\"><ac:rich-text-body><p>Your are on the latest verified version: " + lastVerifiedVersion + "</p></ac:rich-text-body></ac:structured-macro>" } else { return "<ac:structured-macro ac:name=\"warning\" ac:schema-version=\"1\" ac:macro-id=\"3733808d-4209-48db-9a27-2086bf26ab7f\"><ac:rich-text-body><p>Your are not on the latest verified version - Latest is: <a href='https://site.atlassian.net/wiki/pages/viewpage.action?pageId=" + parameters.pageId + "&pageVersion=" + lastVerifiedVersion + "'>" + lastVerifiedVersion + "</a></p></ac:rich-text-body></ac:structured-macro>" }