[xwiki-users] Fw : Fw : Re: Fw : Re: Fw : Re: How can I get event object through a form

2016-01-19 Thread Pascal BASTIEN
Ok thxs guys
I didn't understood why my $xwiki.activitystream.searchEvents doesn't work with 
eventid...

I'm starting to begin some help and copy/paste
Doc http://platform.xwiki.org/xwiki/bin/view/DevGuide/DatabaseSchema indicate:
"In a hibernate query you can use the same name as the get method but without 
the get and with the first letter lowercase so the SQL query"

I drink a strong coffe and read ... WITH THE FIRST LETTER LOWERCASE!

Then I replace my EventId by eventId to fix my ugly code (because public String 
getEventId()):
#set($results= $xwiki.activitystream.searchEvents("act.eventId='$MyValue'", 
false, 0, 0))
and tad!
it's working thxs a lot.
I will post my form here later when it will be ready if you want it. :-)


> $xwiki.activitystream.method but if I use where condition on
> eventid field I obtain this error :-(
> 
> 
> Caused by: org.hibernate.QueryException: could not resolve
> property: EventId of:
> com.xpn.xwiki.plugin.activitystream.impl.ActivityEventImpl
> [select act from
> com.xpn.xwiki.plugin.activitystream.impl.ActivityEventImpl
> as act  where
> act.EventId='757328280-1453216488000-dishFheu' order by
> act.date desc]
>     at
> org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)
> 
> 
___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users


[xwiki-users] Fw : Re: Fw : Re: Fw : Re: How can I get event object through a form

2016-01-19 Thread Pascal BASTIEN
Hi,
I suffered to find hql query to use $xwiki.activitystream.method but if I use 
where condition on eventid field I obtain this error :-(


Caused by: org.hibernate.QueryException: could not resolve property: EventId 
of: com.xpn.xwiki.plugin.activitystream.impl.ActivityEventImpl [select act from 
com.xpn.xwiki.plugin.activitystream.impl.ActivityEventImpl as act  where 
act.EventId='757328280-1453216488000-dishFheu' order by act.date desc]
at 
org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)


> 
> > >
> > Did you try using
> > >
> searchEvents and building an HQL that
> >
> >  
> >
> Anyway I found table and field to use an hql query here:
> > http://platform.xwiki.org/xwiki/bin/view/DevGuide/DatabaseSchema
> (I must use a ggogle glass+zoom to see field ;-) )
> > but my query with
> $services.query.hql($hql).execute() doesn't work with
> table name (rg.hibernate.hql.ast.QuerySyntaxException:
> activitystream_events is not mapped ).
> >
> Then I tested with simple query:
> > SELECT
> doc.XWD_TITLE FROM xwikidoc AS doc WHERE doc.XWD_FULLNAME =
> 'Main.WebHome'
> > didn't work
> => Caused by: org.hibernate.hql.ast.QuerySyntaxException:
> xwikidoc is not mapped [select doc.XWD_TITLE FROM xwikidoc
> AS doc WHERE doc.XWD_FULLNAME = 'Main.WebHome']
> > SELECT doc.title FROM XWikiDocument AS doc
> WHERE doc.fullName = 'Main.WebHome'
> > working fine
> > With
> velocity+API we can not use hql query with true field/table
> name?
> > If we can not then where I can
> found field/table mapping name for activitystream_events
> table?
> >  
> > Thxs
> 
> ___
> 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


Re: [xwiki-users] Mocca calendar - display 'short description' instead of title in month/week/day view

2016-01-19 Thread Clemens Klein-Robbenhaar
Hi Mark,
Thanks for the detailed problem report.
I can confirm your results from step 1 to step 5.
This is indeed a bug that needs fixing; I have added it as 
http://jira.xwiki.org/browse/MOCCACAL-91

Then I tried to follow the steps from 8 but could not reproduce the issue 
described in step 11

Just adding a new field should not make this field show up in the event 
creation form automatically.
Did you do anything else like editing the MoccaCalendarEventSheet, or reset 
this to a default state?
This might have scrapped the code for the somewhat non-trivial title handling
necessary to avoid  http://jira.xwiki.org/browse/MOCCACAL-68

It might also explain why there is no drop down to pick the calendar for the 
event;
the new event is then created without "parent calendar" and this only visible
in the main "show all events" overview, as you figured out in step 13.
 The "calendar" drop down in the edit view is also some custom code that will 
be absent if the MoccaCalendarEventSheet is overwritten.

I am not aware that there is a mechanism that causes XWiki to "auto-update" the 
class sheet, unless one edits
the class with "App Within Minutes" ... which I thought is not possible 
MoccaCalendar classes, but maybe I am overlooking something.

If you recover the  MoccaCalendarEventSheet by rolling back to an earlier 
version via its history and add a line like

  ; $escapetool.xml($doc.displayPrettyName('test',
 false, false))
  : $doc.display('test')

in the place where all these other fields are rendered with code like that, the 
problem in step 11 with 13 should go away.
I am afraid that then the bug from step 1 to step 5 will be fully restored, 
however.

As a work around you can change the:
  

into:
  

this however will fill the title field with a random string and might make 
migration to a bug-fixed version later
problematic, unless you are happy to stick with your custom modification.
If you can wait one day or two I would prefer to fix the issue so you can 
upgrade and use events with a proper title.


Anyway, thanks a lot for the detailed steps to reproduce the problem.
This is indeed a serious bug and I will try to fix it as soon as possible.


Cheers
Clemens


> Clemens,
> Your suggestion gets me part of the way there but still having some problems
> (in steps 11 and 12 below). I thought maybe my earlier futzing around trying
> to get it working on my own screwed things up. So I created a clean instance
> on a VM and made the mods you suggested. Here are the steps I followed and
> the results.
> 
> 1. Created new XWiki 7.4 instance - distribution wizard doesn't start for
> some reason so I installed the default pages using
> xwiki-enterprise-ui-mainwiki-all-7.4.xar.
> 2. Installed MoccaCalendar extension and verified that version is 2.5 (full
> calendar macro is version 2.0.2)
> 3. Logged in as Admin and created a new calendar (first to verify behaviour
> without your suggested mods to JSON Service).
> 4. In the new calendar created an event - event is displayed as expected.
> 5. In the new calendar, tried to create another event with the same title -
> event form displays 'An event with this name already exists.' under the
> title field.
> 6. In the new calendar, tried to create another event with no title - event
> form displays 'Title field is required'.
> 7. Deleted event created in step 4.
> 8. In class editor MoccaCalendarEvent class added new field 'Test' of type
> String.
> 9. Navigated to /xwiki/bin/view/MoccaCalendar/JSONService -> Edit -> Source
> and replaced $itemdoc.getPlainTitle() with $itemdoc.getValue('Test') in two
> places as you suggested.
> 10. Returned to new calendar created in Step 3.
> 11. Invoked form to create an event - event form is displayed with new Test
> field (blank). But the Title field is populated with a random string and the
> Calendar drop down field where you can select which calendar the event
> belongs to is missing from the form.
> 12. Entered a value in the Test field and saved the event - the form
> disappears but the event is not displayed on the new calendar.
> 13. Navigated to Calendar Overview and observed that new event is displayed
> there with the content of the Test field instead of the Title. Here the
> event is displayed on the Month view the way I want it.
> 
> 
> 
> 
> --
> View this message in context: 
> http://xwiki.475771.n2.nabble.com/Mocca-calendar-display-short-description-instead-of-title-in-month-week-day-view-tp7597592p7597610.html
> Sent from the XWiki- Users mailing list archive at Nabble.com.
> ___
> users mailing list
> users@xwiki.org
> http://lists.xwiki.org/mailman/listinfo/users
> 

mit freundlichen Grüßen
Clemens Klein-Robbenhaar

-- 
Clemens Klein-Robbenhaar
Software Development
EsPresto AG
Breite Str. 30-31
10178 Berlin/Germany
Tel: +49.(0)30.90 226.763
Fax: +49.(0)30.90 226.760
robbenh...@espresto.com
www.espresto.de

HRB 77554 B - Berlin-Charlottenburg
Vorstand: Maya Biersack

Re: [xwiki-users] How to create an XClass and bind to a sheet

2016-01-19 Thread Giordano Ninonà
Thank you guys,

Actually I didn't understand any of your suggestions, I have added two
method in "*MyObject*" java class, that are:

//this to create an XClass and bind it with a sheet
crateXClass(SpaceReference spaceRefe, XWikiContext context){
 try{
String className = "Instance";
String sheet = className + "Sheet";

DocumentReference docRef = new DocumentReference(className,
spaceRefe);
XWiki wiki = context.getWiki();
XWikiDocument doc = wiki.getDocument(docRef, context);
BaseClass xclass = new BaseClass();

xclass.addTextField("id", "id", 30);
xclass.addTextField("name", "name", 30);
xclass.addTextAreaField("description", "description", 40, 5);
xclass.addTextField("type", "type", 30);
xclass.addTextAreaField("incoming", "incoming", 40, 5);
xclass.addTextAreaField("outgoing", "outgoing", 40, 5);
doc.setXClass(xclass);

BaseObject obj =
wiki.getObjectFromRequest("XWiki.ClassSheetBinding", context);
obj.set("sheet", sheet, context);
doc.addXObject(obj);

docRef = new DocumentReference(sheet, spaceRefe);
doc = wiki.getDocument(docRef, context);
String content = "{{velocity}}\n";
content = content + " #set($class = $doc.getObject('";
content = content + spaceRefe.getName() + "." + className;
content = content + "').xWikiClass)\n";
content = content + " #foreach($prop in $class.properties)\n";
content = content + " === $prop.prettyName ===\n";
content = content + " $doc.display($prop.getName())\n";
content = content + " #end\n";
content = content + "{{/velocity}}\n";
doc.setContent(content);
doc.setTitle("#if($doc.fullName == '" + spaceRefe.getName() +
"." + sheet + "')" + sheet
+ "#{else}$doc.title#end");

wiki.saveDocument(doc, context);

} catch (XWikiException e) {
e.printStackTrace();
}
---
public BaseObject createXObject(String spName, XWikiContext xcontext) {

XWiki wiki = xcontext.getWiki();
BaseObject obj;
try {
obj = wiki.getObjectFromRequest(spName + ".Instance", xcontext);
obj.set("id",this.id, xcontext);
obj.set("name",this.iName, xcontext);
obj.set("description",this.description, xcontext);
obj.set("type",this.eClass, xcontext);
String in = "";
String out = "";
for (int k = 0; k < this.incoming.size(); k++) {
in = in + "* [[" + this.incoming.get(k) + "]] \n";
}
for (int k = 0; k < outgoing.size(); k++) {
out = out + "* [[" + this.outgoing.get(k) + "]] \n";
}
obj.set("incoming",in,xcontext);
obj.set("outgoing",out,xcontext);
return obj;
}catch (XWikiException e) {
e.printStackTrace();
}
return null;
}

But if I update the wiki (through specified button), I get all my new pages
without any content, plus one new page with this title:"*#if($doc.fullName
== 'BSS Rome.InstanceSheet')InstanceSheet#{else}$doc.title#end"  *that
should be the Sheet created through the createXClass() method, that display
a Velocity error saying that :
"

org.xwiki.rendering.macro.MacroExecutionException: The execution of
the [velocity] script macro is not allowed. Check the rights of its
last author or the parameters if it's rendered from another script.
at 
org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:178)
at 
org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:58)
at 
org.xwiki.rendering.internal.transformation.macro.MacroTransformation.transform(MacroTransformation.java:269)
at 
org.xwiki.rendering.internal.transformation.DefaultRenderingContext.transformInContext(DefaultRenderingContext.java:183)
at 
org.xwiki.rendering.internal.transformation.DefaultTransformationManager.performTransformations(DefaultTransformationManager.java:95)
at 
org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:253)
at 
org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:126)
at 
org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:56)
at 
org.xwiki.display.internal.DefaultDocumentDisplayer.display(DefaultDocumentDisplayer.java:96)
at 
org.xwiki.display.internal.DefaultDocumentDisplayer.display(DefaultDocumentDisplayer.java:39)
at 
org.xwiki.sheet.internal.SheetDocumentDisplayer.display(SheetDocumentDisplayer.j

Re: [xwiki-users] Mocca calendar - display 'short description' instead of title in month/week/day view

2016-01-19 Thread Mark Sack
Clemens,
Your suggestion gets me part of the way there but still having some problems
(in steps 11 and 12 below). I thought maybe my earlier futzing around trying
to get it working on my own screwed things up. So I created a clean instance
on a VM and made the mods you suggested. Here are the steps I followed and
the results.

1. Created new XWiki 7.4 instance - distribution wizard doesn't start for
some reason so I installed the default pages using
xwiki-enterprise-ui-mainwiki-all-7.4.xar.
2. Installed MoccaCalendar extension and verified that version is 2.5 (full
calendar macro is version 2.0.2)
3. Logged in as Admin and created a new calendar (first to verify behaviour
without your suggested mods to JSON Service).
4. In the new calendar created an event - event is displayed as expected.
5. In the new calendar, tried to create another event with the same title -
event form displays 'An event with this name already exists.' under the
title field.
6. In the new calendar, tried to create another event with no title - event
form displays 'Title field is required'.
7. Deleted event created in step 4.
8. In class editor MoccaCalendarEvent class added new field 'Test' of type
String.
9. Navigated to /xwiki/bin/view/MoccaCalendar/JSONService -> Edit -> Source
and replaced $itemdoc.getPlainTitle() with $itemdoc.getValue('Test') in two
places as you suggested.
10. Returned to new calendar created in Step 3.
11. Invoked form to create an event - event form is displayed with new Test
field (blank). But the Title field is populated with a random string and the
Calendar drop down field where you can select which calendar the event
belongs to is missing from the form.
12. Entered a value in the Test field and saved the event - the form
disappears but the event is not displayed on the new calendar.
13. Navigated to Calendar Overview and observed that new event is displayed
there with the content of the Test field instead of the Title. Here the
event is displayed on the Month view the way I want it.




--
View this message in context: 
http://xwiki.475771.n2.nabble.com/Mocca-calendar-display-short-description-instead-of-title-in-month-week-day-view-tp7597592p7597610.html
Sent from the XWiki- Users mailing list archive at Nabble.com.
___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users


Re: [xwiki-users] How to create an XClass and bind to a sheet

2016-01-19 Thread Thomas Mortagne
On Tue, Jan 19, 2016 at 11:31 AM, vinc...@massol.net  wrote:
>
>
> On 19 Jan 2016 at 11:24:46, Thomas Mortagne 
> (thomas.morta...@xwiki.com(mailto:thomas.morta...@xwiki.com)) wrote:
>
>> If this class is supposed to be available in the wiki even if not yet
>> used in an object the simplest is usually to do like most standard
>> classes generated from java and register a component extending
>> com.xpn.xwiki.internal.mandatory.AbstractMandatoryDocumentInitializer.
>> You can find various examples in oldcore.
>
> Yes conceptually speaking, the idea is to write an EventListener component 
> that listens to the ApplicationReadyEvent event and then in the onEvent() 
> method, create your xclass and perform all the operations you need.
>
> As Thomas mentioned, you could also extend 
> AbstractMandatoryDocumentInitializer although this is not a public API and it 
> may be removed or modified in the future. Note that 
> MandatoryDocumentInitializer is a public API.

Right, I actually forgot it was internal (yes I know I wrote it and I
just copy/pasted the package in the mail :)). I think we should make
it public since it's very useful for extensions and we are using it a
lot.

>
> Thanks
> -Vincent
>
>> On Tue, Jan 19, 2016 at 11:18 AM, Giordano Ninonà
>> wrote:
>> > Hi users,
>> >
>> > I am wondering on how to create an XClass from java, and bind it to a
>> > class-sheet to be used to represent several objects as XWiki pages. How can
>> > I achieve that in a way that allow me to incrementaly update the object
>> > every time a modification is performed?
>> >
>> > Thanks for your help,
>> > Giordano.
> ___
> users mailing list
> users@xwiki.org
> http://lists.xwiki.org/mailman/listinfo/users



-- 
Thomas Mortagne
___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users


Re: [xwiki-users] How to create an XClass and bind to a sheet

2016-01-19 Thread vinc...@massol.net


On 19 Jan 2016 at 11:24:46, Thomas Mortagne 
(thomas.morta...@xwiki.com(mailto:thomas.morta...@xwiki.com)) wrote:

> If this class is supposed to be available in the wiki even if not yet
> used in an object the simplest is usually to do like most standard
> classes generated from java and register a component extending
> com.xpn.xwiki.internal.mandatory.AbstractMandatoryDocumentInitializer.
> You can find various examples in oldcore.

Yes conceptually speaking, the idea is to write an EventListener component that 
listens to the ApplicationReadyEvent event and then in the onEvent() method, 
create your xclass and perform all the operations you need.

As Thomas mentioned, you could also extend AbstractMandatoryDocumentInitializer 
although this is not a public API and it may be removed or modified in the 
future. Note that MandatoryDocumentInitializer is a public API.

Thanks
-Vincent

> On Tue, Jan 19, 2016 at 11:18 AM, Giordano Ninonà
> wrote:
> > Hi users,
> >
> > I am wondering on how to create an XClass from java, and bind it to a
> > class-sheet to be used to represent several objects as XWiki pages. How can
> > I achieve that in a way that allow me to incrementaly update the object
> > every time a modification is performed?
> >
> > Thanks for your help,
> > Giordano.
___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users


Re: [xwiki-users] How to create an XClass and bind to a sheet

2016-01-19 Thread Thomas Mortagne
If this class is supposed to be available in the wiki even if not yet
used in an object the simplest is usually to do like most standard
classes generated from java and register a component extending
com.xpn.xwiki.internal.mandatory.AbstractMandatoryDocumentInitializer.
You can find various examples in oldcore.

On Tue, Jan 19, 2016 at 11:18 AM, Giordano Ninonà
 wrote:
> Hi users,
>
> I am wondering on how to create an XClass from java, and bind it to a
> class-sheet to be used to represent several objects as XWiki pages. How can
> I achieve that in a way that allow me to incrementaly update the object
> every time a modification is performed?
>
> Thanks for your help,
> Giordano.
> ___
> users mailing list
> users@xwiki.org
> http://lists.xwiki.org/mailman/listinfo/users



-- 
Thomas Mortagne
___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users


[xwiki-users] How to create an XClass and bind to a sheet

2016-01-19 Thread Giordano Ninonà
Hi users,

I am wondering on how to create an XClass from java, and bind it to a
class-sheet to be used to represent several objects as XWiki pages. How can
I achieve that in a way that allow me to incrementaly update the object
every time a modification is performed?

Thanks for your help,
Giordano.
___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users


Re: [xwiki-users] Fw : Re: Fw : Re: How can I get event object through a form

2016-01-19 Thread vinc...@massol.net
 

On 19 Jan 2016 at 10:00:13, Pascal BASTIEN 
(pbasnews-xw...@yahoo.fr(mailto:pbasnews-xw...@yahoo.fr)) wrote:

>  
>  
> --- En date de : Mar 19.1.16, vinc...@massol.net a écrit :
>  
> > De: vinc...@massol.net  
> > Objet: Re: [xwiki-users] Fw : Re: How can I get event object through a form
> > À: "XWiki Users"  
> > Date: Mardi 19 janvier 2016, 8h09
> > Also note that the AS has
> > a buitin feature to delete old events, see your xwiki.cfg
> > file:
> >
> 
> > xwiki.plugin.activitystream.daystokeepevents=0
>  
> Yes I know that and delete some event with API :-)
> My problem is the way to give some selected event object through a form with 
> $request.getParameterValues() to delete these events.
>  
> >
> > If you still need to delete
> > event manually you could check the code executed by the
> > scheduler job.
>  
> I didn't found it either Scheduler.ActivityStreamCleaner is empty and anyway 
> I suppose it is groovy code (look into xar source if needed).

The job is written in java:
https://github.com/xwiki/xwiki-platform/blob/4303f79df9c0ef657a8f8f823fb76aff3f9a1f99/xwiki-platform-core/xwiki-platform-activitystream/xwiki-platform-activitystream-api/src/main/java/com/xpn/xwiki/plugin/activitystream/impl/ActivityStreamCleanerJob.java#L43-L43

Thanks
-Vincent

> > > Did you try using
> > searchEvents and building an HQL that
> > >
>  
> Anyway I found table and field to use an hql query here:
> http://platform.xwiki.org/xwiki/bin/view/DevGuide/DatabaseSchema (I must use 
> a ggogle glass+zoom to see field ;-) )
> but my query with $services.query.hql($hql).execute() doesn't work with table 
> name (rg.hibernate.hql.ast.QuerySyntaxException: activitystream_events is not 
> mapped ).
> Then I tested with simple query:
> SELECT doc.XWD_TITLE FROM xwikidoc AS doc WHERE doc.XWD_FULLNAME = 
> 'Main.WebHome'
> didn't work => Caused by: org.hibernate.hql.ast.QuerySyntaxException: 
> xwikidoc is not mapped [select doc.XWD_TITLE FROM xwikidoc AS doc WHERE 
> doc.XWD_FULLNAME = 'Main.WebHome']
> SELECT doc.title FROM XWikiDocument AS doc WHERE doc.fullName = 'Main.WebHome'
> working fine
> With velocity+API we can not use hql query with true field/table name?
> If we can not then where I can found field/table mapping name for 
> activitystream_events table?
>  
> Thxs

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


[xwiki-users] Fw : Re: Fw : Re: How can I get event object through a form

2016-01-19 Thread Pascal BASTIEN


--- En date de : Mar 19.1.16, vinc...@massol.net  a écrit :

> De: vinc...@massol.net 
> Objet: Re: [xwiki-users] Fw : Re: How can I get event object through a form
> À: "XWiki Users" 
> Date: Mardi 19 janvier 2016, 8h09
> Also note that the AS has
> a buitin feature to delete old events, see your xwiki.cfg
> file:
> 

> xwiki.plugin.activitystream.daystokeepevents=0

Yes I know that and delete some event with API :-)
My problem is the way to give some selected event object through a form with 
$request.getParameterValues() to delete these events.

> 
> If you still need to delete
> event manually you could check the code executed by the
> scheduler job.

I didn't found it either Scheduler.ActivityStreamCleaner is empty and anyway I 
suppose it is groovy code (look into xar source if needed).


> > Did you try using
> searchEvents and building an HQL that
> >

Anyway I found table and field to use an hql query here:
http://platform.xwiki.org/xwiki/bin/view/DevGuide/DatabaseSchema (I must use a 
ggogle glass+zoom to see field ;-) )
but my query with $services.query.hql($hql).execute() doesn't work with table 
name (rg.hibernate.hql.ast.QuerySyntaxException: activitystream_events is not 
mapped ).
Then I tested with simple query:
SELECT doc.XWD_TITLE FROM xwikidoc AS doc WHERE doc.XWD_FULLNAME = 
'Main.WebHome'
didn't work => Caused by: org.hibernate.hql.ast.QuerySyntaxException: xwikidoc 
is not mapped [select doc.XWD_TITLE FROM xwikidoc AS doc WHERE doc.XWD_FULLNAME 
= 'Main.WebHome']
SELECT doc.title FROM XWikiDocument AS doc WHERE doc.fullName = 'Main.WebHome'
working fine
With velocity+API we can not use hql query with true field/table name?
If we can not then where I can found field/table mapping name for 
activitystream_events table?

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