Sounds nice and would solveĀ http://jira.xwiki.org/browse/XWIKI-217 nicely :)
Thanks -Vincent On 10 Apr 2014 at 22:37:36, Sergiu Dumitriu ([email protected](mailto:[email protected])) wrote: > Sometimes it's important to be able to decide if the user wants an > existing object by number, an existing object by filter, always a new > object, or an existing or new object. So the request needs to be more > complex. > > New special request parameters proposal: > > withXObject= > /= > _= > _/parsed= > > An is a transparent string, it can be either a randomly > generated string, or a sequence number such as obj42. > > We define the accepted s, for example: > - /action=find | create | findOrCreate | delete > - /match=/ (can appear multiple times to > filter by multiple properties) > - /matchMode=exclusive | and | or (default exclusive) > - /select=first | all (default first) > - /type= > - /updateMode=replace | append (default replace) > > The new _/parsed syntax allows to set > properties based on the generated data, such as the number of a > different object created in the same request. This requires a second > pass through the parameters after the standard readObjectsFromForm > completes. The Velocity context will be populated with the standard API > objects ($xwiki, $xcontext, $services, $doc, $tdoc, $request, > $response...), plus the objects / attachments named in the request. If > /select=all, then a list with the matches is placed in the context. > > For example: > > /save/Some/Page?withXObject=xr1 > &xr1/action=findOrCreate > &xr1/type=XWiki.XWikiRights > &xr1/match=users/XWiki.jdoe > &xr1/match=allow/1 > &xr1_levels=view > &xr1_levels=comment > &withXObject=xr2 > &xr2/action=findOrCreate > &xr2/type=XWiki.XWikiRights > &xr2/match=users/XWiki.jdoe > &xr2/match=allow/0 > &xr2_levels=edit > > ^ This searches for a rights object that specifies allow rights for the > user jdoe. If the object exists, it replaces the levels with "view and > edit". If it doesn't exist, it creates a new one, fills in the "users" > and "allow" properties to the values specified in the match filter, and > sets "levels" to "view and edit". Then it searches for a rights object > that specifies deny rights for the same user, and updates or creates... > > > Another example: > > /save/Some/Page?withXObject=comments > &comments/action=delete > &comments/type=XWiki.XWikiComment > &comments/match=author/XWiki.jdoe > &comments/match=author/xwiki:XWiki.jdoe > &comments/matchMode=or > &comments/select=all > > ^ This searches for all comments posted by jdoe, wiki-prefixed or not, > and deletes them. > > > One more: > > /save/Some/Page?withAttachment=upload1 > &upload1/input=file > &withXObject=photo1 > &photo1/action=create > &photo1/type=Media.PhotoClass > &photo1_file/parsed=${upload1.filename} > &photo1_author=Yousuf Karsh > &photo1_date=1957-03-21 > &withXObject=meta1 > &meta1/action=create > &meta1/type=Media.AnnotationClass > &meta1_target/parsed=Media.PhotoClass_${photo1.number}/rect(130,92,830,1232) > &meta1_comment=The contrast here is fantastic! > &meta1_author/parsed=${xcontext.userReference} > > In one request, this uploads an image, creates a PhotoClass holding > information about the attachment, and an annotation for that PhotoClass > with a comment. > > On 04/10/2014 06:00 AM, Jean SIMARD wrote: > > Yes, I won't know if it's updated or created. > > > > Now, using 'XWiki.XWikiRights_users = XWiki.Me' would not be sufficient > > for the use case; what happens if you want to create 2 objects > > 'XWiki.XWikiRights'? > > > > Can we imagine to introduce a new notation to explicitly mean that you > > want to create a new object, like 'new_XWiki.XWikiRights_0_users' or > > 'XWiki.XWikiRights_new_0_users' or 'XWiki.XWikiRights_n0_users'? > > > > This way, we can filter as following: > > * If you try to update an object with 'XWiki.XWikiRights_0_users' and > > the object #0 exists, the property is updated (use case already > > existing) > > * If you try to update an object with 'XWiki.XWikiRights_0_users' and > > the object #0 doesn't exist, the parameter has no effect (use case > > already existing) > > * If you try to create an object with 'new_XWiki.XWikiRights_0_users' > > and the object #0 exists, the parameter has no effect > > * If you try to create an object with 'new_XWiki.XWikiRights_0_users' > > and the object #0 doesn't exist, the object is created and the property > > initialized > > > > Thanks > > -- > > Jean > > > > On jeu., 2014-04-10 at 11:59 +0300, Marius Dumitru Florea wrote: > >> So if I put XWiki.XWikiRights_56_users on the request and there's no > >> rights object what do you do? Create an object with number 0? Create > >> an object with number 56? And if you want to add a new object how > >> would you know the object number to put on the request so that you > >> don't update existing objects instead? > >> > >> The current behaviour is this: > >> > >> 1) You ask the system to add a new object (i.e. allocate an object > >> number) using the object add action, possibly passing property values > >> like this > >> > >> XWiki.XWikiRights_users = XWiki.Me > >> > >> 2) You use the allocated number to update the object, passing property > >> values like this > >> > >> XWiki.XWikiRights_N_users = XWiki.Me > >> > >> where N is the allocated object number. > >> > >> What you want is to do this in a single step, but you won't > >> know/control if the object is added or updated. > >> > >> Thanks, > >> Marius > >> > >> On Thu, Apr 10, 2014 at 11:36 AM, Jean SIMARD wrote: > >>> Hi devs, > >>> > >>> In XWiki, if you send a POST request at the following URL > >>> ('MySpace.MyPage' is a document that doesn't exist at the moment) > >>> > >>> /bin/save/MySpace/MyPage > >>> > >>> with the following HTTP parameters: > >>> > >>> * template=MySpace.MyTemplate > >>> * XWiki.XWikiRights_0_users=XWiki.Me > >>> * > >>> > >>> with 'MySpace.MyTemplate' a template document and 'XWiki.Me' a user of > >>> the wiki. > >>> > >>> 2 cases: > >>> > >>> 1. If 'MySpace.MyTemplate' contains a 'XWiki.XWikiRights' object, then > >>> the resulting document 'MySpace.MyPage' will have this object with its > >>> property 'users' initialize with the value 'XWiki.Me' (see HTTP > >>> parameters) > >>> 2. If 'MySpace.MyTemplate' does not contain a 'XWiki.XWikiRights' > >>> object, the resulting document 'MySpace.MyPage' will not contain it > >>> either > >>> > >>> ### PROPOSAL > >>> Create automatically the objects if they don't exist in the template > >>> document. > >>> ### > >>> > >>> To make it possible, it seems that we would need to refactor the method > >>> 'readObjectsFromForm(EditForm, XWikiContext)' in the > >>> 'com.xpn.xwiki.doc.XWikiDocument' class. And probably modify also the > >>> 'getObject(String)' from 'com.xpn.xwiki.web.EditForm' class. > >>> > >>> 2 things to take care: > >>> * It seems there is no unit test for these methods. > >>> * May this proposal be a security problem? > >>> > >>> WDYT? > >>> -- > >>> Jean > >>> _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

