General Actions:
Log-in
Register
Wiki:
games
▼
:
Document Index
»
Space:
XWiki
▼
:
Document Index
»
Page:
LiveTableResultsMacros
Search
default
Page Actions:
Export
▼
:
Export as PDF
Export as RTF
Export as HTML
More actions
▼
:
Print preview
View Source
Wiki Home
»
XWiki Space
»
Livetable Results Macros
Wiki source code of
Livetable Results Macros
Last modified by
Administrator
on 2011/11/06 20:09
Content
·
Comments
(0)
·
Annotations
(0)
·
Attachments
(0)
·
History
·
Information
Hide line numbers
1: {{velocity output="false"}} 2: #** 3: * Macro to get the results of a livetable data call. 4: * This page is called from live grids via Ajax with the argument xpage=plain. It returns a 5: * set of results serialized in JSON. 6: *# 7: #macro(gridresult $className $collist) 8: #gridresultwithfilter($className $collist '' '' []) 9: #end 10: 11: 12: 13: #** 14: * Macro to get the results of a livetable data call. 15: * This page is called from live grids via Ajax with the argument xpage=plain. It returns a 16: * set of results serialized in JSON. 17: *# 18: #macro(gridresultwithfilter $className $collist $filterfrom $filterwhere $filterParams) 19: #if("$!{request.xpage}" == 'plain') 20: $response.setContentType('application/json') 21: #end 22: #set($offset = $util.parseInt($request.get('offset'))) 23: ## offset starts from 0 in velocity and 1 in javascript 24: #set($offset = $offset - 1) 25: #if($offset < 0) 26: #set($offset = 0) 27: #end 28: #set($limit = $util.parseInt($request.get('limit'))) 29: #set($tablelist = $util.arrayList) 30: ## 31: ## 32: ## 33: ## Compute the query to use for retrieving data 34: ## 35: ## 36: ## additional columns, should *not* contain parameters, all added column names must be filtered 37: #set($fromSql = '') 38: ## parametrized filter part of the query 39: #set($whereSql = '') 40: ## list of parameters to use with $whereSql 41: #set($whereParams = []) 42: #set($class = $xwiki.getDocument($className).getxWikiClass()) 43: ## 44: ## Exclude Blacklisted spaces ($blacklistedSpaces is set in xwikivars.vm) 45: ## 46: #if($blacklistedSpaces.size() > 0) 47: #set($whereSql = "${whereSql} and doc.space not in (") 48: #foreach ($blacklistedSpace in $blacklistedSpaces) 49: #if($velocityCount > 1)#set ($whereSql = "${whereSql},")#end 50: #set($whereSql = "${whereSql}?") 51: #set($discard = $whereParams.add("$!{blacklistedSpace}")) 52: #end 53: #set($whereSql = "${whereSql})") 54: #end 55: ## 56: ## Add the columns needed for the actual data 57: ## 58: #foreach($colname in $collist) 59: #livetable_addColumnToQuery($colname) 60: #end 61: ## 62: ## Tag filtering 63: ## 64: #if($request.tag) 65: #set($fromSql = "${fromSql} , BaseObject as tobject, DBStringListProperty as tagprop") 66: #set($whereSql = "${whereSql} and tobject.className='XWiki.TagClass' and tobject.name=doc.fullName and tobject.id=tagprop.id.id and tagprop.id.name='tags' and (") 67: #foreach($tag in $request.getParameterValues('tag')) 68: #set($tag = $util.decodeURI($tag)) 69: #if($velocityCount > 1) #set($whereSql = "${whereSql} and ") #end 70: #set($whereSql = "${whereSql} ? in elements(tagprop.list)") 71: #set($discard = $whereParams.add("${tag}")) 72: #end 73: #set($whereSql = "${whereSql})") 74: #end 75: ## 76: ## 77: ## Order 78: ## 79: #set($order = "$!request.sort") 80: #if($order != '') 81: #set($orderDirection = "$!{request.get('dir').toLowerCase()}") 82: #if("$!orderDirection" != '' && "$!orderDirection" != 'asc') 83: #set($orderDirection = 'desc') 84: #end 85: #if($order == 'description') 86: #set($tableAlias = 'dtable') 87: #else 88: #set($tableAlias = $order) 89: #end 90: ## only safe version should be used in SQL queries 91: #set($safe_tableAlias = "$!{tableAlias.replaceAll('[^a-zA-Z0-9_.]','')}") 92: ## 93: #if($order.startsWith('doc.')) 94: #set($orderSql = " order by ${safe_tableAlias.replace('_','.')} ${orderDirection}") 95: #elseif($tablelist.contains($tableAlias)) 96: #set ($multiselect = "$!{class.get($order).getProperty('multiSelect').getValue()}") 97: #if ($multiselect != '1') 98: #set ($orderSql = " order by ${safe_tableAlias}.value ${orderDirection}") 99: #end 100: #elseif($order == 'averagevote') 101: #livetable_getTableName($order) 102: #set($fromSql = "${fromSql}, BaseObject as objratings, ${tableName} ${safe_tableAlias}") 103: #set($whereSql = "${whereSql} and doc.fullName=objratings.name and objratings.className='XWiki.AverageRatingsClass' and objratings.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.name = ?") 104: #set($discard = $whereParams.add("${order}")) 105: #set($orderSql = " order by ${safe_tableAlias}.value ${orderDirection}") 106: #else 107: #set($multiselect = $class.get($order).getProperty('multiSelect').getValue()) 108: #if("$multiselect" != '1') 109: #livetable_getTableName($order) 110: #set($fromSql = "${fromSql}, ${tableName} ${safe_tableAlias}") 111: #set($whereSql = "${whereSql} and obj.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.name = ?") 112: #set($discard = $whereParams.add("${order}")) 113: #set($orderSql = " order by ${safe_tableAlias}.value ${orderDirection}") 114: #end 115: #end 116: #end 117: ## 118: ## 119: ## Compute the final queries 120: ## 121: #set($sqlParams = []) 122: #set($tagsMatchingParams = []) 123: #set($allMatchingParams = []) 124: #if("$!className" != '') 125: ## Class query 126: #set($countSql = ", BaseObject as obj $!fromSql $!filterfrom where obj.name=doc.fullName and obj.className = ? and doc.fullName not in (?, ?) $!whereSql $!filterwhere") 127: #set($discard = $sqlParams.addAll(["${className}", "${className}Template", ${className.replaceAll('Class$', 'Template')}])) 128: #set($discard = $sqlParams.addAll($whereParams)) 129: ## 130: #set($tagsMatchingFiltersFrom = ", BaseObject as obj $!fromSql $!filterfrom") 131: #set($tagsMatchingFiltersWhere = "obj.name=doc.fullName and obj.className = ? and doc.fullName not in (?, ?) $!whereSql $!filterwhere") 132: #set($discard = $tagsMatchingParams.addAll(["${className}", "${className}Template", ${className.replaceAll('Class$', 'Template')}])) 133: #set($discard = $tagsMatchingParams.addAll($whereParams)) 134: ## 135: #set($allMatchingTagsFrom = ", BaseObject as obj $!filterfrom") 136: #set($allMatchingTagsWhere = "obj.name=doc.fullName and obj.className = ? and doc.fullName not in (?, ?) $!filterwhere") 137: #set($discard = $allMatchingParams.addAll(["${className}", "${className}Template", ${className.replaceAll('Class$', 'Template')}])) 138: ## 139: #if($filterParams) 140: #set($discard = $sqlParams.addAll($filterParams)) 141: #set($discard = $tagsMatchingParams.addAll($filterParams)) 142: #set($discard = $allMatchingParams.addAll($filterParams)) 143: #end 144: #else 145: ## Document query 146: #set($countSql = "$!fromSql $!filterfrom where 1=1 $!whereSql $!filterwhere") 147: #set($discard = $sqlParams.addAll($whereParams)) 148: ## 149: #set($tagsMatchingFiltersFrom = "$!fromSql $!filterfrom") 150: #set($tagsMatchingFiltersWhere = "1=1 $!whereSql $!filterwhere") 151: #set($discard = $tagsMatchingParams.addAll($whereParams)) 152: ## 153: #set($allMatchingTagsFrom = "$!filterfrom") 154: #set($allMatchingTagsWhere = "1=1 $!filterwhere") 155: ## 156: #if($filterParams) 157: #set($discard = $sqlParams.addAll($filterParams)) 158: #set($discard = $tagsMatchingParams.addAll($filterParams)) 159: #set($discard = $allMatchingParams.addAll($filterParams)) 160: #end 161: #end 162: ## 163: ## TagCloud matching the current filters 164: #set($tagsMatchingFilters = $xwiki.tag.getTagCountForQuery($tagsMatchingFiltersFrom, $tagsMatchingFiltersWhere, $tagsMatchingParams)) 165: ## TagCloud matching all the documents used by the livetable 166: #set($allMatchingTags = $xwiki.tag.getTagCountForQuery($allMatchingTagsFrom, $allMatchingTagsWhere, $allMatchingParams)) 167: #set($sql = "$countSql $!{orderSql}") 168: #set($items = $xwiki.searchDocuments($sql, $limit, $offset, $sqlParams)) 169: #set($totalItems = $xwiki.countDocuments($countSql, $sqlParams)) 170: #set($returnedItems = $items.size()) 171: ## 172: ## 173: ## ============================================== 174: ## json starts 175: ## ============================================== 176: { 177: #if("$!request.sql" == '1') 178: "sql": "$escapetool.javascript($sql)", 179: "countsql": "$escapetool.javascript($countSql)", 180: "params": "$escapetool.javascript($sqlParams)" 181: #end 182: "totalrows": $totalItems, 183: "matchingtags": { 184: #foreach($tag in $tagsMatchingFilters.keySet()) 185: #if($velocityCount > 1) , #end 186: "$escapetool.javascript($tag)": {} 187: #end 188: }, 189: "tags" : [ 190: #foreach($tag in $allMatchingTags.keySet()) 191: #if($velocityCount > 1) , #end 192: {"tag": "$escapetool.javascript($tag)", "count": $allMatchingTags.get($tag)} 193: #end 194: ], 195: "returnedrows": #if($returnedItems < $limit) $returnedItems #else $limit #end, 196: "offset": $mathtool.add($offset, 1), 197: "reqNo": $util.parseInt($request.reqNo), 198: "rows": [ 199: #foreach($item in $items) 200: #set($viewable = $xwiki.hasAccessLevel('view', $context.user, "${context.database}:${item}")) 201: #if($velocityCount > 1) , #end 202: { 203: "doc_viewable" : $viewable, 204: #if(!$viewable) 205: "doc_fullname" : "$escapetool.javascript(${context.database}):$escapetool.javascript(${item})" 206: #else 207: #set($itemDoc = $xwiki.getDocument($item)) 208: #set($fullname = "${itemDoc.wiki}:${itemDoc.space}.${itemDoc.name}") 209: #set($discard = $itemDoc.use($className)) 210: #set($itemUrl = $xwiki.getURL($item)) 211: #set($spaceUrl = $xwiki.getURL("${itemDoc.wiki}:${itemDoc.space}.WebHome")) 212: #if($xwiki.isVirtualMode()) 213: #set($wiki = $itemDoc.wiki) 214: #set($wikiUrl = $xwiki.getURL("${itemDoc.wiki}:Main.WebHome")) 215: #end 216: #set($editUrl = $itemDoc.getURL($itemDoc.defaultEditMode)) 217: #set($copyUrl = $itemDoc.getURL('view', 'xpage=copy')) 218: #set($deleteUrl = $itemDoc.getURL('delete')) 219: #set($renameUrl = $itemDoc.getURL('view', 'xpage=rename&step=1')) 220: #set($rightsUrl = $itemDoc.getURL('edit', 'editor=rights')) 221: "doc_name" : "$escapetool.javascript($itemDoc.name)", 222: "doc_fullname" : "$escapetool.javascript($fullname)", 223: "doc_space" : "$escapetool.javascript(${itemDoc.space})", 224: "doc_url" : "$escapetool.javascript(${itemUrl})", 225: "doc_space_url" : "$escapetool.javascript(${spaceUrl})", 226: #if($xwiki.isVirtualMode()) 227: "doc_wiki" : "$escapetool.javascript($wiki)", 228: "doc_wiki_url" : "$escapetool.javascript($wikiUrl)", 229: #end 230: "doc_hasadmin" : $xwiki.hasAdminRights(), 231: "doc_hasedit" : $xwiki.hasAccessLevel('edit', $context.user, $fullname), 232: "doc_hasdelete" : $xwiki.hasAccessLevel('delete', $context.user, $fullname), 233: "doc_edit_url" : "$escapetool.javascript($editUrl)", 234: "doc_copy_url" : "$escapetool.javascript($copyUrl)", 235: "doc_delete_url" : "$escapetool.javascript($deleteUrl)", 236: "doc_rename_url" : "$escapetool.javascript($renameUrl)", 237: "doc_rights_url" : "$escapetool.javascript($rightsUrl)", 238: "doc_author_url" : "$escapetool.javascript($xwiki.getURL($itemDoc.author))", 239: "doc_date" : "$escapetool.javascript(${xwiki.formatDate($itemDoc.date)})", 240: "doc_title" : "$escapetool.javascript($escapetool.xml(${itemDoc.plainTitle}))", 241: "doc_author" : "$escapetool.javascript(${xwiki.getLocalUserName($itemDoc.author, false)})", 242: "doc_creationDate" : "$escapetool.javascript(${xwiki.formatDate($itemDoc.creationDate)})", 243: "doc_creator" : "$escapetool.javascript(${xwiki.getLocalUserName($itemDoc.creator, false)})" 244: #foreach($colname in $collist) 245: #if($colname.startsWith('doc.')) 246: #elseif($colname == '_action') , 247: #set($text = $msg.get("${request.transprefix}actiontext")) 248: "$escapetool.javascript(${colname})" : "$escapetool.javascript(${text})" 249: #elseif($colname == '_attachments') , 250: #livetable_getAttachmentsList($itemDoc) 251: "$escapetool.javascript(${colname})" : "$escapetool.javascript(${attachlist})" 252: #elseif($colname == '_avatar') , 253: #livetable_getAvatar($itemDoc) 254: "$escapetool.javascript(${colname})" : "$escapetool.javascript(${avatar})" 255: #elseif($colname == '_images') , 256: #livetable_getImagesList($itemDoc) 257: "$escapetool.javascript(${colname})" : "$escapetool.javascript(${imagesList})" 258: #else , 259: #set($propClassName = "$!{request.get(${colname.concat('_class')})}") 260: #if($propClassName != '') 261: #set($propClass = $xwiki.getDocument($propClassName).getxWikiClass()) 262: #set($discard = $itemDoc.use($propClassName)) 263: #else 264: #set($propClass = $class) 265: #end 266: ## Retrieve the property type as it might be usefull 267: #set($propType = '') 268: #if($listtool.contains($propClass.getPropertyNames(), $colname)) 269: #set($propType = "$!{propClass.get($colname).type}") 270: #end 271: #set($fieldValue = "$!itemDoc.getValue($colname)") 272: #set($fieldDisplayValue = "$!itemDoc.display($colname, 'view')") 273: #if($fieldDisplayValue == '') 274: #set($fieldDisplayValue = $msg.get("${request.transprefix}emptyvalue")) 275: #end 276: #set($fieldUrl = '') 277: ## only retrieve an URL for a DBListClass item 278: #if($propType == 'DBListClass') 279: #set($fieldUrl = $xwiki.getDocument($fieldValue).getURL()) 280: #if($fieldUrl == $xwiki.getURL('Main.WebHome')) 281: #set($fieldUrl = '') 282: #end 283: #end 284: "$escapetool.javascript(${colname})" : "$escapetool.javascript($fieldDisplayValue.replaceFirst($regextool.quote('{{html clean="false" wiki="false"}}'), '').replaceAll("$regextool.quote('{{/html}}')$", ''))", 285: "$escapetool.javascript(${colname})_value" : "$escapetool.javascript(${fieldValue})", 286: "$escapetool.javascript(${colname})_url" : "$escapetool.javascript(${fieldUrl})" 287: ## reset to the default class 288: #set($discard = $itemDoc.use($className)) 289: #end 290: #end 291: #end 292: } 293: #end 294: ]} 295: ## ============================================== 296: ## json ended 297: ## ============================================== 298: #end 299: 300: 301: #** 302: * Get the name of the Property that should be used for a given livetable column. 303: * NOTE the resulting $tableName is safe to use inside SQL queries 304: *# 305: #macro(livetable_getTableName $colname) 306: #set($propClassName = "$!request.get(${colname.concat('_class')})") 307: #if($propClassName != '') 308: #set($propClass = $xwiki.getDocument($propClassName).getxWikiClass()) 309: #else 310: #set($propClass = $class) 311: #end 312: #set($propType = '') 313: #if($listtool.contains($propClass.getPropertyNames(), $colname)) 314: #set($propType = "$!{propClass.get($colname).type}") 315: #end 316: #if($propType == 'NumberClass') 317: #set($numberType = $propClass.get($colname).getProperty('numberType').getValue()) 318: #if($numberType == 'integer') 319: #set($tableName = 'IntegerProperty') 320: #elseif($numberType == 'float') 321: #set($tableName = 'FloatProperty') 322: #elseif($numberType == 'double') 323: #set($tableName = 'DoubleProperty') 324: #else 325: #set($tableName = 'LongProperty') 326: #end 327: #elseif($propType == 'BooleanClass') 328: #set($tableName = 'IntegerProperty') 329: #elseif($propType == 'DateClass') 330: #set($tableName = 'DateProperty') 331: #elseif($propType == 'TextAreaClass' || $propType == 'UsersClass' || $propType == 'GroupsClass') 332: #set($tableName = 'LargeStringProperty') 333: #elseif($propType == 'StaticListClass' || $propType == 'DBListClass' || $propType == 'DBTreeListClass') 334: #set($multiSelect = $propClass.get($colname).getProperty('multiSelect').getValue()) 335: #set($relationalStorage = $propClass.get($colname).getProperty('relationalStorage').getValue()) 336: #if($multiSelect == 1) 337: #if($relationalStorage == 1) 338: #set($tableName = 'DBStringListProperty') 339: #else 340: #set($tableName = 'StringListProperty') 341: #end 342: #else 343: #set($tableName = 'StringProperty') 344: #end 345: #else 346: #set($tableName = 'StringProperty') 347: #end 348: #end 349: 350: #** 351: * Old alias of the #livetable_getTableName macro. 352: * @deprecated since 2.2.3, use {@link #livetable_getTableName} 353: *# 354: #macro(grid_gettablename $colname) 355: #livetable_getTableName($colname) 356: #end 357: 358: 359: 360: #** 361: * List attachments for a document, putting the result as HTML markup in the $attachlist variable. 362: *# 363: #macro(livetable_getAttachmentsList $itemDoc) 364: #set($attachlist = '') 365: #foreach($attachment in $itemDoc.attachmentList) 366: #set($attachmentUrl = $itemDoc.getAttachmentURL($attachment.filename)) 367: #set($attachlist = "${attachlist}<a href='${attachmentUrl}'>$attachment.filename</a><br/>") 368: #end 369: #end 370: 371: #** 372: * Old alias of the #livetable_getAttachmentsList macro. 373: * @deprecated since 2.2.3, use {@link #livetable_getAttachmentsList} 374: *# 375: #macro(grid_attachlist $itemDoc) 376: #livetable_getAttachmentsList($itemDoc) 377: #end 378: 379: 380: 381: #** 382: * List image attachments for a document, putting the result as HTML markup in the $imagesList variable. 383: *# 384: #macro(livetable_getImagesList $itemDoc) 385: #set($imagesList = '') 386: #foreach ($attachment in $itemDoc.attachmentList) 387: #if($attachment.isImage()) 388: #set($attachmentUrl = $itemDoc.getAttachmentURL($attachment.filename)) 389: #set($imagesList = "${imagesList}<img src='${attachmentUrl}' alt='${attachment.filename}' width='50'/><br/>") 390: #end 391: #end 392: #end 393: 394: #** 395: * Old alias of the #livetable_getImagesList macro. 396: * @deprecated since 2.2.3, use {@link #livetable_getImagesList} 397: *# 398: #macro(grid_photolist $itemDoc) 399: #livetable_getImagesList($itemDoc) 400: #end 401: 402: 403: #** 404: * Generate the HTML code for a user avatar, with a fixed 50px width. 405: *# 406: #macro(livetable_getAvatar $itemDoc) 407: #set ($avatar = "#mediumUserAvatar($itemDoc.fullName)") 408: #set ($avatar = $avatar.trim()) 409: #end 410: 411: #** 412: * Old alias of the #livetable_getAvatar macro. 413: * @deprecated since 2.2.3, use {@link #livetable_getAvatar} 414: *# 415: #macro(grid_avatar $itemDoc) 416: #livetable_getAvatar($itemDoc) 417: #end 418: 419: 420: 421: #** 422: * Macro to extend the query to select the properties for the livetable columns. 423: * NOTE $colname is filtered (all characters but [a-zA-Z0-9_.] are removed) before use 424: *# 425: #macro(livetable_addColumnToQuery $colname) 426: #set($filterValue = "$!{request.get($colname)}") 427: #if($colname == 'description') 428: #set($tableAlias = 'dtable') 429: #else 430: #set($tableAlias = $colname) 431: #end 432: ## only safe versions should be used in SQL queries 433: #set($safe_colname = "$!{colname.replaceAll('[^a-zA-Z0-9_.]','')}") 434: #set($safe_tableAlias = "$!{tableAlias.replaceAll('[^a-zA-Z0-9_.]','')}") 435: ## 436: #set($propType = '') 437: #set($propClassName = "$!request.get(${colname.concat('_class')})") 438: #if($propClassName != '') 439: #set($propClass = $xwiki.getDocument($propClassName).getxWikiClass()) 440: #else 441: #set($propClass = $class) 442: #end 443: #if($propClass && $listtool.contains($propClass.getPropertyNames(), $colname)) 444: #set($propType = "$!{propClass.get($colname).type}") 445: #end 446: ## 447: ## Filter values 448: #if("$!filterValue" != '') 449: #set($discard = $tablelist.add($tableAlias)) 450: #if($colname.startsWith('doc.')) 451: #set($whereSql = "${whereSql} and upper(str(${safe_colname.replace('_','.')})) like upper(?)") 452: #set($discard = $whereParams.add("%${filterValue}%")) 453: #elseif($propType == 'NumberClass' || $propType == 'BooleanClass') 454: #livetable_getTableName($colname) 455: #set($fromSql = "${fromSql}, ${tableName} ${safe_tableAlias}") 456: #set($whereSql = "${whereSql} and obj.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.id.name = ? and ${safe_tableAlias}.value = ?") 457: #set($discard = $whereParams.addAll(["${colname}", $util.parseInt(${filterValue})])) 458: #elseif($propType == 'DateClass') 459: #set($fromSql = "${fromSql}, DateProperty ${safe_tableAlias}") 460: #set($whereSql = "${whereSql} and obj.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.id.name = ? and upper(str(${safe_tableAlias}.value)) like upper(?)") 461: #set($discard = $whereParams.addAll(["${colname}", "%${filterValue}%"])) 462: #elseif($propType == 'TextAreaClass' || $propType == 'UsersClass' || $propType == 'GroupsClass') 463: #set($fromSql = "${fromSql}, LargeStringProperty ${safe_tableAlias}") 464: #set($whereSql = "${whereSql} and obj.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.id.name = ? and upper(${safe_tableAlias}.value) like upper(?)") 465: #set($discard = $whereParams.addAll(["${colname}", "%${filterValue}%"])) 466: #elseif($propType == 'StaticListClass' || $propType == 'DBListClass' || $propType == 'DBTreeListClass') 467: #set($multiSelect = $propClass.get($colname).getProperty('multiSelect').getValue()) 468: #set($relationalStorage = $propClass.get($colname).getProperty('relationalStorage').getValue()) 469: #if($multiSelect == 1) 470: #if($relationalStorage == 1) 471: #set($fromSql = "${fromSql}, DBStringListProperty ${safe_tableAlias}") 472: #set($whereSql = "${whereSql} and obj.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.id.name = ? and ? in elements(${safe_tableAlias}.list)") 473: #set($discard = $whereParams.addAll(["${colname}", "${filterValue}"])) 474: #else 475: #set($fromSql = "${fromSql}, StringListProperty ${safe_tableAlias}") 476: #set($whereSql = "${whereSql} and obj.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.id.name = ? and concat('|', concat(upper(${safe_tableAlias}.textValue), '|')) like upper(?)") 477: #set($discard = $whereParams.addAll(["${colname}", "%|${filterValue}|%"])) 478: #end 479: #else 480: #set($fromSql = "${fromSql}, StringProperty ${safe_tableAlias}") 481: #set($whereSql = "${whereSql} and obj.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.id.name = ? and ${safe_tableAlias}.value = ?") 482: #set($discard = $whereParams.addAll(["${colname}", "${filterValue}"])) 483: #end 484: #else 485: #set($fromSql = "${fromSql}, StringProperty ${safe_tableAlias}") 486: #set($whereSql = "${whereSql} and obj.id=${safe_tableAlias}.id.id and ${safe_tableAlias}.id.name = ? and upper(${safe_tableAlias}.value) like upper(?)") 487: #set($discard = $whereParams.addAll(["${colname}", "%${filterValue}%"])) 488: #end 489: #end 490: #end 491: 492: #** 493: * Old alias of the #livetable_addColumnToQuery macro. 494: * @deprecated since 2.2.3, use {@link #livetable_addColumnToQuery} 495: *# 496: #macro(grid_addcolumn $colname) 497: #livetable_addColumnToQuery($colname) 498: #end 499: 500: {{/velocity}}