diff options
author | Yaco <franco@reevo.org> | 2022-03-08 13:08:34 +0000 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2022-03-08 13:08:34 +0000 |
commit | c985c40d3f3fc6a2be3be3186df3bf2f32189475 (patch) | |
tree | cee11f5e5a7e351ee0fec36d58d72cbee4f7e49b |
first commit after acervus codebase
1939 files changed, 271646 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..553f9eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +.gitmodules +.directory +*.old +*.log +*.bkp +users.auth.php +farm.ini + +content/* +!content/_base + +platform/log/* +!platform/log/.gitkeep + +platform/etc/nginx/* +!platform/etc/nginx/*.sample +platform/etc/php-fpm/* +!platform/etc/php-fpm/*.sample + +platform/run/* +!platform/run/.gitkeep + +platform/tmp/* +!platform/tmp/.gitkeep + +platform/www/data/attic/* +!platform/www/data/attic/.gitkeep +platform/www/data/cache/* +!platform/www/data/cache/.gitkeep +platform/www/data/index/* +!platform/www/data/index/.gitkeep +platform/www/data/locks/* +!platform/www/data/locks/.gitkeep +platform/www/data/meta/* +!platform/www/data/meta/.gitkeep +platform/www/data/tmp/* +!platform/www/data/tmp/.gitkeep diff --git a/content/_base/conf/acl.auth.php b/content/_base/conf/acl.auth.php new file mode 100644 index 0000000..c70af78 --- /dev/null +++ b/content/_base/conf/acl.auth.php @@ -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 1 diff --git a/content/_base/conf/acl.auth.php.save b/content/_base/conf/acl.auth.php.save new file mode 100644 index 0000000..c70af78 --- /dev/null +++ b/content/_base/conf/acl.auth.php.save @@ -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 1 diff --git a/content/_base/conf/local.php b/content/_base/conf/local.php new file mode 100644 index 0000000..0e5e367 --- /dev/null +++ b/content/_base/conf/local.php @@ -0,0 +1,8 @@ +<?php +/** + * Minimal local config + */ +$conf['useacl'] = 1; +$conf['superuser'] = '@admin'; + +$conf['title'] = 'base'; diff --git a/content/_base/conf/plugins.local.php b/content/_base/conf/plugins.local.php new file mode 100644 index 0000000..4f256a9 --- /dev/null +++ b/content/_base/conf/plugins.local.php @@ -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. + */ diff --git a/content/_base/data/media/.gitkeep b/content/_base/data/media/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/content/_base/data/media/.gitkeep diff --git a/content/_base/data/meta/.gitkeep b/content/_base/data/meta/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/content/_base/data/meta/.gitkeep diff --git a/platform/README.md b/platform/README.md new file mode 100644 index 0000000..e11df9c --- /dev/null +++ b/platform/README.md @@ -0,0 +1,5 @@ +# Acerv.us platform + +## Tools + +### Generate PDF version of a content diff --git a/platform/bin/Makefile b/platform/bin/Makefile new file mode 100644 index 0000000..47b522e --- /dev/null +++ b/platform/bin/Makefile @@ -0,0 +1,62 @@ +# +# Author: Jake Zimmerman <jake@zimmerman.io> +# +# ===== Usage ================================================================ +# +# NOTE: +# When running these commands at the command line, replace $(TARGET) with +# the actual value of the TARGET variable. +# +# +# make Compile all *.md files to PDFs +# make <filename>.pdf Compile <filename>.md to a PDF +# make <filename>.tex Generate the intermediate LaTeX for <filename>.md +# +# make view Compile $(TARGET).md to a PDF, then view it +# make again Force everything to recompile +# +# make clean Get rid of all intermediate generated files +# make veryclean Get rid of ALL generated files: +# +# make print Send $(TARGET).pdf to the default printer: +# +# ============================================================================ + + +TARGET = sample + +SOURCES = $(shell find . -name '*.md') + +PANDOC_FLAGS =\ + --template template.tex \ + -f markdown+tex_math_single_backslash \ + -t latex \ + +LATEX_FLAGS = \ + +PDF_ENGINE = xelatex +PANDOCVERSIONGTEQ2 := $(shell expr `pandoc --version | grep ^pandoc | sed 's/^.* //g' | cut -f1 -d.` \>= 2) +ifeq "$(PANDOCVERSIONGTEQ2)" "1" + LATEX_FLAGS += --pdf-engine=$(PDF_ENGINE) +else + LATEX_FLAGS += --latex-engine=$(PDF_ENGINE) +endif + +all: $(TARGET).pdf + +$(TARGET).pdf: $(SOURCES) template.tex + pandoc $(PANDOC_FLAGS) $(LATEX_FLAGS) -o $@ $(SOURCES) + +$(TARGET).tex: $(SOURCES) template.tex + pandoc --standalone $(PANDOC_FLAGS) -o $@ $(SOURCES) + +clean: + rm -f *.aux *.log *.nav *.out *.snm *.toc *.vrb tags || true + +veryclean: clean + rm -f $(TARGET).pdf + +view: $(TARGET).pdf + if [ "Darwin" = "$(shell uname)" ]; then open $(TARGET).pdf ; else xdg-open $(TARGET).pdf ; fi + +.PHONY: all clean veryclean view diff --git a/platform/bin/doku2md.sh b/platform/bin/doku2md.sh new file mode 100755 index 0000000..a3f0a13 --- /dev/null +++ b/platform/bin/doku2md.sh @@ -0,0 +1,116 @@ +#!/bin/bash + +### Script para dejar listo los .txt de Doku para hacerlos markdown +url='https://illich.test/' +IFS=$'\n' + +# Arregla footnotes + + dir=`dirname $1` + name=`echo $1 | sed 's/\.txt//g'` + + lang=${name: -2} + + ## Corta el archivo en dos, empezando por la linea de la primera footnote + + n=`grep -n -m 1 ':]' $1 |sed 's/\([0-9]*\).*/\1/'` + + csplit -s $1 $n -f $1.tmp. + + ## Agrega saltos de linea y elimina corchete final + + grep ':]' $1.tmp.01 | perl -p -e 's/\n/\n\n/' > $1.footer.tmp + + sed -i 's/]$//g' $1.footer.tmp + + ## Unifica todo y corrige corchete de apertura + + cat $1.tmp.00 > $1.tmp + + cat $1.footer.tmp >> $1.tmp + + sed 's/:]/]:/g' $1.tmp > $name.body.tmp + + ## Borra temporales + + + + +# agregar cabecera para pandoc! + +if test -f "$dir/index.txt"; then + echo "hay index" + yaml_title=`head -n1 "$dir/index.txt" | sed 's/# //g'` + yaml_date=`grep 'LANG_publicationdate' "$dir/index.txt" | cut -d ':' -f2 | sed 's/ //'` + yaml_author=`grep 'LANG_author' "$dir/index.txt" | cut -d ':' -f2 | sed 's/ //'` + if [ -z "$yaml_author" ] + then + yaml_author="Ivan Illich" + else + case $lang in + en) + yaml_author=`echo $yaml_author | sed 's/, / and /g'` + ;; + es) + yaml_author=`echo $yaml_author | sed 's/, / y /g'` + ;; + esac + fi + + meta=`echo "$name.changes" | sed 's/pages/meta/'` + # el numero de revision es un unix timestamp + revision=`cat $meta | tail -n1 | cut -f1` + + # ../../content/data/pages/es/book/gender/es + # http://illich.test/es:book:gender:es?rev=1620353793 + webpage=`echo $name | sed 's/^.*pages\///'| sed 's/\//:/g'` + + + echo " +--- +title: \"$yaml_title\" +author: \"$yaml_author\" +abstract: \"$url$webpage?rev=$revision\" +date: \"$yaml_date\" +lang: \"$lang\" +titlepage: true +titlepage-color: \"FFFFFF\" +titlepage-text-color: \"000000\" +titlepage-rule-color: \"CCCCCC\" +titlepage-rule-height: 4 +--- + " > $name.head.tmp +fi + + +## Hay que cambiar los titulos + +sed -i 1d $name.body.tmp +sed -i 's/^## /# /g' $name.body.tmp +sed -i 's/^### /## /g' $name.body.tmp +sed -i 's/^#### /### /g' $name.body.tmp +sed -i 's/^##### /#### /g' $name.body.tmp +sed -i 's/^###### /##### /g' $name.body.tmp + +cat $name.head.tmp > $name.md +cat $name.body.tmp >> $name.md + + +# Mas https://github.com/alexeygumirov/pandoc-for-pdf-how-to +# --- +# title: "Towards Illich's 'legibility'" +# subtitle: "Returning to Ivan through the Mirror of the Past" +# author: "Le Goliard[^fb42]" +# date: "2020-11-29 / Version 1.3[^b840]" +# # abstract: "The important thing is love" +# keywords: "Illich, JIS" +# bibliography: "illich_legibility-en.bib" +# lang: "es-ES" +# rights: "This work is published under the terms of the license 'Do What the Fuck You Want to Public License 2.0' (WTFPL 2.0). For more information see: https://en.wikipedia.org/wiki/WTFPL" +# --- + + + +rm $dir/*.tmp + +rm $dir/*.tmp.* diff --git a/platform/bin/template.tex b/platform/bin/template.tex new file mode 100644 index 0000000..1faea77 --- /dev/null +++ b/platform/bin/template.tex @@ -0,0 +1,291 @@ +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} + +% For redefining the \chapter command +\usepackage[explicit]{titlesec} + +% To make the headers nicer (lowercase) +\usepackage{fancyhdr} +\renewcommand{\chaptermark}[1]{\markboth{#1}{}} +\renewcommand{\sectionmark}[1]{\markright{#1}} +\pagestyle{fancy} +\fancyhf{} +\fancyhead[LE,RO]{\thepage} +\fancyhead[LO]{\itshape\nouppercase{\rightmark}} +\fancyhead[RE]{\itshape\nouppercase{\leftmark}} +\renewcommand{\headrulewidth}{0pt} + +$if(newtxmathoptions)$ +\usepackage[$for(newtxmathoptions)$$newtxmathoptions$$sep$,$endfor$]{newtxmath} +\let\Bbbk\relax +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} +$if(euro)$ + \usepackage{eurosym} +$endif$ +\else % if luatex or xelatex + \ifxetex + %\usepackage{mathspec} + \else + \usepackage{fontspec} + \fi + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$if(euro)$ + \newcommand{\euro}{€} +$endif$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$if(CJKmainfont)$ + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +\usepackage{hyperref} +$if(colorlinks)$ +\PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref +$endif$ +\hypersetup{unicode=true, +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$; $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(lang)$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ +$if(natbib)$ +\usepackage{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage$if(biblio-style)$[style=$biblio-style$]$endif${biblatex} +$if(biblatexoptions)$\ExecuteBibliographyOptions{$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$}$endif$ +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{5} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + $if(latex-dir-rtl)$ + \usepackage[RTLdocument]{bidi} + $else$ + \usepackage{bidi} + $endif$ +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ +% Overwrite \begin{figure}[htbp] with \begin{figure}[H] +\usepackage{float} +\let\origfigure=\figure +\let\endorigfigure=\endfigure +\renewenvironment{figure}[1][]{% +\origfigure[H] +}{% +\endorigfigure +} +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +\providecommand{\subtitle}[1]{} +\subtitle{$subtitle$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +\date{$date$} + +\begin{document} +$if(title)$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\newpage +\tableofcontents +} +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ + +% Redefine chapter title after table of contents +\titleformat{\chapter}[display]{\normalfont\bfseries}{}{0pt}{\huge\thechapter.\,#1} + +$body$ + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/platform/etc/nginx/www.conf.sample b/platform/etc/nginx/www.conf.sample new file mode 100644 index 0000000..cacddaa --- /dev/null +++ b/platform/etc/nginx/www.conf.sample @@ -0,0 +1,42 @@ +server { + listen 80; + server_name acerv.uz *.acerv.uz; + root /srv/acerv.us/platform/www/; + error_log /srv/acerv.us/platform/log/nginx.error error; + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + index doku.php index.php; + + #Remember to comment the below out when you're installing, and uncomment it when done. + #location ~ /(data/|conf/|bin/|inc/|install.php) { deny all; } + + location / { try_files $uri $uri/ @dokuwiki; } + + location @dokuwiki { + # rewrites "doku.php/" out of the URLs if you set the userewrite setting to .htaccess in dokuwiki config page + rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; + rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; + rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; + rewrite ^/(.*) /doku.php?id=$1&$args last; + } + + location ~ \.php$ { + try_files $uri $uri/ /doku.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param REDIRECT_STATUS 200; +# fastcgi_pass unix:/srv/reevo-web/run/blog.socket; + fastcgi_pass unix:/srv/acerv.us/platform/run/acervus.socket; + fastcgi_buffering off; + } +} diff --git a/platform/etc/php-fpm/www.conf.sample b/platform/etc/php-fpm/www.conf.sample new file mode 100644 index 0000000..07bf705 --- /dev/null +++ b/platform/etc/php-fpm/www.conf.sample @@ -0,0 +1,53 @@ +[acervus] + +user = reevo +group = www-data + +listen = /srv/acerv.us/platform/run/$pool.socket +access.log = /srv/acerv.us/platform/log/php_fpm.access-$pool.log +slowlog = /srv/acerv.us/platform/log/php_fpm.slow-$pool.log +listen.owner = reevo +listen.group = www-data +listen.mode = 0660 + +listen.allowed_clients = 127.0.0.1 + +pm = dynamic +pm.max_children = 50 +pm.start_servers = 10 +pm.min_spare_servers = 5 +pm.max_spare_servers = 30 +pm.status_path = /.status + +ping.path = /.ping +ping.response = pong acerv.us + +request_slowlog_timeout = 10 +request_terminate_timeout = 10m +rlimit_files = 1024 +rlimit_core = 0 + +chdir = /srv/acerv.us/platform/www/ + +catch_workers_output = yes + +security.limit_extensions = .php .jpg .png .js .css + +env[HOSTNAME] = acerv.uz +env[TMP] = /srv/acerv.us/platform/tmp/ +env[TMPDIR] = /srv/acerv.us/platform/tmp/ +env[TEMP] = /srv/acerv.us/platform/tmp/ + +php_flag[display_errors] = on +php_admin_value[error_log] = /srv/acerv.us/platform/log/php_fpm-$pool.error.log +php_admin_flag[log_errors] = on +php_admin_value[memory_limit] = 128M + +; upload limits +php_admin_value[post_max_size] = 12M +php_admin_value[upload_max_filesize] = 10M + +; php_admin_value[session.cookie_domain] = .illich.test + +php_admin_value[cgi.fix_pathinfo] = 1 +php_admin_value[session.save_path] = /srv/acerv.us/platform/tmp/ diff --git a/platform/i18n/textinsert_strings.php b/platform/i18n/textinsert_strings.php new file mode 100644 index 0000000..369ee7b --- /dev/null +++ b/platform/i18n/textinsert_strings.php @@ -0,0 +1,24 @@ +<?php +// this is initially defined in textinsert database: /index?do=admin&page=textinsert +// the database is stored in /www/data/meta/macros/macros.ser + +$lang_en['authors'] = 'Authors'; +$lang_es['authors'] = 'Autores'; + +$lang_en['textfull'] = 'Full text'; +$lang_es['textfull'] = 'Texto completo'; + +$lang_en['titleorig'] = 'Original title'; +$lang_es['titleorig'] = 'Título original'; + +$lang_en['publicationdate'] = 'Original publication'; +$lang_es['publicationdate'] = 'Primera publicación'; + +$lang_en['comments'] = 'Comments'; +$lang_es['comments'] = 'Comentarios'; + +$lang_en['versions'] = 'Other versions'; +$lang_es['versions'] = 'Otras versiones'; + +$lang_en['translations'] = 'Translations'; +$lang_es['translations'] = 'Traducciones'; diff --git a/platform/log/.gitkeep b/platform/log/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/platform/log/.gitkeep diff --git a/platform/run/.gitkeep b/platform/run/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/platform/run/.gitkeep diff --git a/platform/tmp/.gitkeep b/platform/tmp/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/platform/tmp/.gitkeep diff --git a/platform/www/.htaccess b/platform/www/.htaccess new file mode 100644 index 0000000..7e5ce2a --- /dev/null +++ b/platform/www/.htaccess @@ -0,0 +1,50 @@ +# Options added for farm setup by farmer plugin: +RewriteEngine On +RewriteRule ^!([^/]+)/(.*) $2?animal=$1 [QSA,DPI] +RewriteRule ^!([^/]+)$ ?animal=$1 [QSA,DPI] +Options +FollowSymLinks +# end of farm configuration + +## You should disable Indexes and MultiViews either here or in the +## global config. Symlinks maybe needed for URL rewriting. +#Options -Indexes -MultiViews +FollowSymLinks + +## make sure nobody gets the htaccess, README, COPYING or VERSION files +<Files ~ "^([\._]ht|README$|VERSION$|COPYING$)"> + <IfModule mod_authz_core.c> + Require all denied + </IfModule> + <IfModule !mod_authz_core.c> + Order allow,deny + Deny from all + </IfModule> +</Files> + +## Don't allow access to git directories +<IfModule alias_module> + RedirectMatch 404 /\.git +</IfModule> + +## Uncomment these rules if you want to have nice URLs using +## $conf['userewrite'] = 1 - not needed for rewrite mode 2 +#RewriteEngine on +# +#RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L] +#RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L] +#RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L] +#RewriteRule ^$ doku.php [L] +#RewriteCond %{REQUEST_FILENAME} !-f +#RewriteCond %{REQUEST_FILENAME} !-d +#RewriteRule (.*) doku.php?id=$1 [QSA,L] +#RewriteRule ^index.php$ doku.php +# +## Not all installations will require the following line. If you do, +## change "/dokuwiki" to the path to your dokuwiki directory relative +## to your document root. +#RewriteBase /dokuwiki +# +## If you enable DokuWikis XML-RPC interface, you should consider to +## restrict access to it over HTTPS only! Uncomment the following two +## rules if your server setup allows HTTPS. +#RewriteCond %{HTTPS} !=on +#RewriteRule ^lib/exe/xmlrpc.php$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] diff --git a/platform/www/.htaccess.dist b/platform/www/.htaccess.dist new file mode 100644 index 0000000..3e96a83 --- /dev/null +++ b/platform/www/.htaccess.dist @@ -0,0 +1,43 @@ +## You should disable Indexes and MultiViews either here or in the +## global config. Symlinks maybe needed for URL rewriting. +#Options -Indexes -MultiViews +FollowSymLinks + +## make sure nobody gets the htaccess, README, COPYING or VERSION files +<Files ~ "^([\._]ht|README$|VERSION$|COPYING$)"> + <IfModule mod_authz_core.c> + Require all denied + </IfModule> + <IfModule !mod_authz_core.c> + Order allow,deny + Deny from all + </IfModule> +</Files> + +## Don't allow access to git directories +<IfModule alias_module> + RedirectMatch 404 /\.git +</IfModule> + +## Uncomment these rules if you want to have nice URLs using +## $conf['userewrite'] = 1 - not needed for rewrite mode 2 +#RewriteEngine on +# +#RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L] +#RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L] +#RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L] +#RewriteRule ^$ doku.php [L] +#RewriteCond %{REQUEST_FILENAME} !-f +#RewriteCond %{REQUEST_FILENAME} !-d +#RewriteRule (.*) doku.php?id=$1 [QSA,L] +#RewriteRule ^index.php$ doku.php +# +## Not all installations will require the following line. If you do, +## change "/dokuwiki" to the path to your dokuwiki directory relative +## to your document root. +#RewriteBase /dokuwiki +# +## If you enable DokuWikis XML-RPC interface, you should consider to +## restrict access to it over HTTPS only! Uncomment the following two +## rules if your server setup allows HTTPS. +#RewriteCond %{HTTPS} !=on +#RewriteRule ^lib/exe/xmlrpc.php$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] diff --git a/platform/www/COPYING b/platform/www/COPYING new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/platform/www/COPYING @@ -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. diff --git a/platform/www/README b/platform/www/README new file mode 100644 index 0000000..380f353 --- /dev/null +++ b/platform/www/README @@ -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 + diff --git a/platform/www/VERSION b/platform/www/VERSION new file mode 100644 index 0000000..a16fdd8 --- /dev/null +++ b/platform/www/VERSION @@ -0,0 +1 @@ +2020-07-29 "Hogfather" diff --git a/platform/www/bin/.htaccess b/platform/www/bin/.htaccess new file mode 100644 index 0000000..7625314 --- /dev/null +++ b/platform/www/bin/.htaccess @@ -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> diff --git a/platform/www/bin/dwpage.php b/platform/www/bin/dwpage.php new file mode 100755 index 0000000..dee8039 --- /dev/null +++ b/platform/www/bin/dwpage.php @@ -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(); diff --git a/platform/www/bin/gittool.php b/platform/www/bin/gittool.php new file mode 100755 index 0000000..5ebd0c5 --- /dev/null +++ b/platform/www/bin/gittool.php @@ -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(); diff --git a/platform/www/bin/indexer.php b/platform/www/bin/indexer.php new file mode 100755 index 0000000..c8c8361 --- /dev/null +++ b/platform/www/bin/indexer.php @@ -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(); diff --git a/platform/www/bin/plugin.php b/platform/www/bin/plugin.php new file mode 100755 index 0000000..84a800e --- /dev/null +++ b/platform/www/bin/plugin.php @@ -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(); diff --git a/platform/www/bin/render.php b/platform/www/bin/render.php new file mode 100755 index 0000000..6076951 --- /dev/null +++ b/platform/www/bin/render.php @@ -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(); diff --git a/platform/www/bin/striplangs.php b/platform/www/bin/striplangs.php new file mode 100755 index 0000000..91805d5 --- /dev/null +++ b/platform/www/bin/striplangs.php @@ -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(); diff --git a/platform/www/bin/wantedpages.php b/platform/www/bin/wantedpages.php new file mode 100755 index 0000000..6b3f787 --- /dev/null +++ b/platform/www/bin/wantedpages.php @@ -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(); diff --git a/platform/www/conf/.htaccess b/platform/www/conf/.htaccess new file mode 100644 index 0000000..9f49132 --- /dev/null +++ b/platform/www/conf/.htaccess @@ -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> diff --git a/platform/www/conf/acl.auth.php b/platform/www/conf/acl.auth.php new file mode 100644 index 0000000..c70af78 --- /dev/null +++ b/platform/www/conf/acl.auth.php @@ -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 1 diff --git a/platform/www/conf/acl.auth.php.dist b/platform/www/conf/acl.auth.php.dist new file mode 100644 index 0000000..14344d7 --- /dev/null +++ b/platform/www/conf/acl.auth.php.dist @@ -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 diff --git a/platform/www/conf/acronyms.conf b/platform/www/conf/acronyms.conf new file mode 100644 index 0000000..2ecdeda --- /dev/null +++ b/platform/www/conf/acronyms.conf @@ -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 diff --git a/platform/www/conf/dokuwiki.php b/platform/www/conf/dokuwiki.php new file mode 100644 index 0000000..290453d --- /dev/null +++ b/platform/www/conf/dokuwiki.php @@ -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'] = ''; diff --git a/platform/www/conf/entities.conf b/platform/www/conf/entities.conf new file mode 100644 index 0000000..c0d653c --- /dev/null +++ b/platform/www/conf/entities.conf @@ -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) ® +... … + diff --git a/platform/www/conf/farm.ini.dist b/platform/www/conf/farm.ini.dist new file mode 100644 index 0000000..40aa9f9 --- /dev/null +++ b/platform/www/conf/farm.ini.dist @@ -0,0 +1,26 @@ +; Farm config created by the farmer plugin + +[base] +farmhost = "acerv.uz" +basedomain = "acerv.uz" +farmdir = "/srv/acerv.us/content/" + +[notfound] +show = "farmer" +url = "" + +[inherit] +main = 1 +acronyms = 1 +entities = 1 +interwiki = 1 +license = 1 +mime = 1 +scheme = 1 +smileys = 1 +wordblock = 1 +users = 1 +plugins = 1 +userstyle = 0 +userscript = 0 +styleini = 0 diff --git a/platform/www/conf/farm.ini.save b/platform/www/conf/farm.ini.save new file mode 100644 index 0000000..af1c8da --- /dev/null +++ b/platform/www/conf/farm.ini.save @@ -0,0 +1,26 @@ +; Farm config created by the farmer plugin + +[base] +farmhost = "wikifarm.test" +basedomain = "wikifarm.test" +farmdir = "/srv/acerv.us/content" + +[notfound] +show = "farmer" +url = "" + +[inherit] +main = 1 +acronyms = 1 +entities = 1 +interwiki = 1 +license = 1 +mime = 1 +scheme = 1 +smileys = 1 +wordblock = 1 +users = 0 +plugins = 0 +userstyle = 0 +userscript = 0 +styleini = 0 diff --git a/platform/www/conf/interwiki.conf b/platform/www/conf/interwiki.conf new file mode 100644 index 0000000..58bc517 --- /dev/null +++ b/platform/www/conf/interwiki.conf @@ -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} diff --git a/platform/www/conf/license.php b/platform/www/conf/license.php new file mode 100644 index 0000000..845c59f --- /dev/null +++ b/platform/www/conf/license.php @@ -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, +); + diff --git a/platform/www/conf/local.php b/platform/www/conf/local.php new file mode 100644 index 0000000..d4bc65f --- /dev/null +++ b/platform/www/conf/local.php @@ -0,0 +1,29 @@ +<?php +/* + * Dokuwiki's Main Configuration File - Local Settings + * Auto-generated by config plugin + * Run for user: admin + * Date: Mon, 07 Mar 2022 01:33:50 +0000 + */ + +$conf['title'] = 'The Acervus Project'; +$conf['start'] = 'index'; +$conf['template'] = 'acervus'; +$conf['license'] = ''; +$conf['breadcrumbs'] = 0; +$conf['youarehere'] = 1; +$conf['useacl'] = 1; +$conf['superuser'] = 'admin'; +$conf['disableactions'] = 'register'; +$conf['htmlok'] = 1; +$conf['userewrite'] = '1'; +$conf['plugin']['authldap']['attributes'] = array(); +$conf['plugin']['fastwiki']['save'] = 1; +$conf['plugin']['translation']['translations'] = 'en es'; +$conf['plugin']['translation']['display'] = 'langcode,name'; +$conf['plugin']['translation']['translateui'] = 1; +$conf['plugin']['translation']['localabout'] = 1; +$conf['plugin']['translation']['copytrans'] = 1; +$conf['tpl']['acervus']['numberedHeading'] = 1; +$conf['tpl']['acervus']['tocPosition'] = 'dokuwiki'; +$conf['tpl']['acervus']['footer'] = 'footer'; diff --git a/platform/www/conf/local.php.bak.php b/platform/www/conf/local.php.bak.php new file mode 100644 index 0000000..8649c89 --- /dev/null +++ b/platform/www/conf/local.php.bak.php @@ -0,0 +1,29 @@ +<?php +/* + * Dokuwiki's Main Configuration File - Local Settings + * Auto-generated by config plugin + * Run for user: admin + * Date: Mon, 07 Mar 2022 01:32:28 +0000 + */ + +$conf['title'] = 'Acervus2'; +$conf['start'] = 'index'; +$conf['template'] = 'acervus'; +$conf['license'] = ''; +$conf['breadcrumbs'] = 0; +$conf['youarehere'] = 1; +$conf['useacl'] = 1; +$conf['superuser'] = 'admin'; +$conf['disableactions'] = 'register'; +$conf['htmlok'] = 1; +$conf['userewrite'] = '1'; +$conf['plugin']['authldap']['attributes'] = array(); +$conf['plugin']['fastwiki']['save'] = 1; +$conf['plugin']['translation']['translations'] = 'en es'; +$conf['plugin']['translation']['display'] = 'langcode,name'; +$conf['plugin']['translation']['translateui'] = 1; +$conf['plugin']['translation']['localabout'] = 1; +$conf['plugin']['translation']['copytrans'] = 1; +$conf['tpl']['acervus']['numberedHeading'] = 1; +$conf['tpl']['acervus']['tocPosition'] = 'dokuwiki'; +$conf['tpl']['acervus']['footer'] = 'footer'; diff --git a/platform/www/conf/local.php.dist b/platform/www/conf/local.php.dist new file mode 100644 index 0000000..0397954 --- /dev/null +++ b/platform/www/conf/local.php.dist @@ -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'; + diff --git a/platform/www/conf/manifest.json b/platform/www/conf/manifest.json new file mode 100644 index 0000000..891bd79 --- /dev/null +++ b/platform/www/conf/manifest.json @@ -0,0 +1,3 @@ +{ + "display": "standalone" +} diff --git a/platform/www/conf/mediameta.php b/platform/www/conf/mediameta.php new file mode 100644 index 0000000..f75fa08 --- /dev/null +++ b/platform/www/conf/mediameta.php @@ -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')), +); diff --git a/platform/www/conf/mime.conf b/platform/www/conf/mime.conf new file mode 100644 index 0000000..56b72a4 --- /dev/null +++ b/platform/www/conf/mime.conf @@ -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 + diff --git a/platform/www/conf/mysql.conf.php.example b/platform/www/conf/mysql.conf.php.example new file mode 100644 index 0000000..8337f51 --- /dev/null +++ b/platform/www/conf/mysql.conf.php.example @@ -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}'"; + + diff --git a/platform/www/conf/plugins.local.php b/platform/www/conf/plugins.local.php new file mode 100644 index 0000000..4f256a9 --- /dev/null +++ b/platform/www/conf/plugins.local.php @@ -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. + */ diff --git a/platform/www/conf/plugins.php b/platform/www/conf/plugins.php new file mode 100644 index 0000000..b2c7997 --- /dev/null +++ b/platform/www/conf/plugins.php @@ -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; diff --git a/platform/www/conf/plugins.required.php b/platform/www/conf/plugins.required.php new file mode 100644 index 0000000..75336da --- /dev/null +++ b/platform/www/conf/plugins.required.php @@ -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 diff --git a/platform/www/conf/scheme.conf b/platform/www/conf/scheme.conf new file mode 100644 index 0000000..88cb3c4 --- /dev/null +++ b/platform/www/conf/scheme.conf @@ -0,0 +1,11 @@ +#Add URL schemes you want to be recognized as links here + +http +https +telnet +gopher +wais +ftp +ed2k +irc +ldap
\ No newline at end of file diff --git a/platform/www/conf/smileys.conf b/platform/www/conf/smileys.conf new file mode 100644 index 0000000..80daed5 --- /dev/null +++ b/platform/www/conf/smileys.conf @@ -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 + diff --git a/platform/www/conf/users.auth.php.dist b/platform/www/conf/users.auth.php.dist new file mode 100644 index 0000000..8231aa5 --- /dev/null +++ b/platform/www/conf/users.auth.php.dist @@ -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 + diff --git a/platform/www/conf/users.auth.php.sample b/platform/www/conf/users.auth.php.sample new file mode 100644 index 0000000..164629a --- /dev/null +++ b/platform/www/conf/users.auth.php.sample @@ -0,0 +1,11 @@ +# users.auth.php +# <?php exit()?> +# Don't modify the lines above +# +# Userfile +# +# Format: +# +# login:passwordhash:Real Name:email:groups,comma,seperated + +admin:$1$cce258b2$U9o5nK0z4MhTfB5QlKF23/:admin:admin@example.org:admin,user diff --git a/platform/www/conf/wordblock.conf b/platform/www/conf/wordblock.conf new file mode 100644 index 0000000..3040fa0 --- /dev/null +++ b/platform/www/conf/wordblock.conf @@ -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) diff --git a/platform/www/data/.htaccess b/platform/www/data/.htaccess new file mode 100644 index 0000000..7625314 --- /dev/null +++ b/platform/www/data/.htaccess @@ -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> diff --git a/platform/www/data/_dummy b/platform/www/data/_dummy new file mode 100644 index 0000000..e492265 --- /dev/null +++ b/platform/www/data/_dummy @@ -0,0 +1 @@ +You can safely delete this file.
\ No newline at end of file diff --git a/platform/www/data/deleted.files b/platform/www/data/deleted.files new file mode 100644 index 0000000..1d5db7c --- /dev/null +++ b/platform/www/data/deleted.files @@ -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/ |