Changes for page Macros

Last modified by Jip-jan Alunkel on April 15, 18:09

From version 2.99
edited by Jip-jan Alunkel
on June 28, 20:27
Change comment: Update document after refactoring.
To version 2.107
edited by Jip-jan Alunkel
on June 28, 23:45
Change comment: Update document after refactoring.

Summary

Details

Page properties
Content
... ... @@ -60,6 +60,8 @@
60 60   #createNumberElement($elementDataObj $elementType)
61 61   #elseif($elementType == "email")
62 62   #createEmailElement($elementDataObj $elementType)
63 + #elseif($elementType == "password")
64 + #createPasswordElement($elementDataObj $elementType)
63 63   #elseif($elementType == "range")
64 64   #if($elementDataObj.range-minmax)
65 65   #set($minmax = $elementDataObj.range-minmax.split('-'))
... ... @@ -137,26 +137,27 @@
137 137   #set($codespace = "code")
138 138   #end
139 139  
140 - #set($nameExcludeRef = $codespace)
141 - #set($spaceAbsRef = $space.replaceAll('([%_!])', '!$1'))
142 - #set($query_add_xobj = $services.query.xwql("select space.name from XWikiSpace as space where space.parent = :space and space.name <> :nameExclude and space.name <> 'WebPreferences' order by space.name"))
143 -
144 - ## Add XObjects to current child spaces so the spaces can be queried on the XObject to generate the select options.
145 - #set($result_add_xobj = $query_add_xobj.bindValue('space', $spaceAbsRef).bindValue('nameExclude', $nameExcludeRef).addFilter('unique').execute())
146 - #foreach($item in $result_add_xobj)
147 - #set($doc = $xwiki.getDocument("${space}.${item}.WebHome"))
148 - #set($rightXObj = $doc.getObject("assets.pagemaker.pagemakerClass", true))
149 - #set($discard = $rightXObj.set('pmSpaceOrder', $foreach.count))
150 - #set($discard = $doc.save())
142 + #if(!$isGuest)
143 + ## Add XObjects to current child spaces so the spaces can be queried on the XObject to generate the select options.
144 + #set($nameExcludeRef = $codespace)
145 + #set($spaceAbsRef = $space.replaceAll('([%_!])', '!$1'))
146 + #set($query_add_xobj = $services.query.xwql("select space.name from XWikiSpace as space where space.parent = :space and space.name <> :nameExclude and space.name <> 'WebPreferences' order by space.name"))
147 + #set($result_add_xobj = $query_add_xobj.bindValue('space', $spaceAbsRef).bindValue('nameExclude', $nameExcludeRef).addFilter('unique').execute())
148 + #foreach($item in $result_add_xobj)
149 + #set($doc = $xwiki.getDocument("${space}.${item}.WebHome"))
150 + #set($rightXObj = $doc.getObject("assets.pagemaker.pagemakerClass", true))
151 + #set($discard = $rightXObj.set('pmSpaceOrder', $foreach.count))
152 + #set($discard = $doc.save())
153 + #end
151 151   #end
152 152  
153 153   #set($spaceExcludeRef = $space.replaceAll('([%_!])', '!$1').concat(".${codespace}"))
154 154   #set($spaceLikeRef = $space.replaceAll('([%_!])', '!$1').concat('.%'))
155 155   #set($query = $services.query.xwql("from doc.object(assets.pagemaker.pagemakerClass) met where doc.space like :space and doc.space <> :spaceExclude and doc.name <> 'WebPreferences' order by met.pmSpaceOrder asc"))
159 + #set($result = $query.bindValue('space', $spaceLikeRef).bindValue('spaceExclude', $spaceExcludeRef).addFilter('unique').execute())
156 156  
157 157   ## Generate the select options from all child spaces that have the 'assets.pagemaker.pagemakerClass' XClass.
158 158   ## The order is still random but the JSON can be extracted from the console with the 'select-spaces-json' attribute.
159 - #set($result = $query.bindValue('space', $spaceLikeRef).bindValue('spaceExclude', $spaceExcludeRef).addFilter('unique').execute())
160 160   #foreach($item in $result)
161 161   #set($doc = $xwiki.getDocument($item))
162 162   <option value="$doc.space">$doc.getTitle()</option>
... ... @@ -165,27 +165,29 @@
165 165   #set($json = $O_elementData.select-json)
166 166   #foreach($key in $json.keySet())
167 167   #set($spaceDocTitle = $json.get($key))
168 - #set($spaceDoc = $xwiki.getDocument("${key}.WebHome")) ## Fetch doc or create one if it does not exist by this name.
169 - #set($spaceXObj = $spaceDoc.getObject("assets.pagemaker.pagemakerClass", true)) ## Get or create the needed object.
170 - #set($order_error = ($spaceXObj.getProperty('pmSpaceOrder').value != $foreach.count))
171 - #set($title_error = ($spaceDoc.getTitle() != $spaceDocTitle))
172 - #if($spaceDoc.isNew()) ## Doc did not exist so spaceDoc needs a title and a default locale.
173 - #set($discard = $spaceDoc.setTitle($spaceDocTitle)) ## Title.
174 - #set($discard = $spaceDoc.setDefaultLocale("en")) ## Locale.
175 - #set($discard = $spaceXObj.set("pmSpaceOrder", $foreach.count)) ## Set the property with the (correct) value.
176 - #set($discard = $spaceDoc.save())
177 - #else
178 - #if($title_error) ## Doc did exist but the title did not match with the JSON value.
179 - #set($discard = $spaceDoc.setTitle($spaceDocTitle))
180 - #end
181 - #if($order_error) ## Either the property does not exist or the value is incorrect.
171 + #if(!$isGuest)
172 + #set($spaceDoc = $xwiki.getDocument("${key}.WebHome")) ## Fetch doc or create one if it does not exist by this name.
173 + #set($spaceXObj = $spaceDoc.getObject("assets.pagemaker.pagemakerClass", true)) ## Get or create the needed object.
174 + #set($order_error = ($spaceXObj.getProperty('pmSpaceOrder').value != $foreach.count))
175 + #set($title_error = ($spaceDoc.getTitle() != $spaceDocTitle))
176 + #if($spaceDoc.isNew()) ## Doc did not exist so spaceDoc needs a title and a default locale.
177 + #set($discard = $spaceDoc.setTitle($spaceDocTitle)) ## Title.
178 + #set($discard = $spaceDoc.setDefaultLocale("en")) ## Locale.
182 182   #set($discard = $spaceXObj.set("pmSpaceOrder", $foreach.count)) ## Set the property with the (correct) value.
183 - #end
184 - #if($title_error || $order_error) ## Save only if changed
185 185   #set($discard = $spaceDoc.save())
181 + #else
182 + #if($title_error) ## Doc did exist but the title did not match with the JSON value.
183 + #set($discard = $spaceDoc.setTitle($spaceDocTitle))
184 + #end
185 + #if($order_error) ## Either the property does not exist or the value is incorrect.
186 + #set($discard = $spaceXObj.set("pmSpaceOrder", $foreach.count)) ## Set the property with the (correct) value.
187 + #end
188 + #if($title_error || $order_error) ## Save only if changed
189 + #set($discard = $spaceDoc.save())
190 + #end
186 186   #end
187 187   #end
188 - <option value="$key">$json.get($key)</option>
193 + <option value="$key">$spaceDocTitle</option>
189 189   #end
190 190   #end
191 191   </select>