_______________
From: users-boun...@xwiki.org [users-boun...@xwiki.org] On Behalf Of Vincent 
Massol [vinc...@massol.net]
Sent: 24 February 2012 09:59
To: XWiki Users
Subject: Re: [xwiki-users] understanding Livetable Macro (XE 2.4.30451)

>> Would be great to capitalize on this thread and improve the documentation of 
>> the Livetable macro on extensions.xwiki.org...
>>
>> :)
>>
>> Thanks
>> -Vincent

I'll do my best to improve that documentation once I understand the macro! 
Thanks to all of you for your work!

Cheers,

Ricardo

On Feb 24, 2012, at 9:52 AM, Marius Dumitru Florea wrote:

> On Thu, Feb 23, 2012 at 6:58 PM,
> <ricardo.julio.rodriguez.fernan...@sergas.es> wrote:
>> Thanks! Please, see below...
>> ________________________________________
>> From: users-boun...@xwiki.org [users-boun...@xwiki.org] On Behalf Of Marius 
>> Dumitru Florea [mariusdumitru.flo...@xwiki.com]
>> Sent: 22 February 2012 12:39
>> To: XWiki Users
>> Subject: Re: [xwiki-users] understanding Livetable Macro (XE 2.4.30451)
>>
>> On Wed, Feb 22, 2012 at 1:06 AM,
>> <ricardo.julio.rodriguez.fernan...@sergas.es> wrote:
>>> Hi! Thanks for your detailed answer. Please, see below...
>>> --
>>> Ricardo Rodríguez
>>> Research Management and Promotion Technician
>>> Health Research Institute of Santiago de Compostela (IDIS)
>>> http://www.idisantiago.es
>>> ________________________________________
>>> From: users-boun...@xwiki.org [users-boun...@xwiki.org] On Behalf Of Marius 
>>> Dumitru Florea [mariusdumitru.flo...@xwiki.com]
>>> Sent: 20 February 2012 09:03
>>> To: XWiki Users
>>> Subject: Re: [xwiki-users] understanding Livetable Macro (XE 2.4.30451)
>>>
>>> Hi Ricardo,
>>>
>>> On Sun, Feb 19, 2012 at 12:25 PM,
>>> <ricardo.julio.rodriguez.fernan...@sergas.es> wrote:
>>>> Hi all!
>>>>
>>>> First of all, please, allow me to thank again all XWiki Team for this 
>>>> great framework! It could be it happens that on Sunday I'm prone to purple 
>>>> prose, but I do think I'll feel the same tomorrow morning! :-)
>>>>
>>>> Now, some doubts here...
>>>>
>>>> I'm not able to understand how filtering does work in Livetable Macro. For 
>>>> instance, I get a JSON file including a number of results following a 
>>>> modified getgroupmembers.vm. Here the line of getgroupmembers getting 
>>>> members column
>>>>
>>>>    "member"   : "$mdoc.getTranslatedDocument().title #if($hasAdmin || 
>>>> $isAdvancedUser) (#if($wikiname != 'local')$wikiname:#end$m)#end",
>>>>
>>>> and one of the items in the JSON file...
>>>>
>>>>                    {
>>>>    "fullname"     : "XWiki.XWikiIDISC04",
>>>>    "prettyname"   : "XWikiIDISC04 (XWiki.XWikiIDISC04)",
>>>>    "wikiname"     : "local",
>>>>    "memberurl"    : "/bin/XWiki/XWikiIDISC04",
>>>>    "docurl"       : "/bin/XWiki/XWikiIDISArealNeurology",
>>>>    "grayed"       : "false",
>>>>    "doc_viewable" : "true",
>>>>    "doc_hasadmin" : "${xwiki.hasAccessLevel('admin', $context.user, 
>>>> $doc)}",
>>>>    "member"   : "Neurobiology   (XWiki.XWikiIDISC04)",
>>>>    "member_url" : "/bin/XWiki/XWikiIDISC04",
>>>>    "doc_delete_url" : 
>>>> "/bin/XWiki/XWikiIDISArealNeurology?xpage=deletegroupmember&fullname=XWiki.XWikiIDISC04&ajax=true"
>>>>   }
>>>>
>>>> The Livetable Macro instance showing group membership reads...
>>>>
>>>> #set($columnOptions = {
>>>>  "member" : {'link': 'auto', 'type': 'text', 'displayName': 'Research 
>>>> groups'},
>>>>
>>>
>>>> But if I use strings content in $mdoc.getTranslatedDocument().title, I get 
>>>> no results in the filtered database. only strings in $m (showing the 
>>>> fullname of the document) work fine. You could check this behaviour on 
>>>> your own here...
>>>>
>>>> http://atrium_km.idisantiago.es/bin/XWiki/XWikiIDISArealNeurology
>>>>>
>>>>> With Firebug (or any other browser tool that catches XmlHttpRequests)
>>>>> you can see that when you filter the live table (e.g. type 'logy') a
>>>>> request like this is made:
>>>>>
>>>>> http://atrium_km.idisantiago.es/bin/XWiki/XWikiIDISArealNeurology?xpage=getgroupmembers&offset=1&limit=15&reqNo=5&member=logy&sort=member&dir=asc
>>>>>
>>>>> Notice 'member=logy' which specifies the filter. Now if you search
>>>>> getgroupmembers.vm for '$request.member' (that's how request
>>>>> parameters are accessed) you'll see why group members are filtered by
>>>>> their document name and not by their document title.
>>>>>
>>>
>>> Thanks for the explanation. Are these lines the ones concerned in this task?
>>>
>>> #set($rm = $xwiki.rightsmanager)
>>> #if($request.member && !$request.member.trim().equals(''))
>>
>>>  #set($countm = $rm.getAllMatchedMembersNamesForGroup($doc.fullName, 
>>> $request.member, 0, 0, $order).size())
>>>  #set($members = $rm.getAllMatchedMembersNamesForGroup($doc.fullName, 
>>> $request.member, $limit, $off, $order))
>>
>>>>>> I replaced these two lines with:
>>>>>>
>>>>>> ----------8<----------
>>>>>> ## Statement to filter group members by their translated title.
>>>>>> #set($statement = "FROM BaseObject as groupObject, StringProperty as
>>>>>> memberField, XWikiDocument as memberDoc WHERE groupObject.name =
>>>>>> :groupName and groupObject.className = 'XWiki.XWikiGroups' and
>>>>>> groupObject.id = memberField.id.id and memberDoc.fullName =
>>>>>> memberField.value and (memberDoc.language = :language or
>>>>>> (memberDoc.language = '' and memberDoc.defaultLanguage = :language))
>>>>>> and lower(memberDoc.title) like :titleFilter")
>>>>>> ## Determine the member count.
>>>>>> #set($countStatement = "SELECT count(memberField.value) $statement")
>>>>>> #set($query = $services.query.hql($countStatement))
>>>>>> #set($query = $query.bindValue('groupName', $doc.fullName))
>>>>>> #set($query = $query.bindValue('language', $context.language))
>>>>>> #set($query = $query.bindValue('titleFilter',
>>>>>> "%$!request.member.toLowerCase()%"))
>>>>>> #set($countm = $query.execute().get(0))
>>>>>> ## Retrieve a subset of the filtered members.
>>>>>> #set($selectStatement = "SELECT memberField.value $statement ORDER BY
>>>>>> memberDoc.title $order")
>>>>>> #set($query = 
>>>>>> $services.query.hql($selectStatement).setLimit($limit).setOffset($off))
>>>>>> #set($query = $query.bindValue('groupName', $doc.fullName))
>>>>>> #set($query = $query.bindValue('language', $context.language))
>>>>>> #set($query = $query.bindValue('titleFilter',
>>>>>> "%$!request.member.toLowerCase()%"))
>>>>>> #set($members = $query.execute())
>>>>>> ---------->8----------
>>>>>>
>>>>>> and it worked for me on a 4.0 snapshot. I'll let you adapt it for your
>>>>>> older version of XWiki Enterprise.
>>>>>>
>>>>>> Hope this helps,
>>>>>> Marius
>>
>> It helped a lot! It is now working nicely. This instalation has suffered a 
>> lot with exceptions related with Java memory handling. During the trials to 
>> get the scrip working, I've had to restart the server several times. We have 
>> being working on this a couple of years ago to no avail. Right now, it seems 
>> to me that it is time for a new upgrade.
>>
>> I've had to done a couple of minor changes:
>>
>> 1. To remove $order from #set($selectStatement = "SELECT memberField.value 
>> $statement ORDER BY memberDoc.title $order"). This parameter there causes 
>> the query to fail. At lease here running XWiki Enterprise 2.4.30451
>>
>> 2. To sligthly modify $statement. If I only use groupObject.className = 
>> 'XWiki.XWikiGroups', the script works to filter groups including other 
>> groups. But not for groups including users or any other kind of document. I 
>> modified this condition to read... (groupObject.className = 
>> 'XWiki.XWikiGroups' or groupObject.className = 'XWiki.XWikiUsers').
>>
>> With this two changes, I'm now sit-back and enjoying these nice Livetables. 
>> I'm sure users will enjoy as well!
>>
>> Thank you for the example and for following this thread! I keep catching up 
>> once again with XWiki!
>>
>> Please, let me add two more questions:
>>
>
>> 1. As I am not using  $rm.getAllMatchedMembersNamesForGroup to filter 
>> records, the button changing order of the list is not longer available. 
>> Please, is there any way of getting it working at the same time I use the 
>> customized script to get **$countm** and **$members**?
>
> You removed the ORDER By clause from the select statement. The reason
> it was failing the query is probably because (by the book) you can
> sort only on a field that is selected. HSQLDB didn't complained when I
> tested but MySql and the rest don't accept this probably. If you want
> to keep the ORDER BY clause then you have to include memberDoc.title
> in the SELECT clause:
>
> #set($selectStatement = "SELECT memberField.value, memberDoc.title
> $statement ORDER BY memberDoc.title $order")
>
> but then you also have to extract the members list from the query
> result because now each result row is a list with two values.
>
>>
>> 2. The only portion of the simple pages showing group membership I'm not 
>> able to translate is the string introducing the number of results show and 
>> the number of them included in each page. To be clearer...
>>
>> http://atrium_km.idisantiago.es/bin/download/XWiki/XWikiIDISAreaOncology/atriumkmResults.png
>>
>> In this case, it reads "Resultados 1 -7 de 7 per page of [selector]". 
>> Resultados and de are in Spanish. Per page of, in English. Changing the 
>> current language doesn't affect to this text chunck.
>>
>> Please, where could I correct this behavior?
>
> Looks like platform.livetable.pagesizeLabel translation key is not
> translated into Spanish. It is in the most recent versions of XWiki:
>
> platform.livetable.pagesizeLabel=por p\u00E1gina de
>
> In order to fix this you have to copy
> ApplicationResources_es.properties from the xwiki-core jar (located in
> WEB-INF/lib) to WEB-INF/classes and add the above line. A server
> restart is needed.
>
> Hope this helps,
> Marius
>
>>
>> Thank you so much for all your help!
>>
>> Ricardo
>>
>>
>>> #else
>>>  #set($countm  = $rm.countAllMembersNamesForGroup($doc.fullName))
>>>  #set($members = $rm.getAllMatchedMembersNamesForGroup($doc.fullName, 
>>> $util.null, $limit, $off, $order))
>>> #end
>>>
>>> $doc.fullName clearly appears as a parameter passed to 
>>> getAllMatchedMembersNameForGroup method.
>>>
>>>>> You can find the rights manager source code here
>>>>> https://github.com/xwiki/xwiki-platform/tree/master/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/plugin/rightsmanager
>>>>> . Unfortunately it doesn't have a method to retrieve group member
>>>>> matched by their document title so you'll have to write this code by
>>>>> yourself (either directly in getgroupmembers.vm or in a script service
>>>>> http://platform.xwiki.org/xwiki/bin/view/DevGuide/WritingComponents#HFromwikipages
>>>>> )
>>>
>>> I'm afraid I'm not a developer myself! It is not easy for me to understand 
>>> that source code. But, even not been a Java person, is not possible to pass 
>>> other fields to the method to get the Livetable filtered? Please, why?
>>>
>>> I've also found this...
>>>
>>> http://www.xwiki.org/xwiki/bin/view/FAQ/Why+is+it+not+possible+to+filter+on+doc+title+in+a+Livetable#History
>>>
>>> I can understand this, but I would like to find/be able to implement a 
>>> solution here (XWiki Enterprise 2.4.30451) because:
>>>
>>> 1. Livetables created showing group members are a really useful tool here. 
>>> XWiki groups are rather convenient to organize users and groups and assign 
>>> them rights on the set of documents of their concern.
>>> 2. Document title is a really, at least until now!, useful piece of 
>>> information that allow us, for instance, to store different translations of 
>>> the name of a group and recover them using getTranslatedDocument().
>>> 3. read-only SQL access to xwikidoc.XWD_TITLE and, for instance, XWD_PARENT 
>>> offers us a quite useful source of information to tabulate information on 
>>> users and groups. It is simple to create new documents with a given 
>>> structure in their names to easily filter contents by type of document.
>>>
>>> Livetable filtering is an impressive tool. I would like to enable our users 
>>> to use filtering by name in documents like this...
>>>
>>> http://atrium_km.idisantiago.es/bin/XWiki/XWikiIDISAreaEndocrinology?language=en
>>>
>>> All pages have title: we have edited it in the three available languages.
>>>
>>> Must I go through the creation of a new component to get it? Is there any 
>>> simpler way of achieving this? Any workaround to be used until I'm able to 
>>> understand how does work the whole thing and to write that component?
>>>
>>> Thank you for your help,
>>>
>>> Ricardo
>>>
>>>>>
>>>>> Hope this helps,
>>>>> Marius
>>>
>>>>
>>>>
>>>> Please, why? How could I use $mdoc.getTranslatedDocument().title to filter 
>>>> the list?
>>>>
>>>> Thank you for your help!!!
>>>>
>>>> --
>>>> Ricardo Rodríguez
>>>> Research Management and Promotion Technician
>>>> Health Research Institute of Santiago de Compostela (IDIS)
>>>> http://www.idisantiago.es
>>>>
>>>> Nota: A información contida nesta mensaxe e os seus posibles documentos 
>>>> adxuntos é privada e confidencial e está dirixida únicamente ó seu 
>>>> destinatario/a. Se vostede non é o/a destinatario/a orixinal desta 
>>>> mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non 
>>>> está autorizada.
>>>>
>>>> Nota: La información contenida en este mensaje y sus posibles documentos 
>>>> adjuntos es privada y confidencial y está dirigida únicamente a su 
>>>> destinatario/a. Si usted no es el/la destinatario/a original de este 
>>>> mensaje, por favor elimínelo. La distribución o copia de este mensaje no 
>>>> está autorizada.
>>>>
>>>> See more languages: http://www.sergas.es/aviso_confidencialidad.htm
>>>> _______________________________________________
>>>> users mailing list
>>>> users@xwiki.org
>>>> http://lists.xwiki.org/mailman/listinfo/users
>>> _______________________________________________
>>> users mailing list
>>> users@xwiki.org
>>> http://lists.xwiki.org/mailman/listinfo/users
>>>
>>> Nota: A información contida nesta mensaxe e os seus posibles documentos 
>>> adxuntos é privada e confidencial e está dirixida únicamente ó seu 
>>> destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, 
>>> por favor elimínea. A distribución ou copia desta mensaxe non está 
>>> autorizada.
>>>
>>> Nota: La información contenida en este mensaje y sus posibles documentos 
>>> adjuntos es privada y confidencial y está dirigida únicamente a su 
>>> destinatario/a. Si usted no es el/la destinatario/a original de este 
>>> mensaje, por favor elimínelo. La distribución o copia de este mensaje no 
>>> está autorizada.
>>>
>>> See more languages: http://www.sergas.es/aviso_confidencialidad.htm
>>> _______________________________________________
>>> users mailing list
>>> users@xwiki.org
>>> http://lists.xwiki.org/mailman/listinfo/users
>> _______________________________________________
>> users mailing list
>> users@xwiki.org
>> http://lists.xwiki.org/mailman/listinfo/users
>>
>> Nota: A información contida nesta mensaxe e os seus posibles documentos 
>> adxuntos é privada e confidencial e está dirixida únicamente ó seu 
>> destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, 
>> por favor elimínea. A distribución ou copia desta mensaxe non está 
>> autorizada.
>>
>> Nota: La información contenida en este mensaje y sus posibles documentos 
>> adjuntos es privada y confidencial y está dirigida únicamente a su 
>> destinatario/a. Si usted no es el/la destinatario/a original de este 
>> mensaje, por favor elimínelo. La distribución o copia de este mensaje no 
>> está autorizada.
>>
>> See more languages: http://www.sergas.es/aviso_confidencialidad.htm
>> _______________________________________________
>> users mailing list
>> users@xwiki.org
>> http://lists.xwiki.org/mailman/listinfo/users
> _______________________________________________
> users mailing list
> users@xwiki.org
> http://lists.xwiki.org/mailman/listinfo/users

_______________________________________________
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users

Nota: A información contida nesta mensaxe e os seus posibles documentos 
adxuntos é privada e confidencial e está dirixida únicamente ó seu 
destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, por 
favor elimínea. A distribución ou copia desta mensaxe non está autorizada.

Nota: La información contenida en este mensaje y sus posibles documentos 
adjuntos es privada y confidencial y está dirigida únicamente a su 
destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, 
por favor elimínelo. La distribución o copia de este mensaje no está autorizada.

See more languages: http://www.sergas.es/aviso_confidencialidad.htm
_______________________________________________
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to