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

Reply via email to