IMO it's a very bad idea to rely more and more on our page locking system as it makes any effort of moving away from it more difficult.
Also, what if the document to be saved is not opened in edit mode prior to the save, thus no locking ever occurs? There is no way for a client to determine the ID of the new object in a safe way, the most probable result in a busy wiki being data loss due to concurrency issues and users overriding each other's freshly created objects. I think we can find quite a few of these cases where some javascript calls the save action from view mode. Thanks, Eduard On Fri, Apr 11, 2014 at 11:32 AM, [email protected] <[email protected]> wrote: > 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 > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

