Hi @shibani06,
So, in general you will need to exclude from the list of assets that are not referenced those that are published. Here is a complete code of ProcessDefinition that will create process that can be run from MCP.
Alternatively you check below groovy scripts.
First script will search for all assets under given DAM path, next it will check each asset, one by one if it is used on any page. Finally it will check it asset is published. As a result you will get list of all assets with clear indication for each asset if it is used on any page and if it is published. This will give you complete set of information you need to do the clean up.
import javax.jcr.query.Query
import com.day.cq.replication.ReplicationStatus
DAM_PATH = "/content/dam/we-retail"
CONTENT_PATH = "/content/we-retail"
// searching for all assetes under given dam path
def assets = resourceResolver.findResources("SELECT * FROM [dam:Asset] AS s WHERE ISDESCENDANTNODE([${DAM_PATH}])", Query.JCR_SQL2)
assets?.each { asset ->
boolean hasReferences = false
boolean isPublished = false
def assetPath = asset?.path
// searching for all pages where given asset could be used
def references = resourceResolver
.findResources("SELECT * FROM [cq:Page] AS s WHERE ISDESCENDANTNODE([${CONTENT_PATH}]) and CONTAINS(s.*, '${assetPath}')",
Query.JCR_SQL2)
hasReferences = references?.hasNext()
isPublished = asset.adaptTo(ReplicationStatus.class)?.isDelivered()
println "Asset path: ${assetPath}, has references: ${hasReferences ? 'Yes' : 'No'}, is published: ${isPublished ? 'Yes' : 'No'}"
}
Second script is variation of the first one. It will search for all assets under given DAM path, next it will check each asset if it is published, and if not it will simply check if asset is used. As a result you will get list of assets that are not used and have not been published - so this will address you case.
import javax.jcr.query.Query
import com.day.cq.replication.ReplicationStatus
DAM_PATH = "/content/dam/we-retail"
CONTENT_PATH = "/content/we-retail"
// searching for all assetes under given dam path
def assets = resourceResolver.findResources("SELECT * FROM [dam:Asset] AS s WHERE ISDESCENDANTNODE([${DAM_PATH}])", Query.JCR_SQL2)
assets?.each { asset ->
def assetPath = asset?.path
// searching for all pages where given asset could be used
if (!asset.adaptTo(ReplicationStatus.class)?.isDelivered()) {
def references = resourceResolver
.findResources("SELECT * FROM [cq:Page] AS s WHERE ISDESCENDANTNODE([${CONTENT_PATH}]) and CONTAINS(s.*, '${assetPath}')",
Query.JCR_SQL2)
if (!references?.hasNext()) {
println "Asset path: ${assetPath}"
}
}
}