On 04/23/2010 09:36 PM, Chris Haynes wrote:
Hello all,
I'm a newbie to XWiki, but have used and developed plugins for
another Java-based wiki. I've got a few days in which to find out
what I'm letting myself in for if I switch from that other Wiki to
XWiki.
Most of the development for a custom wiki is done not in Java, but in
scripting languages on top of Java: Velocity, which is a templating
language on top of a public API, and Groovy.
I've spend a couple of hours reading the web site
documentation, but
can't find out if / how certain features I need are supported.
I'd be ever so grateful if someone who knows their way round XWiki
could just give me a quick indication of how much is going to be
involved to provide the following features. Just a quick 'OOB' (out
of the box), 'AP' (available plugin), 'DN' (development by me needed)
or similar against each feature I need would be really helpful.
The application is an on-line training programme for a closed
charitable community. The overall training material is structured
into modules. Students have modules 'unlocked' for them on an
individual basis as they proceed. Each module contains a number of
chapters, each chapter will be structured into sections for
readability - a section corresponding to a Wiki page.
Now for the unusual (?) features I need:
- Single login shared with an associated Database programme (a
servlet), using JAAS. (Preference is to run database and Wiki on a
single Jetty instance, as I have 6 years Jetty experience).
The XWiki authentication mechanism is modular, and there are already
several bridges between XWiki and external credential services. OOB only
LDAP is provided, several others are available at
https://svn.xwiki.org/svnroot/xwiki/contrib/sandbox/ . I don't think
that one for JAAS is already developed, but it shouldn't be too hard to
write it.
- That shared login also supplies user's group
membership (student,
editor, admin, etc)
Yep, depends on how far the JAAS integration goes. XWiki does support
groups, and it does support retrieving group membership from external
source.
- Info obtained from database indicating which
module(s) the student
is permitted to view (could be done by multiple-group membership),
Aren't access right enough? If yes, then you can query access rights for
the current user on different spaces. If you need to do this with
different data, then it should be easy to code a small application for
this, once you get the hang of how XWiki development works.
- Security permissions for individual pages inferred
by inheriting
permissions from the module containing that page,
There are page access rights, space access rights, and wiki access
rights. If you split your wiki as one module = one space, this is
straightforward.
- Inter-page references only shown if user is
permitted to read those
pages OR (preferably) alternate paragraph-sized blocks of Wiki text
are displayed depending on whether an embedded link may be followed
i.e. IF page_X_can_be_viewed THEN show_text_A ELSE show_text_B.
The normal link syntax doesn't do this, but you could write a wiki macro
(see
http://platform.xwiki.org/xwiki/bin/DevGuide/WikiMacroTutorial )
that does this using a little bit of velocity and the XWiki API.
- Output to database programme (by API or HTML call)
or to
machine-readable log, on time/date each page viewed by each student,
so that student-specific log may be compiled,
IIRC, OOB, using the activity stream plugin, but with DN to provide a
nice UI for viewing the data. If I don't remember correctly, and this
data is not already being recorded, it would be very easy (for a Java
programmer) to write it using the observation manager.
- 'Print Chapter' command - produces single
printable document
containing all the sections (Wiki Pages) comprising that chapter,
Possible, but no UI for this is shipped by default, although there is an
application which does this:
http://code.xwiki.org/xwiki/bin/view/Applications/PDFExportPanelApplication
- The above 'Print Chapter' command to omit
any embedded 'eye-candy'
images from that printed chapter (by use of CSS @media ?)
WDYM by eye-candy images? The one from the wiki engine (skin), or images
introduced by you? You can check how the printer friendly and the PDF
export look somewhere on an existing wiki, for example:
-
http://incubator.myxwiki.org/xwiki/bin/Sandbox/
-
http://incubator.myxwiki.org/xwiki/bin/Sandbox/?xpage=print
-
http://incubator.myxwiki.org/xwiki/bin/export/Sandbox/?format=pdf
- 'Help me on this topic' button. Sends
private email help request to
tutor with hot-link annotation showing the tutor where the student
was when help was requested. Must at least identify location by
Section (Wiki Page), preferably identify by paragraph in section.
A bit of DN, mostly gluing existing APIs together: the mailsender
plugin, a custom panel with a bit of velocity code, and maybe a bit of
javascript to let the student select the section from the current page.
It would be a bit harder to identify by paragraph, since by default
paragraphs are not identified automatically.
Starting point:
http://code.xwiki.org/xwiki/bin/view/Applications/SendPageByEmailApplication
Preferable: simple, automatic next page / previous
page buttons
working through
I can't find it, but I remember there was an application on
code.xwiki.org which did something like this.
- Quality feedback form at end of each chapter, form
data sent to
database (see linkage options above).
DN, that's a basic application on top of XWiki, easy to write by an
experience XWiki developer in a few hours.
Import of pre-written, formatted documents: I've
found the XWiki
method which uses an Open Office instance running on the server, but
I'm not sure if the virtual server we can afford has enough RAM to
cope with this. Is there any other way of uploading pre-formatted
documents, or of doing the format conversion before upload. I think
we only need simple formatting such as headings, bold, italic text.
No tables. Some chapters have already been written in M$ Word (can't
be helped :-(
If you want to import office documents, then you need the office
importer. I'm not sure, but I think you can run OO on a distinct machine
and communicate with it via the network, if you can't allocate enough
RAM for it on the same server as the wiki.
Many TIA,
Chris
A few final remarks:
First, although I think that all you need is (easily) possible with
XWiki, and the fact that XWiki is a very flexible application
development platform will make it possible to extend and add many other
features you didn't think of yet, I must ask you if you really want a
wiki engine for this. There are open source applications specifically
tailored for e-learning, training and courses, the most famous example
being Moodle. If you don't need the extra power and flexibility of
XWiki, then I'd advise you to consider using Moodle, which probably
offers all you specified here OOB or with existing modules.
Second, in order to properly master XWiki, you must learn how to write
applications inside XWiki. In theory, anything is possible with XWiki,
but to really accomplish something good, you must learn about the data
model, the public APIs of the platform, how to write scripts, the
services offered, development best practices, etc. The documentation is
far from perfect, but it's always improving, and currently it's good
enough to get you started. The mailing list is a good help after the
documentation ends.
Third, please don't read this as a commercial push, but just as
presenting an option, since there is quite a bit of custom development
needed: if you need help with the development or want things done
faster, you could contact the main company behind XWiki, XWiki SAS. See
http://www.xwiki.com/xwiki/bin/view/Services/
--
Sergiu Dumitriu
http://purl.org/net/sergiu/