On 21 May 2014 at 21:24:39, walid yaich
(walid.yaich@gmail.com(mailto:walid.yaich@gmail.com)) wrote:
This is great and nicely documented! Thanks a lot on behalf of all the future users who’ll
thank you :)
Thanks
-Vincent
2014-05-21 17:45 GMT+01:00 vincent(a)massol.net :
>
> Hi Walid,
>
> What would be awesome is if you could contribute it on
>
http://extensions.xwiki.org/xwiki/bin/view/Main/WebHome as a snippet :)
>
> Thanks
> -Vincent
>
>
> On 21 May 2014 at 18:43:30, walid yaich (walid.yaich(a)gmail.com(mailto:
> walid.yaich(a)gmail.com)) wrote:
>
> > I finally got it ! Thanks guys :)
> >
> > This is my listener, it may help someone :
> >
> > {{velocity}}
> > {{html}}
> > #if ($request.confirm != "1")
> >
> >
> >
> >
> > #end
> > {{/html}}
> > {{/velocity}}
> >
> > {{groovy}}
> > import org.xwiki.observation.*
> > import org.xwiki.observation.event.*
> > import com.xpn.xwiki.web.*
> > import org.xwiki.bridge.event.DocumentCreatingEvent
> > import org.xwiki.model.reference.LocalDocumentReference
> > import org.xwiki.context.*
> > import groovy.util.logging.*
> >
> > @Log
> > class OnDocumentCreationEventListener implements EventListener
> > {
> > OnDocumentCreationEventListener()
> > {
> > }
> >
> > String getName()
> > {
> > return "OnDocumentCreationEventListener"
> > }
> >
> > List getEvents()
>
> > {
> > return Arrays.asList(new DocumentCreatingEvent())
> > }
> >
> > void onEvent(Event event, Object source, Object data)
> > {
> > log.info('onEvent begin')
> >
> > // Current context
> > def crtContext =
> >
>
Utils.getComponent(Execution.class).getContext().getProperty('xwikicontext')
> >
> >
> > // A Document Reference pointing to the space.page document in an
> > undefined wiki (i.e. without the wiki part)
> > LocalDocumentReference reference = new
> > LocalDocumentReference("RevisionSpace", "RevisionClass")
> >
> > source.createXObject(reference, crtContext)
> > source.setComment("An XObject of RevisionClass was succesfully added
> > !")
> >
> > log.info('onEvent end')
> > }
> > }
> >
> > // Only register the listener if the user has passed confirm=1 in the
> URL.
> > This is to prevent
> > // from unintentially re-registering the listener against the observation
> > manager.
> > if (request.confirm == "1") {
> > // Register against the Observation Manager
> > def observation = Utils.getComponent(ObservationManager.class)
> > observation.removeListener("OnDocumentCreationEventListener")
> > def listener = new OnDocumentCreationEventListener()
> > observation.addListener(listener)
> > println "{{info}}Listener is now registered {{/info}}"
> > }
> > {{/groovy}}
> >
> >
> > It's just doesn't log to my console ("log.info" doesn't
work) but
> probably
> > it'll work for others ... but if you try to create any new document
> you'll
> > find your object added
> >
> >
> >
> >
> > 2014-05-21 15:54 GMT+01:00 Thomas Mortagne :
>
> >
> > > On Wed, May 21, 2014 at 4:31 PM, walid yaich
> > > wrote:
> > > > I'm sorry, i'm new to xwiki API but i'm really trying to
get better
> ;)
> > > >
> > > > I looked at the API and i find out that i should use this method:
> > > >
> > > > public int *createXObject*(EntityReference
> > > > <
> > >
>
http://extensions.xwiki.org/?id=org.xwiki.platform:xwiki-platform-model:::/…
> > > >
> > > > classReference,
> > > > XWikiContext
> > > > <
> > >
>
http://nexus.xwiki.org/nexus/service/local/repositories/releases/archive/or…
> > > >
> > > > context)
> > > >
> > > > But i can't figure out how can i create an EntityReference object
and
> > >
> > > Usually for a class the easiest is something like:
> > >
> > > def reference = new
> > > org.xwiki.model.reference.LocalDocumentReference("xclassspace",
> > > "xclasspage")
> > >
> > > See
http://extensions.xwiki.org/xwiki/bin/view/Extension/Model+Module
> > > for more about entity references.
> > >
> > > > How can i get the context from the actual event caller ?
> > >
> > > The event send it as second parameter (like most events actually).
> > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > 2014-05-21 13:09 GMT+01:00 Thomas Mortagne :
>
> > > >
> > > >> On Wed, May 21, 2014 at 1:36 PM, walid yaich
> > > >> wrote:
> > > >> > Thank you,
> > > >> >
> > > >> > But i really cannot get it work,
> > > >> >>>As I said, you need to modiy the document comming
with the event
> (the
> > > >> >>>fist parameter). That's the one that is going to
be saved right
> after
> > > >> > is it right like that ? :
> > > >> > void onEvent(Event event, Object source, Object data)
> > > >> > {
> > > >> > def currentDocument = xwiki.getDocument(source.fullName)
> > > >>
> > > >> Why are you calling getDocument ? source is already a
XWikiDocument
> > > >> instance. I will say it again: you need to modify source itself
> > > >> because that's what is going to be saved, not some instance
you kept
> > > >> from when you registered the listener, not a new instance,
source.
> > > >>
> > > >> If you don't know the API of XWikiDocument you can look at
> > > >>
> > > >>
> > >
>
http://nexus.xwiki.org/nexus/service/local/repositories/releases/archive/or…
> > > >> (modify the link according to your version).
> > > >>
> > > >> >
currentDocument.newObject("RevisionSpace.RevisionClass")
> > > >> > //currentDocument.save() //When saving, i got a
stackoverflow
> > > >> > //XWikiDocument currentDocument = (XWikiDocument) source
> > > >> > //Cannot cast from XWikiDocument to Document
> > > >> > }
> > > >> > This code does not save the object, something wrong with it
?
> > > >> >
> > > >> > I tried just this :
> > > >> > {{groovy}}
> > > >> > doc.newObject("RevisionSpace.RevisionClass")
> > > >> > doc.save()
> > > >> > println "{{info}} Object added {{/info}}"
> > > >> > {{/groovy}}
> > > >> > it creates two objects in the current page, any explanation
?
> > > >> >
> > > >> > I'm using Admin/admin and XWIKI entreprise 6.0, some way
to debug
> to
> > > know
> > > >> > why it doesn't save ?
> > > >> >
> > > >> > Thanks in advance
> > > >> >
> > > >> >
> > > >> >
> > > >> > 2014-05-21 8:39 GMT+01:00 Thomas Mortagne > > >:
>
> > > >> >
> > > >> >> On Tue, May 20, 2014 at 9:21 PM, walid yaich
> > > >> >> wrote:
> > > >> >> > Good morning :)
> > > >> >> >
> > > >> >> > I added a listener on DocumentCreatingEvent, this
listener will
> > > add an
> > > >> >> > object of type RevisionClass to every new
document.
> (RevisionClass
> > > is
> > > >> >> under
> > > >> >> > RevisionSpace)
> > > >> >> > In onEvent i have
doc.newObject("XWiki.RevisionClass"), i'm
> sure
> > > >> onEvent
> > > >> >> is
> > > >> >>
> > > >> >> As I said, you need to modiy the document comming with
the event
> (the
> > > >> >> fist parameter). That's the one that is going to be
saved right
> after
> > > >> >> the event (so just add the object and don't save it
yourself),
> > > >> >> whatever you save in your code is going to be
overwritten after
> it.
> > > >> >>
> > > >> >> > executed but when creating a new document, i
can't find the
> object
> > > >> >> created
> > > >> >> > when doing edit-->object, in addition
> doc.newObject("blablabla")
> > > is
> > > >> >> > accepted and doesn't throw any exception.
> > > >> >> >
> > > >> >> > I'm using the default Admin/admin user, should
i execute the
> script
> > > >> in a
> > > >> >> > specific space or with specific rights ?
> > > >> >> > Nothing is displayed in my console, How can i make
XWIKI tell
> me
> > > more
> > > >> >> about
> > > >> >> > what it is doing ?
> > > >> >> >
> > > >> >> > I'm using Entreprise 6.0, would you please take
a look at the
> > > attached
> > > >> >> > script ?
> > > >> >> >
> > > >> >> >
> > > >> >> > Best Regards,
> > > >> >> > Walid YAICH
> > > >> >> >
> > > >> >> >
> > > >> >> >
> > > >> >> > 2014-05-20 13:24 GMT+01:00 Jeremie BOUSQUET <
> > > >> jeremie.bousquet(a)gmail.com
> > > >> >> >:
> > > >> >> >
> > > >> >> >> 2014-05-20 13:38 GMT+02:00 walid yaich :
>
> > > >> >> >>
> > > >> >> >> > Thanks,
> > > >> >> >> >
> > > >> >> >> > I prefer the listener, because i don't
want the user to
> edit the
> > > >> >> object,
> > > >> >> >> > the object revision will be set by admin
when he/she push
> > > >> "approve" to
> > > >> >> >> set
> > > >> >> >> > the revision to show by default.
> > > >> >> >> >
> > > >> >> >> > The listener works fine now, but i
can't find how to add an
> > > object
> > > >> to
> > > >> >> a
> > > >> >> >> > page in groovy, i want to this in groovy :
#set($obj =
> > > >> $doc.newObject(
> > > >> >> >> > "XWiki.SomeClass")) , a helpful
link as always please ?
> > > >> >> >> >
> > > >> >> >> >
> > > >> >> >> Hi,
> > > >> >> >> Groovy has the same default bindings as
velocity, so you could
> > > write:
> > > >> >> >>
> > > >> >> >> def obj =
doc.newObject("XWiki.SomeClass")
> > > >> >> >>
> > > >> >> >>
> > > >> >> >> >
> > > >> >> >> >
> > > >> >> >> >
> > > >> >> >> >
> > > >> >> >> > 2014-05-20 10:44 GMT+01:00
vincent(a)massol.net <
> > > vincent(a)massol.net
> > > >> >:
> > > >> >> >> >
> > > >> >> >> > > Hi Walid,
> > > >> >> >> > >
> > > >> >> >> > > Maybe this could help:
> > > >> >> >> > >
> > > >> >> >> > >
> > > >> >> >> >
> > > >> >> >>
> > > >> >>
> > > >>
> > >
>
http://www.xwiki.org/xwiki/bin/view/FAQ/How+can+I+create+a+new+page+based+o…
> > > >> >> >> > >
> > > >> >> >> > > If your users use this form to create
pages, the pages
> they
> > > >> create
> > > >> >> will
> > > >> >> >> > > automatically have the proper
XObjects added to them and
> > > they’ll
> > > >> >> >> directed
> > > >> >> >> > > in inline mode when creating the
page, allowing them to
> fill
> > > the
> > > >> >> >> XObject
> > > >> >> >> > > data.
> > > >> >> >> > >
> > > >> >> >> > > Thanks
> > > >> >> >> > > -Vincent
> > > >> >> >> > >
> > > >> >> >> > > On 19 May 2014 at 22:16:01, walid
yaich (
> > > walid.yaich(a)gmail.com)
> > > >> >> wrote:
> > > >> >> >> > >
> > > >> >> >> > > Hello,
> > > >> >> >> > >
> > > >> >> >> > > First of all, Merci bcp Vincent for
this How to implement
> > > >> "Approved
> > > >> >> >> > > Revisions"?<
> > > >> >> >> > >
> > > >> >> >> >
> > > >> >> >>
> > > >> >>
> > > >>
> > >
>
http://www.xwiki.org/xwiki/bin/view/FAQ/How+to+implement+%22Approved+Revisi…
> > > >> >> >> > >
> > > >> >> >> > >
> > > >> >> >> > >
> > > >> >> >> > >
> > > >> >> >> > > I was able to choose which revision
to display by
> following
> > > the
> > > >> "how
> > > >> >> >> to",
> > > >> >> >> > > now i need to add the object
automatically to any page in
> my
> > > wiki
> > > >> >> or at
> > > >> >> >> > > least any page in a given space
> > > >> >> >> > >
> > > >> >> >> > > Thanks in advance :)
> > > >> >> >> > >