102 if versions: |
102 if versions: |
103 content = versions[0] |
103 content = versions[0] |
104 return content |
104 return content |
105 |
105 |
106 |
106 |
107 def get_reference_target(reference, state=None): |
107 def get_reference_target(reference, state=None, request=None): |
108 """Get target of given reference OID""" |
108 """Get target of given reference OID""" |
109 catalog = get_utility(ICatalog) |
109 catalog = get_utility(ICatalog) |
110 params = Eq(catalog['oid'], reference) |
110 params = Eq(catalog['oid'], reference) |
111 if handle_workflow: |
111 results = list(CatalogResultSet(CatalogQuery(catalog).query(params))) |
|
112 if results: |
112 if state: |
113 if state: |
113 if not isinstance(state, (list, tuple, set)): |
114 results = list(filter(lambda x: get_version_in_state(x, state), results)) |
114 state = (state,) |
|
115 params &= Any(catalog['workflow_state'], state) |
|
116 results = list(CatalogResultSet(CatalogQuery(catalog).query(params))) |
|
117 if results: |
|
118 return results[0] |
|
119 else: |
115 else: |
120 request = check_request() |
116 if request is None: |
121 if IPyAMSUserLayer.providedBy(request): # front-office request |
117 request = check_request() |
|
118 if IPyAMSUserLayer.providedBy(request): |
122 getter = get_visible_version |
119 getter = get_visible_version |
123 else: |
120 else: |
124 getter = get_last_version |
121 getter = get_last_version |
125 results = list(map(getter, CatalogResultSet(CatalogQuery(catalog).query(params)))) |
122 results = list(map(getter, results)) |
126 if results: |
|
127 return results[0] |
|
128 else: |
|
129 results = list(CatalogResultSet(CatalogQuery(catalog).query(params))) |
|
130 if results: |
123 if results: |
131 return results[0] |
124 return results[0] |
132 |
125 |
133 |
126 |
134 @implementer(ISequentialIntIds) |
127 @implementer(ISequentialIntIds) |