On Thu, 23 Mar 2006, Paul A. Rubin wrote:
> [EMAIL PROTECTED] wrote:
> >
> > For a more permanent solution, I'd need a snippet of PHP code that lists
> > the contents of a directory (recursively). If someone would like to help
> > with that, I could give a more precise specification of the function. With
> > this function I could then very easily integrate it with the wiki and have
> > the list of files be generated automatically whenever you look at the
> > page.
> >
>
> If you'd care to post the spec here, I'll take a whack at it when time
> permits.
Sure. Let me start by explaining how I think it should work. A wiki author
would use a special markup to invoke the function. I'll create the markup
bit and how it parses its arguments etc. What I'd like from you is a
"backend" function that I can invoke to produce the listing. The markup
I'm suggesting below will have a few options/parameters, which results in
a set of requirements on the function.
Please don't feel you have to implement all of those requirements, I'll be
happy with the basics - additional requirements can be added as they are
needed. The reason I list a relatively complete specification is primarily
to get a good syntax for the markup - otherwise it's quite easy to design
a markup which can't be expanded later on.
Also note that the markup I'm suggesting below is just that, a suggestion.
If you have comments or would like it differently, let me know!
Anyway, I've put the description of the markup syntax and function
specification on this wiki page:
http://wiki.lyx.org/Playground/UploadListFcn
sincere regards
/Christian
PS. Below is my original text version of it before I realized I
should just place it on a wiki page...
----------------------
Anyway, here's a possible syntax of the markup:
(:uploadslist <dir> fmt=<fmt> recurse=<yes|no> filter=<regexp>:)
where
<dir> optionally specifies what directory to list, relative to the
uploads directory. Eg. 'Windows/LyX14x' would result in a listing
of http://wiki.lyx.org/uploads/Windows/LyX14x'
<fmt> optionally specifies a simple listing or a detailed listing, e.g.
fmt=simple (default, just the file name)
fmt=detailed (file name, size, date etc)
what we'd like from detailed list is unclear, I'm just guessing
that size and modification is enough.
<recurse> optionally specifies if the listing should be recursive, e.g
recurse=no (default, just one directory)
recurse=yes (descend into subdirectories)
<filter> optionally allows a filter which only lists matching files, e.g
filter='mpg$' (only files ending with 'mpg')
This then leads to the requirements of the function... Here's how I
imagine it:
$str = UploadListFcn($baseDir, $baseURI, $opts);
where the function should return a file listing either as a snippet of
HTML which I'll just insert into the output, or as wiki markup. You choose
which you feel is easiest for you. I suspect it's actually easier to do it
by returning wiki markup, see further down for a suggestion. As for the
arguments, here's how I imagine them:
* '$baseDir' is a string containing the *absolut* path to the "top"
directory that should be listed. If there's no recursion, this will be
the only directory that is listed of course. For example:
$baseDir = '/home/lyx/pmwiki/uploads/Windows'
Let me know if you'd prefer this string to always end in a '/' or not,
or if you make the function so that it doesn't matter.
* '$baseURI' is a string containing a part of a URI, which should be
prepended to a file link. This matches '$baseURI', e.g.
$baseURI = 'http://wiki.lyx.org/pmwiki/uploads/Windows'
Same thing goes here if you'd like a '/' at the end or not.
* '$opts' is an array with the remaining options. The array will always
have all the elements that are specified, i.e. the following:
$opts = array( 'fmt' => $fmt,
'recurse' => $recurse,
'filter' => $filter);
where '$fmt' is one of the strings 'simple' or 'detailed',
'$recurse' is one of the strings 'yes' or 'no',
'$filter' is a string with a regular expression (or empty)
As for the output, I don't really have much of an opinion about what it
should look like. To me it doesn't make sense to make it too complicated.
Here is one suggestion as to what the output could be when returned as
wiki markup when invoked from different markups:
The markup '(:uploadslist Windows:)' results in this invocation:
UploadsListFcn('/home/lyx/pmwiki/uploads/Windows',
'uploads:/Windows',
array('fmt'=>'simple', 'recurse'='no','filter'=>''));
which then returns the following:
* [[file0.txt -> uploads:/Windows/file.txt]]
* [[file1.txt -> uploads:/Windows/file0.txt]]
...
Here's another example when the function should recurse, based on the
markup '(:uploadslist Windows recurse=yes:)' which would result in this
invocation:
UploadsListFcn('/home/lyx/pmwiki/uploads/Windows',
'uploads:/Windows',
array('fmt'=>'simple','recurse'='yes','filter'=>''));
which then returns the following:
* [[file0.txt -> uploads:/Windows/file.txt]]
* [[file1.txt -> uploads:/Windows/file0.txt]]
* LyX14x/
** [[file2.txt -> uploads:/Windows/LyX14x/file2.txt]]
...
Finally here's an example of a detailed list, from the markup:
'(:uploadslist Windows fmt=detailed:)':
UploadsListFcn('/home/lyx/pmwiki/uploads/Windows',
'uploads:/Windows',
array('fmt'=>'detailed','recurse'='no','filter'=>''));
which then returns the following:
* [[file0.txt -> uploads:/Windows/file.txt]] (105 bytes, 2006-03-21 15:03)
...
--
Christian Ridderström, +46-8-768 39 44 http://www.md.kth.se/~chr