Initial commit
This commit is contained in:
commit
73843b66ce
7
README.md
Normal file
7
README.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz
|
||||
tar xzvf dokuwiki-stable.tgz
|
||||
mv dokuwiki content
|
||||
apt install nginx
|
||||
chown -R www-data content
|
||||
systemctl stop nginx
|
||||
docker compose --build
|
6
README.md~
Normal file
6
README.md~
Normal file
|
@ -0,0 +1,6 @@
|
|||
wget dock
|
||||
tar xzvf
|
||||
apt install nginx
|
||||
chown -R www-data content
|
||||
systemctl stop nginx
|
||||
docker compose --build
|
339
content/COPYING
Normal file
339
content/COPYING
Normal file
|
@ -0,0 +1,339 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
10
content/README
Normal file
10
content/README
Normal file
|
@ -0,0 +1,10 @@
|
|||
All documentation for DokuWiki is available online
|
||||
at https://www.dokuwiki.org/
|
||||
|
||||
For Installation Instructions see
|
||||
https://www.dokuwiki.org/install
|
||||
|
||||
DokuWiki - 2004-2020 (c) Andreas Gohr <andi@splitbrain.org>
|
||||
and the DokuWiki Community
|
||||
See COPYING and file headers for license info
|
||||
|
1
content/VERSION
Normal file
1
content/VERSION
Normal file
|
@ -0,0 +1 @@
|
|||
2020-07-29 "Hogfather"
|
7
content/bin/.htaccess
Normal file
7
content/bin/.htaccess
Normal file
|
@ -0,0 +1,7 @@
|
|||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</IfModule>
|
322
content/bin/dwpage.php
Executable file
322
content/bin/dwpage.php
Executable file
|
@ -0,0 +1,322 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use splitbrain\phpcli\CLI;
|
||||
use splitbrain\phpcli\Options;
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
|
||||
define('NOSESSION', 1);
|
||||
require_once(DOKU_INC . 'inc/init.php');
|
||||
|
||||
/**
|
||||
* Checkout and commit pages from the command line while maintaining the history
|
||||
*/
|
||||
class PageCLI extends CLI {
|
||||
|
||||
protected $force = false;
|
||||
protected $username = '';
|
||||
|
||||
/**
|
||||
* Register options and arguments on the given $options object
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function setup(Options $options) {
|
||||
/* global */
|
||||
$options->registerOption(
|
||||
'force',
|
||||
'force obtaining a lock for the page (generally bad idea)',
|
||||
'f'
|
||||
);
|
||||
$options->registerOption(
|
||||
'user',
|
||||
'work as this user. defaults to current CLI user',
|
||||
'u',
|
||||
'username'
|
||||
);
|
||||
$options->setHelp(
|
||||
'Utility to help command line Dokuwiki page editing, allow ' .
|
||||
'pages to be checked out for editing then committed after changes'
|
||||
);
|
||||
|
||||
/* checkout command */
|
||||
$options->registerCommand(
|
||||
'checkout',
|
||||
'Checks out a file from the repository, using the wiki id and obtaining ' .
|
||||
'a lock for the page. ' . "\n" .
|
||||
'If a working_file is specified, this is where the page is copied to. ' .
|
||||
'Otherwise defaults to the same as the wiki page in the current ' .
|
||||
'working directory.'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'wikipage',
|
||||
'The wiki page to checkout',
|
||||
true,
|
||||
'checkout'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'workingfile',
|
||||
'How to name the local checkout',
|
||||
false,
|
||||
'checkout'
|
||||
);
|
||||
|
||||
/* commit command */
|
||||
$options->registerCommand(
|
||||
'commit',
|
||||
'Checks in the working_file into the repository using the specified ' .
|
||||
'wiki id, archiving the previous version.'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'workingfile',
|
||||
'The local file to commit',
|
||||
true,
|
||||
'commit'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'wikipage',
|
||||
'The wiki page to create or update',
|
||||
true,
|
||||
'commit'
|
||||
);
|
||||
$options->registerOption(
|
||||
'message',
|
||||
'Summary describing the change (required)',
|
||||
'm',
|
||||
'summary',
|
||||
'commit'
|
||||
);
|
||||
$options->registerOption(
|
||||
'trivial',
|
||||
'minor change',
|
||||
't',
|
||||
false,
|
||||
'commit'
|
||||
);
|
||||
|
||||
/* lock command */
|
||||
$options->registerCommand(
|
||||
'lock',
|
||||
'Obtains or updates a lock for a wiki page'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'wikipage',
|
||||
'The wiki page to lock',
|
||||
true,
|
||||
'lock'
|
||||
);
|
||||
|
||||
/* unlock command */
|
||||
$options->registerCommand(
|
||||
'unlock',
|
||||
'Removes a lock for a wiki page.'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'wikipage',
|
||||
'The wiki page to unlock',
|
||||
true,
|
||||
'unlock'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Your main program
|
||||
*
|
||||
* Arguments and options have been parsed when this is run
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function main(Options $options) {
|
||||
$this->force = $options->getOpt('force', false);
|
||||
$this->username = $options->getOpt('user', $this->getUser());
|
||||
|
||||
$command = $options->getCmd();
|
||||
$args = $options->getArgs();
|
||||
switch($command) {
|
||||
case 'checkout':
|
||||
$wiki_id = array_shift($args);
|
||||
$localfile = array_shift($args);
|
||||
$this->commandCheckout($wiki_id, $localfile);
|
||||
break;
|
||||
case 'commit':
|
||||
$localfile = array_shift($args);
|
||||
$wiki_id = array_shift($args);
|
||||
$this->commandCommit(
|
||||
$localfile,
|
||||
$wiki_id,
|
||||
$options->getOpt('message', ''),
|
||||
$options->getOpt('trivial', false)
|
||||
);
|
||||
break;
|
||||
case 'lock':
|
||||
$wiki_id = array_shift($args);
|
||||
$this->obtainLock($wiki_id);
|
||||
$this->success("$wiki_id locked");
|
||||
break;
|
||||
case 'unlock':
|
||||
$wiki_id = array_shift($args);
|
||||
$this->clearLock($wiki_id);
|
||||
$this->success("$wiki_id unlocked");
|
||||
break;
|
||||
default:
|
||||
echo $options->help();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check out a file
|
||||
*
|
||||
* @param string $wiki_id
|
||||
* @param string $localfile
|
||||
*/
|
||||
protected function commandCheckout($wiki_id, $localfile) {
|
||||
global $conf;
|
||||
|
||||
$wiki_id = cleanID($wiki_id);
|
||||
$wiki_fn = wikiFN($wiki_id);
|
||||
|
||||
if(!file_exists($wiki_fn)) {
|
||||
$this->fatal("$wiki_id does not yet exist");
|
||||
}
|
||||
|
||||
if(empty($localfile)) {
|
||||
$localfile = getcwd() . '/' . \dokuwiki\Utf8\PhpString::basename($wiki_fn);
|
||||
}
|
||||
|
||||
if(!file_exists(dirname($localfile))) {
|
||||
$this->fatal("Directory " . dirname($localfile) . " does not exist");
|
||||
}
|
||||
|
||||
if(stristr(realpath(dirname($localfile)), realpath($conf['datadir'])) !== false) {
|
||||
$this->fatal("Attempt to check out file into data directory - not allowed");
|
||||
}
|
||||
|
||||
$this->obtainLock($wiki_id);
|
||||
|
||||
if(!copy($wiki_fn, $localfile)) {
|
||||
$this->clearLock($wiki_id);
|
||||
$this->fatal("Unable to copy $wiki_fn to $localfile");
|
||||
}
|
||||
|
||||
$this->success("$wiki_id > $localfile");
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a file as a new page revision
|
||||
*
|
||||
* @param string $localfile
|
||||
* @param string $wiki_id
|
||||
* @param string $message
|
||||
* @param bool $minor
|
||||
*/
|
||||
protected function commandCommit($localfile, $wiki_id, $message, $minor) {
|
||||
$wiki_id = cleanID($wiki_id);
|
||||
$message = trim($message);
|
||||
|
||||
if(!file_exists($localfile)) {
|
||||
$this->fatal("$localfile does not exist");
|
||||
}
|
||||
|
||||
if(!is_readable($localfile)) {
|
||||
$this->fatal("Cannot read from $localfile");
|
||||
}
|
||||
|
||||
if(!$message) {
|
||||
$this->fatal("Summary message required");
|
||||
}
|
||||
|
||||
$this->obtainLock($wiki_id);
|
||||
|
||||
saveWikiText($wiki_id, file_get_contents($localfile), $message, $minor);
|
||||
|
||||
$this->clearLock($wiki_id);
|
||||
|
||||
$this->success("$localfile > $wiki_id");
|
||||
}
|
||||
|
||||
/**
|
||||
* Lock the given page or exit
|
||||
*
|
||||
* @param string $wiki_id
|
||||
*/
|
||||
protected function obtainLock($wiki_id) {
|
||||
if($this->force) $this->deleteLock($wiki_id);
|
||||
|
||||
$_SERVER['REMOTE_USER'] = $this->username;
|
||||
|
||||
if(checklock($wiki_id)) {
|
||||
$this->error("Page $wiki_id is already locked by another user");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
lock($wiki_id);
|
||||
|
||||
if(checklock($wiki_id)) {
|
||||
$this->error("Unable to obtain lock for $wiki_id ");
|
||||
var_dump(checklock($wiki_id));
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the lock on the given page
|
||||
*
|
||||
* @param string $wiki_id
|
||||
*/
|
||||
protected function clearLock($wiki_id) {
|
||||
if($this->force) $this->deleteLock($wiki_id);
|
||||
|
||||
$_SERVER['REMOTE_USER'] = $this->username;
|
||||
if(checklock($wiki_id)) {
|
||||
$this->error("Page $wiki_id is locked by another user");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
unlock($wiki_id);
|
||||
|
||||
if(file_exists(wikiLockFN($wiki_id))) {
|
||||
$this->error("Unable to clear lock for $wiki_id");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Forcefully remove a lock on the page given
|
||||
*
|
||||
* @param string $wiki_id
|
||||
*/
|
||||
protected function deleteLock($wiki_id) {
|
||||
$wikiLockFN = wikiLockFN($wiki_id);
|
||||
|
||||
if(file_exists($wikiLockFN)) {
|
||||
if(!unlink($wikiLockFN)) {
|
||||
$this->error("Unable to delete $wikiLockFN");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current user's username from the environment
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getUser() {
|
||||
$user = getenv('USER');
|
||||
if(empty ($user)) {
|
||||
$user = getenv('USERNAME');
|
||||
} else {
|
||||
return $user;
|
||||
}
|
||||
if(empty ($user)) {
|
||||
$user = 'admin';
|
||||
}
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
|
||||
// Main
|
||||
$cli = new PageCLI();
|
||||
$cli->run();
|
340
content/bin/gittool.php
Executable file
340
content/bin/gittool.php
Executable file
|
@ -0,0 +1,340 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use splitbrain\phpcli\CLI;
|
||||
use splitbrain\phpcli\Options;
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
|
||||
define('NOSESSION', 1);
|
||||
require_once(DOKU_INC . 'inc/init.php');
|
||||
|
||||
/**
|
||||
* Easily manage DokuWiki git repositories
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
class GitToolCLI extends CLI {
|
||||
|
||||
/**
|
||||
* Register options and arguments on the given $options object
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function setup(Options $options) {
|
||||
$options->setHelp(
|
||||
"Manage git repositories for DokuWiki and its plugins and templates.\n\n" .
|
||||
"$> ./bin/gittool.php clone gallery template:ach\n" .
|
||||
"$> ./bin/gittool.php repos\n" .
|
||||
"$> ./bin/gittool.php origin -v"
|
||||
);
|
||||
|
||||
$options->registerArgument(
|
||||
'command',
|
||||
'Command to execute. See below',
|
||||
true
|
||||
);
|
||||
|
||||
$options->registerCommand(
|
||||
'clone',
|
||||
'Tries to install a known plugin or template (prefix with template:) via git. Uses the DokuWiki.org ' .
|
||||
'plugin repository to find the proper git repository. Multiple extensions can be given as parameters'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'extension',
|
||||
'name of the extension to install, prefix with \'template:\' for templates',
|
||||
true,
|
||||
'clone'
|
||||
);
|
||||
|
||||
$options->registerCommand(
|
||||
'install',
|
||||
'The same as clone, but when no git source repository can be found, the extension is installed via ' .
|
||||
'download'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'extension',
|
||||
'name of the extension to install, prefix with \'template:\' for templates',
|
||||
true,
|
||||
'install'
|
||||
);
|
||||
|
||||
$options->registerCommand(
|
||||
'repos',
|
||||
'Lists all git repositories found in this DokuWiki installation'
|
||||
);
|
||||
|
||||
$options->registerCommand(
|
||||
'*',
|
||||
'Any unknown commands are assumed to be arguments to git and will be executed in all repositories ' .
|
||||
'found within this DokuWiki installation'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Your main program
|
||||
*
|
||||
* Arguments and options have been parsed when this is run
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function main(Options $options) {
|
||||
$command = $options->getCmd();
|
||||
$args = $options->getArgs();
|
||||
if(!$command) $command = array_shift($args);
|
||||
|
||||
switch($command) {
|
||||
case '':
|
||||
echo $options->help();
|
||||
break;
|
||||
case 'clone':
|
||||
$this->cmdClone($args);
|
||||
break;
|
||||
case 'install':
|
||||
$this->cmdInstall($args);
|
||||
break;
|
||||
case 'repo':
|
||||
case 'repos':
|
||||
$this->cmdRepos();
|
||||
break;
|
||||
default:
|
||||
$this->cmdGit($command, $args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to install the given extensions using git clone
|
||||
*
|
||||
* @param array $extensions
|
||||
*/
|
||||
public function cmdClone($extensions) {
|
||||
$errors = array();
|
||||
$succeeded = array();
|
||||
|
||||
foreach($extensions as $ext) {
|
||||
$repo = $this->getSourceRepo($ext);
|
||||
|
||||
if(!$repo) {
|
||||
$this->error("could not find a repository for $ext");
|
||||
$errors[] = $ext;
|
||||
} else {
|
||||
if($this->cloneExtension($ext, $repo)) {
|
||||
$succeeded[] = $ext;
|
||||
} else {
|
||||
$errors[] = $ext;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n";
|
||||
if($succeeded) $this->success('successfully cloned the following extensions: ' . join(', ', $succeeded));
|
||||
if($errors) $this->error('failed to clone the following extensions: ' . join(', ', $errors));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to install the given extensions using git clone with fallback to install
|
||||
*
|
||||
* @param array $extensions
|
||||
*/
|
||||
public function cmdInstall($extensions) {
|
||||
$errors = array();
|
||||
$succeeded = array();
|
||||
|
||||
foreach($extensions as $ext) {
|
||||
$repo = $this->getSourceRepo($ext);
|
||||
|
||||
if(!$repo) {
|
||||
$this->info("could not find a repository for $ext");
|
||||
if($this->downloadExtension($ext)) {
|
||||
$succeeded[] = $ext;
|
||||
} else {
|
||||
$errors[] = $ext;
|
||||
}
|
||||
} else {
|
||||
if($this->cloneExtension($ext, $repo)) {
|
||||
$succeeded[] = $ext;
|
||||
} else {
|
||||
$errors[] = $ext;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n";
|
||||
if($succeeded) $this->success('successfully installed the following extensions: ' . join(', ', $succeeded));
|
||||
if($errors) $this->error('failed to install the following extensions: ' . join(', ', $errors));
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the given git command in every repository
|
||||
*
|
||||
* @param $cmd
|
||||
* @param $arg
|
||||
*/
|
||||
public function cmdGit($cmd, $arg) {
|
||||
$repos = $this->findRepos();
|
||||
|
||||
$shell = array_merge(array('git', $cmd), $arg);
|
||||
$shell = array_map('escapeshellarg', $shell);
|
||||
$shell = join(' ', $shell);
|
||||
|
||||
foreach($repos as $repo) {
|
||||
if(!@chdir($repo)) {
|
||||
$this->error("Could not change into $repo");
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->info("executing $shell in $repo");
|
||||
$ret = 0;
|
||||
system($shell, $ret);
|
||||
|
||||
if($ret == 0) {
|
||||
$this->success("git succeeded in $repo");
|
||||
} else {
|
||||
$this->error("git failed in $repo");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simply lists the repositories
|
||||
*/
|
||||
public function cmdRepos() {
|
||||
$repos = $this->findRepos();
|
||||
foreach($repos as $repo) {
|
||||
echo "$repo\n";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Install extension from the given download URL
|
||||
*
|
||||
* @param string $ext
|
||||
* @return bool|null
|
||||
*/
|
||||
private function downloadExtension($ext) {
|
||||
/** @var helper_plugin_extension_extension $plugin */
|
||||
$plugin = plugin_load('helper', 'extension_extension');
|
||||
if(!$ext) die("extension plugin not available, can't continue");
|
||||
|
||||
$plugin->setExtension($ext);
|
||||
|
||||
$url = $plugin->getDownloadURL();
|
||||
if(!$url) {
|
||||
$this->error("no download URL for $ext");
|
||||
return false;
|
||||
}
|
||||
|
||||
$ok = false;
|
||||
try {
|
||||
$this->info("installing $ext via download from $url");
|
||||
$ok = $plugin->installFromURL($url);
|
||||
} catch(Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
if($ok) {
|
||||
$this->success("installed $ext via download");
|
||||
return true;
|
||||
} else {
|
||||
$this->success("failed to install $ext via download");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clones the extension from the given repository
|
||||
*
|
||||
* @param string $ext
|
||||
* @param string $repo
|
||||
* @return bool
|
||||
*/
|
||||
private function cloneExtension($ext, $repo) {
|
||||
if(substr($ext, 0, 9) == 'template:') {
|
||||
$target = fullpath(tpl_incdir() . '../' . substr($ext, 9));
|
||||
} else {
|
||||
$target = DOKU_PLUGIN . $ext;
|
||||
}
|
||||
|
||||
$this->info("cloning $ext from $repo to $target");
|
||||
$ret = 0;
|
||||
system("git clone $repo $target", $ret);
|
||||
if($ret === 0) {
|
||||
$this->success("cloning of $ext succeeded");
|
||||
return true;
|
||||
} else {
|
||||
$this->error("cloning of $ext failed");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all git repositories in this DokuWiki install
|
||||
*
|
||||
* Looks in root, template and plugin directories only.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function findRepos() {
|
||||
$this->info('Looking for .git directories');
|
||||
$data = array_merge(
|
||||
glob(DOKU_INC . '.git', GLOB_ONLYDIR),
|
||||
glob(DOKU_PLUGIN . '*/.git', GLOB_ONLYDIR),
|
||||
glob(fullpath(tpl_incdir() . '../') . '/*/.git', GLOB_ONLYDIR)
|
||||
);
|
||||
|
||||
if(!$data) {
|
||||
$this->error('Found no .git directories');
|
||||
} else {
|
||||
$this->success('Found ' . count($data) . ' .git directories');
|
||||
}
|
||||
$data = array_map('fullpath', array_map('dirname', $data));
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the repository for the given extension
|
||||
*
|
||||
* @param $extension
|
||||
* @return false|string
|
||||
*/
|
||||
private function getSourceRepo($extension) {
|
||||
/** @var helper_plugin_extension_extension $ext */
|
||||
$ext = plugin_load('helper', 'extension_extension');
|
||||
if(!$ext) die("extension plugin not available, can't continue");
|
||||
|
||||
$ext->setExtension($extension);
|
||||
|
||||
$repourl = $ext->getSourcerepoURL();
|
||||
if(!$repourl) return false;
|
||||
|
||||
// match github repos
|
||||
if(preg_match('/github\.com\/([^\/]+)\/([^\/]+)/i', $repourl, $m)) {
|
||||
$user = $m[1];
|
||||
$repo = $m[2];
|
||||
return 'https://github.com/' . $user . '/' . $repo . '.git';
|
||||
}
|
||||
|
||||
// match gitorious repos
|
||||
if(preg_match('/gitorious.org\/([^\/]+)\/([^\/]+)?/i', $repourl, $m)) {
|
||||
$user = $m[1];
|
||||
$repo = $m[2];
|
||||
if(!$repo) $repo = $user;
|
||||
|
||||
return 'https://git.gitorious.org/' . $user . '/' . $repo . '.git';
|
||||
}
|
||||
|
||||
// match bitbucket repos - most people seem to use mercurial there though
|
||||
if(preg_match('/bitbucket\.org\/([^\/]+)\/([^\/]+)/i', $repourl, $m)) {
|
||||
$user = $m[1];
|
||||
$repo = $m[2];
|
||||
return 'https://bitbucket.org/' . $user . '/' . $repo . '.git';
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Main
|
||||
$cli = new GitToolCLI();
|
||||
$cli->run();
|
107
content/bin/indexer.php
Executable file
107
content/bin/indexer.php
Executable file
|
@ -0,0 +1,107 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use splitbrain\phpcli\CLI;
|
||||
use splitbrain\phpcli\Options;
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
|
||||
define('NOSESSION', 1);
|
||||
require_once(DOKU_INC . 'inc/init.php');
|
||||
|
||||
/**
|
||||
* Update the Search Index from command line
|
||||
*/
|
||||
class IndexerCLI extends CLI {
|
||||
|
||||
private $quiet = false;
|
||||
private $clear = false;
|
||||
|
||||
/**
|
||||
* Register options and arguments on the given $options object
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function setup(Options $options) {
|
||||
$options->setHelp(
|
||||
'Updates the searchindex by indexing all new or changed pages. When the -c option is ' .
|
||||
'given the index is cleared first.'
|
||||
);
|
||||
|
||||
$options->registerOption(
|
||||
'clear',
|
||||
'clear the index before updating',
|
||||
'c'
|
||||
);
|
||||
$options->registerOption(
|
||||
'quiet',
|
||||
'don\'t produce any output',
|
||||
'q'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Your main program
|
||||
*
|
||||
* Arguments and options have been parsed when this is run
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function main(Options $options) {
|
||||
$this->clear = $options->getOpt('clear');
|
||||
$this->quiet = $options->getOpt('quiet');
|
||||
|
||||
if($this->clear) $this->clearindex();
|
||||
|
||||
$this->update();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the index
|
||||
*/
|
||||
protected function update() {
|
||||
global $conf;
|
||||
$data = array();
|
||||
$this->quietecho("Searching pages... ");
|
||||
search($data, $conf['datadir'], 'search_allpages', array('skipacl' => true));
|
||||
$this->quietecho(count($data) . " pages found.\n");
|
||||
|
||||
foreach($data as $val) {
|
||||
$this->index($val['id']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Index the given page
|
||||
*
|
||||
* @param string $id
|
||||
*/
|
||||
protected function index($id) {
|
||||
$this->quietecho("$id... ");
|
||||
idx_addPage($id, !$this->quiet, $this->clear);
|
||||
$this->quietecho("done.\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all index files
|
||||
*/
|
||||
protected function clearindex() {
|
||||
$this->quietecho("Clearing index... ");
|
||||
idx_get_indexer()->clear();
|
||||
$this->quietecho("done.\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* Print message if not supressed
|
||||
*
|
||||
* @param string $msg
|
||||
*/
|
||||
protected function quietecho($msg) {
|
||||
if(!$this->quiet) echo $msg;
|
||||
}
|
||||
}
|
||||
|
||||
// Main
|
||||
$cli = new IndexerCLI();
|
||||
$cli->run();
|
103
content/bin/plugin.php
Executable file
103
content/bin/plugin.php
Executable file
|
@ -0,0 +1,103 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use dokuwiki\Extension\PluginController;
|
||||
use splitbrain\phpcli\CLI;
|
||||
use splitbrain\phpcli\Colors;
|
||||
use splitbrain\phpcli\Options;
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
|
||||
define('NOSESSION', 1);
|
||||
require_once(DOKU_INC . 'inc/init.php');
|
||||
|
||||
class PluginCLI extends CLI {
|
||||
|
||||
/**
|
||||
* Register options and arguments on the given $options object
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function setup(Options $options) {
|
||||
$options->setHelp('Excecutes Plugin command line tools');
|
||||
$options->registerArgument('plugin', 'The plugin CLI you want to run. Leave off to see list', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Your main program
|
||||
*
|
||||
* Arguments and options have been parsed when this is run
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function main(Options $options) {
|
||||
global $argv;
|
||||
$argv = $options->getArgs();
|
||||
|
||||
if($argv) {
|
||||
$plugin = $this->loadPlugin($argv[0]);
|
||||
if($plugin !== null) {
|
||||
$plugin->run();
|
||||
} else {
|
||||
$this->fatal('Command {cmd} not found.', ['cmd' => $argv[0]]);
|
||||
}
|
||||
} else {
|
||||
echo $options->help();
|
||||
$this->listPlugins();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* List available plugins
|
||||
*/
|
||||
protected function listPlugins() {
|
||||
/** @var PluginController $plugin_controller */
|
||||
global $plugin_controller;
|
||||
|
||||
echo "\n";
|
||||
echo "\n";
|
||||
echo $this->colors->wrap('AVAILABLE PLUGINS:', Colors::C_BROWN);
|
||||
echo "\n";
|
||||
|
||||
$list = $plugin_controller->getList('cli');
|
||||
sort($list);
|
||||
if(!count($list)) {
|
||||
echo $this->colors->wrap(" No plugins providing CLI components available\n", Colors::C_RED);
|
||||
} else {
|
||||
$tf = new \splitbrain\phpcli\TableFormatter($this->colors);
|
||||
|
||||
foreach($list as $name) {
|
||||
$plugin = $this->loadPlugin($name);
|
||||
if($plugin === null) continue;
|
||||
$info = $plugin->getInfo();
|
||||
|
||||
echo $tf->format(
|
||||
[2, '30%', '*'],
|
||||
['', $name, $info['desc']],
|
||||
['', Colors::C_CYAN, '']
|
||||
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiate a CLI plugin
|
||||
*
|
||||
* @param string $name
|
||||
* @return \dokuwiki\Extension\CLIPlugin|null
|
||||
*/
|
||||
protected function loadPlugin($name) {
|
||||
// execute the plugin CLI
|
||||
$class = "cli_plugin_$name";
|
||||
if(class_exists($class)) {
|
||||
return new $class();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Main
|
||||
$cli = new PluginCLI();
|
||||
$cli->run();
|
64
content/bin/render.php
Executable file
64
content/bin/render.php
Executable file
|
@ -0,0 +1,64 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use splitbrain\phpcli\CLI;
|
||||
use splitbrain\phpcli\Options;
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
|
||||
define('NOSESSION', 1);
|
||||
require_once(DOKU_INC . 'inc/init.php');
|
||||
|
||||
/**
|
||||
* A simple commandline tool to render some DokuWiki syntax with a given
|
||||
* renderer.
|
||||
*
|
||||
* This may not work for plugins that expect a certain environment to be
|
||||
* set up before rendering, but should work for most or even all standard
|
||||
* DokuWiki markup
|
||||
*
|
||||
* @license GPL2
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
class RenderCLI extends CLI {
|
||||
|
||||
/**
|
||||
* Register options and arguments on the given $options object
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function setup(Options $options) {
|
||||
$options->setHelp(
|
||||
'A simple commandline tool to render some DokuWiki syntax with a given renderer.' .
|
||||
"\n\n" .
|
||||
'This may not work for plugins that expect a certain environment to be ' .
|
||||
'set up before rendering, but should work for most or even all standard ' .
|
||||
'DokuWiki markup'
|
||||
);
|
||||
$options->registerOption('renderer', 'The renderer mode to use. Defaults to xhtml', 'r', 'mode');
|
||||
}
|
||||
|
||||
/**
|
||||
* Your main program
|
||||
*
|
||||
* Arguments and options have been parsed when this is run
|
||||
*
|
||||
* @param Options $options
|
||||
* @throws DokuCLI_Exception
|
||||
* @return void
|
||||
*/
|
||||
protected function main(Options $options) {
|
||||
$renderer = $options->getOpt('renderer', 'xhtml');
|
||||
|
||||
// do the action
|
||||
$source = stream_get_contents(STDIN);
|
||||
$info = array();
|
||||
$result = p_render($renderer, p_get_instructions($source), $info);
|
||||
if(is_null($result)) throw new DokuCLI_Exception("No such renderer $renderer");
|
||||
echo $result;
|
||||
}
|
||||
}
|
||||
|
||||
// Main
|
||||
$cli = new RenderCLI();
|
||||
$cli->run();
|
114
content/bin/striplangs.php
Executable file
114
content/bin/striplangs.php
Executable file
|
@ -0,0 +1,114 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use splitbrain\phpcli\CLI;
|
||||
use splitbrain\phpcli\Options;
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
|
||||
define('NOSESSION', 1);
|
||||
require_once(DOKU_INC . 'inc/init.php');
|
||||
|
||||
/**
|
||||
* Remove unwanted languages from a DokuWiki install
|
||||
*/
|
||||
class StripLangsCLI extends CLI {
|
||||
|
||||
/**
|
||||
* Register options and arguments on the given $options object
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function setup(Options $options) {
|
||||
|
||||
$options->setHelp(
|
||||
'Remove all languages from the installation, besides the ones specified. English language ' .
|
||||
'is never removed!'
|
||||
);
|
||||
|
||||
$options->registerOption(
|
||||
'keep',
|
||||
'Comma separated list of languages to keep in addition to English.',
|
||||
'k',
|
||||
'langcodes'
|
||||
);
|
||||
$options->registerOption(
|
||||
'english-only',
|
||||
'Remove all languages except English',
|
||||
'e'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Your main program
|
||||
*
|
||||
* Arguments and options have been parsed when this is run
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function main(Options $options) {
|
||||
if($options->getOpt('keep')) {
|
||||
$keep = explode(',', $options->getOpt('keep'));
|
||||
if(!in_array('en', $keep)) $keep[] = 'en';
|
||||
} elseif($options->getOpt('english-only')) {
|
||||
$keep = array('en');
|
||||
} else {
|
||||
echo $options->help();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// Kill all language directories in /inc/lang and /lib/plugins besides those in $langs array
|
||||
$this->stripDirLangs(realpath(dirname(__FILE__) . '/../inc/lang'), $keep);
|
||||
$this->processExtensions(realpath(dirname(__FILE__) . '/../lib/plugins'), $keep);
|
||||
$this->processExtensions(realpath(dirname(__FILE__) . '/../lib/tpl'), $keep);
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip languages from extensions
|
||||
*
|
||||
* @param string $path path to plugin or template dir
|
||||
* @param array $keep_langs languages to keep
|
||||
*/
|
||||
protected function processExtensions($path, $keep_langs) {
|
||||
if(is_dir($path)) {
|
||||
$entries = scandir($path);
|
||||
|
||||
foreach($entries as $entry) {
|
||||
if($entry != "." && $entry != "..") {
|
||||
if(is_dir($path . '/' . $entry)) {
|
||||
|
||||
$plugin_langs = $path . '/' . $entry . '/lang';
|
||||
|
||||
if(is_dir($plugin_langs)) {
|
||||
$this->stripDirLangs($plugin_langs, $keep_langs);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip languages from path
|
||||
*
|
||||
* @param string $path path to lang dir
|
||||
* @param array $keep_langs languages to keep
|
||||
*/
|
||||
protected function stripDirLangs($path, $keep_langs) {
|
||||
$dir = dir($path);
|
||||
|
||||
while(($cur_dir = $dir->read()) !== false) {
|
||||
if($cur_dir != '.' and $cur_dir != '..' and is_dir($path . '/' . $cur_dir)) {
|
||||
|
||||
if(!in_array($cur_dir, $keep_langs, true)) {
|
||||
io_rmdir($path . '/' . $cur_dir, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
$dir->close();
|
||||
}
|
||||
}
|
||||
|
||||
$cli = new StripLangsCLI();
|
||||
$cli->run();
|
186
content/bin/wantedpages.php
Executable file
186
content/bin/wantedpages.php
Executable file
|
@ -0,0 +1,186 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use splitbrain\phpcli\CLI;
|
||||
use splitbrain\phpcli\Options;
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
|
||||
define('NOSESSION', 1);
|
||||
require_once(DOKU_INC . 'inc/init.php');
|
||||
|
||||
/**
|
||||
* Find wanted pages
|
||||
*/
|
||||
class WantedPagesCLI extends CLI {
|
||||
|
||||
const DIR_CONTINUE = 1;
|
||||
const DIR_NS = 2;
|
||||
const DIR_PAGE = 3;
|
||||
|
||||
private $skip = false;
|
||||
private $sort = 'wanted';
|
||||
|
||||
private $result = array();
|
||||
|
||||
/**
|
||||
* Register options and arguments on the given $options object
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function setup(Options $options) {
|
||||
$options->setHelp(
|
||||
'Outputs a list of wanted pages (pages that do not exist yet) and their origin pages ' .
|
||||
' (the pages that are linkin to these missing pages).'
|
||||
);
|
||||
$options->registerArgument(
|
||||
'namespace',
|
||||
'The namespace to lookup. Defaults to root namespace',
|
||||
false
|
||||
);
|
||||
|
||||
$options->registerOption(
|
||||
'sort',
|
||||
'Sort by wanted or origin page',
|
||||
's',
|
||||
'(wanted|origin)'
|
||||
);
|
||||
|
||||
$options->registerOption(
|
||||
'skip',
|
||||
'Do not show the second dimension',
|
||||
'k'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Your main program
|
||||
*
|
||||
* Arguments and options have been parsed when this is run
|
||||
*
|
||||
* @param Options $options
|
||||
* @return void
|
||||
*/
|
||||
protected function main(Options $options) {
|
||||
$args = $options->getArgs();
|
||||
if($args) {
|
||||
$startdir = dirname(wikiFN($args[0] . ':xxx'));
|
||||
} else {
|
||||
$startdir = dirname(wikiFN('xxx'));
|
||||
}
|
||||
|
||||
$this->skip = $options->getOpt('skip');
|
||||
$this->sort = $options->getOpt('sort');
|
||||
|
||||
$this->info("searching $startdir");
|
||||
|
||||
foreach($this->getPages($startdir) as $page) {
|
||||
$this->internalLinks($page);
|
||||
}
|
||||
ksort($this->result);
|
||||
foreach($this->result as $main => $subs) {
|
||||
if($this->skip) {
|
||||
print "$main\n";
|
||||
} else {
|
||||
$subs = array_unique($subs);
|
||||
sort($subs);
|
||||
foreach($subs as $sub) {
|
||||
printf("%-40s %s\n", $main, $sub);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine directions of the search loop
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $basepath
|
||||
* @return int
|
||||
*/
|
||||
protected function dirFilter($entry, $basepath) {
|
||||
if($entry == '.' || $entry == '..') {
|
||||
return WantedPagesCLI::DIR_CONTINUE;
|
||||
}
|
||||
if(is_dir($basepath . '/' . $entry)) {
|
||||
if(strpos($entry, '_') === 0) {
|
||||
return WantedPagesCLI::DIR_CONTINUE;
|
||||
}
|
||||
return WantedPagesCLI::DIR_NS;
|
||||
}
|
||||
if(preg_match('/\.txt$/', $entry)) {
|
||||
return WantedPagesCLI::DIR_PAGE;
|
||||
}
|
||||
return WantedPagesCLI::DIR_CONTINUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Collects recursively the pages in a namespace
|
||||
*
|
||||
* @param string $dir
|
||||
* @return array
|
||||
* @throws DokuCLI_Exception
|
||||
*/
|
||||
protected function getPages($dir) {
|
||||
static $trunclen = null;
|
||||
if(!$trunclen) {
|
||||
global $conf;
|
||||
$trunclen = strlen($conf['datadir'] . ':');
|
||||
}
|
||||
|
||||
if(!is_dir($dir)) {
|
||||
throw new DokuCLI_Exception("Unable to read directory $dir");
|
||||
}
|
||||
|
||||
$pages = array();
|
||||
$dh = opendir($dir);
|
||||
while(false !== ($entry = readdir($dh))) {
|
||||
$status = $this->dirFilter($entry, $dir);
|
||||
if($status == WantedPagesCLI::DIR_CONTINUE) {
|
||||
continue;
|
||||
} else if($status == WantedPagesCLI::DIR_NS) {
|
||||
$pages = array_merge($pages, $this->getPages($dir . '/' . $entry));
|
||||
} else {
|
||||
$page = array(
|
||||
'id' => pathID(substr($dir . '/' . $entry, $trunclen)),
|
||||
'file' => $dir . '/' . $entry,
|
||||
);
|
||||
$pages[] = $page;
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
return $pages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse instructions and add the non-existing links to the result array
|
||||
*
|
||||
* @param array $page array with page id and file path
|
||||
*/
|
||||
protected function internalLinks($page) {
|
||||
global $conf;
|
||||
$instructions = p_get_instructions(file_get_contents($page['file']));
|
||||
$cns = getNS($page['id']);
|
||||
$exists = false;
|
||||
$pid = $page['id'];
|
||||
foreach($instructions as $ins) {
|
||||
if($ins[0] == 'internallink' || ($conf['camelcase'] && $ins[0] == 'camelcaselink')) {
|
||||
$mid = $ins[1][0];
|
||||
resolve_pageid($cns, $mid, $exists);
|
||||
if(!$exists) {
|
||||
list($mid) = explode('#', $mid); //record pages without hashes
|
||||
|
||||
if($this->sort == 'origin') {
|
||||
$this->result[$pid][] = $mid;
|
||||
} else {
|
||||
$this->result[$mid][] = $pid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Main
|
||||
$cli = new WantedPagesCLI();
|
||||
$cli->run();
|
8
content/conf/.htaccess
Normal file
8
content/conf/.htaccess
Normal file
|
@ -0,0 +1,8 @@
|
|||
## no access to the conf directory
|
||||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</IfModule>
|
21
content/conf/acl.auth.php.dist
Normal file
21
content/conf/acl.auth.php.dist
Normal file
|
@ -0,0 +1,21 @@
|
|||
# acl.auth.php
|
||||
# <?php exit()?>
|
||||
# Don't modify the lines above
|
||||
#
|
||||
# Access Control Lists
|
||||
#
|
||||
# Editing this file by hand shouldn't be necessary. Use the ACL
|
||||
# Manager interface instead.
|
||||
#
|
||||
# If your auth backend allows special char like spaces in groups
|
||||
# or user names you need to urlencode them (only chars <128, leave
|
||||
# UTF-8 multibyte chars as is)
|
||||
#
|
||||
# none 0
|
||||
# read 1
|
||||
# edit 2
|
||||
# create 4
|
||||
# upload 8
|
||||
# delete 16
|
||||
|
||||
* @ALL 8
|
62
content/conf/acronyms.conf
Normal file
62
content/conf/acronyms.conf
Normal file
|
@ -0,0 +1,62 @@
|
|||
# Acronyms.
|
||||
|
||||
ACL Access Control List
|
||||
AFAICS As far as I can see
|
||||
AFAIK As far as I know
|
||||
AFAIR As far as I remember
|
||||
API Application Programming Interface
|
||||
ASAP As soon as possible
|
||||
ASCII American Standard Code for Information Interchange
|
||||
BTW By the way
|
||||
CMS Content Management System
|
||||
CSS Cascading Style Sheets
|
||||
DNS Domain Name System
|
||||
EOF End of file
|
||||
EOL End of line
|
||||
EOM End of message
|
||||
EOT End of text
|
||||
FAQ Frequently Asked Questions
|
||||
FTP File Transfer Protocol
|
||||
FOSS Free & Open-Source Software
|
||||
FLOSS Free/Libre and Open Source Software
|
||||
FUD Fear, Uncertainty, and Doubt
|
||||
FYI For your information
|
||||
GB Gigabyte
|
||||
GHz Gigahertz
|
||||
GPL GNU General Public License
|
||||
GUI Graphical User Interface
|
||||
HTML HyperText Markup Language
|
||||
IANAL I am not a lawyer (but)
|
||||
IE Internet Explorer
|
||||
IIRC If I remember correctly
|
||||
IMHO In my humble opinion
|
||||
IMO In my opinion
|
||||
IOW In other words
|
||||
IRC Internet Relay Chat
|
||||
IRL In real life
|
||||
KISS Keep it simple stupid
|
||||
LAN Local Area Network
|
||||
LGPL GNU Lesser General Public License
|
||||
LOL Laughing out loud
|
||||
MathML Mathematical Markup Language
|
||||
MB Megabyte
|
||||
MHz Megahertz
|
||||
MSIE Microsoft Internet Explorer
|
||||
OMG Oh my God
|
||||
OS Operating System
|
||||
OSS Open Source Software
|
||||
OTOH On the other hand
|
||||
PITA Pain in the Ass
|
||||
RFC Request for Comments
|
||||
ROTFL Rolling on the floor laughing
|
||||
RTFM Read The Fine Manual
|
||||
spec specification
|
||||
TIA Thanks in advance
|
||||
TL;DR Too long; didn't read
|
||||
TOC Table of Contents
|
||||
URI Uniform Resource Identifier
|
||||
URL Uniform Resource Locator
|
||||
W3C World Wide Web Consortium
|
||||
WTF? What the f***
|
||||
WYSIWYG What You See Is What You Get
|
||||
YMMV Your mileage may vary
|
178
content/conf/dokuwiki.php
Normal file
178
content/conf/dokuwiki.php
Normal file
|
@ -0,0 +1,178 @@
|
|||
<?php
|
||||
/**
|
||||
* This is DokuWiki's Main Configuration file
|
||||
*
|
||||
* All the default values are kept here, you should not modify it but use
|
||||
* a local.php file instead to override the settings from here.
|
||||
*
|
||||
* This is a piece of PHP code so PHP syntax applies!
|
||||
*
|
||||
* For help with the configuration and a more detailed explanation of the various options
|
||||
* see https://www.dokuwiki.org/config
|
||||
*/
|
||||
|
||||
|
||||
/* Basic Settings */
|
||||
$conf['title'] = 'DokuWiki'; //what to show in the title
|
||||
$conf['start'] = 'start'; //name of start page
|
||||
$conf['lang'] = 'en'; //your language
|
||||
$conf['template'] = 'dokuwiki'; //see lib/tpl directory
|
||||
$conf['tagline'] = ''; //tagline in header (if template supports it)
|
||||
$conf['sidebar'] = 'sidebar'; //name of sidebar in root namespace (if template supports it)
|
||||
$conf['license'] = 'cc-by-nc-sa'; //see conf/license.php
|
||||
$conf['savedir'] = './data'; //where to store all the files
|
||||
$conf['basedir'] = ''; //absolute dir from serveroot - blank for autodetection
|
||||
$conf['baseurl'] = ''; //URL to server including protocol - blank for autodetect
|
||||
$conf['cookiedir'] = ''; //path to use in cookies - blank for basedir
|
||||
$conf['dmode'] = 0755; //set directory creation mode
|
||||
$conf['fmode'] = 0644; //set file creation mode
|
||||
$conf['allowdebug'] = 0; //allow debug output, enable if needed 0|1
|
||||
|
||||
/* Display Settings */
|
||||
$conf['recent'] = 20; //how many entries to show in recent
|
||||
$conf['recent_days'] = 7; //How many days of recent changes to keep. (days)
|
||||
$conf['breadcrumbs'] = 10; //how many recent visited pages to show
|
||||
$conf['youarehere'] = 0; //show "You are here" navigation? 0|1
|
||||
$conf['fullpath'] = 0; //show full path of the document or relative to datadir only? 0|1
|
||||
$conf['typography'] = 1; //smartquote conversion 0=off, 1=doublequotes, 2=all quotes
|
||||
$conf['dformat'] = '%Y/%m/%d %H:%M'; //dateformat accepted by PHPs strftime() function
|
||||
$conf['signature'] = ' --- //[[@MAIL@|@NAME@]] @DATE@//'; //signature see wiki page for details
|
||||
$conf['showuseras'] = 'loginname'; // 'loginname' users login name
|
||||
// 'username' users full name
|
||||
// 'email' e-mail address (will be obfuscated as per mailguard)
|
||||
// 'email_link' e-mail address as a mailto: link (obfuscated)
|
||||
$conf['toptoclevel'] = 1; //Level starting with and below to include in AutoTOC (max. 5)
|
||||
$conf['tocminheads'] = 3; //Minimum amount of headlines that determines if a TOC is built
|
||||
$conf['maxtoclevel'] = 3; //Up to which level include into AutoTOC (max. 5)
|
||||
$conf['maxseclevel'] = 3; //Up to which level create editable sections (max. 5)
|
||||
$conf['camelcase'] = 0; //Use CamelCase for linking? (I don't like it) 0|1
|
||||
$conf['deaccent'] = 1; //deaccented chars in pagenames (1) or romanize (2) or keep (0)?
|
||||
$conf['useheading'] = 0; //use the first heading in a page as its name
|
||||
$conf['sneaky_index']= 0; //check for namespace read permission in index view (0|1) (1 might cause unexpected behavior)
|
||||
$conf['hidepages'] = ''; //Regexp for pages to be skipped from RSS, Search and Recent Changes
|
||||
|
||||
/* Authentication Settings */
|
||||
$conf['useacl'] = 0; //Use Access Control Lists to restrict access?
|
||||
$conf['autopasswd'] = 1; //autogenerate passwords and email them to user
|
||||
$conf['authtype'] = 'authplain'; //which authentication backend should be used
|
||||
$conf['passcrypt'] = 'bcrypt'; //Used crypt method (smd5,md5,sha1,ssha,crypt,mysql,my411,bcrypt)
|
||||
$conf['defaultgroup']= 'user'; //Default groups new Users are added to
|
||||
$conf['superuser'] = '!!not set!!'; //The admin can be user or @group or comma separated list user1,@group1,user2
|
||||
$conf['manager'] = '!!not set!!'; //The manager can be user or @group or comma separated list user1,@group1,user2
|
||||
$conf['profileconfirm'] = 1; //Require current password to confirm changes to user profile
|
||||
$conf['rememberme'] = 1; //Enable/disable remember me on login
|
||||
$conf['disableactions'] = ''; //comma separated list of actions to disable
|
||||
$conf['auth_security_timeout'] = 900; //time (seconds) auth data is considered valid, set to 0 to recheck on every page view
|
||||
$conf['securecookie'] = 1; //never send HTTPS cookies via HTTP
|
||||
$conf['remote'] = 0; //Enable/disable remote interfaces
|
||||
$conf['remoteuser'] = '!!not set!!'; //user/groups that have access to remote interface (comma separated). leave empty to allow all users
|
||||
|
||||
/* Antispam Features */
|
||||
$conf['usewordblock']= 1; //block spam based on words? 0|1
|
||||
$conf['relnofollow'] = 1; //use rel="ugc nofollow" for external links?
|
||||
$conf['indexdelay'] = 60*60*24*5; //allow indexing after this time (seconds) default is 5 days
|
||||
$conf['mailguard'] = 'hex'; //obfuscate email addresses against spam harvesters?
|
||||
//valid entries are:
|
||||
// 'visible' - replace @ with [at], . with [dot] and - with [dash]
|
||||
// 'hex' - use hex entities to encode the mail address
|
||||
// 'none' - do not obfuscate addresses
|
||||
$conf['iexssprotect']= 1; // check for JavaScript and HTML in uploaded files 0|1
|
||||
|
||||
/* Editing Settings */
|
||||
$conf['usedraft'] = 1; //automatically save a draft while editing (0|1)
|
||||
$conf['htmlok'] = 0; //may raw HTML be embedded? This may break layout and XHTML validity 0|1
|
||||
$conf['phpok'] = 0; //may PHP code be embedded? Never do this on the internet! 0|1
|
||||
$conf['locktime'] = 15*60; //maximum age for lockfiles (defaults to 15 minutes)
|
||||
$conf['cachetime'] = 60*60*24; //maximum age for cachefile in seconds (defaults to a day)
|
||||
|
||||
/* Link Settings */
|
||||
// Set target to use when creating links - leave empty for same window
|
||||
$conf['target']['wiki'] = '';
|
||||
$conf['target']['interwiki'] = '';
|
||||
$conf['target']['extern'] = '';
|
||||
$conf['target']['media'] = '';
|
||||
$conf['target']['windows'] = '';
|
||||
|
||||
/* Media Settings */
|
||||
$conf['mediarevisions'] = 1; //enable/disable media revisions
|
||||
$conf['refcheck'] = 1; //check for references before deleting media files
|
||||
$conf['gdlib'] = 2; //the GDlib version (0, 1 or 2) 2 tries to autodetect
|
||||
$conf['im_convert'] = ''; //path to ImageMagicks convert (will be used instead of GD)
|
||||
$conf['jpg_quality'] = '70'; //quality of compression when scaling jpg images (0-100)
|
||||
$conf['fetchsize'] = 0; //maximum size (bytes) fetch.php may download from extern, disabled by default
|
||||
|
||||
/* Notification Settings */
|
||||
$conf['subscribers'] = 0; //enable change notice subscription support
|
||||
$conf['subscribe_time'] = 24*60*60; //Time after which digests / lists are sent (in sec, default 1 day)
|
||||
//Should be smaller than the time specified in recent_days
|
||||
$conf['notify'] = ''; //send change info to this email (leave blank for nobody)
|
||||
$conf['registernotify'] = ''; //send info about newly registered users to this email (leave blank for nobody)
|
||||
$conf['mailfrom'] = ''; //use this email when sending mails
|
||||
$conf['mailreturnpath'] = ''; //use this email as returnpath for bounce mails
|
||||
$conf['mailprefix'] = ''; //use this as prefix of outgoing mails
|
||||
$conf['htmlmail'] = 1; //send HTML multipart mails
|
||||
|
||||
/* Syndication Settings */
|
||||
$conf['sitemap'] = 0; //Create a google sitemap? How often? In days.
|
||||
$conf['rss_type'] = 'rss1'; //type of RSS feed to provide, by default:
|
||||
// 'rss' - RSS 0.91
|
||||
// 'rss1' - RSS 1.0
|
||||
// 'rss2' - RSS 2.0
|
||||
// 'atom' - Atom 0.3
|
||||
// 'atom1' - Atom 1.0
|
||||
$conf['rss_linkto'] = 'diff'; //what page RSS entries link to:
|
||||
// 'diff' - page showing revision differences
|
||||
// 'page' - the revised page itself
|
||||
// 'rev' - page showing all revisions
|
||||
// 'current' - most recent revision of page
|
||||
$conf['rss_content'] = 'abstract'; //what to put in the items by default?
|
||||
// 'abstract' - plain text, first paragraph or so
|
||||
// 'diff' - plain text unified diff wrapped in <pre> tags
|
||||
// 'htmldiff' - diff as HTML table
|
||||
// 'html' - the full page rendered in XHTML
|
||||
$conf['rss_media'] = 'both'; //what should be listed?
|
||||
// 'both' - page and media changes
|
||||
// 'pages' - page changes only
|
||||
// 'media' - media changes only
|
||||
$conf['rss_update'] = 5*60; //Update the RSS feed every n seconds (defaults to 5 minutes)
|
||||
$conf['rss_show_summary'] = 1; //Add revision summary to title? 0|1
|
||||
$conf['rss_show_deleted'] = 1; //Show deleted items 0|1
|
||||
|
||||
/* Advanced Settings */
|
||||
$conf['updatecheck'] = 1; //automatically check for new releases?
|
||||
$conf['userewrite'] = 0; //this makes nice URLs: 0: off 1: .htaccess 2: internal
|
||||
$conf['useslash'] = 0; //use slash instead of colon? only when rewrite is on
|
||||
$conf['sepchar'] = '_'; //word separator character in page names; may be a
|
||||
// letter, a digit, '_', '-', or '.'.
|
||||
$conf['canonical'] = 0; //Should all URLs use full canonical http://... style?
|
||||
$conf['fnencode'] = 'url'; //encode filenames (url|safe|utf-8)
|
||||
$conf['autoplural'] = 0; //try (non)plural form of nonexisting files?
|
||||
$conf['compression'] = 'gz'; //compress old revisions: (0: off) ('gz': gnuzip) ('bz2': bzip)
|
||||
// bz2 generates smaller files, but needs more cpu-power
|
||||
$conf['gzip_output'] = 0; //use gzip content encodeing for the output xhtml (if allowed by browser)
|
||||
$conf['compress'] = 1; //Strip whitespaces and comments from Styles and JavaScript? 1|0
|
||||
$conf['cssdatauri'] = 512; //Maximum byte size of small images to embed into CSS, won't work on IE<8
|
||||
$conf['send404'] = 0; //Send a HTTP 404 status for non existing pages?
|
||||
$conf['broken_iua'] = 0; //Platform with broken ignore_user_abort (IIS+CGI) 0|1
|
||||
$conf['xsendfile'] = 0; //Use X-Sendfile (1 = lighttpd, 2 = standard)
|
||||
$conf['renderer_xhtml'] = 'xhtml'; //renderer to use for main page generation
|
||||
$conf['readdircache'] = 0; //time cache in second for the readdir operation, 0 to deactivate.
|
||||
$conf['search_nslimit'] = 0; //limit the search to the current X namespaces
|
||||
$conf['search_fragment'] = 'exact'; //specify the default fragment search behavior
|
||||
$conf['trustedproxy'] = '^(::1|[fF][eE]80:|127\.|10\.|192\.168\.|172\.((1[6-9])|(2[0-9])|(3[0-1]))\.)';
|
||||
//Regexp of trusted proxy address when reading IP using HTTP header
|
||||
// if blank, do not trust any proxy (including local IP)
|
||||
|
||||
/* Feature Flags */
|
||||
$conf['defer_js'] = 1; // Defer javascript to be executed after the page's HTML has been parsed. Setting will be removed in the next release.
|
||||
|
||||
/* Network Settings */
|
||||
$conf['dnslookups'] = 1; //disable to disallow IP to hostname lookups
|
||||
$conf['jquerycdn'] = 0; //use a CDN for delivering jQuery?
|
||||
// Proxy setup - if your Server needs a proxy to access the web set these
|
||||
$conf['proxy']['host'] = '';
|
||||
$conf['proxy']['port'] = '';
|
||||
$conf['proxy']['user'] = '';
|
||||
$conf['proxy']['pass'] = '';
|
||||
$conf['proxy']['ssl'] = 0;
|
||||
$conf['proxy']['except'] = '';
|
22
content/conf/entities.conf
Normal file
22
content/conf/entities.conf
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Typography replacements
|
||||
#
|
||||
# Order does matter!
|
||||
#
|
||||
# You can use HTML entities here, but it is not recommended because it may break
|
||||
# non-HTML renderers. Use UTF-8 chars directly instead.
|
||||
|
||||
<-> ↔
|
||||
-> →
|
||||
<- ←
|
||||
<=> ⇔
|
||||
=> ⇒
|
||||
<= ⇐
|
||||
>> »
|
||||
<< «
|
||||
--- —
|
||||
-- –
|
||||
(c) ©
|
||||
(tm) ™
|
||||
(r) ®
|
||||
... …
|
||||
|
42
content/conf/interwiki.conf
Normal file
42
content/conf/interwiki.conf
Normal file
|
@ -0,0 +1,42 @@
|
|||
# Each URL may contain one of these placeholders
|
||||
# {URL} is replaced by the URL encoded representation of the wikiname
|
||||
# this is the right thing to do in most cases
|
||||
# {NAME} this is replaced by the wikiname as given in the document
|
||||
# only mandatory encoded is done, urlencoding if the link
|
||||
# is an external URL, or encoding as a wikiname if it is an
|
||||
# internal link (begins with a colon)
|
||||
# {SCHEME}
|
||||
# {HOST}
|
||||
# {PORT}
|
||||
# {PATH}
|
||||
# {QUERY} these placeholders will be replaced with the appropriate part
|
||||
# of the link when parsed as a URL
|
||||
# If no placeholder is defined the urlencoded name is appended to the URL
|
||||
|
||||
# To prevent losing your added InterWiki shortcuts after an upgrade,
|
||||
# you should add new ones to interwiki.local.conf
|
||||
|
||||
wp https://en.wikipedia.org/wiki/{NAME}
|
||||
wpfr https://fr.wikipedia.org/wiki/{NAME}
|
||||
wpde https://de.wikipedia.org/wiki/{NAME}
|
||||
wpes https://es.wikipedia.org/wiki/{NAME}
|
||||
wppl https://pl.wikipedia.org/wiki/{NAME}
|
||||
wpjp https://ja.wikipedia.org/wiki/{NAME}
|
||||
wpru https://ru.wikipedia.org/wiki/{NAME}
|
||||
wpmeta https://meta.wikipedia.org/wiki/{NAME}
|
||||
doku https://www.dokuwiki.org/
|
||||
rfc https://tools.ietf.org/html/rfc
|
||||
man http://man.cx/
|
||||
amazon https://www.amazon.com/dp/{URL}?tag=splitbrain-20
|
||||
amazon.de https://www.amazon.de/dp/{URL}?tag=splitbrain-21
|
||||
amazon.uk https://www.amazon.co.uk/dp/{URL}
|
||||
paypal https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=
|
||||
phpfn https://secure.php.net/{NAME}
|
||||
skype skype:{NAME}
|
||||
google.de https://www.google.de/search?q=
|
||||
go https://www.google.com/search?q={URL}&btnI=lucky
|
||||
user :user:{NAME}
|
||||
|
||||
# To support VoIP/SIP/TEL links
|
||||
callto callto://{NAME}
|
||||
tel tel:{NAME}
|
38
content/conf/license.php
Normal file
38
content/conf/license.php
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
/**
|
||||
* This file defines multiple available licenses you can license your
|
||||
* wiki contents under. Do not change this file, but create a
|
||||
* license.local.php instead.
|
||||
*/
|
||||
|
||||
if(empty($LC)) $LC = empty($conf['lang']) ? 'en' : $conf['lang'];
|
||||
|
||||
$license['cc-zero'] = array(
|
||||
'name' => 'CC0 1.0 Universal',
|
||||
'url' => 'https://creativecommons.org/publicdomain/zero/1.0/deed.'.$LC,
|
||||
);
|
||||
$license['publicdomain'] = array(
|
||||
'name' => 'Public Domain',
|
||||
'url' => 'https://creativecommons.org/licenses/publicdomain/deed.'.$LC,
|
||||
);
|
||||
$license['cc-by'] = array(
|
||||
'name' => 'CC Attribution 4.0 International',
|
||||
'url' => 'https://creativecommons.org/licenses/by/4.0/deed.'.$LC,
|
||||
);
|
||||
$license['cc-by-sa'] = array(
|
||||
'name' => 'CC Attribution-Share Alike 4.0 International',
|
||||
'url' => 'https://creativecommons.org/licenses/by-sa/4.0/deed.'.$LC,
|
||||
);
|
||||
$license['gnufdl'] = array(
|
||||
'name' => 'GNU Free Documentation License 1.3',
|
||||
'url' => 'https://www.gnu.org/licenses/fdl-1.3.html',
|
||||
);
|
||||
$license['cc-by-nc'] = array(
|
||||
'name' => 'CC Attribution-Noncommercial 4.0 International',
|
||||
'url' => 'https://creativecommons.org/licenses/by-nc/4.0/deed.'.$LC,
|
||||
);
|
||||
$license['cc-by-nc-sa'] = array(
|
||||
'name' => 'CC Attribution-Noncommercial-Share Alike 4.0 International',
|
||||
'url' => 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.'.$LC,
|
||||
);
|
||||
|
16
content/conf/local.php.dist
Normal file
16
content/conf/local.php.dist
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
/**
|
||||
* This is an example of how a local.php could look like.
|
||||
* Simply copy the options you want to change from dokuwiki.php
|
||||
* to this file and change them.
|
||||
*
|
||||
* When using the installer, a correct local.php file be generated for
|
||||
* you automatically.
|
||||
*/
|
||||
|
||||
|
||||
//$conf['title'] = 'My Wiki'; //what to show in the title
|
||||
|
||||
//$conf['useacl'] = 1; //Use Access Control Lists to restrict access?
|
||||
//$conf['superuser'] = 'joe';
|
||||
|
3
content/conf/manifest.json
Normal file
3
content/conf/manifest.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"display": "standalone"
|
||||
}
|
91
content/conf/mediameta.php
Normal file
91
content/conf/mediameta.php
Normal file
|
@ -0,0 +1,91 @@
|
|||
<?php
|
||||
/**
|
||||
* This configures which meta data will be editable through
|
||||
* the media manager. Each field of the array is an array with the
|
||||
* following contents:
|
||||
* fieldname - Where data will be saved (EXIF or IPTC field)
|
||||
* label - key to lookup in the $lang var, if not found printed as is
|
||||
* htmltype - 'text', 'textarea' or 'date'
|
||||
* lookups - array additional fields to lookup the data (EXIF or IPTC fields)
|
||||
*
|
||||
* The fields are not ordered continously to make inserting additional items
|
||||
* in between simpler.
|
||||
*
|
||||
* This is a PHP snippet, so PHP syntax applies.
|
||||
*
|
||||
* Note: $fields is not a global variable and will not be available to any
|
||||
* other functions or templates later
|
||||
*
|
||||
* You may extend or overwrite this variable in a optional
|
||||
* conf/mediameta.local.php file
|
||||
*
|
||||
* For a list of available EXIF/IPTC fields refer to
|
||||
* http://www.dokuwiki.org/devel:templates:detail.php
|
||||
*/
|
||||
|
||||
|
||||
$fields = array(
|
||||
10 => array('Iptc.Headline',
|
||||
'img_title',
|
||||
'text'),
|
||||
|
||||
20 => array('',
|
||||
'img_date',
|
||||
'date',
|
||||
array('Date.EarliestTime')),
|
||||
|
||||
30 => array('',
|
||||
'img_fname',
|
||||
'text',
|
||||
array('File.Name')),
|
||||
|
||||
40 => array('Iptc.Caption',
|
||||
'img_caption',
|
||||
'textarea',
|
||||
array('Exif.UserComment',
|
||||
'Exif.TIFFImageDescription',
|
||||
'Exif.TIFFUserComment')),
|
||||
|
||||
50 => array('Iptc.Byline',
|
||||
'img_artist',
|
||||
'text',
|
||||
array('Exif.TIFFArtist',
|
||||
'Exif.Artist',
|
||||
'Iptc.Credit')),
|
||||
|
||||
60 => array('Iptc.CopyrightNotice',
|
||||
'img_copyr',
|
||||
'text',
|
||||
array('Exif.TIFFCopyright',
|
||||
'Exif.Copyright')),
|
||||
|
||||
70 => array('',
|
||||
'img_format',
|
||||
'text',
|
||||
array('File.Format')),
|
||||
|
||||
80 => array('',
|
||||
'img_fsize',
|
||||
'text',
|
||||
array('File.NiceSize')),
|
||||
|
||||
90 => array('',
|
||||
'img_width',
|
||||
'text',
|
||||
array('File.Width')),
|
||||
|
||||
100 => array('',
|
||||
'img_height',
|
||||
'text',
|
||||
array('File.Height')),
|
||||
|
||||
110 => array('',
|
||||
'img_camera',
|
||||
'text',
|
||||
array('Simple.Camera')),
|
||||
|
||||
120 => array('Iptc.Keywords',
|
||||
'img_keywords',
|
||||
'text',
|
||||
array('Exif.Category')),
|
||||
);
|
72
content/conf/mime.conf
Normal file
72
content/conf/mime.conf
Normal file
|
@ -0,0 +1,72 @@
|
|||
# Allowed uploadable file extensions and mimetypes are defined here.
|
||||
# To extend this file it is recommended to create a mime.local.conf
|
||||
# file. Mimetypes that should be downloadable and not be opened in the
|
||||
# should be prefixed with a !
|
||||
|
||||
jpg image/jpeg
|
||||
jpeg image/jpeg
|
||||
gif image/gif
|
||||
png image/png
|
||||
ico image/vnd.microsoft.icon
|
||||
|
||||
mp3 audio/mpeg
|
||||
ogg audio/ogg
|
||||
wav audio/wav
|
||||
webm video/webm
|
||||
ogv video/ogg
|
||||
mp4 video/mp4
|
||||
vtt text/vtt
|
||||
|
||||
tgz !application/octet-stream
|
||||
tar !application/x-gtar
|
||||
gz !application/octet-stream
|
||||
bz2 !application/octet-stream
|
||||
zip !application/zip
|
||||
rar !application/rar
|
||||
7z !application/x-7z-compressed
|
||||
|
||||
pdf application/pdf
|
||||
ps !application/postscript
|
||||
|
||||
rpm !application/octet-stream
|
||||
deb !application/octet-stream
|
||||
|
||||
doc !application/msword
|
||||
xls !application/msexcel
|
||||
ppt !application/mspowerpoint
|
||||
rtf !application/msword
|
||||
|
||||
docx !application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
xlsx !application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
pptx !application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
|
||||
sxw !application/soffice
|
||||
sxc !application/soffice
|
||||
sxi !application/soffice
|
||||
sxd !application/soffice
|
||||
|
||||
odc !application/vnd.oasis.opendocument.chart
|
||||
odf !application/vnd.oasis.opendocument.formula
|
||||
odg !application/vnd.oasis.opendocument.graphics
|
||||
odi !application/vnd.oasis.opendocument.image
|
||||
odp !application/vnd.oasis.opendocument.presentation
|
||||
ods !application/vnd.oasis.opendocument.spreadsheet
|
||||
odt !application/vnd.oasis.opendocument.text
|
||||
|
||||
# You should enable HTML and Text uploads only for restricted Wikis.
|
||||
# Spammers are known to upload spam pages through unprotected Wikis.
|
||||
# Note: Enabling HTML opens Cross Site Scripting vulnerabilities
|
||||
# through JavaScript. Only enable this with trusted users. You
|
||||
# need to disable the iexssprotect option additionally to
|
||||
# adding the mime type here
|
||||
#html text/html
|
||||
#htm text/html
|
||||
#txt text/plain
|
||||
#conf text/plain
|
||||
#xml text/xml
|
||||
#csv text/csv
|
||||
|
||||
# Also flash may be able to execute arbitrary scripts in the website's
|
||||
# context
|
||||
#swf application/x-shockwave-flash
|
||||
|
253
content/conf/mysql.conf.php.example
Normal file
253
content/conf/mysql.conf.php.example
Normal file
|
@ -0,0 +1,253 @@
|
|||
<?php
|
||||
/*
|
||||
* This is an example configuration for the mysql auth plugin.
|
||||
*
|
||||
* This SQL statements are optimized for following table structure.
|
||||
* If you use a different one you have to change them accordingly.
|
||||
* See comments of every statement for details.
|
||||
*
|
||||
* TABLE users
|
||||
* uid login pass firstname lastname email
|
||||
*
|
||||
* TABLE groups
|
||||
* gid name
|
||||
*
|
||||
* TABLE usergroup
|
||||
* uid gid
|
||||
*
|
||||
* To use this configuration you have to copy them to local.protected.php
|
||||
* or at least include this file in local.protected.php.
|
||||
*/
|
||||
|
||||
/* Options to configure database access. You need to set up this
|
||||
* options carefully, otherwise you won't be able to access you
|
||||
* database.
|
||||
*/
|
||||
$conf['plugin']['authmysql']['server'] = '';
|
||||
$conf['plugin']['authmysql']['user'] = '';
|
||||
$conf['plugin']['authmysql']['password'] = '';
|
||||
$conf['plugin']['authmysql']['database'] = '';
|
||||
|
||||
/* This option enables debug messages in the mysql plugin. It is
|
||||
* mostly useful for system admins.
|
||||
*/
|
||||
$conf['plugin']['authmysql']['debug'] = 0;
|
||||
|
||||
/* Normally password encryption is done by DokuWiki (recommended) but for
|
||||
* some reasons it might be usefull to let the database do the encryption.
|
||||
* Set 'forwardClearPass' to '1' and the cleartext password is forwarded to
|
||||
* the database, otherwise the encrypted one.
|
||||
*/
|
||||
$conf['plugin']['authmysql']['forwardClearPass'] = 0;
|
||||
|
||||
/* Multiple table operations will be protected by locks. This array tolds
|
||||
* the plugin which tables to lock. If you use any aliases for table names
|
||||
* these array must also contain these aliases. Any unamed alias will cause
|
||||
* a warning during operation. See the example below.
|
||||
*/
|
||||
$conf['plugin']['authmysql']['TablesToLock']= array("users", "users AS u","groups", "groups AS g", "usergroup", "usergroup AS ug");
|
||||
|
||||
/***********************************************************************/
|
||||
/* Basic SQL statements for user authentication (required) */
|
||||
/***********************************************************************/
|
||||
|
||||
/* This statement is used to grant or deny access to the wiki. The result
|
||||
* should be a table with exact one line containing at least the password
|
||||
* of the user. If the result table is empty or contains more than one
|
||||
* row, access will be denied.
|
||||
*
|
||||
* The plugin accesses the password as 'pass' so an alias might be necessary.
|
||||
*
|
||||
* Following patters will be replaced:
|
||||
* %{user} user name
|
||||
* %{pass} encrypted or clear text password (depends on 'encryptPass')
|
||||
* %{dgroup} default group name
|
||||
*/
|
||||
$conf['plugin']['authmysql']['checkPass'] = "SELECT pass
|
||||
FROM usergroup AS ug
|
||||
JOIN users AS u ON u.uid=ug.uid
|
||||
JOIN groups AS g ON g.gid=ug.gid
|
||||
WHERE login='%{user}'
|
||||
AND name='%{dgroup}'";
|
||||
|
||||
/* This statement should return a table with exact one row containing
|
||||
* information about one user. The field needed are:
|
||||
* 'pass' containing the encrypted or clear text password
|
||||
* 'name' the user's full name
|
||||
* 'mail' the user's email address
|
||||
*
|
||||
* Keep in mind that Dokuwiki will access thise information through the
|
||||
* names listed above so aliasses might be neseccary.
|
||||
*
|
||||
* Following patters will be replaced:
|
||||
* %{user} user name
|
||||
*/
|
||||
$conf['plugin']['authmysql']['getUserInfo'] = "SELECT pass, CONCAT(firstname,' ',lastname) AS name, email AS mail
|
||||
FROM users
|
||||
WHERE login='%{user}'";
|
||||
|
||||
/* This statement is used to get all groups a user is member of. The
|
||||
* result should be a table containing all groups the given user is
|
||||
* member of. The plugin accesses the group name as 'group' so an alias
|
||||
* might be nessecary.
|
||||
*
|
||||
* Following patters will be replaced:
|
||||
* %{user} user name
|
||||
*/
|
||||
$conf['plugin']['authmysql']['getGroups'] = "SELECT name as `group`
|
||||
FROM groups g, users u, usergroup ug
|
||||
WHERE u.uid = ug.uid
|
||||
AND g.gid = ug.gid
|
||||
AND u.login='%{user}'";
|
||||
|
||||
/***********************************************************************/
|
||||
/* Additional minimum SQL statements to use the user manager */
|
||||
/***********************************************************************/
|
||||
|
||||
/* This statement should return a table containing all user login names
|
||||
* that meet certain filter criteria. The filter expressions will be added
|
||||
* case dependend by the plugin. At the end a sort expression will be added.
|
||||
* Important is that this list contains no double entries for a user. Each
|
||||
* user name is only allowed once in the table.
|
||||
*
|
||||
* The login name will be accessed as 'user' to an alias might be neseccary.
|
||||
* No patterns will be replaced in this statement but following patters
|
||||
* will be replaced in the filter expressions:
|
||||
* %{user} in FilterLogin user's login name
|
||||
* %{name} in FilterName user's full name
|
||||
* %{email} in FilterEmail user's email address
|
||||
* %{group} in FilterGroup group name
|
||||
*/
|
||||
$conf['plugin']['authmysql']['getUsers'] = "SELECT DISTINCT login AS user
|
||||
FROM users AS u
|
||||
LEFT JOIN usergroup AS ug ON u.uid=ug.uid
|
||||
LEFT JOIN groups AS g ON ug.gid=g.gid";
|
||||
$conf['plugin']['authmysql']['FilterLogin'] = "login LIKE '%{user}'";
|
||||
$conf['plugin']['authmysql']['FilterName'] = "CONCAT(firstname,' ',lastname) LIKE '%{name}'";
|
||||
$conf['plugin']['authmysql']['FilterEmail'] = "email LIKE '%{email}'";
|
||||
$conf['plugin']['authmysql']['FilterGroup'] = "name LIKE '%{group}'";
|
||||
$conf['plugin']['authmysql']['SortOrder'] = "ORDER BY login";
|
||||
|
||||
/***********************************************************************/
|
||||
/* Additional SQL statements to add new users with the user manager */
|
||||
/***********************************************************************/
|
||||
|
||||
/* This statement should add a user to the database. Minimum information
|
||||
* to store are: login name, password, email address and full name.
|
||||
*
|
||||
* Following patterns will be replaced:
|
||||
* %{user} user's login name
|
||||
* %{pass} password (encrypted or clear text, depends on 'encryptPass')
|
||||
* %{email} email address
|
||||
* %{name} user's full name
|
||||
*/
|
||||
$conf['plugin']['authmysql']['addUser'] = "INSERT INTO users
|
||||
(login, pass, email, firstname, lastname)
|
||||
VALUES ('%{user}', '%{pass}', '%{email}',
|
||||
SUBSTRING_INDEX('%{name}',' ', 1),
|
||||
SUBSTRING_INDEX('%{name}',' ', -1))";
|
||||
|
||||
/* This statement should add a group to the database.
|
||||
* Following patterns will be replaced:
|
||||
* %{group} group name
|
||||
*/
|
||||
$conf['plugin']['authmysql']['addGroup'] = "INSERT INTO groups (name)
|
||||
VALUES ('%{group}')";
|
||||
|
||||
/* This statement should connect a user to a group (a user become member
|
||||
* of that group).
|
||||
* Following patterns will be replaced:
|
||||
* %{user} user's login name
|
||||
* %{uid} id of a user dataset
|
||||
* %{group} group name
|
||||
* %{gid} id of a group dataset
|
||||
*/
|
||||
$conf['plugin']['authmysql']['addUserGroup']= "INSERT INTO usergroup (uid, gid)
|
||||
VALUES ('%{uid}', '%{gid}')";
|
||||
|
||||
/* This statement should remove a group fom the database.
|
||||
* Following patterns will be replaced:
|
||||
* %{group} group name
|
||||
* %{gid} id of a group dataset
|
||||
*/
|
||||
$conf['plugin']['authmysql']['delGroup'] = "DELETE FROM groups
|
||||
WHERE gid='%{gid}'";
|
||||
|
||||
/* This statement should return the database index of a given user name.
|
||||
* The plugin will access the index with the name 'id' so an alias might be
|
||||
* necessary.
|
||||
* following patters will be replaced:
|
||||
* %{user} user name
|
||||
*/
|
||||
$conf['plugin']['authmysql']['getUserID'] = "SELECT uid AS id
|
||||
FROM users
|
||||
WHERE login='%{user}'";
|
||||
|
||||
/***********************************************************************/
|
||||
/* Additional SQL statements to delete users with the user manager */
|
||||
/***********************************************************************/
|
||||
|
||||
/* This statement should remove a user fom the database.
|
||||
* Following patterns will be replaced:
|
||||
* %{user} user's login name
|
||||
* %{uid} id of a user dataset
|
||||
*/
|
||||
$conf['plugin']['authmysql']['delUser'] = "DELETE FROM users
|
||||
WHERE uid='%{uid}'";
|
||||
|
||||
/* This statement should remove all connections from a user to any group
|
||||
* (a user quits membership of all groups).
|
||||
* Following patterns will be replaced:
|
||||
* %{uid} id of a user dataset
|
||||
*/
|
||||
$conf['plugin']['authmysql']['delUserRefs'] = "DELETE FROM usergroup
|
||||
WHERE uid='%{uid}'";
|
||||
|
||||
/***********************************************************************/
|
||||
/* Additional SQL statements to modify users with the user manager */
|
||||
/***********************************************************************/
|
||||
|
||||
/* This statements should modify a user entry in the database. The
|
||||
* statements UpdateLogin, UpdatePass, UpdateEmail and UpdateName will be
|
||||
* added to updateUser on demand. Only changed parameters will be used.
|
||||
*
|
||||
* Following patterns will be replaced:
|
||||
* %{user} user's login name
|
||||
* %{pass} password (encrypted or clear text, depends on 'encryptPass')
|
||||
* %{email} email address
|
||||
* %{name} user's full name
|
||||
* %{uid} user id that should be updated
|
||||
*/
|
||||
$conf['plugin']['authmysql']['updateUser'] = "UPDATE users SET";
|
||||
$conf['plugin']['authmysql']['UpdateLogin'] = "login='%{user}'";
|
||||
$conf['plugin']['authmysql']['UpdatePass'] = "pass='%{pass}'";
|
||||
$conf['plugin']['authmysql']['UpdateEmail'] = "email='%{email}'";
|
||||
$conf['plugin']['authmysql']['UpdateName'] = "firstname=SUBSTRING_INDEX('%{name}',' ', 1),
|
||||
lastname=SUBSTRING_INDEX('%{name}',' ', -1)";
|
||||
$conf['plugin']['authmysql']['UpdateTarget']= "WHERE uid=%{uid}";
|
||||
|
||||
/* This statement should remove a single connection from a user to a
|
||||
* group (a user quits membership of that group).
|
||||
*
|
||||
* Following patterns will be replaced:
|
||||
* %{user} user's login name
|
||||
* %{uid} id of a user dataset
|
||||
* %{group} group name
|
||||
* %{gid} id of a group dataset
|
||||
*/
|
||||
$conf['plugin']['authmysql']['delUserGroup']= "DELETE FROM usergroup
|
||||
WHERE uid='%{uid}'
|
||||
AND gid='%{gid}'";
|
||||
|
||||
/* This statement should return the database index of a given group name.
|
||||
* The plugin will access the index with the name 'id' so an alias might
|
||||
* be necessary.
|
||||
*
|
||||
* Following patters will be replaced:
|
||||
* %{group} group name
|
||||
*/
|
||||
$conf['plugin']['authmysql']['getGroupID'] = "SELECT gid AS id
|
||||
FROM groups
|
||||
WHERE name='%{group}'";
|
||||
|
||||
|
8
content/conf/plugins.local.php
Normal file
8
content/conf/plugins.local.php
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?php
|
||||
/*
|
||||
* Local plugin enable/disable settings
|
||||
* Auto-generated through plugin/extension manager
|
||||
*
|
||||
* NOTE: Plugins will not be added to this file unless there is a need to override a default setting. Plugins are
|
||||
* enabled by default.
|
||||
*/
|
6
content/conf/plugins.php
Normal file
6
content/conf/plugins.php
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* This file configures the default states of available plugins. All settings in
|
||||
* the plugins.*.php files will override those here.
|
||||
*/
|
||||
$plugins['testing'] = 0;
|
12
content/conf/plugins.required.php
Normal file
12
content/conf/plugins.required.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
/**
|
||||
* This file configures the enabled/disabled status of plugins, which are also protected
|
||||
* from changes by the extention manager. These settings will override any local settings.
|
||||
* It is not recommended to change this file, as it is overwritten on DokuWiki upgrades.
|
||||
*/
|
||||
$plugins['acl'] = 1;
|
||||
$plugins['authplain'] = 1;
|
||||
$plugins['extension'] = 1;
|
||||
$plugins['config'] = 1;
|
||||
$plugins['usermanager'] = 1;
|
||||
$plugins['template:dokuwiki'] = 1; // not a plugin, but this should not be uninstalled either
|
11
content/conf/scheme.conf
Normal file
11
content/conf/scheme.conf
Normal file
|
@ -0,0 +1,11 @@
|
|||
#Add URL schemes you want to be recognized as links here
|
||||
|
||||
http
|
||||
https
|
||||
telnet
|
||||
gopher
|
||||
wais
|
||||
ftp
|
||||
ed2k
|
||||
irc
|
||||
ldap
|
28
content/conf/smileys.conf
Normal file
28
content/conf/smileys.conf
Normal file
|
@ -0,0 +1,28 @@
|
|||
# Smileys configured here will be replaced by the
|
||||
# configured images in the smiley directory
|
||||
|
||||
8-) icon_cool.gif
|
||||
8-O icon_eek.gif
|
||||
8-o icon_eek.gif
|
||||
:-( icon_sad.gif
|
||||
:-) icon_smile.gif
|
||||
=) icon_smile2.gif
|
||||
:-/ icon_doubt.gif
|
||||
:-\ icon_doubt2.gif
|
||||
:-? icon_confused.gif
|
||||
:-D icon_biggrin.gif
|
||||
:-P icon_razz.gif
|
||||
:-o icon_surprised.gif
|
||||
:-O icon_surprised.gif
|
||||
:-x icon_silenced.gif
|
||||
:-X icon_silenced.gif
|
||||
:-| icon_neutral.gif
|
||||
;-) icon_wink.gif
|
||||
m( facepalm.gif
|
||||
^_^ icon_fun.gif
|
||||
:?: icon_question.gif
|
||||
:!: icon_exclaim.gif
|
||||
LOL icon_lol.gif
|
||||
FIXME fixme.gif
|
||||
DELETEME delete.gif
|
||||
|
10
content/conf/users.auth.php.dist
Normal file
10
content/conf/users.auth.php.dist
Normal file
|
@ -0,0 +1,10 @@
|
|||
# users.auth.php
|
||||
# <?php exit()?>
|
||||
# Don't modify the lines above
|
||||
#
|
||||
# Userfile
|
||||
#
|
||||
# Format:
|
||||
#
|
||||
# login:passwordhash:Real Name:email:groups,comma,separated
|
||||
|
29
content/conf/wordblock.conf
Normal file
29
content/conf/wordblock.conf
Normal file
|
@ -0,0 +1,29 @@
|
|||
# This blacklist is maintained by the DokuWiki community
|
||||
# patches welcome
|
||||
#
|
||||
https?:\/\/(\S*?)(-side-effects|top|pharm|pill|discount|discount-|deal|price|order|now|best|cheap|cheap-|online|buy|buy-|sale|sell)(\S*?)(cialis|viagra|prazolam|xanax|zanax|soma|vicodin|zenical|xenical|meridia|paxil|prozac|claritin|allegra|lexapro|wellbutrin|zoloft|retin|valium|levitra|phentermine)
|
||||
https?:\/\/(\S*?)(bi\s*sex|gay\s*sex|fetish|incest|penis|\brape\b)
|
||||
zoosex
|
||||
gang\s*bang
|
||||
facials
|
||||
ladyboy
|
||||
\btits\b
|
||||
bolea\.com
|
||||
52crystal
|
||||
baida\.org
|
||||
web-directory\.awardspace\.us
|
||||
korsan-team\.com
|
||||
BUDA TAMAMDIR
|
||||
wow-powerleveling-wow\.com
|
||||
wow gold
|
||||
wow-gold\.dinmo\.cn
|
||||
downgrade-vista\.com
|
||||
downgradetowindowsxp\.com
|
||||
elegantugg\.com
|
||||
classicedhardy\.com
|
||||
research-service\.com
|
||||
https?:\/\/(\S*?)(2-pay-secure|911essay|academia-research|anypapers|applicationessay|bestbuyessay|bestdissertation|bestessay|bestresume|besttermpaper|businessessay|college-paper|customessay|custom-made-paper|custom-writing|degree-?result|dissertationblog|dissertation-service|dissertations?expert|essaybank|essay-?blog|essaycapital|essaylogic|essaymill|essayontime|essaypaper|essays?land|essaytownsucks|essay-?writ|fastessays|freelancercareers|genuinecontent|genuineessay|genuinepaper|goessay|grandresume|killer-content|ma-dissertation|managementessay|masterpaper|mightystudent|needessay|researchedge|researchpaper-blog|resumecvservice|resumesexperts|resumesplanet|rushessay|samedayessay|superiorcontent|superiorpaper|superiorthesis|term-paper|termpaper-blog|term-paper-research|thesisblog|universalresearch|valwriting|vdwriters|wisetranslation|writersassembly|writers\.com\.ph|writers\.ph)
|
||||
flatsinmumbai\.co\.in
|
||||
https?:\/\/(\S*?)penny-?stock
|
||||
mattressreview\.biz
|
||||
(just|simply) (my|a) profile (site|webpage|page)
|
7
content/data/.htaccess
Normal file
7
content/data/.htaccess
Normal file
|
@ -0,0 +1,7 @@
|
|||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</IfModule>
|
1
content/data/_dummy
Normal file
1
content/data/_dummy
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
1
content/data/attic/_dummy
Normal file
1
content/data/attic/_dummy
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
1
content/data/cache/6/6548a58301f335189542a32374ba3dd5.i
vendored
Normal file
1
content/data/cache/6/6548a58301f335189542a32374ba3dd5.i
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
a:12:{i:0;a:3:{i:0;s:14:"document_start";i:1;a:0:{}i:2;i:0;}i:1;a:3:{i:0;s:6:"header";i:1;a:3:{i:0;s:29:"This topic does not exist yet";i:1;i:1;i:2;i:1;}i:2;i:1;}i:2;a:3:{i:0;s:12:"section_open";i:1;a:1:{i:0;i:1;}i:2;i:1;}i:3;a:3:{i:0;s:6:"p_open";i:1;a:0:{}i:2;i:1;}i:4;a:3:{i:0;s:5:"cdata";i:1;a:1:{i:0;s:113:"You've followed a link to a topic that doesn't exist yet. If permissions allow, you may create it by clicking on ";}i:2;i:46;}i:5;a:3:{i:0;s:11:"strong_open";i:1;a:0:{}i:2;i:159;}i:6;a:3:{i:0;s:5:"cdata";i:1;a:1:{i:0;s:16:"Create this page";}i:2;i:161;}i:7;a:3:{i:0;s:12:"strong_close";i:1;a:0:{}i:2;i:177;}i:8;a:3:{i:0;s:5:"cdata";i:1;a:1:{i:0;s:1:".";}i:2;i:179;}i:9;a:3:{i:0;s:7:"p_close";i:1;a:0:{}i:2;i:180;}i:10;a:3:{i:0;s:13:"section_close";i:1;a:0:{}i:2;i:181;}i:11;a:3:{i:0;s:12:"document_end";i:1;a:0:{}i:2;i:181;}}
|
9
content/data/cache/6/6548a58301f335189542a32374ba3dd5.xhtml
vendored
Normal file
9
content/data/cache/6/6548a58301f335189542a32374ba3dd5.xhtml
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
|
||||
<h1 class="sectionedit1" id="this_topic_does_not_exist_yet">This topic does not exist yet</h1>
|
||||
<div class="level1">
|
||||
|
||||
<p>
|
||||
You've followed a link to a topic that doesn't exist yet. If permissions allow, you may create it by clicking on <strong>Create this page</strong>.
|
||||
</p>
|
||||
|
||||
</div>
|
1
content/data/cache/_dummy
vendored
Normal file
1
content/data/cache/_dummy
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
0
content/data/cache/d/df10cbe878cdbaf697704a7e04354267.updmsg
vendored
Normal file
0
content/data/cache/d/df10cbe878cdbaf697704a7e04354267.updmsg
vendored
Normal file
1
content/data/cache/e/e6f2d891f2b61b707056dc4da3ef8303.i
vendored
Normal file
1
content/data/cache/e/e6f2d891f2b61b707056dc4da3ef8303.i
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
a:12:{i:0;a:3:{i:0;s:14:"document_start";i:1;a:0:{}i:2;i:0;}i:1;a:3:{i:0;s:6:"header";i:1;a:3:{i:0;s:29:"This topic does not exist yet";i:1;i:1;i:2;i:1;}i:2;i:1;}i:2;a:3:{i:0;s:12:"section_open";i:1;a:1:{i:0;i:1;}i:2;i:1;}i:3;a:3:{i:0;s:6:"p_open";i:1;a:0:{}i:2;i:1;}i:4;a:3:{i:0;s:5:"cdata";i:1;a:1:{i:0;s:113:"You've followed a link to a topic that doesn't exist yet. If permissions allow, you may create it by clicking on ";}i:2;i:46;}i:5;a:3:{i:0;s:11:"strong_open";i:1;a:0:{}i:2;i:159;}i:6;a:3:{i:0;s:5:"cdata";i:1;a:1:{i:0;s:16:"Create this page";}i:2;i:161;}i:7;a:3:{i:0;s:12:"strong_close";i:1;a:0:{}i:2;i:177;}i:8;a:3:{i:0;s:5:"cdata";i:1;a:1:{i:0;s:1:".";}i:2;i:179;}i:9;a:3:{i:0;s:7:"p_close";i:1;a:0:{}i:2;i:180;}i:10;a:3:{i:0;s:13:"section_close";i:1;a:0:{}i:2;i:181;}i:11;a:3:{i:0;s:12:"document_end";i:1;a:0:{}i:2;i:181;}}
|
9
content/data/cache/e/e6f2d891f2b61b707056dc4da3ef8303.xhtml
vendored
Normal file
9
content/data/cache/e/e6f2d891f2b61b707056dc4da3ef8303.xhtml
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
|
||||
<h1 class="sectionedit1" id="this_topic_does_not_exist_yet">This topic does not exist yet</h1>
|
||||
<div class="level1">
|
||||
|
||||
<p>
|
||||
You've followed a link to a topic that doesn't exist yet. If permissions allow, you may create it by clicking on <strong>Create this page</strong>.
|
||||
</p>
|
||||
|
||||
</div>
|
846
content/data/deleted.files
Normal file
846
content/data/deleted.files
Normal file
|
@ -0,0 +1,846 @@
|
|||
# This is a list of files that were present in previous DokuWiki releases
|
||||
# but were removed later. An up to date DokuWiki should not have any of
|
||||
# the files installed
|
||||
|
||||
# removed in 2020-06-01
|
||||
inc/PluginInterface.php
|
||||
inc/PluginTrait.php
|
||||
inc/HTTPClient.php
|
||||
inc/PassHash.class.php
|
||||
inc/remote.php
|
||||
inc/RemoteAPICore.php
|
||||
inc/Sitemapper.php
|
||||
lib/plugins/config/_test/configuration.test.php
|
||||
inc/Input.class.php
|
||||
inc/JSON.php
|
||||
inc/Plugin.php
|
||||
inc/events.php
|
||||
inc/lang/.htaccess
|
||||
inc/lang/az/wordblock.txt
|
||||
inc/lang/gl/wordblock.txt
|
||||
inc/lang/ru/wordblock.txt
|
||||
inc/parser/lexer.php
|
||||
inc/plugincontroller.class.php
|
||||
inc/subscription.php
|
||||
lib/plugins/authmysql/auth.php
|
||||
lib/plugins/authmysql/conf/default.php
|
||||
lib/plugins/authmysql/conf/metadata.php
|
||||
lib/plugins/authmysql/lang/bg/lang.php
|
||||
lib/plugins/authmysql/lang/bg/settings.php
|
||||
lib/plugins/authmysql/lang/cs/lang.php
|
||||
lib/plugins/authmysql/lang/cs/settings.php
|
||||
lib/plugins/authmysql/lang/cy/lang.php
|
||||
lib/plugins/authmysql/lang/cy/settings.php
|
||||
lib/plugins/authmysql/lang/da/lang.php
|
||||
lib/plugins/authmysql/lang/da/settings.php
|
||||
lib/plugins/authmysql/lang/de-informal/lang.php
|
||||
lib/plugins/authmysql/lang/de-informal/settings.php
|
||||
lib/plugins/authmysql/lang/de/lang.php
|
||||
lib/plugins/authmysql/lang/de/settings.php
|
||||
lib/plugins/authmysql/lang/en/lang.php
|
||||
lib/plugins/authmysql/lang/en/settings.php
|
||||
lib/plugins/authmysql/lang/eo/lang.php
|
||||
lib/plugins/authmysql/lang/eo/settings.php
|
||||
lib/plugins/authmysql/lang/es/lang.php
|
||||
lib/plugins/authmysql/lang/es/settings.php
|
||||
lib/plugins/authmysql/lang/eu/lang.php
|
||||
lib/plugins/authmysql/lang/eu/settings.php
|
||||
lib/plugins/authmysql/lang/fa/lang.php
|
||||
lib/plugins/authmysql/lang/fa/settings.php
|
||||
lib/plugins/authmysql/lang/fi/settings.php
|
||||
lib/plugins/authmysql/lang/fr/lang.php
|
||||
lib/plugins/authmysql/lang/fr/settings.php
|
||||
lib/plugins/authmysql/lang/he/settings.php
|
||||
lib/plugins/authmysql/lang/hr/lang.php
|
||||
lib/plugins/authmysql/lang/hr/settings.php
|
||||
lib/plugins/authmysql/lang/hu/lang.php
|
||||
lib/plugins/authmysql/lang/hu/settings.php
|
||||
lib/plugins/authmysql/lang/it/lang.php
|
||||
lib/plugins/authmysql/lang/it/settings.php
|
||||
lib/plugins/authmysql/lang/ja/lang.php
|
||||
lib/plugins/authmysql/lang/ja/settings.php
|
||||
lib/plugins/authmysql/lang/ko/lang.php
|
||||
lib/plugins/authmysql/lang/ko/settings.php
|
||||
lib/plugins/authmysql/lang/lv/settings.php
|
||||
lib/plugins/authmysql/lang/nl/lang.php
|
||||
lib/plugins/authmysql/lang/nl/settings.php
|
||||
lib/plugins/authmysql/lang/no/lang.php
|
||||
lib/plugins/authmysql/lang/no/settings.php
|
||||
lib/plugins/authmysql/lang/pl/lang.php
|
||||
lib/plugins/authmysql/lang/pl/settings.php
|
||||
lib/plugins/authmysql/lang/pt-br/lang.php
|
||||
lib/plugins/authmysql/lang/pt-br/settings.php
|
||||
lib/plugins/authmysql/lang/pt/lang.php
|
||||
lib/plugins/authmysql/lang/pt/settings.php
|
||||
lib/plugins/authmysql/lang/ru/lang.php
|
||||
lib/plugins/authmysql/lang/ru/settings.php
|
||||
lib/plugins/authmysql/lang/sk/lang.php
|
||||
lib/plugins/authmysql/lang/sk/settings.php
|
||||
lib/plugins/authmysql/lang/sl/settings.php
|
||||
lib/plugins/authmysql/lang/sr/lang.php
|
||||
lib/plugins/authmysql/lang/sr/settings.php
|
||||
lib/plugins/authmysql/lang/sv/lang.php
|
||||
lib/plugins/authmysql/lang/sv/settings.php
|
||||
lib/plugins/authmysql/lang/tr/lang.php
|
||||
lib/plugins/authmysql/lang/tr/settings.php
|
||||
lib/plugins/authmysql/lang/uk/lang.php
|
||||
lib/plugins/authmysql/lang/zh-tw/settings.php
|
||||
lib/plugins/authmysql/lang/zh/lang.php
|
||||
lib/plugins/authmysql/lang/zh/settings.php
|
||||
lib/plugins/authmysql/plugin.info.txt
|
||||
lib/plugins/authpgsql/auth.php
|
||||
lib/plugins/authpgsql/conf/default.php
|
||||
lib/plugins/authpgsql/conf/metadata.php
|
||||
lib/plugins/authpgsql/lang/bg/settings.php
|
||||
lib/plugins/authpgsql/lang/cs/settings.php
|
||||
lib/plugins/authpgsql/lang/cy/settings.php
|
||||
lib/plugins/authpgsql/lang/da/settings.php
|
||||
lib/plugins/authpgsql/lang/de-informal/settings.php
|
||||
lib/plugins/authpgsql/lang/de/settings.php
|
||||
lib/plugins/authpgsql/lang/en/settings.php
|
||||
lib/plugins/authpgsql/lang/eo/settings.php
|
||||
lib/plugins/authpgsql/lang/es/settings.php
|
||||
lib/plugins/authpgsql/lang/fa/settings.php
|
||||
lib/plugins/authpgsql/lang/fr/settings.php
|
||||
lib/plugins/authpgsql/lang/hr/settings.php
|
||||
lib/plugins/authpgsql/lang/hu/settings.php
|
||||
lib/plugins/authpgsql/lang/it/settings.php
|
||||
lib/plugins/authpgsql/lang/ja/settings.php
|
||||
lib/plugins/authpgsql/lang/ko/settings.php
|
||||
lib/plugins/authpgsql/lang/lv/settings.php
|
||||
lib/plugins/authpgsql/lang/nl/settings.php
|
||||
lib/plugins/authpgsql/lang/no/settings.php
|
||||
lib/plugins/authpgsql/lang/pl/settings.php
|
||||
lib/plugins/authpgsql/lang/pt-br/settings.php
|
||||
lib/plugins/authpgsql/lang/pt/settings.php
|
||||
lib/plugins/authpgsql/lang/ru/settings.php
|
||||
lib/plugins/authpgsql/lang/sk/settings.php
|
||||
lib/plugins/authpgsql/lang/sl/settings.php
|
||||
lib/plugins/authpgsql/lang/sr/settings.php
|
||||
lib/plugins/authpgsql/lang/sv/settings.php
|
||||
lib/plugins/authpgsql/lang/tr/settings.php
|
||||
lib/plugins/authpgsql/lang/uk/settings.php
|
||||
lib/plugins/authpgsql/lang/zh-tw/settings.php
|
||||
lib/plugins/authpgsql/lang/zh/settings.php
|
||||
lib/plugins/authpgsql/plugin.info.txt
|
||||
lib/plugins/config/settings/config.class.php
|
||||
lib/plugins/config/settings/extra.class.php
|
||||
lib/plugins/styling/iris.js
|
||||
lib/scripts/jquery/jquery-migrate.min.js
|
||||
vendor/paragonie/random_compat/psalm-autoload.php
|
||||
vendor/paragonie/random_compat/psalm.xml
|
||||
|
||||
# removed in 2018-04-22
|
||||
data/security.png
|
||||
data/security.xcf
|
||||
inc/EmailAddressValidator.php
|
||||
inc/blowfish.php
|
||||
inc/feedcreator.class.php
|
||||
inc/lessc.inc.php
|
||||
inc/plugin.php
|
||||
lib/images/loading.gif
|
||||
lib/tpl/dokuwiki/css/_search.css
|
||||
vendor/easybook/geshi
|
||||
vendor/phpseclib/phpseclib/composer.lock
|
||||
|
||||
# remove in 2017-02-19
|
||||
inc/SimplePie.php
|
||||
inc/Tar.class.php
|
||||
inc/ZipLib.class.php
|
||||
inc/phpseclib/Crypt_AES.php
|
||||
inc/phpseclib/Crypt_Rijndael.php
|
||||
inc/phpseclib/update.sh
|
||||
inc/phpseclib/LICENSE
|
||||
inc/phpseclib/Crypt_Base.php
|
||||
inc/phpseclib/Crypt_Hash.php
|
||||
inc/phpseclib/Math_BigInteger.php
|
||||
lib/scripts/jquery/jquery-migrate.js
|
||||
lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_0_aaaaaa_40x100.png
|
||||
lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_75_ffffff_40x100.png
|
||||
lib/scripts/jquery/jquery-ui.js
|
||||
lib/scripts/jquery/jquery.js
|
||||
lib/tpl/dokuwiki/css/_admin.css
|
||||
|
||||
# removed in 2016-06-26
|
||||
inc/cliopts.php
|
||||
lib/tpl/dokuwiki/css/mixins.less
|
||||
|
||||
# removed in 2015-08-10
|
||||
inc/TarLib.class.php
|
||||
inc/geshi.php
|
||||
inc/geshi/4cs.php
|
||||
inc/geshi/6502acme.php
|
||||
inc/geshi/6502kickass.php
|
||||
inc/geshi/6502tasm.php
|
||||
inc/geshi/68000devpac.php
|
||||
inc/geshi/abap.php
|
||||
inc/geshi/actionscript-french.php
|
||||
inc/geshi/actionscript.php
|
||||
inc/geshi/actionscript3.php
|
||||
inc/geshi/ada.php
|
||||
inc/geshi/algol68.php
|
||||
inc/geshi/apache.php
|
||||
inc/geshi/applescript.php
|
||||
inc/geshi/apt_sources.php
|
||||
inc/geshi/arm.php
|
||||
inc/geshi/asm.php
|
||||
inc/geshi/asp.php
|
||||
inc/geshi/asymptote.php
|
||||
inc/geshi/autoconf.php
|
||||
inc/geshi/autohotkey.php
|
||||
inc/geshi/autoit.php
|
||||
inc/geshi/avisynth.php
|
||||
inc/geshi/awk.php
|
||||
inc/geshi/bascomavr.php
|
||||
inc/geshi/bash.php
|
||||
inc/geshi/basic4gl.php
|
||||
inc/geshi/bf.php
|
||||
inc/geshi/bibtex.php
|
||||
inc/geshi/blitzbasic.php
|
||||
inc/geshi/bnf.php
|
||||
inc/geshi/boo.php
|
||||
inc/geshi/c.php
|
||||
inc/geshi/c_loadrunner.php
|
||||
inc/geshi/c_mac.php
|
||||
inc/geshi/caddcl.php
|
||||
inc/geshi/cadlisp.php
|
||||
inc/geshi/cfdg.php
|
||||
inc/geshi/cfm.php
|
||||
inc/geshi/chaiscript.php
|
||||
inc/geshi/cil.php
|
||||
inc/geshi/clojure.php
|
||||
inc/geshi/cmake.php
|
||||
inc/geshi/cobol.php
|
||||
inc/geshi/coffeescript.php
|
||||
inc/geshi/cpp-qt.php
|
||||
inc/geshi/cpp.php
|
||||
inc/geshi/csharp.php
|
||||
inc/geshi/css.php
|
||||
inc/geshi/cuesheet.php
|
||||
inc/geshi/d.php
|
||||
inc/geshi/dcl.php
|
||||
inc/geshi/dcpu16.php
|
||||
inc/geshi/dcs.php
|
||||
inc/geshi/delphi.php
|
||||
inc/geshi/diff.php
|
||||
inc/geshi/div.php
|
||||
inc/geshi/dos.php
|
||||
inc/geshi/dot.php
|
||||
inc/geshi/e.php
|
||||
inc/geshi/ecmascript.php
|
||||
inc/geshi/eiffel.php
|
||||
inc/geshi/email.php
|
||||
inc/geshi/epc.php
|
||||
inc/geshi/erlang.php
|
||||
inc/geshi/euphoria.php
|
||||
inc/geshi/f1.php
|
||||
inc/geshi/falcon.php
|
||||
inc/geshi/fo.php
|
||||
inc/geshi/fortran.php
|
||||
inc/geshi/freebasic.php
|
||||
inc/geshi/freeswitch.php
|
||||
inc/geshi/fsharp.php
|
||||
inc/geshi/gambas.php
|
||||
inc/geshi/gdb.php
|
||||
inc/geshi/genero.php
|
||||
inc/geshi/genie.php
|
||||
inc/geshi/gettext.php
|
||||
inc/geshi/glsl.php
|
||||
inc/geshi/gml.php
|
||||
inc/geshi/gnuplot.php
|
||||
inc/geshi/go.php
|
||||
inc/geshi/groovy.php
|
||||
inc/geshi/gwbasic.php
|
||||
inc/geshi/haskell.php
|
||||
inc/geshi/haxe.php
|
||||
inc/geshi/hicest.php
|
||||
inc/geshi/hq9plus.php
|
||||
inc/geshi/html4strict.php
|
||||
inc/geshi/html5.php
|
||||
inc/geshi/icon.php
|
||||
inc/geshi/idl.php
|
||||
inc/geshi/ini.php
|
||||
inc/geshi/inno.php
|
||||
inc/geshi/intercal.php
|
||||
inc/geshi/io.php
|
||||
inc/geshi/j.php
|
||||
inc/geshi/java.php
|
||||
inc/geshi/java5.php
|
||||
inc/geshi/javascript.php
|
||||
inc/geshi/jquery.php
|
||||
inc/geshi/kixtart.php
|
||||
inc/geshi/klonec.php
|
||||
inc/geshi/klonecpp.php
|
||||
inc/geshi/latex.php
|
||||
inc/geshi/lb.php
|
||||
inc/geshi/ldif.php
|
||||
inc/geshi/lisp.php
|
||||
inc/geshi/llvm.php
|
||||
inc/geshi/locobasic.php
|
||||
inc/geshi/logtalk.php
|
||||
inc/geshi/lolcode.php
|
||||
inc/geshi/lotusformulas.php
|
||||
inc/geshi/lotusscript.php
|
||||
inc/geshi/lscript.php
|
||||
inc/geshi/lsl2.php
|
||||
inc/geshi/lua.php
|
||||
inc/geshi/m68k.php
|
||||
inc/geshi/magiksf.php
|
||||
inc/geshi/make.php
|
||||
inc/geshi/mapbasic.php
|
||||
inc/geshi/matlab.php
|
||||
inc/geshi/mirc.php
|
||||
inc/geshi/mmix.php
|
||||
inc/geshi/modula2.php
|
||||
inc/geshi/modula3.php
|
||||
inc/geshi/mpasm.php
|
||||
inc/geshi/mxml.php
|
||||
inc/geshi/mysql.php
|
||||
inc/geshi/nagios.php
|
||||
inc/geshi/netrexx.php
|
||||
inc/geshi/newlisp.php
|
||||
inc/geshi/nsis.php
|
||||
inc/geshi/oberon2.php
|
||||
inc/geshi/objc.php
|
||||
inc/geshi/objeck.php
|
||||
inc/geshi/ocaml-brief.php
|
||||
inc/geshi/ocaml.php
|
||||
inc/geshi/octave.php
|
||||
inc/geshi/oobas.php
|
||||
inc/geshi/oorexx.php
|
||||
inc/geshi/oracle11.php
|
||||
inc/geshi/oracle8.php
|
||||
inc/geshi/oxygene.php
|
||||
inc/geshi/oz.php
|
||||
inc/geshi/parasail.php
|
||||
inc/geshi/parigp.php
|
||||
inc/geshi/pascal.php
|
||||
inc/geshi/pcre.php
|
||||
inc/geshi/per.php
|
||||
inc/geshi/perl.php
|
||||
inc/geshi/perl6.php
|
||||
inc/geshi/pf.php
|
||||
inc/geshi/php-brief.php
|
||||
inc/geshi/php.php
|
||||
inc/geshi/pic16.php
|
||||
inc/geshi/pike.php
|
||||
inc/geshi/pixelbender.php
|
||||
inc/geshi/pli.php
|
||||
inc/geshi/plsql.php
|
||||
inc/geshi/postgresql.php
|
||||
inc/geshi/povray.php
|
||||
inc/geshi/powerbuilder.php
|
||||
inc/geshi/powershell.php
|
||||
inc/geshi/proftpd.php
|
||||
inc/geshi/progress.php
|
||||
inc/geshi/prolog.php
|
||||
inc/geshi/properties.php
|
||||
inc/geshi/providex.php
|
||||
inc/geshi/purebasic.php
|
||||
inc/geshi/pycon.php
|
||||
inc/geshi/pys60.php
|
||||
inc/geshi/python.php
|
||||
inc/geshi/q.php
|
||||
inc/geshi/qbasic.php
|
||||
inc/geshi/rails.php
|
||||
inc/geshi/rebol.php
|
||||
inc/geshi/reg.php
|
||||
inc/geshi/rexx.php
|
||||
inc/geshi/robots.php
|
||||
inc/geshi/rpmspec.php
|
||||
inc/geshi/rsplus.php
|
||||
inc/geshi/ruby.php
|
||||
inc/geshi/sas.php
|
||||
inc/geshi/scala.php
|
||||
inc/geshi/scheme.php
|
||||
inc/geshi/scilab.php
|
||||
inc/geshi/sdlbasic.php
|
||||
inc/geshi/smalltalk.php
|
||||
inc/geshi/smarty.php
|
||||
inc/geshi/spark.php
|
||||
inc/geshi/sparql.php
|
||||
inc/geshi/sql.php
|
||||
inc/geshi/stonescript.php
|
||||
inc/geshi/systemverilog.php
|
||||
inc/geshi/tcl.php
|
||||
inc/geshi/teraterm.php
|
||||
inc/geshi/text.php
|
||||
inc/geshi/thinbasic.php
|
||||
inc/geshi/tsql.php
|
||||
inc/geshi/typoscript.php
|
||||
inc/geshi/unicon.php
|
||||
inc/geshi/upc.php
|
||||
inc/geshi/urbi.php
|
||||
inc/geshi/uscript.php
|
||||
inc/geshi/vala.php
|
||||
inc/geshi/vb.php
|
||||
inc/geshi/vbnet.php
|
||||
inc/geshi/vedit.php
|
||||
inc/geshi/verilog.php
|
||||
inc/geshi/vhdl.php
|
||||
inc/geshi/vim.php
|
||||
inc/geshi/visualfoxpro.php
|
||||
inc/geshi/visualprolog.php
|
||||
inc/geshi/whitespace.php
|
||||
inc/geshi/whois.php
|
||||
inc/geshi/winbatch.php
|
||||
inc/geshi/xbasic.php
|
||||
inc/geshi/xml.php
|
||||
inc/geshi/xorg_conf.php
|
||||
inc/geshi/xpp.php
|
||||
inc/geshi/yaml.php
|
||||
inc/geshi/z80.php
|
||||
inc/geshi/zxbasic.php
|
||||
lib/images/interwiki/coral.gif
|
||||
lib/images/interwiki/dokubug.gif
|
||||
lib/images/interwiki/sb.gif
|
||||
lib/scripts/drag.js
|
||||
lib/scripts/jquery/jquery-ui-theme/images/animated-overlay.gif
|
||||
lib/scripts/tw-sack.js
|
||||
|
||||
# removed in 2014-05-05
|
||||
lib/images/fileicons/audio.png
|
||||
lib/plugins/plugin/admin.php
|
||||
lib/plugins/plugin/classes/ap_delete.class.php
|
||||
lib/plugins/plugin/classes/ap_download.class.php
|
||||
lib/plugins/plugin/classes/ap_enable.class.php
|
||||
lib/plugins/plugin/classes/ap_info.class.php
|
||||
lib/plugins/plugin/classes/ap_manage.class.php
|
||||
lib/plugins/plugin/classes/ap_update.class.php
|
||||
lib/plugins/plugin/lang/af/lang.php
|
||||
lib/plugins/plugin/lang/ar/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/ar/lang.php
|
||||
lib/plugins/plugin/lang/bg/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/bg/lang.php
|
||||
lib/plugins/plugin/lang/ca-valencia/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/ca-valencia/lang.php
|
||||
lib/plugins/plugin/lang/ca/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/ca/lang.php
|
||||
lib/plugins/plugin/lang/cs/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/cs/lang.php
|
||||
lib/plugins/plugin/lang/da/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/da/lang.php
|
||||
lib/plugins/plugin/lang/de-informal/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/de-informal/lang.php
|
||||
lib/plugins/plugin/lang/de/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/de/lang.php
|
||||
lib/plugins/plugin/lang/el/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/el/lang.php
|
||||
lib/plugins/plugin/lang/en/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/en/lang.php
|
||||
lib/plugins/plugin/lang/eo/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/eo/lang.php
|
||||
lib/plugins/plugin/lang/es/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/es/lang.php
|
||||
lib/plugins/plugin/lang/et/lang.php
|
||||
lib/plugins/plugin/lang/eu/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/eu/lang.php
|
||||
lib/plugins/plugin/lang/fa/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/fa/lang.php
|
||||
lib/plugins/plugin/lang/fi/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/fi/lang.php
|
||||
lib/plugins/plugin/lang/fr/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/fr/lang.php
|
||||
lib/plugins/plugin/lang/gl/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/gl/lang.php
|
||||
lib/plugins/plugin/lang/he/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/he/lang.php
|
||||
lib/plugins/plugin/lang/hi/lang.php
|
||||
lib/plugins/plugin/lang/hr/lang.php
|
||||
lib/plugins/plugin/lang/hu/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/hu/lang.php
|
||||
lib/plugins/plugin/lang/ia/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/ia/lang.php
|
||||
lib/plugins/plugin/lang/id-ni/lang.php
|
||||
lib/plugins/plugin/lang/id/lang.php
|
||||
lib/plugins/plugin/lang/is/lang.php
|
||||
lib/plugins/plugin/lang/it/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/it/lang.php
|
||||
lib/plugins/plugin/lang/ja/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/ja/lang.php
|
||||
lib/plugins/plugin/lang/kk/lang.php
|
||||
lib/plugins/plugin/lang/ko/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/ko/lang.php
|
||||
lib/plugins/plugin/lang/la/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/la/lang.php
|
||||
lib/plugins/plugin/lang/lb/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/lb/lang.php
|
||||
lib/plugins/plugin/lang/lt/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/lt/lang.php
|
||||
lib/plugins/plugin/lang/lv/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/lv/lang.php
|
||||
lib/plugins/plugin/lang/mk/lang.php
|
||||
lib/plugins/plugin/lang/mr/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/mr/lang.php
|
||||
lib/plugins/plugin/lang/ms/lang.php
|
||||
lib/plugins/plugin/lang/ne/lang.php
|
||||
lib/plugins/plugin/lang/nl/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/nl/lang.php
|
||||
lib/plugins/plugin/lang/no/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/no/lang.php
|
||||
lib/plugins/plugin/lang/pl/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/pl/lang.php
|
||||
lib/plugins/plugin/lang/pt-br/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/pt-br/lang.php
|
||||
lib/plugins/plugin/lang/pt/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/pt/lang.php
|
||||
lib/plugins/plugin/lang/ro/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/ro/lang.php
|
||||
lib/plugins/plugin/lang/ru/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/ru/lang.php
|
||||
lib/plugins/plugin/lang/sk/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/sk/lang.php
|
||||
lib/plugins/plugin/lang/sl/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/sl/lang.php
|
||||
lib/plugins/plugin/lang/sq/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/sq/lang.php
|
||||
lib/plugins/plugin/lang/sr/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/sr/lang.php
|
||||
lib/plugins/plugin/lang/sv/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/sv/lang.php
|
||||
lib/plugins/plugin/lang/th/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/th/lang.php
|
||||
lib/plugins/plugin/lang/tr/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/tr/lang.php
|
||||
lib/plugins/plugin/lang/uk/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/uk/lang.php
|
||||
lib/plugins/plugin/lang/vi/lang.php
|
||||
lib/plugins/plugin/lang/zh-tw/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/zh-tw/lang.php
|
||||
lib/plugins/plugin/lang/zh/admin_plugin.txt
|
||||
lib/plugins/plugin/lang/zh/lang.php
|
||||
lib/plugins/plugin/plugin.info.txt
|
||||
lib/plugins/plugin/style.css
|
||||
|
||||
# removed in 2013-11-18
|
||||
lib/images/arrow_down.gif
|
||||
lib/images/arrow_up.gif
|
||||
lib/images/at.gif
|
||||
lib/images/close.png
|
||||
lib/images/del.png
|
||||
lib/images/edit.gif
|
||||
lib/images/list-minus.gif
|
||||
lib/images/list-plus.gif
|
||||
lib/images/pencil.png
|
||||
|
||||
# removed in 2013-10-28
|
||||
lib/images/interwiki/meatball.gif
|
||||
lib/images/interwiki/wiki.gif
|
||||
lib/plugins/acl/ajax.php
|
||||
lib/tpl/default/_admin.css
|
||||
lib/tpl/default/_fileuploader.css
|
||||
lib/tpl/default/_linkwiz.css
|
||||
lib/tpl/default/_mediamanager.css
|
||||
lib/tpl/default/_mediaoptions.css
|
||||
lib/tpl/default/_subscription.css
|
||||
lib/tpl/default/_tabs.css
|
||||
lib/tpl/default/design.css
|
||||
lib/tpl/default/detail.php
|
||||
lib/tpl/default/footer.html
|
||||
lib/tpl/default/images/UWEB.png
|
||||
lib/tpl/default/images/UWEBshadow.png
|
||||
lib/tpl/default/images/apple-touch-icon.png
|
||||
lib/tpl/default/images/bullet.gif
|
||||
lib/tpl/default/images/button-cc.gif
|
||||
lib/tpl/default/images/button-css.png
|
||||
lib/tpl/default/images/button-donate.gif
|
||||
lib/tpl/default/images/button-dw.png
|
||||
lib/tpl/default/images/button-php.gif
|
||||
lib/tpl/default/images/button-rss.png
|
||||
lib/tpl/default/images/button-xhtml.png
|
||||
lib/tpl/default/images/buttonshadow.png
|
||||
lib/tpl/default/images/closed.gif
|
||||
lib/tpl/default/images/favicon.ico
|
||||
lib/tpl/default/images/inputshadow.png
|
||||
lib/tpl/default/images/link_icon.gif
|
||||
lib/tpl/default/images/mail_icon.gif
|
||||
lib/tpl/default/images/open.gif
|
||||
lib/tpl/default/images/resizecol.png
|
||||
lib/tpl/default/images/tocdot2.gif
|
||||
lib/tpl/default/images/windows.gif
|
||||
lib/tpl/default/layout.css
|
||||
lib/tpl/default/main.php
|
||||
lib/tpl/default/media.css
|
||||
lib/tpl/default/mediamanager.php
|
||||
lib/tpl/default/print.css
|
||||
lib/tpl/default/rtl.css
|
||||
lib/tpl/default/style.ini
|
||||
lib/tpl/default/template.info.txt
|
||||
lib/tpl/dokuwiki/css/basic.css
|
||||
lib/tpl/dokuwiki/css/content.css
|
||||
lib/tpl/dokuwiki/css/design.css
|
||||
lib/tpl/dokuwiki/css/includes.css
|
||||
lib/tpl/dokuwiki/css/mobile.css
|
||||
lib/tpl/dokuwiki/css/pagetools.css
|
||||
lib/tpl/dokuwiki/css/structure.css
|
||||
|
||||
# removed in 2013-05-10
|
||||
lib/plugins/info/lang/sl/lang.php
|
||||
|
||||
# removed in 2013-04-06
|
||||
inc/adLDAP.php
|
||||
inc/auth/ad.class.php
|
||||
inc/auth/basic.class.php
|
||||
inc/auth/ldap.class.php
|
||||
inc/auth/mysql.class.php
|
||||
inc/auth/pgsql.class.php
|
||||
inc/auth/plain.class.php
|
||||
|
||||
# removed in 2012-09-10
|
||||
lib/images/icon-file.png
|
||||
lib/images/icon-thumb.png
|
||||
lib/images/interwiki/skype.png
|
||||
lib/plugins/acl/rtl.css
|
||||
lib/plugins/config/rtl.css
|
||||
lib/plugins/plugin/rtl.css
|
||||
|
||||
# removed in 2011-11-10
|
||||
lib/_fla/.htaccess
|
||||
lib/_fla/MultipleUpload.as
|
||||
lib/_fla/README
|
||||
lib/_fla/index.html
|
||||
lib/_fla/multipleUpload.fla
|
||||
lib/exe/multipleUpload.swf
|
||||
lib/images/multiupload.png
|
||||
lib/scripts/ajax.js
|
||||
lib/scripts/events.js
|
||||
lib/scripts/subscriptions.js
|
||||
|
||||
# removed in 2011-05-25
|
||||
conf/words.aspell.dist
|
||||
lib/styles/style.css
|
||||
|
||||
# removed in 2010-11-07
|
||||
inc/lang/ar/subscribermail.txt
|
||||
inc/lang/az/subscribermail.txt
|
||||
inc/lang/bg/subscribermail.txt
|
||||
inc/lang/ca/subscribermail.txt
|
||||
inc/lang/ca-valencia/subscribermail.txt
|
||||
inc/lang/cs/subscribermail.txt
|
||||
inc/lang/da/subscribermail.txt
|
||||
inc/lang/de-informal/subscribermail.txt
|
||||
inc/lang/el/subscribermail.txt
|
||||
inc/lang/eo/subscribermail.txt
|
||||
inc/lang/es/subscribermail.txt
|
||||
inc/lang/et/subscribermail.txt
|
||||
inc/lang/eu/subscribermail.txt
|
||||
inc/lang/fa/subscribermail.txt
|
||||
inc/lang/fi/subscribermail.txt
|
||||
inc/lang/fo/subscribermail.txt
|
||||
inc/lang/fr/subscribermail.txt
|
||||
inc/lang/gl/subscribermail.txt
|
||||
inc/lang/he/subscribermail.txt
|
||||
inc/lang/hr/subscribermail.txt
|
||||
inc/lang/hu/subscribermail.txt
|
||||
inc/lang/id/subscribermail.txt
|
||||
inc/lang/is/subscribermail.txt
|
||||
inc/lang/it/subscribermail.txt
|
||||
inc/lang/ja/subscribermail.txt
|
||||
inc/lang/ko/subscribermail.txt
|
||||
inc/lang/ku/subscribermail.txt
|
||||
inc/lang/lt/subscribermail.txt
|
||||
inc/lang/lv/subscribermail.txt
|
||||
inc/lang/mr/subscribermail.txt
|
||||
inc/lang/ne/subscribermail.txt
|
||||
inc/lang/nl/subscribermail.txt
|
||||
inc/lang/no/subscribermail.txt
|
||||
inc/lang/pl/subscribermail.txt
|
||||
inc/lang/pt-br/subscribermail.txt
|
||||
inc/lang/pt/subscribermail.txt
|
||||
inc/lang/ro/subscribermail.txt
|
||||
inc/lang/ru/subscribermail.txt
|
||||
inc/lang/sk/subscribermail.txt
|
||||
inc/lang/sr/subscribermail.txt
|
||||
inc/lang/sv/subscribermail.txt
|
||||
inc/lang/th/subscribermail.txt
|
||||
inc/lang/tr/subscribermail.txt
|
||||
inc/lang/uk/subscribermail.txt
|
||||
inc/lang/zh/subscribermail.txt
|
||||
inc/lang/zh-tw/subscribermail.txt
|
||||
|
||||
# removed in rc2010-10-07
|
||||
conf/msg
|
||||
inc/lang/bg/wordblock.txt
|
||||
inc/lang/ca-valencia/wordblock.txt
|
||||
inc/lang/ca/wordblock.txt
|
||||
inc/lang/cs/wordblock.txt
|
||||
inc/lang/da/wordblock.txt
|
||||
inc/lang/de-informal/wordblock.txt
|
||||
inc/lang/de/subscribermail.txt
|
||||
inc/lang/de/wordblock.txt
|
||||
inc/lang/el/wordblock.txt
|
||||
inc/lang/en/subscribermail.txt
|
||||
inc/lang/en/wordblock.txt
|
||||
inc/lang/eo/wordblock.txt
|
||||
inc/lang/es/wordblock.txt
|
||||
inc/lang/et/wordblock.txt
|
||||
inc/lang/eu/wordblock.txt
|
||||
inc/lang/fa/wordblock.txt
|
||||
inc/lang/fi/wordblock.txt
|
||||
inc/lang/fo/wordblock.txt
|
||||
inc/lang/fr/wordblock.txt
|
||||
inc/lang/he/wordblock.txt
|
||||
inc/lang/hr/wordblock.txt
|
||||
inc/lang/hu/wordblock.txt
|
||||
inc/lang/id/wordblock.txt
|
||||
inc/lang/it/wordblock.txt
|
||||
inc/lang/ja/wordblock.txt
|
||||
inc/lang/ko/wordblock.txt
|
||||
inc/lang/ku/wordblock.txt
|
||||
inc/lang/lt/wordblock.txt
|
||||
inc/lang/lv/wordblock.txt
|
||||
inc/lang/mg/wordblock.txt
|
||||
inc/lang/mr/wordblock.txt
|
||||
inc/lang/nl/wordblock.txt
|
||||
inc/lang/no/wordblock.txt
|
||||
inc/lang/pl/wordblock.txt
|
||||
inc/lang/pt-br/wordblock.txt
|
||||
inc/lang/pt/wordblock.txt
|
||||
inc/lang/ro/wordblock.txt
|
||||
inc/lang/sk/wordblock.txt
|
||||
inc/lang/sl/wordblock.txt
|
||||
inc/lang/sr/wordblock.txt
|
||||
inc/lang/sv/wordblock.txt
|
||||
inc/lang/th/wordblock.txt
|
||||
inc/lang/tr/wordblock.txt
|
||||
inc/lang/uk/wordblock.txt
|
||||
inc/lang/vi/wordblock.txt
|
||||
inc/lang/zh-tw/wordblock.txt
|
||||
inc/lang/zh/wordblock.txt
|
||||
lib/scripts/pngbehavior.htc
|
||||
|
||||
# removed in rc2009-12-02
|
||||
inc/lang/ar/wordblock.txt
|
||||
inc/lang/ca-va/
|
||||
lib/plugins/acl/lang/ca-va/
|
||||
lib/plugins/config/lang/ca-va/
|
||||
lib/plugins/plugin/lang/ca-va/
|
||||
lib/plugins/popularity/lang/ca-va/
|
||||
lib/plugins/revert/lang/ca-va/
|
||||
lib/plugins/usermanager/lang/ca-va/
|
||||
|
||||
# removed in rc2009-01-30
|
||||
lib/plugins/upgradeplugindirectory
|
||||
lib/plugins/upgradeplugindirectory/action.php
|
||||
|
||||
# removed in rc2009-01-26
|
||||
inc/auth/punbb.class.php
|
||||
inc/lang/ko/edit.txt_bak
|
||||
inc/lang/ko/lang.php_bak
|
||||
inc/lang/ku/admin_acl.txt
|
||||
inc/lang/mg/admin_acl.txt
|
||||
lib/plugins/importoldchangelog
|
||||
lib/plugins/importoldchangelog/action.php
|
||||
lib/plugins/importoldindex
|
||||
lib/plugins/importoldindex/action.php
|
||||
lib/plugins/usermanager/images/no_user_edit.png
|
||||
lib/plugins/usermanager/images/user_edit.png
|
||||
lib/tpl/default/UWEB.css
|
||||
|
||||
# removed in rc2008-03-31
|
||||
inc/aspell.php
|
||||
inc/geshi/css-gen.cfg
|
||||
inc/lang/fr/admin_acl.txt
|
||||
lib/exe/spellcheck.php
|
||||
lib/images/toolbar/spellcheck.png
|
||||
lib/images/toolbar/spellnoerr.png
|
||||
lib/images/toolbar/spellstop.png
|
||||
lib/images/toolbar/spellwait.gif
|
||||
lib/plugins/acl/lang/ar/intro.txt
|
||||
lib/plugins/acl/lang/bg/intro.txt
|
||||
lib/plugins/acl/lang/ca/intro.txt
|
||||
lib/plugins/acl/lang/cs/intro.txt
|
||||
lib/plugins/acl/lang/da/intro.txt
|
||||
lib/plugins/acl/lang/de/intro.txt
|
||||
lib/plugins/acl/lang/el/intro.txt
|
||||
lib/plugins/acl/lang/en/intro.txt
|
||||
lib/plugins/acl/lang/es/intro.txt
|
||||
lib/plugins/acl/lang/et/intro.txt
|
||||
lib/plugins/acl/lang/eu/intro.txt
|
||||
lib/plugins/acl/lang/fi/intro.txt
|
||||
lib/plugins/acl/lang/fr/intro.txt
|
||||
lib/plugins/acl/lang/gl/intro.txt
|
||||
lib/plugins/acl/lang/he/intro.txt
|
||||
lib/plugins/acl/lang/id/intro.txt
|
||||
lib/plugins/acl/lang/it/intro.txt
|
||||
lib/plugins/acl/lang/ja/intro.txt
|
||||
lib/plugins/acl/lang/ko/intro.txt
|
||||
lib/plugins/acl/lang/lt/intro.txt
|
||||
lib/plugins/acl/lang/lv/intro.txt
|
||||
lib/plugins/acl/lang/nl/intro.txt
|
||||
lib/plugins/acl/lang/no/intro.txt
|
||||
lib/plugins/acl/lang/pl/intro.txt
|
||||
lib/plugins/acl/lang/pt/intro.txt
|
||||
lib/plugins/acl/lang/ru/intro.txt
|
||||
lib/plugins/acl/lang/sk/intro.txt
|
||||
lib/plugins/acl/lang/sr/intro.txt
|
||||
lib/plugins/acl/lang/sv/intro.txt
|
||||
lib/plugins/acl/lang/tr/intro.txt
|
||||
lib/plugins/acl/lang/uk/intro.txt
|
||||
lib/plugins/acl/lang/vi/intro.txt
|
||||
lib/plugins/acl/lang/zh/intro.txt
|
||||
lib/plugins/acl/lang/zh-tw/intro.txt
|
||||
lib/scripts/spellcheck.js
|
||||
lib/styles/spellcheck.css
|
||||
|
||||
# removed in 2007-06-26
|
||||
inc/parser/wiki.php
|
||||
lib/images/interwiki/bug.gif
|
||||
lib/plugins/base.php
|
||||
lib/plugins/plugin/inc
|
||||
lib/plugins/plugin/inc/tarlib.class.php
|
||||
lib/plugins/plugin/inc/zip.lib.php
|
||||
lib/scripts/domLib.js
|
||||
lib/scripts/domTT.js
|
||||
|
||||
# removed in 2006-11-06
|
||||
inc/admin_acl.php
|
||||
inc/magpie
|
||||
inc/magpie/rss_cache.inc
|
||||
inc/magpie/rss_fetch.inc
|
||||
inc/magpie/rss_parse.inc
|
||||
inc/magpie/rss_utils.inc
|
||||
lib/exe/media.php
|
||||
lib/tpl/default/mediaedit.php
|
||||
lib/tpl/default/media.php
|
||||
lib/tpl/default/mediaref.php
|
||||
|
||||
# removed in 2006-03-09
|
||||
data/pages/wiki/playground.txt
|
||||
inc/auth/ldap.php
|
||||
inc/auth/mysql.php
|
||||
inc/auth/pgsql.php
|
||||
inc/auth/plain.php
|
||||
inc/lang/ca/admin_acl.txt
|
||||
inc/lang/cs/admin_acl.txt
|
||||
inc/lang/da/admin_acl.txt
|
||||
inc/lang/de/admin_acl.txt
|
||||
inc/lang/en/admin_acl.txt
|
||||
inc/lang/et/admin_acl.txt
|
||||
inc/lang/eu/admin_acl.txt
|
||||
inc/lang/fr/admin_acl.txt
|
||||
inc/lang/it/admin_acl.txt
|
||||
inc/lang/ja/admin_acl.txt
|
||||
inc/lang/lt/admin_acl.txt
|
||||
inc/lang/lv/admin_acl.txt
|
||||
inc/lang/nl/admin_acl.txt
|
||||
inc/lang/no/admin_acl.txt
|
||||
inc/lang/pl/admin_acl.txt
|
||||
inc/lang/pt/admin_acl.txt
|
||||
inc/lang/vi/admin_acl.txt
|
||||
inc/lang/zh-tw/admin_acl.txt
|
||||
inc/parser/spamcheck.php
|
||||
lib/images/favicon.ico
|
||||
lib/images/thumbup.gif
|
||||
lib/images/toolbar/code.png
|
||||
lib/images/toolbar/empty.png
|
||||
lib/images/toolbar/extlink.png
|
||||
lib/images/toolbar/fonth1.png
|
||||
lib/images/toolbar/fonth2.png
|
||||
lib/images/toolbar/fonth3.png
|
||||
lib/images/toolbar/fonth4.png
|
||||
lib/images/toolbar/fonth5.png
|
||||
lib/images/toolbar/list.png
|
||||
lib/images/toolbar/list_ul.png
|
||||
lib/images/toolbar/rule.png
|
||||
lib/tpl/default/images/interwiki.png
|
Binary file not shown.
After Width: | Height: | Size: 6.4 KiB |
Binary file not shown.
1
content/data/index/_dummy
Normal file
1
content/data/index/_dummy
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
0
content/data/index/page.idx
Normal file
0
content/data/index/page.idx
Normal file
1
content/data/locks/_dummy
Normal file
1
content/data/locks/_dummy
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
BIN
content/data/media/wiki/dokuwiki-128.png
Normal file
BIN
content/data/media/wiki/dokuwiki-128.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
586
content/data/media/wiki/dokuwiki.svg
Normal file
586
content/data/media/wiki/dokuwiki.svg
Normal file
|
@ -0,0 +1,586 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="128.17094"
|
||||
height="128.03864"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.1 "
|
||||
sodipodi:docname="dokuwiki-logo.svg"
|
||||
version="1.1">
|
||||
<title
|
||||
id="title3181">DokuWiki Logo</title>
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
id="linearGradient2624">
|
||||
<stop
|
||||
style="stop-color:#3a9030;stop-opacity:0.83673471;"
|
||||
offset="0"
|
||||
id="stop2626" />
|
||||
<stop
|
||||
style="stop-color:#3d9c32;stop-opacity:0.79591835;"
|
||||
offset="1"
|
||||
id="stop2628" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2612">
|
||||
<stop
|
||||
style="stop-color:#25901b;stop-opacity:0.83673471;"
|
||||
offset="0"
|
||||
id="stop2614" />
|
||||
<stop
|
||||
style="stop-color:#25901b;stop-opacity:0.37755102;"
|
||||
offset="1"
|
||||
id="stop2616" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2600">
|
||||
<stop
|
||||
style="stop-color:#e32525;stop-opacity:0.81632656;"
|
||||
offset="0"
|
||||
id="stop2602" />
|
||||
<stop
|
||||
style="stop-color:#e32525;stop-opacity:0.5714286;"
|
||||
offset="1"
|
||||
id="stop2604" />
|
||||
</linearGradient>
|
||||
<marker
|
||||
inkscape:stockid="TriangleOutL"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="TriangleOutL"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path2488"
|
||||
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
transform="scale(0.8,0.8)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path2571"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(1.1,0,0,1.1,-5.5,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<linearGradient
|
||||
id="linearGradient2408">
|
||||
<stop
|
||||
id="stop2410"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:0.17346939;" />
|
||||
<stop
|
||||
id="stop2412"
|
||||
offset="1"
|
||||
style="stop-color:#c7cec2;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2389">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0.17346939;"
|
||||
offset="0"
|
||||
id="stop2391" />
|
||||
<stop
|
||||
style="stop-color:#c7cec2;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2393" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2370">
|
||||
<stop
|
||||
style="stop-color:#fbfaf9;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2372" />
|
||||
<stop
|
||||
style="stop-color:#e9dac7;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2374" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2364">
|
||||
<stop
|
||||
id="stop2366"
|
||||
offset="0"
|
||||
style="stop-color:#fbf6f0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2368"
|
||||
offset="1"
|
||||
style="stop-color:#e9dac7;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2348">
|
||||
<stop
|
||||
style="stop-color:#fbf6f0;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2350" />
|
||||
<stop
|
||||
style="stop-color:#e9dac7;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2352" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2332">
|
||||
<stop
|
||||
style="stop-color:#ede1ae;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2334" />
|
||||
<stop
|
||||
style="stop-color:#fefdfa;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2336" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2249">
|
||||
<stop
|
||||
style="stop-color:#00a423;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2251" />
|
||||
<stop
|
||||
style="stop-color:#00b427;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2253" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2229">
|
||||
<stop
|
||||
id="stop2231"
|
||||
offset="0"
|
||||
style="stop-color:#00b62b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2233"
|
||||
offset="1"
|
||||
style="stop-color:#a1d784;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2213">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2215" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2217" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2360">
|
||||
<stop
|
||||
style="stop-color:#d69c00;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2362" />
|
||||
<stop
|
||||
style="stop-color:#ffe658;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2364" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2352">
|
||||
<stop
|
||||
id="stop2354"
|
||||
offset="0"
|
||||
style="stop-color:#ce411e;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2356"
|
||||
offset="1"
|
||||
style="stop-color:#ecad8d;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2336">
|
||||
<stop
|
||||
style="stop-color:#8f2a15;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2338" />
|
||||
<stop
|
||||
style="stop-color:#c8381b;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2340" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2336"
|
||||
id="linearGradient2342"
|
||||
x1="219.21262"
|
||||
y1="189.01556"
|
||||
x2="286.22665"
|
||||
y2="189.01556"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2352"
|
||||
id="linearGradient2350"
|
||||
x1="219.66267"
|
||||
y1="192.73286"
|
||||
x2="277.8761"
|
||||
y2="192.73286"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2360"
|
||||
id="radialGradient2366"
|
||||
cx="224.41418"
|
||||
cy="212.80016"
|
||||
fx="224.41418"
|
||||
fy="212.80016"
|
||||
r="8.6813803"
|
||||
gradientTransform="matrix(1,0,0,0.984179,0,3.366635)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2249"
|
||||
id="linearGradient2227"
|
||||
x1="192.03938"
|
||||
y1="262.25757"
|
||||
x2="263.67093"
|
||||
y2="262.25757"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2229"
|
||||
id="linearGradient2247"
|
||||
x1="191.75092"
|
||||
y1="258.91571"
|
||||
x2="255.6561"
|
||||
y2="258.91571"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2360"
|
||||
id="radialGradient2317"
|
||||
cx="257.41144"
|
||||
cy="274.64203"
|
||||
fx="257.41144"
|
||||
fy="274.64203"
|
||||
r="7.1440549"
|
||||
gradientTransform="matrix(1,0,0,1.631384,0,-173.4045)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2360"
|
||||
id="linearGradient2325"
|
||||
x1="184.07063"
|
||||
y1="246.35907"
|
||||
x2="201.40646"
|
||||
y2="246.35907"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2332"
|
||||
id="linearGradient2346"
|
||||
x1="162.76369"
|
||||
y1="184.99277"
|
||||
x2="240.84924"
|
||||
y2="289.50323"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2348"
|
||||
id="linearGradient2354"
|
||||
x1="140.15784"
|
||||
y1="303.78967"
|
||||
x2="136.14151"
|
||||
y2="195.87151"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2370"
|
||||
id="linearGradient2362"
|
||||
x1="286.15598"
|
||||
y1="262.28729"
|
||||
x2="185.81258"
|
||||
y2="172.32423"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2389"
|
||||
id="linearGradient2395"
|
||||
x1="213.96568"
|
||||
y1="220.07191"
|
||||
x2="244.79126"
|
||||
y2="265.40363"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2408"
|
||||
id="linearGradient2406"
|
||||
x1="184.30582"
|
||||
y1="241.52789"
|
||||
x2="224.67441"
|
||||
y2="307.52844"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2600"
|
||||
id="linearGradient2606"
|
||||
x1="202.41772"
|
||||
y1="222.05145"
|
||||
x2="206.06017"
|
||||
y2="210.3558"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2612"
|
||||
id="linearGradient2618"
|
||||
x1="248.62152"
|
||||
y1="234.52202"
|
||||
x2="251.64362"
|
||||
y2="213.12164"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2624"
|
||||
id="linearGradient2630"
|
||||
x1="275.71765"
|
||||
y1="251.56442"
|
||||
x2="255.68353"
|
||||
y2="217.94008"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2352"
|
||||
id="linearGradient2640"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="219.66267"
|
||||
y1="192.73286"
|
||||
x2="277.8761"
|
||||
y2="192.73286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2336"
|
||||
id="linearGradient2643"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="219.21262"
|
||||
y1="189.01556"
|
||||
x2="286.22665"
|
||||
y2="189.01556" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2360"
|
||||
id="radialGradient2647"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.984179,0,3.366635)"
|
||||
cx="224.41418"
|
||||
cy="212.80016"
|
||||
fx="224.41418"
|
||||
fy="212.80016"
|
||||
r="8.6813803" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.03"
|
||||
inkscape:cx="35.144424"
|
||||
inkscape:cy="83.160427"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer3"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="716"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:showpageshadow="false"
|
||||
showborder="true"
|
||||
borderlayer="false" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>DokuWiki Logo</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Esther Brunner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<cc:license
|
||||
rdf:resource="http://www.gnu.org/licenses/gpl-2.0.html" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="paper"
|
||||
style="display:inline"
|
||||
transform="translate(-158.10602,-158.67323)">
|
||||
<g
|
||||
id="g1419"
|
||||
transform="matrix(0.99993322,0,0,0.9959778,0.01483419,0.8957919)">
|
||||
<g
|
||||
id="g2376">
|
||||
<path
|
||||
transform="matrix(0.989976,-0.141236,0.201069,0.979577,0,0)"
|
||||
style="fill:url(#linearGradient2354);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7216621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 120.21543,196.43769 70.90655,-0.79226 -2.40261,109.05308 -71.71761,0.37344 3.21367,-108.63426 z"
|
||||
id="rect1422"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2362);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 179.20033,182.08731 79.84173,-19.51687 26.61391,101.72428 -82.50312,21.58684 -23.95252,-103.79425 z"
|
||||
id="rect1425"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
transform="matrix(0.995676,-0.09289891,0.08102261,0.996712,0,0)"
|
||||
style="fill:url(#linearGradient2346);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00418305px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 159.01353,181.74387 85.58587,0.53396 0,110.47429 -84.53387,-2.5127 -1.052,-108.49555 z"
|
||||
id="rect1419"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
id="text2382"
|
||||
d="m 167.55116,214.00773 0,-20.1846 5.34962,0 0,2.37403 -2.48145,0 0,15.43654 2.48145,0 0,2.37403 -5.34962,0 m 7.34767,0 0,-20.1846 5.34961,0 0,2.37403 -2.48144,0 0,15.43654 2.48144,0 0,2.37403 -5.34961,0 m 7.36915,-20.1846 5.81153,0 c 1.31054,2e-5 2.30956,0.10028 2.99707,0.30078 0.92382,0.27216 1.71516,0.75555 2.37403,1.4502 0.65884,0.69468 1.16014,1.54689 1.50391,2.55664 0.34373,1.00262 0.51561,2.24155 0.51562,3.71681 -10e-6,1.29623 -0.16115,2.41342 -0.4834,3.35156 -0.39389,1.14584 -0.95607,2.07325 -1.68652,2.78223 -0.55145,0.53711 -1.29624,0.95606 -2.23438,1.25684 -0.70183,0.222 -1.63999,0.33301 -2.81446,0.33301 l -5.9834,0 0,-15.74807 m 3.17969,2.66407 0,10.43067 2.37402,0 c 0.88802,1e-5 1.52897,-0.0501 1.92286,-0.15039 0.51561,-0.1289 0.94172,-0.34732 1.27832,-0.65527 0.34374,-0.30794 0.62304,-0.81282 0.83789,-1.51465 0.21483,-0.70898 0.32226,-1.6722 0.32227,-2.88965 -1e-5,-1.21744 -0.10744,-2.15201 -0.32227,-2.80372 -0.21485,-0.65168 -0.51563,-1.16014 -0.90234,-1.52539 -0.38673,-0.36522 -0.87729,-0.61229 -1.47168,-0.74121 -0.44402,-0.10025 -1.31414,-0.15038 -2.61036,-0.15039 l -1.42871,0 m 14.96388,13.084 -3.75977,-15.74807 3.25489,0 2.37403,10.8174 2.87891,-10.8174 3.78125,0 2.76074,11.00002 2.417,-11.00002 3.20118,0 -3.82423,15.74807 -3.37305,0 -3.13672,-11.77345 -3.12598,11.77345 -3.44825,0 m 22.76272,-15.74807 0,20.1846 -5.34961,0 0,-2.37403 2.48145,0 0,-15.45803 -2.48145,0 0,-2.35254 5.34961,0 m 7.34767,0 0,20.1846 -5.34962,0 0,-2.37403 2.48145,0 0,-15.45803 -2.48145,0 0,-2.35254 5.34962,0"
|
||||
style="font-size:12.0000124px;font-style:normal;font-weight:normal;line-height:125%;fill:#6184a3;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
transform="matrix(0.995433,-0.09546066,0.09546066,0.995433,0,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g2632"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="fill:url(#linearGradient2606);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker-end:none"
|
||||
d="m 174.75585,201.60224 c -6.04576,2.46667 -10.16789,4.4194 -12.88454,6.35064 -2.71665,1.93124 -3.19257,4.60007 -3.24631,6.26587 -0.0269,0.8329 0.0809,1.77774 0.63189,2.44014 0.55103,0.6624 1.80769,1.87421 2.75794,2.38558 1.90049,1.02274 7.5417,2.42901 10.51899,3.07308 11.90917,2.57627 26.80568,1.68117 26.80568,1.68117 1.69307,1.2452 2.83283,2.82434 3.269,4.26902 4.5766,-1.88674 11.81084,-6.58439 13.15657,-8.57706 -5.45142,-4.19955 -10.79692,-6.33346 -16.51317,-8.30847 -1.59867,-0.71918 -2.87956,-1.22649 -0.71773,2.55635 0.98506,2.47275 0.85786,5.05143 0.57176,7.41825 0,0 -16.52749,0.40678 -28.23838,-2.1266 -2.92772,-0.63334 -5.46627,-0.95523 -7.21875,-1.89832 -0.87624,-0.47154 -1.48296,-0.8208 -1.91578,-1.3411 -0.43282,-0.5203 -0.2196,-1.29055 -0.20128,-1.85858 0.0366,-1.13607 0.25336,-1.67063 2.86177,-3.52492 2.60841,-1.85429 5.65407,-3.36195 11.65936,-5.81211 -0.0877,-1.29125 -0.29025,-2.5059 -1.29702,-2.99294 z"
|
||||
id="path2414"
|
||||
sodipodi:nodetypes="csssssccccccssssscc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2618);fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 269.62539,220.7482 c -1.43576,-0.13963 -2.58044,0.30288 -2.56084,1.50218 0.94391,0.85652 1.34942,2.43518 1.48562,3.14008 0.1362,0.7049 0.0359,1.21914 -0.48562,1.89004 -1.043,1.3418 -3.12498,1.56875 -6.5006,2.72063 -6.75124,2.30377 -16.89306,2.52561 -27.90689,3.84639 -22.02767,2.64157 -39.03164,3.76107 -39.03164,3.76107 1.98346,-4.64758 6.32828,-4.41197 6.34903,-8.20969 0.27376,-0.89755 -3.14597,-1.31638 -5.09943,-0.10731 -4.26694,3.70137 -7.59152,6.75353 -10.69418,10.51311 l 1.88795,3.08438 c 0,0 26.13006,-2.88973 48.19776,-5.5361 11.03385,-1.32318 20.95601,-1.99856 27.80968,-4.33728 3.42683,-1.16936 5.95975,-1.49022 7.6409,-3.51958 0.63172,-0.76256 1.35238,-3.04699 1.06804,-4.73369 -0.21951,-1.30213 -1.14979,-3.09774 -2.15978,-4.01423 z"
|
||||
id="path2608"
|
||||
sodipodi:nodetypes="ccsssscccccssssc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2630);fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 254.36185,220.33948 c -6.84997,3.24198 -7.15311,8.60912 -5.95953,12.79884 1.19358,4.18972 5.26293,8.75677 9.32121,12.40608 8.11656,7.29861 12.06046,9.33163 12.06046,9.33163 -3.71515,-0.10342 -7.89887,-1.41174 -8.13315,0.49304 -0.9483,2.97582 11.49137,3.47486 17.43787,2.70205 -1.39456,-7.57836 -3.79323,-13.21546 -7.73151,-14.90312 -1.68464,-0.14804 0.31242,4.72441 0.76985,9.39604 0,0 -3.62454,-1.73122 -11.60519,-8.90762 -3.99032,-3.5882 -7.37386,-7.3421 -8.47319,-11.20099 -1.09933,-3.85889 0.0776,-6.1205 4.95082,-9.53176 0.92816,-0.99528 -1.28985,-2.45913 -2.63764,-2.58419 z"
|
||||
id="path2620"
|
||||
sodipodi:nodetypes="csscccccsscc"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="cccccc"
|
||||
id="rect2386"
|
||||
d="m 213.96569,234.57806 2.18756,-14.42897 15.21982,6.08793 21.49387,29.94828 -20.40591,9.21832 -18.49534,-30.82556 z"
|
||||
style="fill:url(#linearGradient2395);fill-opacity:1;stroke:none;display:inline"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g2649"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="fill:url(#radialGradient2647);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 232.55816,219.5295 -15.92827,0.32199 3.08809,-15.15716 12.84018,14.83517 z"
|
||||
id="path1443"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#812310;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 221.60041,219.29315 -4.41205,0.0782 0.85429,-3.98263 3.55776,3.90445 z"
|
||||
id="path1452"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2643);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 269.44172,159.27421 0.098,8.91471 8.0581,8.72344 7.75906,0.7992 -52.80669,41.84092 -6.66532,-3.30696 -5.08243,-5.618 -1.08987,-5.91194 49.72911,-45.44137 z"
|
||||
id="rect1437"
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2640);fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 268.94766,168.32844 8.3426,8.82719 -51.1007,38.68262 -4.9197,-5.4436 47.6778,-42.06621 z"
|
||||
id="rect1446"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#ffe965;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;display:inline"
|
||||
d="m 285.33776,177.73216 -8.16219,-0.86619 -7.7518,-8.67862 0.0132,-9.14293 8.36213,0.75209 7.18862,9.57682 0.35007,8.35883 z"
|
||||
id="path1440"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#cb391c;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 280.72049,168.46367 0.1644,4.05654 -3.81335,-0.71676 -2.87504,-3.18901 -0.28089,-3.53393 3.85447,-0.16637 2.95041,3.54953 z"
|
||||
id="path1449"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
id="g2657"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="fill:url(#linearGradient2406);fill-opacity:1;stroke:none"
|
||||
d="m 183.88617,256.82796 0.99991,-16.30721 17.2878,8.44012 26.05488,38.00946 -29.28095,-1.13363 -15.06164,-29.00874 z"
|
||||
id="rect2397"
|
||||
sodipodi:nodetypes="cccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2325);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline"
|
||||
d="m 200.90647,238.44836 -8.04601,15.77386 -7.05577,-13.57337 15.10178,-2.20049 z"
|
||||
id="rect2207"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2227);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 201.05389,238.55401 62.11704,24.91912 -7.88689,3.21429 -4.35152,9.30976 1.1716,9.96396 -59.31453,-31.72759 -0.49402,-7.36382 3.09592,-5.82826 5.6624,-2.48746 z"
|
||||
id="rect1328"
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#radialGradient2317);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline"
|
||||
d="m 255.27801,266.53504 7.9241,-3.04772 0.85337,10.24037 -3.9011,8.28983 -8.04601,3.77919 -1.341,-9.63083 4.51064,-9.63084 z"
|
||||
id="rect2204"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2247);fill-opacity:1;stroke:none;display:inline"
|
||||
d="m 195.7549,241.421 59.13059,24.7962 -4.5917,9.76614 -57.48995,-29.00967 2.95106,-5.55267 z"
|
||||
id="rect2210"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#00b527;fill-opacity:1;stroke:none"
|
||||
d="m 255.02263,275.21029 2.08411,-4.1069 2.96459,-1.06995 0.69433,3.37197 -1.76759,3.85723 -3.15516,1.38315 -0.82028,-3.4355 z"
|
||||
id="rect2308"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#258209;fill-opacity:1;stroke:none;display:inline"
|
||||
d="m 186.56849,241.00362 3.54963,-0.47312 -2.02297,3.53926 -1.52666,-3.06614 z"
|
||||
id="rect2327"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 24 KiB |
1
content/data/media_attic/_dummy
Normal file
1
content/data/media_attic/_dummy
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
1
content/data/media_meta/_dummy
Normal file
1
content/data/media_meta/_dummy
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
1
content/data/meta/_dummy
Normal file
1
content/data/meta/_dummy
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
1
content/data/pages/playground/playground.txt
Normal file
1
content/data/pages/playground/playground.txt
Normal file
|
@ -0,0 +1 @@
|
|||
====== PlayGround ======
|
62
content/data/pages/wiki/dokuwiki.txt
Normal file
62
content/data/pages/wiki/dokuwiki.txt
Normal file
|
@ -0,0 +1,62 @@
|
|||
====== DokuWiki ======
|
||||
|
||||
[[doku>wiki:dokuwiki|{{wiki:dokuwiki-128.png }}]] DokuWiki is a simple to use and highly versatile Open Source [[wp>wiki]] software that doesn't require a database. It is loved by users for its clean and readable [[wiki:syntax]]. The ease of maintenance, backup and integration makes it an administrator's favorite. Built in [[doku>acl|access controls]] and [[doku>auth|authentication connectors]] make DokuWiki especially useful in the enterprise context and the large number of [[doku>plugins]] contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki.
|
||||
|
||||
Read the [[doku>manual|DokuWiki Manual]] to unleash the full power of DokuWiki.
|
||||
|
||||
===== Download =====
|
||||
|
||||
DokuWiki is available at https://download.dokuwiki.org/
|
||||
|
||||
|
||||
===== Read More =====
|
||||
|
||||
All documentation and additional information besides the [[syntax|syntax description]] is maintained in the DokuWiki at [[doku>|www.dokuwiki.org]].
|
||||
|
||||
**About DokuWiki**
|
||||
|
||||
* [[doku>features|A feature list]] :!:
|
||||
* [[doku>users|Happy Users]]
|
||||
* [[doku>press|Who wrote about it]]
|
||||
* [[doku>blogroll|What Bloggers think]]
|
||||
* [[https://www.wikimatrix.org/show/DokuWiki|Compare it with other wiki software]]
|
||||
|
||||
**Installing DokuWiki**
|
||||
|
||||
* [[doku>requirements|System Requirements]]
|
||||
* [[https://download.dokuwiki.org/|Download DokuWiki]] :!:
|
||||
* [[doku>changes|Change Log]]
|
||||
* [[doku>Install|How to install or upgrade]] :!:
|
||||
* [[doku>config|Configuration]]
|
||||
|
||||
**Using DokuWiki**
|
||||
|
||||
* [[doku>syntax|Wiki Syntax]]
|
||||
* [[doku>manual|The manual]] :!:
|
||||
* [[doku>FAQ|Frequently Asked Questions (FAQ)]]
|
||||
* [[doku>glossary|Glossary]]
|
||||
|
||||
**Customizing DokuWiki**
|
||||
|
||||
* [[doku>tips|Tips and Tricks]]
|
||||
* [[doku>Template|How to create and use templates]]
|
||||
* [[doku>plugins|Installing plugins]]
|
||||
* [[doku>development|Development Resources]]
|
||||
|
||||
**DokuWiki Feedback and Community**
|
||||
|
||||
* [[doku>newsletter|Subscribe to the newsletter]] :!:
|
||||
* [[doku>mailinglist|Join the mailing list]]
|
||||
* [[https://forum.dokuwiki.org|Check out the user forum]]
|
||||
* [[doku>irc|Talk to other users in the IRC channel]]
|
||||
* [[https://github.com/splitbrain/dokuwiki/issues|Submit bugs and feature wishes]]
|
||||
* [[doku>thanks|Some humble thanks]]
|
||||
|
||||
|
||||
===== Copyright =====
|
||||
|
||||
2004-2020 (c) Andreas Gohr <andi@splitbrain.org>((Please do not contact me for help and support -- use the [[doku>mailinglist]] or [[https://forum.dokuwiki.org|forum]] instead)) and the DokuWiki Community
|
||||
|
||||
The DokuWiki engine is licensed under [[https://www.gnu.org/licenses/gpl.html|GNU General Public License]] Version 2. If you use DokuWiki in your company, consider [[doku>donate|donating]] a few bucks ;-).
|
||||
|
||||
Not sure what this means? See the [[doku>faq:license|FAQ on the Licenses]].
|
525
content/data/pages/wiki/syntax.txt
Normal file
525
content/data/pages/wiki/syntax.txt
Normal file
|
@ -0,0 +1,525 @@
|
|||
====== Formatting Syntax ======
|
||||
|
||||
[[doku>DokuWiki]] supports some simple markup language, which tries to make the datafiles to be as readable as possible. This page contains all possible syntax you may use when editing the pages. Simply have a look at the source of this page by pressing "Edit this page". If you want to try something, just use the [[playground:playground|playground]] page. The simpler markup is easily accessible via [[doku>toolbar|quickbuttons]], too.
|
||||
|
||||
===== Basic Text Formatting =====
|
||||
|
||||
DokuWiki supports **bold**, //italic//, __underlined__ and ''monospaced'' texts. Of course you can **__//''combine''//__** all these.
|
||||
|
||||
DokuWiki supports **bold**, //italic//, __underlined__ and ''monospaced'' texts.
|
||||
Of course you can **__//''combine''//__** all these.
|
||||
|
||||
You can use <sub>subscript</sub> and <sup>superscript</sup>, too.
|
||||
|
||||
You can use <sub>subscript</sub> and <sup>superscript</sup>, too.
|
||||
|
||||
You can mark something as <del>deleted</del> as well.
|
||||
|
||||
You can mark something as <del>deleted</del> as well.
|
||||
|
||||
**Paragraphs** are created from blank lines. If you want to **force a newline** without a paragraph, you can use two backslashes followed by a whitespace or the end of line.
|
||||
|
||||
This is some text with some linebreaks\\ Note that the
|
||||
two backslashes are only recognized at the end of a line\\
|
||||
or followed by\\ a whitespace \\this happens without it.
|
||||
|
||||
This is some text with some linebreaks\\ Note that the
|
||||
two backslashes are only recognized at the end of a line\\
|
||||
or followed by\\ a whitespace \\this happens without it.
|
||||
|
||||
You should use forced newlines only if really needed.
|
||||
|
||||
===== Links =====
|
||||
|
||||
DokuWiki supports multiple ways of creating links.
|
||||
|
||||
==== External ====
|
||||
|
||||
External links are recognized automagically: http://www.google.com or simply www.google.com - You can set the link text as well: [[http://www.google.com|This Link points to google]]. Email addresses like this one: <andi@splitbrain.org> are recognized, too.
|
||||
|
||||
DokuWiki supports multiple ways of creating links. External links are recognized
|
||||
automagically: http://www.google.com or simply www.google.com - You can set
|
||||
link text as well: [[http://www.google.com|This Link points to google]]. Email
|
||||
addresses like this one: <andi@splitbrain.org> are recognized, too.
|
||||
|
||||
==== Internal ====
|
||||
|
||||
Internal links are created by using square brackets. You can either just give a [[pagename]] or use an additional [[pagename|link text]].
|
||||
|
||||
Internal links are created by using square brackets. You can either just give
|
||||
a [[pagename]] or use an additional [[pagename|link text]].
|
||||
|
||||
[[doku>pagename|Wiki pagenames]] are converted to lowercase automatically, special characters are not allowed.
|
||||
|
||||
You can use [[some:namespaces]] by using a colon in the pagename.
|
||||
|
||||
You can use [[some:namespaces]] by using a colon in the pagename.
|
||||
|
||||
For details about namespaces see [[doku>namespaces]].
|
||||
|
||||
Linking to a specific section is possible, too. Just add the section name behind a hash character as known from HTML. This links to [[syntax#internal|this Section]].
|
||||
|
||||
This links to [[syntax#internal|this Section]].
|
||||
|
||||
Notes:
|
||||
|
||||
* Links to [[syntax|existing pages]] are shown in a different style from [[nonexisting]] ones.
|
||||
* DokuWiki does not use [[wp>CamelCase]] to automatically create links by default, but this behavior can be enabled in the [[doku>config]] file. Hint: If DokuWiki is a link, then it's enabled.
|
||||
* When a section's heading is changed, its bookmark changes, too. So don't rely on section linking too much.
|
||||
|
||||
==== Interwiki ====
|
||||
|
||||
DokuWiki supports [[doku>Interwiki]] links. These are quick links to other Wikis. For example this is a link to Wikipedia's page about Wikis: [[wp>Wiki]].
|
||||
|
||||
DokuWiki supports [[doku>Interwiki]] links. These are quick links to other Wikis.
|
||||
For example this is a link to Wikipedia's page about Wikis: [[wp>Wiki]].
|
||||
|
||||
==== Windows Shares ====
|
||||
|
||||
Windows shares like [[\\server\share|this]] are recognized, too. Please note that these only make sense in a homogeneous user group like a corporate [[wp>Intranet]].
|
||||
|
||||
Windows Shares like [[\\server\share|this]] are recognized, too.
|
||||
|
||||
Notes:
|
||||
|
||||
* For security reasons direct browsing of windows shares only works in Microsoft Internet Explorer per default (and only in the "local zone").
|
||||
* For Mozilla and Firefox it can be enabled through different workaround mentioned in the [[http://kb.mozillazine.org/Links_to_local_pages_do_not_work|Mozilla Knowledge Base]]. However, there will still be a JavaScript warning about trying to open a Windows Share. To remove this warning (for all users), put the following line in ''conf/lang/en/lang.php'' (more details at [[doku>localization#changing_some_localized_texts_and_strings_in_your_installation|localization]]): <code - conf/lang/en/lang.php>
|
||||
<?php
|
||||
/**
|
||||
* Customization of the english language file
|
||||
* Copy only the strings that needs to be modified
|
||||
*/
|
||||
$lang['js']['nosmblinks'] = '';
|
||||
</code>
|
||||
|
||||
==== Image Links ====
|
||||
|
||||
You can also use an image to link to another internal or external page by combining the syntax for links and [[#images_and_other_files|images]] (see below) like this:
|
||||
|
||||
[[http://php.net|{{wiki:dokuwiki-128.png}}]]
|
||||
|
||||
[[http://php.net|{{wiki:dokuwiki-128.png}}]]
|
||||
|
||||
Please note: The image formatting is the only formatting syntax accepted in link names.
|
||||
|
||||
The whole [[#images_and_other_files|image]] and [[#links|link]] syntax is supported (including image resizing, internal and external images and URLs and interwiki links).
|
||||
|
||||
===== Footnotes =====
|
||||
|
||||
You can add footnotes ((This is a footnote)) by using double parentheses.
|
||||
|
||||
You can add footnotes ((This is a footnote)) by using double parentheses.
|
||||
|
||||
===== Sectioning =====
|
||||
|
||||
You can use up to five different levels of headlines to structure your content. If you have more than three headlines, a table of contents is generated automatically -- this can be disabled by including the string ''<nowiki>~~NOTOC~~</nowiki>'' in the document.
|
||||
|
||||
==== Headline Level 3 ====
|
||||
=== Headline Level 4 ===
|
||||
== Headline Level 5 ==
|
||||
|
||||
==== Headline Level 3 ====
|
||||
=== Headline Level 4 ===
|
||||
== Headline Level 5 ==
|
||||
|
||||
By using four or more dashes, you can make a horizontal line:
|
||||
|
||||
----
|
||||
|
||||
===== Media Files =====
|
||||
|
||||
You can include external and internal [[doku>images|images, videos and audio files]] with curly brackets. Optionally you can specify the size of them.
|
||||
|
||||
Real size: {{wiki:dokuwiki-128.png}}
|
||||
|
||||
Resize to given width: {{wiki:dokuwiki-128.png?50}}
|
||||
|
||||
Resize to given width and height((when the aspect ratio of the given width and height doesn't match that of the image, it will be cropped to the new ratio before resizing)): {{wiki:dokuwiki-128.png?200x50}}
|
||||
|
||||
Resized external image: {{https://secure.php.net/images/php.gif?200x50}}
|
||||
|
||||
Real size: {{wiki:dokuwiki-128.png}}
|
||||
Resize to given width: {{wiki:dokuwiki-128.png?50}}
|
||||
Resize to given width and height: {{wiki:dokuwiki-128.png?200x50}}
|
||||
Resized external image: {{https://secure.php.net/images/php.gif?200x50}}
|
||||
|
||||
|
||||
By using left or right whitespaces you can choose the alignment.
|
||||
|
||||
{{ wiki:dokuwiki-128.png}}
|
||||
|
||||
{{wiki:dokuwiki-128.png }}
|
||||
|
||||
{{ wiki:dokuwiki-128.png }}
|
||||
|
||||
{{ wiki:dokuwiki-128.png}}
|
||||
{{wiki:dokuwiki-128.png }}
|
||||
{{ wiki:dokuwiki-128.png }}
|
||||
|
||||
Of course, you can add a title (displayed as a tooltip by most browsers), too.
|
||||
|
||||
{{ wiki:dokuwiki-128.png |This is the caption}}
|
||||
|
||||
{{ wiki:dokuwiki-128.png |This is the caption}}
|
||||
|
||||
For linking an image to another page see [[#Image Links]] above.
|
||||
|
||||
==== Supported Media Formats ====
|
||||
|
||||
DokuWiki can embed the following media formats directly.
|
||||
|
||||
| Image | ''gif'', ''jpg'', ''png'' |
|
||||
| Video | ''webm'', ''ogv'', ''mp4'' |
|
||||
| Audio | ''ogg'', ''mp3'', ''wav'' |
|
||||
| Flash | ''swf'' |
|
||||
|
||||
If you specify a filename that is not a supported media format, then it will be displayed as a link instead.
|
||||
|
||||
By adding ''?linkonly'' you provide a link to the media without displaying it inline
|
||||
|
||||
{{wiki:dokuwiki-128.png?linkonly}}
|
||||
|
||||
{{wiki:dokuwiki-128.png?linkonly}} This is just a link to the image.
|
||||
|
||||
==== Fallback Formats ====
|
||||
|
||||
Unfortunately not all browsers understand all video and audio formats. To mitigate the problem, you can upload your file in different formats for maximum browser compatibility.
|
||||
|
||||
For example consider this embedded mp4 video:
|
||||
|
||||
{{video.mp4|A funny video}}
|
||||
|
||||
When you upload a ''video.webm'' and ''video.ogv'' next to the referenced ''video.mp4'', DokuWiki will automatically add them as alternatives so that one of the three files is understood by your browser.
|
||||
|
||||
Additionally DokuWiki supports a "poster" image which will be shown before the video has started. That image needs to have the same filename as the video and be either a jpg or png file. In the example above a ''video.jpg'' file would work.
|
||||
|
||||
===== Lists =====
|
||||
|
||||
Dokuwiki supports ordered and unordered lists. To create a list item, indent your text by two spaces and use a ''*'' for unordered lists or a ''-'' for ordered ones.
|
||||
|
||||
* This is a list
|
||||
* The second item
|
||||
* You may have different levels
|
||||
* Another item
|
||||
|
||||
- The same list but ordered
|
||||
- Another item
|
||||
- Just use indention for deeper levels
|
||||
- That's it
|
||||
|
||||
<code>
|
||||
* This is a list
|
||||
* The second item
|
||||
* You may have different levels
|
||||
* Another item
|
||||
|
||||
- The same list but ordered
|
||||
- Another item
|
||||
- Just use indention for deeper levels
|
||||
- That's it
|
||||
</code>
|
||||
|
||||
Also take a look at the [[doku>faq:lists|FAQ on list items]].
|
||||
|
||||
===== Text Conversions =====
|
||||
|
||||
DokuWiki can convert certain pre-defined characters or strings into images or other text or HTML.
|
||||
|
||||
The text to image conversion is mainly done for smileys. And the text to HTML conversion is used for typography replacements, but can be configured to use other HTML as well.
|
||||
|
||||
==== Text to Image Conversions ====
|
||||
|
||||
DokuWiki converts commonly used [[wp>emoticon]]s to their graphical equivalents. Those [[doku>Smileys]] and other images can be configured and extended. Here is an overview of Smileys included in DokuWiki:
|
||||
|
||||
* 8-) %% 8-) %%
|
||||
* 8-O %% 8-O %%
|
||||
* :-( %% :-( %%
|
||||
* :-) %% :-) %%
|
||||
* =) %% =) %%
|
||||
* :-/ %% :-/ %%
|
||||
* :-\ %% :-\ %%
|
||||
* :-? %% :-? %%
|
||||
* :-D %% :-D %%
|
||||
* :-P %% :-P %%
|
||||
* :-O %% :-O %%
|
||||
* :-X %% :-X %%
|
||||
* :-| %% :-| %%
|
||||
* ;-) %% ;-) %%
|
||||
* ^_^ %% ^_^ %%
|
||||
* :?: %% :?: %%
|
||||
* :!: %% :!: %%
|
||||
* LOL %% LOL %%
|
||||
* FIXME %% FIXME %%
|
||||
* DELETEME %% DELETEME %%
|
||||
|
||||
==== Text to HTML Conversions ====
|
||||
|
||||
Typography: [[DokuWiki]] can convert simple text characters to their typographically correct entities. Here is an example of recognized characters.
|
||||
|
||||
-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r)
|
||||
"He thought 'It's a man's world'..."
|
||||
|
||||
<code>
|
||||
-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r)
|
||||
"He thought 'It's a man's world'..."
|
||||
</code>
|
||||
|
||||
The same can be done to produce any kind of HTML, it just needs to be added to the [[doku>entities|pattern file]].
|
||||
|
||||
There are three exceptions which do not come from that pattern file: multiplication entity (640x480), 'single' and "double quotes". They can be turned off through a [[doku>config:typography|config option]].
|
||||
|
||||
===== Quoting =====
|
||||
|
||||
Some times you want to mark some text to show it's a reply or comment. You can use the following syntax:
|
||||
|
||||
<code>
|
||||
I think we should do it
|
||||
|
||||
> No we shouldn't
|
||||
|
||||
>> Well, I say we should
|
||||
|
||||
> Really?
|
||||
|
||||
>> Yes!
|
||||
|
||||
>>> Then lets do it!
|
||||
</code>
|
||||
|
||||
I think we should do it
|
||||
|
||||
> No we shouldn't
|
||||
|
||||
>> Well, I say we should
|
||||
|
||||
> Really?
|
||||
|
||||
>> Yes!
|
||||
|
||||
>>> Then lets do it!
|
||||
|
||||
===== Tables =====
|
||||
|
||||
DokuWiki supports a simple syntax to create tables.
|
||||
|
||||
^ Heading 1 ^ Heading 2 ^ Heading 3 ^
|
||||
| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
|
||||
| Row 2 Col 1 | some colspan (note the double pipe) ||
|
||||
| Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 |
|
||||
|
||||
Table rows have to start and end with a ''|'' for normal rows or a ''^'' for headers.
|
||||
|
||||
^ Heading 1 ^ Heading 2 ^ Heading 3 ^
|
||||
| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
|
||||
| Row 2 Col 1 | some colspan (note the double pipe) ||
|
||||
| Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 |
|
||||
|
||||
To connect cells horizontally, just make the next cell completely empty as shown above. Be sure to have always the same amount of cell separators!
|
||||
|
||||
Vertical tableheaders are possible, too.
|
||||
|
||||
| ^ Heading 1 ^ Heading 2 ^
|
||||
^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 |
|
||||
^ Heading 4 | no colspan this time | |
|
||||
^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 |
|
||||
|
||||
As you can see, it's the cell separator before a cell which decides about the formatting:
|
||||
|
||||
| ^ Heading 1 ^ Heading 2 ^
|
||||
^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 |
|
||||
^ Heading 4 | no colspan this time | |
|
||||
^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 |
|
||||
|
||||
You can have rowspans (vertically connected cells) by adding ''%%:::%%'' into the cells below the one to which they should connect.
|
||||
|
||||
^ Heading 1 ^ Heading 2 ^ Heading 3 ^
|
||||
| Row 1 Col 1 | this cell spans vertically | Row 1 Col 3 |
|
||||
| Row 2 Col 1 | ::: | Row 2 Col 3 |
|
||||
| Row 3 Col 1 | ::: | Row 2 Col 3 |
|
||||
|
||||
Apart from the rowspan syntax those cells should not contain anything else.
|
||||
|
||||
^ Heading 1 ^ Heading 2 ^ Heading 3 ^
|
||||
| Row 1 Col 1 | this cell spans vertically | Row 1 Col 3 |
|
||||
| Row 2 Col 1 | ::: | Row 2 Col 3 |
|
||||
| Row 3 Col 1 | ::: | Row 2 Col 3 |
|
||||
|
||||
You can align the table contents, too. Just add at least two whitespaces at the opposite end of your text: Add two spaces on the left to align right, two spaces on the right to align left and two spaces at least at both ends for centered text.
|
||||
|
||||
^ Table with alignment ^^^
|
||||
| right| center |left |
|
||||
|left | right| center |
|
||||
| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |
|
||||
|
||||
This is how it looks in the source:
|
||||
|
||||
^ Table with alignment ^^^
|
||||
| right| center |left |
|
||||
|left | right| center |
|
||||
| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |
|
||||
|
||||
Note: Vertical alignment is not supported.
|
||||
|
||||
===== No Formatting =====
|
||||
|
||||
If you need to display text exactly like it is typed (without any formatting), enclose the area either with ''%%<nowiki>%%'' tags or even simpler, with double percent signs ''<nowiki>%%</nowiki>''.
|
||||
|
||||
<nowiki>
|
||||
This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it.
|
||||
</nowiki>
|
||||
The same is true for %%//__this__ text// with a smiley ;-)%%.
|
||||
|
||||
<nowiki>
|
||||
This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it.
|
||||
</nowiki>
|
||||
The same is true for %%//__this__ text// with a smiley ;-)%%.
|
||||
|
||||
===== Code Blocks =====
|
||||
|
||||
You can include code blocks into your documents by either indenting them by at least two spaces (like used for the previous examples) or by using the tags ''%%<code>%%'' or ''%%<file>%%''.
|
||||
|
||||
This is text is indented by two spaces.
|
||||
|
||||
<code>
|
||||
This is preformatted code all spaces are preserved: like <-this
|
||||
</code>
|
||||
|
||||
<file>
|
||||
This is pretty much the same, but you could use it to show that you quoted a file.
|
||||
</file>
|
||||
|
||||
Those blocks were created by this source:
|
||||
|
||||
This is text is indented by two spaces.
|
||||
|
||||
<code>
|
||||
This is preformatted code all spaces are preserved: like <-this
|
||||
</code>
|
||||
|
||||
<file>
|
||||
This is pretty much the same, but you could use it to show that you quoted a file.
|
||||
</file>
|
||||
|
||||
==== Syntax Highlighting ====
|
||||
|
||||
[[wiki:DokuWiki]] can highlight sourcecode, which makes it easier to read. It uses the [[http://qbnz.com/highlighter/|GeSHi]] Generic Syntax Highlighter -- so any language supported by GeSHi is supported. The syntax uses the same code and file blocks described in the previous section, but this time the name of the language syntax to be highlighted is included inside the tag, e.g. ''<nowiki><code java></nowiki>'' or ''<nowiki><file java></nowiki>''.
|
||||
|
||||
<code java>
|
||||
/**
|
||||
* The HelloWorldApp class implements an application that
|
||||
* simply displays "Hello World!" to the standard output.
|
||||
*/
|
||||
class HelloWorldApp {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hello World!"); //Display the string.
|
||||
}
|
||||
}
|
||||
</code>
|
||||
|
||||
The following language strings are currently recognized: //4cs 6502acme 6502kickass 6502tasm 68000devpac abap actionscript3 actionscript ada aimms algol68 apache applescript apt_sources arm asm asp asymptote autoconf autohotkey autoit avisynth awk bascomavr bash basic4gl batch bf biblatex bibtex blitzbasic bnf boo caddcl cadlisp ceylon cfdg cfm chaiscript chapel cil c_loadrunner clojure c_mac cmake cobol coffeescript c cpp cpp-qt cpp-winapi csharp css cuesheet c_winapi dart dcl dcpu16 dcs delphi diff div dos dot d ecmascript eiffel email epc e erlang euphoria ezt f1 falcon fo fortran freebasic freeswitch fsharp gambas gdb genero genie gettext glsl gml gnuplot go groovy gwbasic haskell haxe hicest hq9plus html html4strict html5 icon idl ini inno intercal io ispfpanel java5 java javascript jcl j jquery julia kixtart klonec klonecpp kotlin latex lb ldif lisp llvm locobasic logtalk lolcode lotusformulas lotusscript lscript lsl2 lua m68k magiksf make mapbasic mathematica matlab mercury metapost mirc mk-61 mmix modula2 modula3 mpasm mxml mysql nagios netrexx newlisp nginx nimrod nsis oberon2 objc objeck ocaml-brief ocaml octave oobas oorexx oracle11 oracle8 oxygene oz parasail parigp pascal pcre perl6 perl per pf phix php-brief php pic16 pike pixelbender pli plsql postgresql postscript povray powerbuilder powershell proftpd progress prolog properties providex purebasic pycon pys60 python qbasic qml q racket rails rbs rebol reg rexx robots roff rpmspec rsplus ruby rust sas sass scala scheme scilab scl sdlbasic smalltalk smarty spark sparql sql sshconfig standardml stonescript swift systemverilog tclegg tcl teraterm texgraph text thinbasic tsql twig typoscript unicon upc urbi uscript vala vbnet vb vbscript vedit verilog vhdl vim visualfoxpro visualprolog whitespace whois winbatch wolfram xbasic xml xojo xorg_conf xpp yaml z80 zxbasic//
|
||||
|
||||
There are additional [[doku>syntax_highlighting|advanced options]] available for syntax highlighting, such as highlighting lines or adding line numbers.
|
||||
|
||||
==== Downloadable Code Blocks ====
|
||||
|
||||
When you use the ''%%<code>%%'' or ''%%<file>%%'' syntax as above, you might want to make the shown code available for download as well. You can do this by specifying a file name after language code like this:
|
||||
|
||||
<code>
|
||||
<file php myexample.php>
|
||||
<?php echo "hello world!"; ?>
|
||||
</file>
|
||||
</code>
|
||||
|
||||
<file php myexample.php>
|
||||
<?php echo "hello world!"; ?>
|
||||
</file>
|
||||
|
||||
If you don't want any highlighting but want a downloadable file, specify a dash (''-'') as the language code: ''%%<code - myfile.foo>%%''.
|
||||
|
||||
|
||||
===== Embedding HTML and PHP =====
|
||||
|
||||
You can embed raw HTML or PHP code into your documents by using the ''%%<html>%%'' or ''%%<php>%%'' tags. (Use uppercase tags if you need to enclose block level elements.)
|
||||
|
||||
HTML example:
|
||||
|
||||
<code>
|
||||
<html>
|
||||
This is some <span style="color:red;font-size:150%;">inline HTML</span>
|
||||
</html>
|
||||
<HTML>
|
||||
<p style="border:2px dashed red;">And this is some block HTML</p>
|
||||
</HTML>
|
||||
</code>
|
||||
|
||||
<html>
|
||||
This is some <span style="color:red;font-size:150%;">inline HTML</span>
|
||||
</html>
|
||||
<HTML>
|
||||
<p style="border:2px dashed red;">And this is some block HTML</p>
|
||||
</HTML>
|
||||
|
||||
PHP example:
|
||||
|
||||
<code>
|
||||
<php>
|
||||
echo 'The PHP version: ';
|
||||
echo phpversion();
|
||||
echo ' (generated inline HTML)';
|
||||
</php>
|
||||
<PHP>
|
||||
echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
|
||||
echo '<td>'.phpversion().'</td>';
|
||||
echo '</tr></table>';
|
||||
</PHP>
|
||||
</code>
|
||||
|
||||
<php>
|
||||
echo 'The PHP version: ';
|
||||
echo phpversion();
|
||||
echo ' (inline HTML)';
|
||||
</php>
|
||||
<PHP>
|
||||
echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
|
||||
echo '<td>'.phpversion().'</td>';
|
||||
echo '</tr></table>';
|
||||
</PHP>
|
||||
|
||||
**Please Note**: HTML and PHP embedding is disabled by default in the configuration. If disabled, the code is displayed instead of executed.
|
||||
|
||||
===== RSS/ATOM Feed Aggregation =====
|
||||
[[DokuWiki]] can integrate data from external XML feeds. For parsing the XML feeds, [[http://simplepie.org/|SimplePie]] is used. All formats understood by SimplePie can be used in DokuWiki as well. You can influence the rendering by multiple additional space separated parameters:
|
||||
|
||||
^ Parameter ^ Description ^
|
||||
| any number | will be used as maximum number items to show, defaults to 8 |
|
||||
| reverse | display the last items in the feed first |
|
||||
| author | show item authors names |
|
||||
| date | show item dates |
|
||||
| description| show the item description. If [[doku>config:htmlok|HTML]] is disabled all tags will be stripped |
|
||||
| nosort | do not sort the items in the feed |
|
||||
| //n//[dhm] | refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours). |
|
||||
|
||||
The refresh period defaults to 4 hours. Any value below 10 minutes will be treated as 10 minutes. [[wiki:DokuWiki]] will generally try to supply a cached version of a page, obviously this is inappropriate when the page contains dynamic external content. The parameter tells [[wiki:DokuWiki]] to re-render the page if it is more than //refresh period// since the page was last rendered.
|
||||
|
||||
By default the feed will be sorted by date, newest items first. You can sort it by oldest first using the ''reverse'' parameter, or display the feed as is with ''nosort''.
|
||||
|
||||
**Example:**
|
||||
|
||||
{{rss>http://slashdot.org/index.rss 5 author date 1h }}
|
||||
|
||||
{{rss>http://slashdot.org/index.rss 5 author date 1h }}
|
||||
|
||||
|
||||
===== Control Macros =====
|
||||
|
||||
Some syntax influences how DokuWiki renders a page without creating any output it self. The following control macros are availble:
|
||||
|
||||
^ Macro ^ Description |
|
||||
| %%~~NOTOC~~%% | If this macro is found on the page, no table of contents will be created |
|
||||
| %%~~NOCACHE~~%% | DokuWiki caches all output by default. Sometimes this might not be wanted (eg. when the %%<php>%% syntax above is used), adding this macro will force DokuWiki to rerender a page on every call |
|
||||
|
||||
===== Syntax Plugins =====
|
||||
|
||||
DokuWiki's syntax can be extended by [[doku>plugins|Plugins]]. How the installed plugins are used is described on their appropriate description pages. The following syntax plugins are available in this particular DokuWiki installation:
|
||||
|
||||
~~INFO:syntaxplugins~~
|
30
content/data/pages/wiki/welcome.txt
Normal file
30
content/data/pages/wiki/welcome.txt
Normal file
|
@ -0,0 +1,30 @@
|
|||
====== Welcome to your new DokuWiki ======
|
||||
|
||||
Congratulations, your wiki is now up and running. Here are a few more tips to get you started.
|
||||
|
||||
Enjoy your work with DokuWiki,\\
|
||||
-- the developers
|
||||
|
||||
===== Create your first pages =====
|
||||
|
||||
Your wiki needs to have a start page. As long as it doesn't exist, this link will be red: [[:start]].
|
||||
|
||||
Go on, follow that link and create the page. If you need help with using the syntax you can always refer to the [[wiki:syntax|syntax page]].
|
||||
|
||||
You might also want to use a sidebar. To create it, just edit the [[:sidebar]] page. Everything in that page will be shown in a margin column on the side. Read our [[doku>faq:sidebar|FAQ on sidebars]] to learn more.
|
||||
|
||||
Please be aware that not all templates support sidebars.
|
||||
|
||||
===== Customize your Wiki =====
|
||||
|
||||
Once you're comfortable with creating and editing pages you might want to have a look at the [[this>doku.php?do=admin&page=config|configuration settings]] (be sure to login as superuser first).
|
||||
|
||||
You may also want to see what [[doku>plugins|plugins]] and [[doku>templates|templates]] are available at DokuWiki.org to extend the functionality and looks of your DokuWiki installation.
|
||||
|
||||
===== Join the Community =====
|
||||
|
||||
DokuWiki is an Open Source project that thrives through user contributions. A good way to stay informed on what's going on and to get useful tips in using DokuWiki is subscribing to the [[doku>newsletter]].
|
||||
|
||||
The [[https://forum.dokuwiki.org|DokuWiki User Forum]] is an excellent way to get in contact with other DokuWiki users and is just one of the many ways to get [[doku>faq:support|support]].
|
||||
|
||||
Of course we'd be more than happy to have you [[doku>teams:getting_involved|getting involved]] with DokuWiki.
|
1
content/data/tmp/_dummy
Normal file
1
content/data/tmp/_dummy
Normal file
|
@ -0,0 +1 @@
|
|||
You can safely delete this file.
|
127
content/doku.php
Normal file
127
content/doku.php
Normal file
|
@ -0,0 +1,127 @@
|
|||
<?php
|
||||
/**
|
||||
* DokuWiki mainscript
|
||||
*
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*
|
||||
* @global Input $INPUT
|
||||
*/
|
||||
|
||||
// update message version - always use a string to avoid localized floats!
|
||||
use dokuwiki\Extension\Event;
|
||||
|
||||
$updateVersion = "51.3";
|
||||
|
||||
// xdebug_start_profiling();
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/');
|
||||
|
||||
// define all DokuWiki globals here (needed within test requests but also helps to keep track)
|
||||
global $ACT, $INPUT, $QUERY, $ID, $REV, $DATE_AT, $IDX,
|
||||
$DATE, $RANGE, $HIGH, $TEXT, $PRE, $SUF, $SUM, $INFO, $JSINFO;
|
||||
|
||||
|
||||
if(isset($_SERVER['HTTP_X_DOKUWIKI_DO'])) {
|
||||
$ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO']));
|
||||
} elseif(!empty($_REQUEST['idx'])) {
|
||||
$ACT = 'index';
|
||||
} elseif(isset($_REQUEST['do'])) {
|
||||
$ACT = $_REQUEST['do'];
|
||||
} else {
|
||||
$ACT = 'show';
|
||||
}
|
||||
|
||||
// load and initialize the core system
|
||||
require_once(DOKU_INC.'inc/init.php');
|
||||
|
||||
//import variables
|
||||
$INPUT->set('id', str_replace("\xC2\xAD", '', $INPUT->str('id'))); //soft-hyphen
|
||||
$QUERY = trim($INPUT->str('q'));
|
||||
$ID = getID();
|
||||
|
||||
$REV = $INPUT->int('rev');
|
||||
$DATE_AT = $INPUT->str('at');
|
||||
$IDX = $INPUT->str('idx');
|
||||
$DATE = $INPUT->int('date');
|
||||
$RANGE = $INPUT->str('range');
|
||||
$HIGH = $INPUT->param('s');
|
||||
if(empty($HIGH)) $HIGH = getGoogleQuery();
|
||||
|
||||
if($INPUT->post->has('wikitext')) {
|
||||
$TEXT = cleanText($INPUT->post->str('wikitext'));
|
||||
}
|
||||
$PRE = cleanText(substr($INPUT->post->str('prefix'), 0, -1));
|
||||
$SUF = cleanText($INPUT->post->str('suffix'));
|
||||
$SUM = $INPUT->post->str('summary');
|
||||
|
||||
|
||||
//parse DATE_AT
|
||||
if($DATE_AT) {
|
||||
$date_parse = strtotime($DATE_AT);
|
||||
if($date_parse) {
|
||||
$DATE_AT = $date_parse;
|
||||
} else { // check for UNIX Timestamp
|
||||
$date_parse = @date('Ymd',$DATE_AT);
|
||||
if(!$date_parse || $date_parse === '19700101') {
|
||||
msg(sprintf($lang['unable_to_parse_date'], hsc($DATE_AT)));
|
||||
$DATE_AT = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//check for existing $REV related to $DATE_AT
|
||||
if($DATE_AT) {
|
||||
$pagelog = new \dokuwiki\ChangeLog\PageChangeLog($ID);
|
||||
$rev_t = $pagelog->getLastRevisionAt($DATE_AT);
|
||||
if($rev_t === '') { //current revision
|
||||
$REV = null;
|
||||
$DATE_AT = null;
|
||||
} else if ($rev_t === false) { //page did not exist
|
||||
$rev_n = $pagelog->getRelativeRevision($DATE_AT,+1);
|
||||
msg(sprintf($lang['page_nonexist_rev'],
|
||||
strftime($conf['dformat'],$DATE_AT),
|
||||
wl($ID, array('rev' => $rev_n)),
|
||||
strftime($conf['dformat'],$rev_n)));
|
||||
$REV = $DATE_AT; //will result in a page not exists message
|
||||
} else {
|
||||
$REV = $rev_t;
|
||||
}
|
||||
}
|
||||
|
||||
//make infos about the selected page available
|
||||
$INFO = pageinfo();
|
||||
|
||||
// handle debugging
|
||||
if($conf['allowdebug'] && $ACT == 'debug') {
|
||||
html_debug();
|
||||
exit;
|
||||
}
|
||||
|
||||
//send 404 for missing pages if configured or ID has special meaning to bots
|
||||
if(!$INFO['exists'] &&
|
||||
($conf['send404'] || preg_match('/^(robots\.txt|sitemap\.xml(\.gz)?|favicon\.ico|crossdomain\.xml)$/', $ID)) &&
|
||||
($ACT == 'show' || (!is_array($ACT) && substr($ACT, 0, 7) == 'export_'))
|
||||
) {
|
||||
header('HTTP/1.0 404 Not Found');
|
||||
}
|
||||
|
||||
//prepare breadcrumbs (initialize a static var)
|
||||
if($conf['breadcrumbs']) breadcrumbs();
|
||||
|
||||
// check upstream
|
||||
checkUpdateMessages();
|
||||
|
||||
$tmp = array(); // No event data
|
||||
Event::createAndTrigger('DOKUWIKI_STARTED', $tmp);
|
||||
|
||||
//close session
|
||||
session_write_close();
|
||||
|
||||
//do the work (picks up what to do from global env)
|
||||
act_dispatch();
|
||||
|
||||
$tmp = array(); // No event data
|
||||
Event::createAndTrigger('DOKUWIKI_DONE', $tmp);
|
||||
|
||||
// xdebug_dump_function_profile(1);
|
521
content/feed.php
Normal file
521
content/feed.php
Normal file
|
@ -0,0 +1,521 @@
|
|||
<?php
|
||||
/**
|
||||
* XML feed export
|
||||
*
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*
|
||||
* @global array $conf
|
||||
* @global Input $INPUT
|
||||
*/
|
||||
|
||||
use dokuwiki\Cache\Cache;
|
||||
use dokuwiki\ChangeLog\MediaChangeLog;
|
||||
use dokuwiki\ChangeLog\PageChangeLog;
|
||||
use dokuwiki\Extension\AuthPlugin;
|
||||
use dokuwiki\Extension\Event;
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/');
|
||||
require_once(DOKU_INC.'inc/init.php');
|
||||
|
||||
//close session
|
||||
session_write_close();
|
||||
|
||||
//feed disabled?
|
||||
if(!actionOK('rss')) {
|
||||
http_status(404);
|
||||
echo '<error>RSS feed is disabled.</error>';
|
||||
exit;
|
||||
}
|
||||
|
||||
// get params
|
||||
$opt = rss_parseOptions();
|
||||
|
||||
// the feed is dynamic - we need a cache for each combo
|
||||
// (but most people just use the default feed so it's still effective)
|
||||
$key = join('', array_values($opt)).'$'.$_SERVER['REMOTE_USER'].'$'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'];
|
||||
$cache = new Cache($key, '.feed');
|
||||
|
||||
// prepare cache depends
|
||||
$depends['files'] = getConfigFiles('main');
|
||||
$depends['age'] = $conf['rss_update'];
|
||||
$depends['purge'] = $INPUT->bool('purge');
|
||||
|
||||
// check cacheage and deliver if nothing has changed since last
|
||||
// time or the update interval has not passed, also handles conditional requests
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
header('Pragma: public');
|
||||
header('Content-Type: application/xml; charset=utf-8');
|
||||
header('X-Robots-Tag: noindex');
|
||||
if($cache->useCache($depends)) {
|
||||
http_conditionalRequest($cache->getTime());
|
||||
if($conf['allowdebug']) header("X-CacheUsed: $cache->cache");
|
||||
print $cache->retrieveCache();
|
||||
exit;
|
||||
} else {
|
||||
http_conditionalRequest(time());
|
||||
}
|
||||
|
||||
// create new feed
|
||||
$rss = new UniversalFeedCreator();
|
||||
$rss->title = $conf['title'].(($opt['namespace']) ? ' '.$opt['namespace'] : '');
|
||||
$rss->link = DOKU_URL;
|
||||
$rss->syndicationURL = DOKU_URL.'feed.php';
|
||||
$rss->cssStyleSheet = DOKU_URL.'lib/exe/css.php?s=feed';
|
||||
|
||||
$image = new FeedImage();
|
||||
$image->title = $conf['title'];
|
||||
$image->url = tpl_getMediaFile(array(':wiki:favicon.ico', ':favicon.ico', 'images/favicon.ico'), true);
|
||||
$image->link = DOKU_URL;
|
||||
$rss->image = $image;
|
||||
|
||||
$data = null;
|
||||
$modes = array(
|
||||
'list' => 'rssListNamespace',
|
||||
'search' => 'rssSearch',
|
||||
'recent' => 'rssRecentChanges'
|
||||
);
|
||||
if(isset($modes[$opt['feed_mode']])) {
|
||||
$data = $modes[$opt['feed_mode']]($opt);
|
||||
} else {
|
||||
$eventData = array(
|
||||
'opt' => &$opt,
|
||||
'data' => &$data,
|
||||
);
|
||||
$event = new Event('FEED_MODE_UNKNOWN', $eventData);
|
||||
if($event->advise_before(true)) {
|
||||
echo sprintf('<error>Unknown feed mode %s</error>', hsc($opt['feed_mode']));
|
||||
exit;
|
||||
}
|
||||
$event->advise_after();
|
||||
}
|
||||
|
||||
rss_buildItems($rss, $data, $opt);
|
||||
$feed = $rss->createFeed($opt['feed_type']);
|
||||
|
||||
// save cachefile
|
||||
$cache->storeCache($feed);
|
||||
|
||||
// finally deliver
|
||||
print $feed;
|
||||
|
||||
// ---------------------------------------------------------------- //
|
||||
|
||||
/**
|
||||
* Get URL parameters and config options and return an initialized option array
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function rss_parseOptions() {
|
||||
global $conf;
|
||||
global $INPUT;
|
||||
|
||||
$opt = array();
|
||||
|
||||
foreach(array(
|
||||
// Basic feed properties
|
||||
// Plugins may probably want to add new values to these
|
||||
// properties for implementing own feeds
|
||||
|
||||
// One of: list, search, recent
|
||||
'feed_mode' => array('str', 'mode', 'recent'),
|
||||
// One of: diff, page, rev, current
|
||||
'link_to' => array('str', 'linkto', $conf['rss_linkto']),
|
||||
// One of: abstract, diff, htmldiff, html
|
||||
'item_content' => array('str', 'content', $conf['rss_content']),
|
||||
|
||||
// Special feed properties
|
||||
// These are only used by certain feed_modes
|
||||
|
||||
// String, used for feed title, in list and rc mode
|
||||
'namespace' => array('str', 'ns', null),
|
||||
// Positive integer, only used in rc mode
|
||||
'items' => array('int', 'num', $conf['recent']),
|
||||
// Boolean, only used in rc mode
|
||||
'show_minor' => array('bool', 'minor', false),
|
||||
// Boolean, only used in rc mode
|
||||
'only_new' => array('bool', 'onlynewpages', false),
|
||||
// String, only used in list mode
|
||||
'sort' => array('str', 'sort', 'natural'),
|
||||
// String, only used in search mode
|
||||
'search_query' => array('str', 'q', null),
|
||||
// One of: pages, media, both
|
||||
'content_type' => array('str', 'view', $conf['rss_media'])
|
||||
|
||||
) as $name => $val) {
|
||||
$opt[$name] = $INPUT->{$val[0]}($val[1], $val[2], true);
|
||||
}
|
||||
|
||||
$opt['items'] = max(0, (int) $opt['items']);
|
||||
$opt['show_minor'] = (bool) $opt['show_minor'];
|
||||
$opt['only_new'] = (bool) $opt['only_new'];
|
||||
$opt['sort'] = valid_input_set('sort', array('default' => 'natural', 'date'), $opt);
|
||||
|
||||
$opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none');
|
||||
|
||||
$type = $INPUT->valid(
|
||||
'type',
|
||||
array( 'rss', 'rss2', 'atom', 'atom1', 'rss1'),
|
||||
$conf['rss_type']
|
||||
);
|
||||
switch($type) {
|
||||
case 'rss':
|
||||
$opt['feed_type'] = 'RSS0.91';
|
||||
$opt['mime_type'] = 'text/xml';
|
||||
break;
|
||||
case 'rss2':
|
||||
$opt['feed_type'] = 'RSS2.0';
|
||||
$opt['mime_type'] = 'text/xml';
|
||||
break;
|
||||
case 'atom':
|
||||
$opt['feed_type'] = 'ATOM0.3';
|
||||
$opt['mime_type'] = 'application/xml';
|
||||
break;
|
||||
case 'atom1':
|
||||
$opt['feed_type'] = 'ATOM1.0';
|
||||
$opt['mime_type'] = 'application/atom+xml';
|
||||
break;
|
||||
default:
|
||||
$opt['feed_type'] = 'RSS1.0';
|
||||
$opt['mime_type'] = 'application/xml';
|
||||
}
|
||||
|
||||
$eventData = array(
|
||||
'opt' => &$opt,
|
||||
);
|
||||
Event::createAndTrigger('FEED_OPTS_POSTPROCESS', $eventData);
|
||||
return $opt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add recent changed pages to a feed object
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @param FeedCreator $rss the FeedCreator Object
|
||||
* @param array $data the items to add
|
||||
* @param array $opt the feed options
|
||||
*/
|
||||
function rss_buildItems(&$rss, &$data, $opt) {
|
||||
global $conf;
|
||||
global $lang;
|
||||
/* @var AuthPlugin $auth */
|
||||
global $auth;
|
||||
|
||||
$eventData = array(
|
||||
'rss' => &$rss,
|
||||
'data' => &$data,
|
||||
'opt' => &$opt,
|
||||
);
|
||||
$event = new Event('FEED_DATA_PROCESS', $eventData);
|
||||
if($event->advise_before(false)) {
|
||||
foreach($data as $ditem) {
|
||||
if(!is_array($ditem)) {
|
||||
// not an array? then only a list of IDs was given
|
||||
$ditem = array('id' => $ditem);
|
||||
}
|
||||
|
||||
$item = new FeedItem();
|
||||
$id = $ditem['id'];
|
||||
if(!$ditem['media']) {
|
||||
$meta = p_get_metadata($id);
|
||||
} else {
|
||||
$meta = array();
|
||||
}
|
||||
|
||||
// add date
|
||||
if($ditem['date']) {
|
||||
$date = $ditem['date'];
|
||||
} elseif ($ditem['media']) {
|
||||
$date = @filemtime(mediaFN($id));
|
||||
} elseif (file_exists(wikiFN($id))) {
|
||||
$date = @filemtime(wikiFN($id));
|
||||
} elseif($meta['date']['modified']) {
|
||||
$date = $meta['date']['modified'];
|
||||
} else {
|
||||
$date = 0;
|
||||
}
|
||||
if($date) $item->date = date('r', $date);
|
||||
|
||||
// add title
|
||||
if($conf['useheading'] && $meta['title']) {
|
||||
$item->title = $meta['title'];
|
||||
} else {
|
||||
$item->title = $ditem['id'];
|
||||
}
|
||||
if($conf['rss_show_summary'] && !empty($ditem['sum'])) {
|
||||
$item->title .= ' - '.strip_tags($ditem['sum']);
|
||||
}
|
||||
|
||||
// add item link
|
||||
switch($opt['link_to']) {
|
||||
case 'page':
|
||||
if($ditem['media']) {
|
||||
$item->link = media_managerURL(
|
||||
array(
|
||||
'image' => $id,
|
||||
'ns' => getNS($id),
|
||||
'rev' => $date
|
||||
), '&', true
|
||||
);
|
||||
} else {
|
||||
$item->link = wl($id, 'rev='.$date, true, '&');
|
||||
}
|
||||
break;
|
||||
case 'rev':
|
||||
if($ditem['media']) {
|
||||
$item->link = media_managerURL(
|
||||
array(
|
||||
'image' => $id,
|
||||
'ns' => getNS($id),
|
||||
'rev' => $date,
|
||||
'tab_details' => 'history'
|
||||
), '&', true
|
||||
);
|
||||
} else {
|
||||
$item->link = wl($id, 'do=revisions&rev='.$date, true, '&');
|
||||
}
|
||||
break;
|
||||
case 'current':
|
||||
if($ditem['media']) {
|
||||
$item->link = media_managerURL(
|
||||
array(
|
||||
'image' => $id,
|
||||
'ns' => getNS($id)
|
||||
), '&', true
|
||||
);
|
||||
} else {
|
||||
$item->link = wl($id, '', true, '&');
|
||||
}
|
||||
break;
|
||||
case 'diff':
|
||||
default:
|
||||
if($ditem['media']) {
|
||||
$item->link = media_managerURL(
|
||||
array(
|
||||
'image' => $id,
|
||||
'ns' => getNS($id),
|
||||
'rev' => $date,
|
||||
'tab_details' => 'history',
|
||||
'mediado' => 'diff'
|
||||
), '&', true
|
||||
);
|
||||
} else {
|
||||
$item->link = wl($id, 'rev='.$date.'&do=diff', true, '&');
|
||||
}
|
||||
}
|
||||
|
||||
// add item content
|
||||
switch($opt['item_content']) {
|
||||
case 'diff':
|
||||
case 'htmldiff':
|
||||
if($ditem['media']) {
|
||||
$medialog = new MediaChangeLog($id);
|
||||
$revs = $medialog->getRevisions(0, 1);
|
||||
$rev = $revs[0];
|
||||
$src_r = '';
|
||||
$src_l = '';
|
||||
|
||||
if($size = media_image_preview_size($id, '', new JpegMeta(mediaFN($id)), 300)) {
|
||||
$more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
|
||||
$src_r = ml($id, $more, true, '&', true);
|
||||
}
|
||||
if($rev && $size = media_image_preview_size($id, $rev, new JpegMeta(mediaFN($id, $rev)), 300)) {
|
||||
$more = 'rev='.$rev.'&w='.$size[0].'&h='.$size[1];
|
||||
$src_l = ml($id, $more, true, '&', true);
|
||||
}
|
||||
$content = '';
|
||||
if($src_r) {
|
||||
$content = '<table>';
|
||||
$content .= '<tr><th width="50%">'.$rev.'</th>';
|
||||
$content .= '<th width="50%">'.$lang['current'].'</th></tr>';
|
||||
$content .= '<tr align="center"><td><img src="'.$src_l.'" alt="" /></td><td>';
|
||||
$content .= '<img src="'.$src_r.'" alt="'.$id.'" /></td></tr>';
|
||||
$content .= '</table>';
|
||||
}
|
||||
|
||||
} else {
|
||||
require_once(DOKU_INC.'inc/DifferenceEngine.php');
|
||||
$pagelog = new PageChangeLog($id);
|
||||
$revs = $pagelog->getRevisions(0, 1);
|
||||
$rev = $revs[0];
|
||||
|
||||
if($rev) {
|
||||
$df = new Diff(explode("\n", rawWiki($id, $rev)),
|
||||
explode("\n", rawWiki($id, '')));
|
||||
} else {
|
||||
$df = new Diff(array(''),
|
||||
explode("\n", rawWiki($id, '')));
|
||||
}
|
||||
|
||||
if($opt['item_content'] == 'htmldiff') {
|
||||
// note: no need to escape diff output, TableDiffFormatter provides 'safe' html
|
||||
$tdf = new TableDiffFormatter();
|
||||
$content = '<table>';
|
||||
$content .= '<tr><th colspan="2" width="50%">'.$rev.'</th>';
|
||||
$content .= '<th colspan="2" width="50%">'.$lang['current'].'</th></tr>';
|
||||
$content .= $tdf->format($df);
|
||||
$content .= '</table>';
|
||||
} else {
|
||||
// note: diff output must be escaped, UnifiedDiffFormatter provides plain text
|
||||
$udf = new UnifiedDiffFormatter();
|
||||
$content = "<pre>\n".hsc($udf->format($df))."\n</pre>";
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'html':
|
||||
if($ditem['media']) {
|
||||
if($size = media_image_preview_size($id, '', new JpegMeta(mediaFN($id)))) {
|
||||
$more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
|
||||
$src = ml($id, $more, true, '&', true);
|
||||
$content = '<img src="'.$src.'" alt="'.$id.'" />';
|
||||
} else {
|
||||
$content = '';
|
||||
}
|
||||
} else {
|
||||
if (@filemtime(wikiFN($id)) === $date) {
|
||||
$content = p_wiki_xhtml($id, '', false);
|
||||
} else {
|
||||
$content = p_wiki_xhtml($id, $date, false);
|
||||
}
|
||||
// no TOC in feeds
|
||||
$content = preg_replace('/(<!-- TOC START -->).*(<!-- TOC END -->)/s', '', $content);
|
||||
|
||||
// add alignment for images
|
||||
$content = preg_replace('/(<img .*?class="medialeft")/s', '\\1 align="left"', $content);
|
||||
$content = preg_replace('/(<img .*?class="mediaright")/s', '\\1 align="right"', $content);
|
||||
|
||||
// make URLs work when canonical is not set, regexp instead of rerendering!
|
||||
if(!$conf['canonical']) {
|
||||
$base = preg_quote(DOKU_REL, '/');
|
||||
$content = preg_replace('/(<a href|<img src)="('.$base.')/s', '$1="'.DOKU_URL, $content);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case 'abstract':
|
||||
default:
|
||||
if($ditem['media']) {
|
||||
if($size = media_image_preview_size($id, '', new JpegMeta(mediaFN($id)))) {
|
||||
$more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
|
||||
$src = ml($id, $more, true, '&', true);
|
||||
$content = '<img src="'.$src.'" alt="'.$id.'" />';
|
||||
} else {
|
||||
$content = '';
|
||||
}
|
||||
} else {
|
||||
$content = $meta['description']['abstract'];
|
||||
}
|
||||
}
|
||||
$item->description = $content; //FIXME a plugin hook here could be senseful
|
||||
|
||||
// add user
|
||||
# FIXME should the user be pulled from metadata as well?
|
||||
$user = @$ditem['user']; // the @ spares time repeating lookup
|
||||
if(blank($user)) {
|
||||
$item->author = 'Anonymous';
|
||||
$item->authorEmail = 'anonymous@undisclosed.example.com';
|
||||
} else {
|
||||
$item->author = $user;
|
||||
$item->authorEmail = $user . '@undisclosed.example.com';
|
||||
|
||||
// get real user name if configured
|
||||
if($conf['useacl'] && $auth) {
|
||||
$userInfo = $auth->getUserData($user);
|
||||
if($userInfo) {
|
||||
switch($conf['showuseras']) {
|
||||
case 'username':
|
||||
case 'username_link':
|
||||
$item->author = $userInfo['name'];
|
||||
break;
|
||||
default:
|
||||
$item->author = $user;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$item->author = $user;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add category
|
||||
if(isset($meta['subject'])) {
|
||||
$item->category = $meta['subject'];
|
||||
} else {
|
||||
$cat = getNS($id);
|
||||
if($cat) $item->category = $cat;
|
||||
}
|
||||
|
||||
// finally add the item to the feed object, after handing it to registered plugins
|
||||
$evdata = array(
|
||||
'item' => &$item,
|
||||
'opt' => &$opt,
|
||||
'ditem' => &$ditem,
|
||||
'rss' => &$rss
|
||||
);
|
||||
$evt = new Event('FEED_ITEM_ADD', $evdata);
|
||||
if($evt->advise_before()) {
|
||||
$rss->addItem($item);
|
||||
}
|
||||
$evt->advise_after(); // for completeness
|
||||
}
|
||||
}
|
||||
$event->advise_after();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add recent changed pages to the feed object
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function rssRecentChanges($opt) {
|
||||
global $conf;
|
||||
$flags = 0;
|
||||
if(!$conf['rss_show_deleted']) $flags += RECENTS_SKIP_DELETED;
|
||||
if(!$opt['show_minor']) $flags += RECENTS_SKIP_MINORS;
|
||||
if($opt['only_new']) $flags += RECENTS_ONLY_CREATION;
|
||||
if($opt['content_type'] == 'media' && $conf['mediarevisions']) $flags += RECENTS_MEDIA_CHANGES;
|
||||
if($opt['content_type'] == 'both' && $conf['mediarevisions']) $flags += RECENTS_MEDIA_PAGES_MIXED;
|
||||
|
||||
$recents = getRecents(0, $opt['items'], $opt['namespace'], $flags);
|
||||
return $recents;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add all pages of a namespace to the feed object
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function rssListNamespace($opt) {
|
||||
require_once(DOKU_INC.'inc/search.php');
|
||||
global $conf;
|
||||
|
||||
$ns = ':'.cleanID($opt['namespace']);
|
||||
$ns = utf8_encodeFN(str_replace(':', '/', $ns));
|
||||
|
||||
$data = array();
|
||||
$search_opts = array(
|
||||
'depth' => 1,
|
||||
'pagesonly' => true,
|
||||
'listfiles' => true
|
||||
);
|
||||
search($data, $conf['datadir'], 'search_universal', $search_opts, $ns, $lvl = 1, $opt['sort']);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the result of a full text search to the feed object
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function rssSearch($opt) {
|
||||
if(!$opt['search_query']) return array();
|
||||
|
||||
require_once(DOKU_INC.'inc/fulltext.php');
|
||||
$data = ft_pageSearch($opt['search_query'], $poswords);
|
||||
$data = array_keys($data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
//Setup VIM: ex: et ts=4 :
|
8
content/inc/.htaccess
Normal file
8
content/inc/.htaccess
Normal file
|
@ -0,0 +1,8 @@
|
|||
## no access to the inc directory
|
||||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</IfModule>
|
25
content/inc/Action/AbstractAclAction.php
Normal file
25
content/inc/Action/AbstractAclAction.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAclRequiredException;
|
||||
|
||||
/**
|
||||
* Class AbstractAclAction
|
||||
*
|
||||
* An action that requires the ACL subsystem to be enabled (eg. useacl=1)
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
abstract class AbstractAclAction extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
global $conf;
|
||||
global $auth;
|
||||
if(!$conf['useacl']) throw new ActionAclRequiredException();
|
||||
if(!$auth) throw new ActionAclRequiredException();
|
||||
}
|
||||
|
||||
}
|
88
content/inc/Action/AbstractAction.php
Normal file
88
content/inc/Action/AbstractAction.php
Normal file
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionDisabledException;
|
||||
use dokuwiki\Action\Exception\ActionException;
|
||||
use dokuwiki\Action\Exception\FatalException;
|
||||
|
||||
/**
|
||||
* Class AbstractAction
|
||||
*
|
||||
* Base class for all actions
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
abstract class AbstractAction {
|
||||
|
||||
/** @var string holds the name of the action (lowercase class name, no namespace) */
|
||||
protected $actionname;
|
||||
|
||||
/**
|
||||
* AbstractAction constructor.
|
||||
*
|
||||
* @param string $actionname the name of this action (see getActionName() for caveats)
|
||||
*/
|
||||
public function __construct($actionname = '') {
|
||||
if($actionname !== '') {
|
||||
$this->actionname = $actionname;
|
||||
} else {
|
||||
// http://stackoverflow.com/a/27457689/172068
|
||||
$this->actionname = strtolower(substr(strrchr(get_class($this), '\\'), 1));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the minimum permission needed
|
||||
*
|
||||
* This needs to return one of the AUTH_* constants. It will be checked against
|
||||
* the current user and page after checkPermissions() ran through. If it fails,
|
||||
* the user will be shown the Denied action.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
abstract public function minimumPermission();
|
||||
|
||||
/**
|
||||
* Check conditions are met to run this action
|
||||
*
|
||||
* @throws ActionException
|
||||
* @return void
|
||||
*/
|
||||
public function checkPreconditions() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Process data
|
||||
*
|
||||
* This runs before any output is sent to the browser.
|
||||
*
|
||||
* Throw an Exception if a different action should be run after this step.
|
||||
*
|
||||
* @throws ActionException
|
||||
* @return void
|
||||
*/
|
||||
public function preProcess() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Output whatever content is wanted within tpl_content();
|
||||
*
|
||||
* @fixme we may want to return a Ui class here
|
||||
*/
|
||||
public function tplContent() {
|
||||
throw new FatalException('No content for Action ' . $this->actionname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of this action
|
||||
*
|
||||
* This is usually the lowercased class name, but may differ for some actions.
|
||||
* eg. the export_ modes or for the Plugin action.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getActionName() {
|
||||
return $this->actionname;
|
||||
}
|
||||
}
|
28
content/inc/Action/AbstractAliasAction.php
Normal file
28
content/inc/Action/AbstractAliasAction.php
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\FatalException;
|
||||
|
||||
/**
|
||||
* Class AbstractAliasAction
|
||||
*
|
||||
* An action that is an alias for another action. Skips the minimumPermission check
|
||||
*
|
||||
* Be sure to implement preProcess() and throw an ActionAbort exception
|
||||
* with the proper action.
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
abstract class AbstractAliasAction extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
public function preProcess() {
|
||||
throw new FatalException('Alias Actions need to implement preProcess to load the aliased action');
|
||||
}
|
||||
|
||||
}
|
25
content/inc/Action/AbstractUserAction.php
Normal file
25
content/inc/Action/AbstractUserAction.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionUserRequiredException;
|
||||
|
||||
/**
|
||||
* Class AbstractUserAction
|
||||
*
|
||||
* An action that requires a logged in user
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
abstract class AbstractUserAction extends AbstractAclAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
global $INPUT;
|
||||
if(!$INPUT->server->str('REMOTE_USER')) {
|
||||
throw new ActionUserRequiredException();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
45
content/inc/Action/Admin.php
Normal file
45
content/inc/Action/Admin.php
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionException;
|
||||
|
||||
/**
|
||||
* Class Admin
|
||||
*
|
||||
* Action to show the admin interface or admin plugins
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Admin extends AbstractUserAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_READ; // let in check later
|
||||
}
|
||||
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
}
|
||||
|
||||
public function preProcess() {
|
||||
global $INPUT;
|
||||
global $INFO;
|
||||
|
||||
// retrieve admin plugin name from $_REQUEST['page']
|
||||
if(($page = $INPUT->str('page', '', true)) != '') {
|
||||
/** @var $plugin \dokuwiki\Extension\AdminPlugin */
|
||||
if($plugin = plugin_getRequestAdminPlugin()) { // FIXME this method does also permission checking
|
||||
if(!$plugin->isAccessibleByCurrentUser()) {
|
||||
throw new ActionException('denied');
|
||||
}
|
||||
$plugin->handle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function tplContent() {
|
||||
tpl_admin();
|
||||
}
|
||||
|
||||
}
|
24
content/inc/Action/Backlink.php
Normal file
24
content/inc/Action/Backlink.php
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Backlink
|
||||
*
|
||||
* Shows which pages link to the current page
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Backlink extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_backlinks();
|
||||
}
|
||||
|
||||
}
|
25
content/inc/Action/Cancel.php
Normal file
25
content/inc/Action/Cancel.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
|
||||
/**
|
||||
* Class Cancel
|
||||
*
|
||||
* Alias for show. Aborts editing
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Cancel extends AbstractAliasAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
global $ID;
|
||||
unlock($ID);
|
||||
|
||||
// continue with draftdel -> redirect -> show
|
||||
throw new ActionAbort('draftdel');
|
||||
}
|
||||
|
||||
}
|
26
content/inc/Action/Check.php
Normal file
26
content/inc/Action/Check.php
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
|
||||
/**
|
||||
* Class Check
|
||||
*
|
||||
* Adds some debugging info before aborting to show
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Check extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_READ;
|
||||
}
|
||||
|
||||
public function preProcess() {
|
||||
check();
|
||||
throw new ActionAbort();
|
||||
}
|
||||
|
||||
}
|
34
content/inc/Action/Conflict.php
Normal file
34
content/inc/Action/Conflict.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Conflict
|
||||
*
|
||||
* Show the conflict resolution screen
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Conflict extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
global $INFO;
|
||||
if($INFO['exists']) {
|
||||
return AUTH_EDIT;
|
||||
} else {
|
||||
return AUTH_CREATE;
|
||||
}
|
||||
}
|
||||
|
||||
public function tplContent() {
|
||||
global $PRE;
|
||||
global $TEXT;
|
||||
global $SUF;
|
||||
global $SUM;
|
||||
|
||||
html_conflict(con($PRE, $TEXT, $SUF), $SUM);
|
||||
html_diff(con($PRE, $TEXT, $SUF), false);
|
||||
}
|
||||
|
||||
}
|
23
content/inc/Action/Denied.php
Normal file
23
content/inc/Action/Denied.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Denied
|
||||
*
|
||||
* Show the access denied screen
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Denied extends AbstractAclAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
public function tplContent() {
|
||||
html_denied();
|
||||
}
|
||||
|
||||
}
|
35
content/inc/Action/Diff.php
Normal file
35
content/inc/Action/Diff.php
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Diff
|
||||
*
|
||||
* Show the differences between two revisions
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Diff extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_READ;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
global $INPUT;
|
||||
|
||||
// store the selected diff type in cookie
|
||||
$difftype = $INPUT->str('difftype');
|
||||
if(!empty($difftype)) {
|
||||
set_doku_pref('difftype', $difftype);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_diff();
|
||||
}
|
||||
|
||||
}
|
39
content/inc/Action/Draft.php
Normal file
39
content/inc/Action/Draft.php
Normal file
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionException;
|
||||
|
||||
/**
|
||||
* Class Draft
|
||||
*
|
||||
* Screen to see and recover a draft
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
* @fixme combine with Recover?
|
||||
*/
|
||||
class Draft extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
global $INFO;
|
||||
if($INFO['exists']) {
|
||||
return AUTH_EDIT;
|
||||
} else {
|
||||
return AUTH_CREATE;
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
global $INFO;
|
||||
if(!file_exists($INFO['draft'])) throw new ActionException('edit');
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_draft();
|
||||
}
|
||||
|
||||
}
|
38
content/inc/Action/Draftdel.php
Normal file
38
content/inc/Action/Draftdel.php
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
|
||||
/**
|
||||
* Class Draftdel
|
||||
*
|
||||
* Delete a draft
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Draftdel extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_EDIT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an existing draft for the current page and user if any
|
||||
*
|
||||
* Redirects to show, afterwards.
|
||||
*
|
||||
* @throws ActionAbort
|
||||
*/
|
||||
public function preProcess() {
|
||||
global $INFO, $ID;
|
||||
$draft = new \dokuwiki\Draft($ID, $INFO['client']);
|
||||
if ($draft->isDraftAvailable()) {
|
||||
$draft->deleteDraft();
|
||||
}
|
||||
|
||||
throw new ActionAbort('redirect');
|
||||
}
|
||||
|
||||
}
|
91
content/inc/Action/Edit.php
Normal file
91
content/inc/Action/Edit.php
Normal file
|
@ -0,0 +1,91 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
|
||||
/**
|
||||
* Class Edit
|
||||
*
|
||||
* Handle editing
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Edit extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
global $INFO;
|
||||
if($INFO['exists']) {
|
||||
return AUTH_READ; // we check again below
|
||||
} else {
|
||||
return AUTH_CREATE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc falls back to 'source' if page not writable
|
||||
*/
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
global $INFO;
|
||||
|
||||
// no edit permission? view source
|
||||
if($INFO['exists'] && !$INFO['writable']) {
|
||||
throw new ActionAbort('source');
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
global $ID;
|
||||
global $INFO;
|
||||
|
||||
global $TEXT;
|
||||
global $RANGE;
|
||||
global $PRE;
|
||||
global $SUF;
|
||||
global $REV;
|
||||
global $SUM;
|
||||
global $lang;
|
||||
global $DATE;
|
||||
|
||||
if(!isset($TEXT)) {
|
||||
if($INFO['exists']) {
|
||||
if($RANGE) {
|
||||
list($PRE, $TEXT, $SUF) = rawWikiSlices($RANGE, $ID, $REV);
|
||||
} else {
|
||||
$TEXT = rawWiki($ID, $REV);
|
||||
}
|
||||
} else {
|
||||
$TEXT = pageTemplate($ID);
|
||||
}
|
||||
}
|
||||
|
||||
//set summary default
|
||||
if(!$SUM) {
|
||||
if($REV) {
|
||||
$SUM = sprintf($lang['restored'], dformat($REV));
|
||||
} elseif(!$INFO['exists']) {
|
||||
$SUM = $lang['created'];
|
||||
}
|
||||
}
|
||||
|
||||
// Use the date of the newest revision, not of the revision we edit
|
||||
// This is used for conflict detection
|
||||
if(!$DATE) $DATE = @filemtime(wikiFN($ID));
|
||||
|
||||
//check if locked by anyone - if not lock for my self
|
||||
$lockedby = checklock($ID);
|
||||
if($lockedby) {
|
||||
throw new ActionAbort('locked');
|
||||
};
|
||||
lock($ID);
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_edit();
|
||||
}
|
||||
|
||||
}
|
20
content/inc/Action/Exception/ActionAbort.php
Normal file
20
content/inc/Action/Exception/ActionAbort.php
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action\Exception;
|
||||
|
||||
/**
|
||||
* Class ActionAbort
|
||||
*
|
||||
* Strictly speaking not an Exception but an expected execution path. Used to
|
||||
* signal when one action is done and another should take over.
|
||||
*
|
||||
* If you want to signal the same but under some error condition use ActionException
|
||||
* or one of it's decendants.
|
||||
*
|
||||
* The message will NOT be shown to the enduser
|
||||
*
|
||||
* @package dokuwiki\Action\Exception
|
||||
*/
|
||||
class ActionAbort extends ActionException {
|
||||
|
||||
}
|
17
content/inc/Action/Exception/ActionAclRequiredException.php
Normal file
17
content/inc/Action/Exception/ActionAclRequiredException.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action\Exception;
|
||||
|
||||
/**
|
||||
* Class ActionAclRequiredException
|
||||
*
|
||||
* Thrown by AbstractACLAction when an action requires that the ACL subsystem is
|
||||
* enabled but it isn't. You should not use it
|
||||
*
|
||||
* The message will NOT be shown to the enduser
|
||||
*
|
||||
* @package dokuwiki\Action\Exception
|
||||
*/
|
||||
class ActionAclRequiredException extends ActionException {
|
||||
|
||||
}
|
17
content/inc/Action/Exception/ActionDisabledException.php
Normal file
17
content/inc/Action/Exception/ActionDisabledException.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action\Exception;
|
||||
|
||||
/**
|
||||
* Class ActionDisabledException
|
||||
*
|
||||
* Thrown when the requested action has been disabled. Eg. through the 'disableactions'
|
||||
* config setting. You should probably not use it.
|
||||
*
|
||||
* The message will NOT be shown to the enduser, but a generic information will be shown.
|
||||
*
|
||||
* @package dokuwiki\Action\Exception
|
||||
*/
|
||||
class ActionDisabledException extends ActionException {
|
||||
|
||||
}
|
66
content/inc/Action/Exception/ActionException.php
Normal file
66
content/inc/Action/Exception/ActionException.php
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action\Exception;
|
||||
|
||||
/**
|
||||
* Class ActionException
|
||||
*
|
||||
* This exception and its subclasses signal that the current action should be
|
||||
* aborted and a different action should be used instead. The new action can
|
||||
* be given as parameter in the constructor. Defaults to 'show'
|
||||
*
|
||||
* The message will NOT be shown to the enduser
|
||||
*
|
||||
* @package dokuwiki\Action\Exception
|
||||
*/
|
||||
class ActionException extends \Exception {
|
||||
|
||||
/** @var string the new action */
|
||||
protected $newaction;
|
||||
|
||||
/** @var bool should the exception's message be shown to the user? */
|
||||
protected $displayToUser = false;
|
||||
|
||||
/**
|
||||
* ActionException constructor.
|
||||
*
|
||||
* When no new action is given 'show' is assumed. For requests that originated in a POST,
|
||||
* a 'redirect' is used which will cause a redirect to the 'show' action.
|
||||
*
|
||||
* @param string|null $newaction the action that should be used next
|
||||
* @param string $message optional message, will not be shown except for some dub classes
|
||||
*/
|
||||
public function __construct($newaction = null, $message = '') {
|
||||
global $INPUT;
|
||||
parent::__construct($message);
|
||||
if(is_null($newaction)) {
|
||||
if(strtolower($INPUT->server->str('REQUEST_METHOD')) == 'post') {
|
||||
$newaction = 'redirect';
|
||||
} else {
|
||||
$newaction = 'show';
|
||||
}
|
||||
}
|
||||
|
||||
$this->newaction = $newaction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the action to use next
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getNewAction() {
|
||||
return $this->newaction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should this Exception's message be shown to the user?
|
||||
*
|
||||
* @param null|bool $set when null is given, the current setting is not changed
|
||||
* @return bool
|
||||
*/
|
||||
public function displayToUser($set = null) {
|
||||
if(!is_null($set)) $this->displayToUser = $set;
|
||||
return $set;
|
||||
}
|
||||
}
|
17
content/inc/Action/Exception/ActionUserRequiredException.php
Normal file
17
content/inc/Action/Exception/ActionUserRequiredException.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action\Exception;
|
||||
|
||||
/**
|
||||
* Class ActionUserRequiredException
|
||||
*
|
||||
* Thrown by AbstractUserAction when an action requires that a user is logged
|
||||
* in but it isn't. You should not use it.
|
||||
*
|
||||
* The message will NOT be shown to the enduser
|
||||
*
|
||||
* @package dokuwiki\Action\Exception
|
||||
*/
|
||||
class ActionUserRequiredException extends ActionException {
|
||||
|
||||
}
|
26
content/inc/Action/Exception/FatalException.php
Normal file
26
content/inc/Action/Exception/FatalException.php
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action\Exception;
|
||||
|
||||
/**
|
||||
* Class FatalException
|
||||
*
|
||||
* A fatal exception during handling the action
|
||||
*
|
||||
* Will abort all handling and display some info to the user. The HTTP status code
|
||||
* can be defined.
|
||||
*
|
||||
* @package dokuwiki\Action\Exception
|
||||
*/
|
||||
class FatalException extends \Exception {
|
||||
/**
|
||||
* FatalException constructor.
|
||||
*
|
||||
* @param string $message the message to send
|
||||
* @param int $status the HTTP status to send
|
||||
* @param null|\Exception $previous previous exception
|
||||
*/
|
||||
public function __construct($message = 'A fatal error occured', $status = 500, $previous = null) {
|
||||
parent::__construct($message, $status, $previous);
|
||||
}
|
||||
}
|
15
content/inc/Action/Exception/NoActionException.php
Normal file
15
content/inc/Action/Exception/NoActionException.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action\Exception;
|
||||
|
||||
/**
|
||||
* Class NoActionException
|
||||
*
|
||||
* Thrown in the ActionRouter when a wanted action can not be found. Triggers
|
||||
* the unknown action event
|
||||
*
|
||||
* @package dokuwiki\Action\Exception
|
||||
*/
|
||||
class NoActionException extends \Exception {
|
||||
|
||||
}
|
113
content/inc/Action/Export.php
Normal file
113
content/inc/Action/Export.php
Normal file
|
@ -0,0 +1,113 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
use dokuwiki\Extension\Event;
|
||||
|
||||
/**
|
||||
* Class Export
|
||||
*
|
||||
* Handle exporting by calling the appropriate renderer
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Export extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_READ;
|
||||
}
|
||||
|
||||
/**
|
||||
* Export a wiki page for various formats
|
||||
*
|
||||
* Triggers ACTION_EXPORT_POSTPROCESS
|
||||
*
|
||||
* Event data:
|
||||
* data['id'] -- page id
|
||||
* data['mode'] -- requested export mode
|
||||
* data['headers'] -- export headers
|
||||
* data['output'] -- export output
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @author Michael Klier <chi@chimeric.de>
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function preProcess() {
|
||||
global $ID;
|
||||
global $REV;
|
||||
global $conf;
|
||||
global $lang;
|
||||
|
||||
$pre = '';
|
||||
$post = '';
|
||||
$headers = array();
|
||||
|
||||
// search engines: never cache exported docs! (Google only currently)
|
||||
$headers['X-Robots-Tag'] = 'noindex';
|
||||
|
||||
$mode = substr($this->actionname, 7);
|
||||
switch($mode) {
|
||||
case 'raw':
|
||||
$headers['Content-Type'] = 'text/plain; charset=utf-8';
|
||||
$headers['Content-Disposition'] = 'attachment; filename=' . noNS($ID) . '.txt';
|
||||
$output = rawWiki($ID, $REV);
|
||||
break;
|
||||
case 'xhtml':
|
||||
$pre .= '<!DOCTYPE html>' . DOKU_LF;
|
||||
$pre .= '<html lang="' . $conf['lang'] . '" dir="' . $lang['direction'] . '">' . DOKU_LF;
|
||||
$pre .= '<head>' . DOKU_LF;
|
||||
$pre .= ' <meta charset="utf-8" />' . DOKU_LF; // FIXME improve wrapper
|
||||
$pre .= ' <title>' . $ID . '</title>' . DOKU_LF;
|
||||
|
||||
// get metaheaders
|
||||
ob_start();
|
||||
tpl_metaheaders();
|
||||
$pre .= ob_get_clean();
|
||||
|
||||
$pre .= '</head>' . DOKU_LF;
|
||||
$pre .= '<body>' . DOKU_LF;
|
||||
$pre .= '<div class="dokuwiki export">' . DOKU_LF;
|
||||
|
||||
// get toc
|
||||
$pre .= tpl_toc(true);
|
||||
|
||||
$headers['Content-Type'] = 'text/html; charset=utf-8';
|
||||
$output = p_wiki_xhtml($ID, $REV, false);
|
||||
|
||||
$post .= '</div>' . DOKU_LF;
|
||||
$post .= '</body>' . DOKU_LF;
|
||||
$post .= '</html>' . DOKU_LF;
|
||||
break;
|
||||
case 'xhtmlbody':
|
||||
$headers['Content-Type'] = 'text/html; charset=utf-8';
|
||||
$output = p_wiki_xhtml($ID, $REV, false);
|
||||
break;
|
||||
default:
|
||||
$output = p_cached_output(wikiFN($ID, $REV), $mode, $ID);
|
||||
$headers = p_get_metadata($ID, "format $mode");
|
||||
break;
|
||||
}
|
||||
|
||||
// prepare event data
|
||||
$data = array();
|
||||
$data['id'] = $ID;
|
||||
$data['mode'] = $mode;
|
||||
$data['headers'] = $headers;
|
||||
$data['output'] =& $output;
|
||||
|
||||
Event::createAndTrigger('ACTION_EXPORT_POSTPROCESS', $data);
|
||||
|
||||
if(!empty($data['output'])) {
|
||||
if(is_array($data['headers'])) foreach($data['headers'] as $key => $val) {
|
||||
header("$key: $val");
|
||||
}
|
||||
print $pre . $data['output'] . $post;
|
||||
exit;
|
||||
}
|
||||
|
||||
throw new ActionAbort();
|
||||
}
|
||||
|
||||
}
|
25
content/inc/Action/Index.php
Normal file
25
content/inc/Action/Index.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Index
|
||||
*
|
||||
* Show the human readable sitemap. Do not confuse with Sitemap
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Index extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
global $IDX;
|
||||
html_index($IDX);
|
||||
}
|
||||
|
||||
}
|
25
content/inc/Action/Locked.php
Normal file
25
content/inc/Action/Locked.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Locked
|
||||
*
|
||||
* Show a locked screen when a page is locked
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Locked extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_READ;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_locked();
|
||||
html_edit();
|
||||
}
|
||||
|
||||
}
|
36
content/inc/Action/Login.php
Normal file
36
content/inc/Action/Login.php
Normal file
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionException;
|
||||
|
||||
/**
|
||||
* Class Login
|
||||
*
|
||||
* The login form. Actual logins are handled in inc/auth.php
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Login extends AbstractAclAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
global $INPUT;
|
||||
parent::checkPreconditions();
|
||||
if($INPUT->server->has('REMOTE_USER')) {
|
||||
// nothing to do
|
||||
throw new ActionException();
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_login();
|
||||
}
|
||||
|
||||
}
|
50
content/inc/Action/Logout.php
Normal file
50
content/inc/Action/Logout.php
Normal file
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionDisabledException;
|
||||
use dokuwiki\Action\Exception\ActionException;
|
||||
|
||||
/**
|
||||
* Class Logout
|
||||
*
|
||||
* Log out a user
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Logout extends AbstractUserAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
|
||||
/** @var \dokuwiki\Extension\AuthPlugin $auth */
|
||||
global $auth;
|
||||
if(!$auth->canDo('logout')) throw new ActionDisabledException();
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
global $ID;
|
||||
global $INPUT;
|
||||
|
||||
// when logging out during an edit session, unlock the page
|
||||
$lockedby = checklock($ID);
|
||||
if($lockedby == $INPUT->server->str('REMOTE_USER')) {
|
||||
unlock($ID);
|
||||
}
|
||||
|
||||
// do the logout stuff and redirect to login
|
||||
auth_logoff();
|
||||
send_redirect(wl($ID, array('do' => 'login'), true, '&'));
|
||||
|
||||
// should never be reached
|
||||
throw new ActionException('login');
|
||||
}
|
||||
|
||||
}
|
24
content/inc/Action/Media.php
Normal file
24
content/inc/Action/Media.php
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Media
|
||||
*
|
||||
* The full screen media manager
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Media extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_READ;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
tpl_media();
|
||||
}
|
||||
|
||||
}
|
32
content/inc/Action/Plugin.php
Normal file
32
content/inc/Action/Plugin.php
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Plugin
|
||||
*
|
||||
* Used to run action plugins
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Plugin extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs nothing but a warning unless an action plugin overwrites it
|
||||
*
|
||||
* @inheritdoc
|
||||
* @triggers TPL_ACT_UNKNOWN
|
||||
*/
|
||||
public function tplContent() {
|
||||
$evt = new \dokuwiki\Extension\Event('TPL_ACT_UNKNOWN', $this->actionname);
|
||||
if($evt->advise_before()) {
|
||||
msg('Failed to handle action: ' . hsc($this->actionname), -1);
|
||||
}
|
||||
$evt->advise_after();
|
||||
}
|
||||
}
|
42
content/inc/Action/Preview.php
Normal file
42
content/inc/Action/Preview.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Preview
|
||||
*
|
||||
* preview during editing
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Preview extends Edit {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
header('X-XSS-Protection: 0');
|
||||
$this->savedraft();
|
||||
parent::preProcess();
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
global $TEXT;
|
||||
html_edit();
|
||||
html_show($TEXT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a draft on preview
|
||||
*/
|
||||
protected function savedraft() {
|
||||
global $ID, $INFO;
|
||||
$draft = new \dokuwiki\Draft($ID, $INFO['client']);
|
||||
if (!$draft->saveDraft()) {
|
||||
$errors = $draft->getErrors();
|
||||
foreach ($errors as $error) {
|
||||
msg(hsc($error), -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
45
content/inc/Action/Profile.php
Normal file
45
content/inc/Action/Profile.php
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
use dokuwiki\Action\Exception\ActionDisabledException;
|
||||
|
||||
/**
|
||||
* Class Profile
|
||||
*
|
||||
* Handle the profile form
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Profile extends AbstractUserAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
|
||||
/** @var \dokuwiki\Extension\AuthPlugin $auth */
|
||||
global $auth;
|
||||
if(!$auth->canDo('Profile')) throw new ActionDisabledException();
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
global $lang;
|
||||
if(updateprofile()) {
|
||||
msg($lang['profchanged'], 1);
|
||||
throw new ActionAbort('show');
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_updateprofile();
|
||||
}
|
||||
|
||||
}
|
42
content/inc/Action/ProfileDelete.php
Normal file
42
content/inc/Action/ProfileDelete.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
use dokuwiki\Action\Exception\ActionDisabledException;
|
||||
|
||||
/**
|
||||
* Class ProfileDelete
|
||||
*
|
||||
* Delete a user account
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class ProfileDelete extends AbstractUserAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
|
||||
/** @var \dokuwiki\Extension\AuthPlugin $auth */
|
||||
global $auth;
|
||||
if(!$auth->canDo('delUser')) throw new ActionDisabledException();
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
global $lang;
|
||||
if(auth_deleteprofile()) {
|
||||
msg($lang['profdeleted'], 1);
|
||||
throw new ActionAbort('show');
|
||||
} else {
|
||||
throw new ActionAbort('profile');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
40
content/inc/Action/Recent.php
Normal file
40
content/inc/Action/Recent.php
Normal file
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Recent
|
||||
*
|
||||
* The recent changes view
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Recent extends AbstractAction {
|
||||
|
||||
/** @var string what type of changes to show */
|
||||
protected $showType = 'both';
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
global $INPUT;
|
||||
$show_changes = $INPUT->str('show_changes');
|
||||
if(!empty($show_changes)) {
|
||||
set_doku_pref('show_changes', $show_changes);
|
||||
$this->showType = $show_changes;
|
||||
} else {
|
||||
$this->showType = get_doku_pref('show_changes', 'both');
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
global $INPUT;
|
||||
html_recent((int) $INPUT->extract('first')->int('first'), $this->showType);
|
||||
}
|
||||
|
||||
}
|
21
content/inc/Action/Recover.php
Normal file
21
content/inc/Action/Recover.php
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
|
||||
/**
|
||||
* Class Recover
|
||||
*
|
||||
* Recover a draft
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Recover extends AbstractAliasAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
throw new ActionAbort('edit');
|
||||
}
|
||||
|
||||
}
|
65
content/inc/Action/Redirect.php
Normal file
65
content/inc/Action/Redirect.php
Normal file
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
use dokuwiki\Extension\Event;
|
||||
|
||||
/**
|
||||
* Class Redirect
|
||||
*
|
||||
* Used to redirect to the current page with the last edited section as a target if found
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Redirect extends AbstractAliasAction {
|
||||
|
||||
/**
|
||||
* Redirect to the show action, trying to jump to the previously edited section
|
||||
*
|
||||
* @triggers ACTION_SHOW_REDIRECT
|
||||
* @throws ActionAbort
|
||||
*/
|
||||
public function preProcess() {
|
||||
global $PRE;
|
||||
global $TEXT;
|
||||
global $INPUT;
|
||||
global $ID;
|
||||
global $ACT;
|
||||
|
||||
$opts = array(
|
||||
'id' => $ID,
|
||||
'preact' => $ACT
|
||||
);
|
||||
//get section name when coming from section edit
|
||||
if($INPUT->has('hid')) {
|
||||
// Use explicitly transmitted header id
|
||||
$opts['fragment'] = $INPUT->str('hid');
|
||||
} else if($PRE && preg_match('/^\s*==+([^=\n]+)/', $TEXT, $match)) {
|
||||
// Fallback to old mechanism
|
||||
$check = false; //Byref
|
||||
$opts['fragment'] = sectionID($match[0], $check);
|
||||
}
|
||||
|
||||
// execute the redirect
|
||||
Event::createAndTrigger('ACTION_SHOW_REDIRECT', $opts, array($this, 'redirect'));
|
||||
|
||||
// should never be reached
|
||||
throw new ActionAbort('show');
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the redirect
|
||||
*
|
||||
* Default action for ACTION_SHOW_REDIRECT
|
||||
*
|
||||
* @param array $opts id and fragment for the redirect and the preact
|
||||
*/
|
||||
public function redirect($opts) {
|
||||
$go = wl($opts['id'], '', true, '&');
|
||||
if(isset($opts['fragment'])) $go .= '#' . $opts['fragment'];
|
||||
|
||||
//show it
|
||||
send_redirect($go);
|
||||
}
|
||||
}
|
45
content/inc/Action/Register.php
Normal file
45
content/inc/Action/Register.php
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
use dokuwiki\Action\Exception\ActionDisabledException;
|
||||
|
||||
/**
|
||||
* Class Register
|
||||
*
|
||||
* Self registering a new user
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Register extends AbstractAclAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
|
||||
/** @var \dokuwiki\Extension\AuthPlugin $auth */
|
||||
global $auth;
|
||||
global $conf;
|
||||
if(isset($conf['openregister']) && !$conf['openregister']) throw new ActionDisabledException();
|
||||
if(!$auth->canDo('addUser')) throw new ActionDisabledException();
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
if(register()) { // FIXME could be moved from auth to here
|
||||
throw new ActionAbort('login');
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_register();
|
||||
}
|
||||
|
||||
}
|
177
content/inc/Action/Resendpwd.php
Normal file
177
content/inc/Action/Resendpwd.php
Normal file
|
@ -0,0 +1,177 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
use dokuwiki\Action\Exception\ActionDisabledException;
|
||||
|
||||
/**
|
||||
* Class Resendpwd
|
||||
*
|
||||
* Handle password recovery
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Resendpwd extends AbstractAclAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
|
||||
/** @var \dokuwiki\Extension\AuthPlugin $auth */
|
||||
global $auth;
|
||||
global $conf;
|
||||
if(isset($conf['resendpasswd']) && !$conf['resendpasswd']) throw new ActionDisabledException(); //legacy option
|
||||
if(!$auth->canDo('modPass')) throw new ActionDisabledException();
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
if($this->resendpwd()) {
|
||||
throw new ActionAbort('login');
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
html_resendpwd();
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a new password
|
||||
*
|
||||
* This function handles both phases of the password reset:
|
||||
*
|
||||
* - handling the first request of password reset
|
||||
* - validating the password reset auth token
|
||||
*
|
||||
* @author Benoit Chesneau <benoit@bchesneau.info>
|
||||
* @author Chris Smith <chris@jalakai.co.uk>
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @fixme this should be split up into multiple methods
|
||||
* @return bool true on success, false on any error
|
||||
*/
|
||||
protected function resendpwd() {
|
||||
global $lang;
|
||||
global $conf;
|
||||
/* @var \dokuwiki\Extension\AuthPlugin $auth */
|
||||
global $auth;
|
||||
global $INPUT;
|
||||
|
||||
if(!actionOK('resendpwd')) {
|
||||
msg($lang['resendna'], -1);
|
||||
return false;
|
||||
}
|
||||
|
||||
$token = preg_replace('/[^a-f0-9]+/', '', $INPUT->str('pwauth'));
|
||||
|
||||
if($token) {
|
||||
// we're in token phase - get user info from token
|
||||
|
||||
$tfile = $conf['cachedir'] . '/' . $token[0] . '/' . $token . '.pwauth';
|
||||
if(!file_exists($tfile)) {
|
||||
msg($lang['resendpwdbadauth'], -1);
|
||||
$INPUT->remove('pwauth');
|
||||
return false;
|
||||
}
|
||||
// token is only valid for 3 days
|
||||
if((time() - filemtime($tfile)) > (3 * 60 * 60 * 24)) {
|
||||
msg($lang['resendpwdbadauth'], -1);
|
||||
$INPUT->remove('pwauth');
|
||||
@unlink($tfile);
|
||||
return false;
|
||||
}
|
||||
|
||||
$user = io_readfile($tfile);
|
||||
$userinfo = $auth->getUserData($user, $requireGroups = false);
|
||||
if(!$userinfo['mail']) {
|
||||
msg($lang['resendpwdnouser'], -1);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!$conf['autopasswd']) { // we let the user choose a password
|
||||
$pass = $INPUT->str('pass');
|
||||
|
||||
// password given correctly?
|
||||
if(!$pass) return false;
|
||||
if($pass != $INPUT->str('passchk')) {
|
||||
msg($lang['regbadpass'], -1);
|
||||
return false;
|
||||
}
|
||||
|
||||
// change it
|
||||
if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) {
|
||||
msg($lang['proffail'], -1);
|
||||
return false;
|
||||
}
|
||||
|
||||
} else { // autogenerate the password and send by mail
|
||||
|
||||
$pass = auth_pwgen($user);
|
||||
if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) {
|
||||
msg($lang['proffail'], -1);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(auth_sendPassword($user, $pass)) {
|
||||
msg($lang['resendpwdsuccess'], 1);
|
||||
} else {
|
||||
msg($lang['regmailfail'], -1);
|
||||
}
|
||||
}
|
||||
|
||||
@unlink($tfile);
|
||||
return true;
|
||||
|
||||
} else {
|
||||
// we're in request phase
|
||||
|
||||
if(!$INPUT->post->bool('save')) return false;
|
||||
|
||||
if(!$INPUT->post->str('login')) {
|
||||
msg($lang['resendpwdmissing'], -1);
|
||||
return false;
|
||||
} else {
|
||||
$user = trim($auth->cleanUser($INPUT->post->str('login')));
|
||||
}
|
||||
|
||||
$userinfo = $auth->getUserData($user, $requireGroups = false);
|
||||
if(!$userinfo['mail']) {
|
||||
msg($lang['resendpwdnouser'], -1);
|
||||
return false;
|
||||
}
|
||||
|
||||
// generate auth token
|
||||
$token = md5(auth_randombytes(16)); // random secret
|
||||
$tfile = $conf['cachedir'] . '/' . $token[0] . '/' . $token . '.pwauth';
|
||||
$url = wl('', array('do' => 'resendpwd', 'pwauth' => $token), true, '&');
|
||||
|
||||
io_saveFile($tfile, $user);
|
||||
|
||||
$text = rawLocale('pwconfirm');
|
||||
$trep = array(
|
||||
'FULLNAME' => $userinfo['name'],
|
||||
'LOGIN' => $user,
|
||||
'CONFIRM' => $url
|
||||
);
|
||||
|
||||
$mail = new \Mailer();
|
||||
$mail->to($userinfo['name'] . ' <' . $userinfo['mail'] . '>');
|
||||
$mail->subject($lang['regpwmail']);
|
||||
$mail->setBody($text, $trep);
|
||||
if($mail->send()) {
|
||||
msg($lang['resendpwdconfirm'], 1);
|
||||
} else {
|
||||
msg($lang['regmailfail'], -1);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// never reached
|
||||
}
|
||||
|
||||
}
|
60
content/inc/Action/Revert.php
Normal file
60
content/inc/Action/Revert.php
Normal file
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
use dokuwiki\Action\Exception\ActionException;
|
||||
|
||||
/**
|
||||
* Class Revert
|
||||
*
|
||||
* Quick revert to an old revision
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Revert extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_EDIT;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @inheritdoc
|
||||
* @throws ActionAbort
|
||||
* @throws ActionException
|
||||
* @todo check for writability of the current page ($INFO might do it wrong and check the attic version)
|
||||
*/
|
||||
public function preProcess() {
|
||||
if(!checkSecurityToken()) throw new ActionException();
|
||||
|
||||
global $ID;
|
||||
global $REV;
|
||||
global $lang;
|
||||
|
||||
// when no revision is given, delete current one
|
||||
// FIXME this feature is not exposed in the GUI currently
|
||||
$text = '';
|
||||
$sum = $lang['deleted'];
|
||||
if($REV) {
|
||||
$text = rawWiki($ID, $REV);
|
||||
if(!$text) throw new ActionException(); //something went wrong
|
||||
$sum = sprintf($lang['restored'], dformat($REV));
|
||||
}
|
||||
|
||||
// spam check
|
||||
if(checkwordblock($text)) {
|
||||
msg($lang['wordblock'], -1);
|
||||
throw new ActionException('edit');
|
||||
}
|
||||
|
||||
saveWikiText($ID, $text, $sum, false);
|
||||
msg($sum, 1);
|
||||
$REV = '';
|
||||
|
||||
// continue with draftdel -> redirect -> show
|
||||
throw new ActionAbort('draftdel');
|
||||
}
|
||||
|
||||
}
|
24
content/inc/Action/Revisions.php
Normal file
24
content/inc/Action/Revisions.php
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
/**
|
||||
* Class Revisions
|
||||
*
|
||||
* Show the list of old revisions of the current page
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Revisions extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_READ;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent() {
|
||||
global $INPUT;
|
||||
html_revisions($INPUT->int('first'));
|
||||
}
|
||||
}
|
60
content/inc/Action/Save.php
Normal file
60
content/inc/Action/Save.php
Normal file
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
use dokuwiki\Action\Exception\ActionException;
|
||||
|
||||
/**
|
||||
* Class Save
|
||||
*
|
||||
* Save at the end of an edit session
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Save extends AbstractAction {
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
global $INFO;
|
||||
if($INFO['exists']) {
|
||||
return AUTH_EDIT;
|
||||
} else {
|
||||
return AUTH_CREATE;
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function preProcess() {
|
||||
if(!checkSecurityToken()) throw new ActionException('preview');
|
||||
|
||||
global $ID;
|
||||
global $DATE;
|
||||
global $PRE;
|
||||
global $TEXT;
|
||||
global $SUF;
|
||||
global $SUM;
|
||||
global $lang;
|
||||
global $INFO;
|
||||
global $INPUT;
|
||||
|
||||
//spam check
|
||||
if(checkwordblock()) {
|
||||
msg($lang['wordblock'], -1);
|
||||
throw new ActionException('edit');
|
||||
}
|
||||
//conflict check
|
||||
if($DATE != 0 && $INFO['meta']['date']['modified'] > $DATE) {
|
||||
throw new ActionException('conflict');
|
||||
}
|
||||
|
||||
//save it
|
||||
saveWikiText($ID, con($PRE, $TEXT, $SUF, true), $SUM, $INPUT->bool('minor')); //use pretty mode for con
|
||||
//unlock it
|
||||
unlock($ID);
|
||||
|
||||
// continue with draftdel -> redirect -> show
|
||||
throw new ActionAbort('draftdel');
|
||||
}
|
||||
|
||||
}
|
135
content/inc/Action/Search.php
Normal file
135
content/inc/Action/Search.php
Normal file
|
@ -0,0 +1,135 @@
|
|||
<?php
|
||||
|
||||
namespace dokuwiki\Action;
|
||||
|
||||
use dokuwiki\Action\Exception\ActionAbort;
|
||||
|
||||
/**
|
||||
* Class Search
|
||||
*
|
||||
* Search for pages and content
|
||||
*
|
||||
* @package dokuwiki\Action
|
||||
*/
|
||||
class Search extends AbstractAction {
|
||||
|
||||
protected $pageLookupResults = array();
|
||||
protected $fullTextResults = array();
|
||||
protected $highlight = array();
|
||||
|
||||
/** @inheritdoc */
|
||||
public function minimumPermission() {
|
||||
return AUTH_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* we only search if a search word was given
|
||||
*
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function checkPreconditions() {
|
||||
parent::checkPreconditions();
|
||||
}
|
||||
|
||||
public function preProcess()
|
||||
{
|
||||
global $QUERY, $ID, $conf, $INPUT;
|
||||
$s = cleanID($QUERY);
|
||||
|
||||
if ($ID !== $conf['start'] && !$INPUT->has('q')) {
|
||||
parse_str($INPUT->server->str('QUERY_STRING'), $urlParts);
|
||||
$urlParts['q'] = $urlParts['id'];
|
||||
unset($urlParts['id']);
|
||||
$url = wl($ID, $urlParts, true, '&');
|
||||
send_redirect($url);
|
||||
}
|
||||
|
||||
if ($s === '') throw new ActionAbort();
|
||||
$this->adjustGlobalQuery();
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function tplContent()
|
||||
{
|
||||
$this->execute();
|
||||
|
||||
$search = new \dokuwiki\Ui\Search($this->pageLookupResults, $this->fullTextResults, $this->highlight);
|
||||
$search->show();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* run the search
|
||||
*/
|
||||
protected function execute()
|
||||
{
|
||||
global $INPUT, $QUERY;
|
||||
$after = $INPUT->str('min');
|
||||
$before = $INPUT->str('max');
|
||||
$this->pageLookupResults = ft_pageLookup($QUERY, true, useHeading('navigation'), $after, $before);
|
||||
$this->fullTextResults = ft_pageSearch($QUERY, $highlight, $INPUT->str('srt'), $after, $before);
|
||||
$this->highlight = $highlight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust the global query accordingly to the config search_nslimit and search_fragment
|
||||
*
|
||||
* This will only do something if the search didn't originate from the form on the searchpage itself
|
||||
*/
|
||||
protected function adjustGlobalQuery()
|
||||
{
|
||||
global $conf, $INPUT, $QUERY, $ID;
|
||||
|
||||
if ($INPUT->bool('sf')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$Indexer = idx_get_indexer();
|
||||
$parsedQuery = ft_queryParser($Indexer, $QUERY);
|
||||
|
||||
if (empty($parsedQuery['ns']) && empty($parsedQuery['notns'])) {
|
||||
if ($conf['search_nslimit'] > 0) {
|
||||
if (getNS($ID) !== false) {
|
||||
$nsParts = explode(':', getNS($ID));
|
||||
$ns = implode(':', array_slice($nsParts, 0, $conf['search_nslimit']));
|
||||
$QUERY .= " @$ns";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($conf['search_fragment'] !== 'exact') {
|
||||
if (empty(array_diff($parsedQuery['words'], $parsedQuery['and']))) {
|
||||
if (strpos($QUERY, '*') === false) {
|
||||
$queryParts = explode(' ', $QUERY);
|
||||
$queryParts = array_map(function ($part) {
|
||||
if (strpos($part, '@') === 0) {
|
||||
return $part;
|
||||
}
|
||||
if (strpos($part, 'ns:') === 0) {
|
||||
return $part;
|
||||
}
|
||||
if (strpos($part, '^') === 0) {
|
||||
return $part;
|
||||
}
|
||||
if (strpos($part, '-ns:') === 0) {
|
||||
return $part;
|
||||
}
|
||||
|
||||
global $conf;
|
||||
|
||||
if ($conf['search_fragment'] === 'starts_with') {
|
||||
return $part . '*';
|
||||
}
|
||||
if ($conf['search_fragment'] === 'ends_with') {
|
||||
return '*' . $part;
|
||||
}
|
||||
|
||||
return '*' . $part . '*';
|
||||
|
||||
}, $queryParts);
|
||||
$QUERY = implode(' ', $queryParts);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user