Merge branch 'seeddms-5.1.x' into seeddms-6.0.x

This commit is contained in:
Uwe Steinmann 2025-09-24 17:47:50 +02:00
commit 0c723a2267
15 changed files with 489 additions and 125 deletions

2
.gitignore vendored
View File

@ -1,4 +1,6 @@
*.tar.gz
SeedDMS_*/*.tgz
ext/*
vendor
webapp/*
www/ext

View File

@ -6,7 +6,11 @@ NODISTFILES=utils/importmail.php utils/seedddms-importmail utils/remote-email-up
PHPDOC=~/Downloads/phpDocumentor.phar
dist:
INSTALL_PATH=/home/www-data/seeddms-test
all: dist
olddist:
mkdir -p tmp/seeddms-$(VERSION)
cp -a $(SRC) tmp/seeddms-$(VERSION)
mkdir -p tmp/seeddms-$(VERSION)/views
@ -23,9 +27,18 @@ dist:
(cd tmp; tar --exclude=.svn --exclude=.gitignore -czvf ../seeddms-$(VERSION).tar.gz seeddms-$(VERSION))
rm -rf tmp
dist:
php vendor/bin/phing -Dversion=$(VERSION) dist
quickstart:
php8.2 vendor/bin/phing -Dversion=$(VERSION) package
quickstart-dev:
php vendor/bin/phing -Dversion=$(VERSION) -Dmode=development package
install:
php vendor/bin/phing -Dversion=$(VERSION) -Dinstallpath=$(INSTALL_PATH) -Ddomain=dms.seeddms.org install
unittest:
vendor/bin/phing -Dversion=$(VERSION) phpunitfast
@ -95,4 +108,4 @@ PKGFILE=SeedDMS_Core/package.xml
changelog:
@sgrep 'stag("DATE") .. etag("DATE") or ((stag("RELEASE") .. etag("RELEASE")) in (stag("VERSION") .. etag("VERSION"))) or inner(stag("NOTES") __ etag("NOTES"))' ${PKGFILE} | sed -e 's#^ *<date>\([-0-9]*\)</date><release>\([0-9.preRC]*\)</release>#\n\n\2 (\1)\n---------------------#' | awk -F'\n' -vRS='' -vOFS='|' '{$$1=$$1}1' | sort -V -r | sed 's/$$/\n/' | tr '|' '\n'
.PHONY: doc webdav webapp repository changelog
.PHONY: doc webdav webapp repository changelog install

52
README.md Normal file
View File

@ -0,0 +1,52 @@
SeedDMS is a PHP based Document Management System. For more information
check the web site at https://www.seeddms.org
There are detailed installation instructions from a preconfigured distribution
at [doc/README.Install.md]
If you prefer to install from git, you will need to:
1. Create a directory, e.g. seeddms
`mkdir seeddms`
2. Change into that directory
`cd seeddms`
3. Clone the various SeedDMS repositories
```
git clone https://codeberg.org/SeedDMS/preview.git
git clone https://codeberg.org/SeedDMS/lucene.git
git clone https://codeberg.org/SeedDMS/ѕqlitefts.git
git clone https://codeberg.org/SeedDMS/http_webdav_server.git
```
4. For SeedDMS 5.1.x
```
git clone -b seeddms-5.1.x https://codeberg.org/SeedDMS/seeddms.git
git clone -b seeddms-5.1.x https://codeberg.org/SeedDMS/core.git
```
For SeedDMS 6.0.x
```
git clone -b seeddms-6.0.x https://codeberg.org/SeedDMS/seeddms.git
git clone -b seeddms-6.0.x https://codeberg.org/SeedDMS/core.git
```
5. Run composer
`composer update`
6. Create an installable distribution
`vendor/bin/phing -Dversion=$(php -r 'include "inc/inc.Version.php"; echo (new SeedDMS_Version())->version();') package`
or create an installable distribution with softlinks
`vendor/bin/phing -Dversion=$(php -r 'include "inc/inc.Version.php"; echo (new SeedDMS_Version())->version();') -Dmode=development package`
This archive does not contain any sources but only links to the previously
cloned repositories.
The archive created in step 6. can be installed like the official releases of
SeedDMS.

320
build.xml
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="seeddms" basedir="." default="main">
<property name="tmp" value="/tmp" />
<property name="tmp" value="/tmp" />
<property name="package" value="${phing.project.name}" override="true" />
<property name="seeddmsurl" value="http://localhost/seeddms51x" />
<property name="builddir" value="${tmp}/build/${phing.project.name}" override="true" />
@ -16,9 +16,13 @@
<propertyregex property="shortversion" subject="${version} kk" pattern="([56])\.([0-9]).*" replace="seeddms$1$2x" override="true"/>
<property name="majorversion" value="${version}" />
<propertyregex property="majorversion" subject="${version}" pattern="([56])\..*" replace="$1" override="true"/>
<property name="composer_version" value="2.8.5" />
<property name="composer_extra_params" value="" />
<property name="composer_env" value="" />
<property name="minorversion" value="${version}" />
<propertyregex property="minorversion" subject="${version}" pattern="[56]\.([0-9])\..*" replace="$1" override="true"/>
<property name="subminorversion" value="${version}" />
<propertyregex property="subminorversion" subject="${version}" pattern="[56]\.[0-9]\.(.*)" replace="$1" override="true"/>
<property name="composer_version" value="2.8.5" />
<property name="composer_extra_params" value="" />
<property name="composer_env" value="" />
<property name="mink_driver" value="chrome" />
<property name="snooze_multiplier" value="1" />
@ -35,44 +39,43 @@
<include name="webdav/**" />
<include name="install/**" />
<include name="restapi/**" />
<include name="pdfviewer/**" />
<include name="index.php" />
<include name="www/index.php" />
<include name="CHANGELOG" />
<include name=".htaccess" />
<include name="www/.htaccess" />
<include name="LICENSE" />
</fileset>
<target name="main">
<echo>Hello</echo>
</target>
<target name="main">
<echo>Hello</echo>
</target>
<!-- PHP CodeSniffer -->
<target name="phpcbf">
<exec command="${srcdir}/vendor/bin/phpcbf --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" />
</target>
<target name="phpcs">
<exec command="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml --report=checkstyle &gt; ${builddir}/reports/checkstyle.xml" escape="false" />
</target>
<target name="phpcs-console">
<exec command="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" />
</target>
<!-- PHP CodeSniffer -->
<target name="phpcbf">
<exec executable="bash" line="${srcdir}/vendor/bin/phpcbf --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" />
</target>
<target name="phpcs">
<exec executable="bash" line="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml --report=checkstyle &gt; ${builddir}/reports/checkstyle.xml" escape="false" />
</target>
<target name="phpcs-console">
<exec executable="bash" line="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" />
</target>
<target name="php-cs-fixer-dryrun">
<exec command="${srcdir}/vendor/bin/php-cs-fixer fix --dry-run -vvv --diff ${srcdir}/inc" passthru="true" escape="false" checkreturn="true" />
<target name="php-cs-fixer-dryrun">
<exec executable="bash" line="${srcdir}/vendor/bin/php-cs-fixer fix --dry-run -vvv --diff ${srcdir}/inc" passthru="true" escape="false" checkreturn="true" />
</target>
<!-- PHPUnit -->
<target name="phpunitfast" description="Run tests">
<exec dir="${srcdir}/SeedDMS_Core" command="XDEBUG_MODE=coverage SEEDDMS_CORE_SQL=../install/create_tables-sqlite3.sql ${srcdir}/vendor/bin/phpunit --bootstrap ${srcdir}/SeedDMS_Core/bootstrap-${majorversion}.php --coverage-html ${srcdir}/coverage/" passthru="true" checkreturn="true" />
<exec dir="${srcdir}/SeedDMS_Core" executable="bash" line="XDEBUG_MODE=coverage SEEDDMS_CORE_SQL=../install/create_tables-sqlite3.sql ${srcdir}/vendor/bin/phpunit --bootstrap ${srcdir}/SeedDMS_Core/bootstrap-${majorversion}.php --coverage-html ${srcdir}/coverage/" passthru="true" checkreturn="true" />
<!-- exec dir="${srcdir}/tests" command="SEEDDMS_URL=${seeddmsurl} SEEDDMS_MINK_DRIVER=${mink_driver} SEEDDMS_SNOOZE_MULTIPLIER=${snooze_multiplier} ${srcdir}/vendor/bin/phpunit" passthru="true" checkreturn="true" / -->
</target>
<target name="composer" description="Install dependencies with Composer">
<if>
<equals arg1="${composer_version}" arg2="latest-2.x" />
<then>
<httpget url="https://getcomposer.org/composer-2.phar" sslVerifyPeer="false" dir="${srcdir}" filename="composer.phar" />
</then>
<target name="composer" description="Install dependencies with Composer">
<if>
<equals arg1="${composer_version}" arg2="latest-2.x" />
<then>
<httpget url="https://getcomposer.org/composer-2.phar" sslVerifyPeer="false" dir="${srcdir}" filename="composer.phar" />
</then>
<else>
<if>
<not><available file="composer.phar" /></not>
@ -80,10 +83,13 @@
<httpget url="https://getcomposer.org/download/${composer_version}/composer.phar" sslVerifyPeer="false" dir="${srcdir}" />
</then>
</if>
</else>
</if>
<echo message="Installing dependencies..." />
<exec command="${composer_env} php ${srcdir}/composer.phar install ${composer_extra_params}" passthru="true" checkreturn="true" />
</else>
</if>
<echo message="Installing dependencies..." />
<exec executable="php" passthru="false" dir="${builddir}/export/${shortversion}">
<arg line="${srcdir}/composer.phar install ${composer_extra_params}"/>
<!-- arg line="${composer_env} php ${srcdir}/composer.phar install ${composer_extra_params}"/ -->
</exec>
</target>
<target name="dist" description="build SeedDMS tar archive">
@ -92,7 +98,7 @@
<then><fail msg="Pass version as property 'version'" /></then>
</if>
<echo msg="This is ${shortversion}" />
<echo msg="This is ${version}" />
<delete file="./seeddms-${version}.tar.gz" failonerror="false" />
<tar destfile="./seeddms-${version}.tar.gz" prefix="seeddms-${version}" compression="gzip">
@ -107,6 +113,9 @@
</if>
<echo msg="This is ${shortversion}" />
<echo msg="Major version ${majorversion}" />
<echo msg="Minor version ${minorversion}" />
<echo msg="Subminor version ${subminorversion}" />
<if>
<matches string="${version}" pattern="^6\.0\..*" />
@ -114,103 +123,202 @@
<else><echo msg="This is version 5" /></else>
</if>
<!-- make sure the work area is empty, then rebuild it -->
<delete dir="${builddir}/packages" includeemptydirs="true" failonerror="false" />
<mkdir dir="${builddir}/packages" />
<delete dir="${builddir}/export" includeemptydirs="true" failonerror="false" />
<delete dir="${builddir}/packages" includeemptydirs="true" failonerror="false" />
<mkdir dir="${builddir}/packages" />
<delete dir="${builddir}/export" includeemptydirs="true" failonerror="false" />
<mkdir dir="${builddir}/export" />
<mkdir dir="${builddir}/export/${shortversion}" />
<mkdir dir="${builddir}/export/${shortversion}/conf" />
<mkdir dir="${builddir}/export/${shortversion}/data" />
<mkdir dir="${builddir}/export/${shortversion}/data/1048576" />
<mkdir dir="${builddir}/export/${shortversion}/data/log" />
<mkdir dir="${builddir}/export/${shortversion}/data/cache" />
<exec command="echo 'Signature: 8a477f597d28d172789f06886806bc55' &gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
<exec command="echo '# This file is a cache directory tag created by seeddms.' &gt;&gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
<exec command="echo '# For information about cache directory tags, see: http://www.brynosaurus.com/cachedir/' &gt;&gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
<exec executable="echo" passthru="true" checkreturn="true">
<arg line="'Signature: 8a477f597d28d172789f06886806bc55' &gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
</exec>
<exec executable="echo" passthru="true" checkreturn="true">
<arg line="'# This file is a cache directory tag created by seeddms.' &gt;&gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
</exec>
<exec executable="echo" passthru="true" checkreturn="true">
<arg line="echo '# For information about cache directory tags, see: http://www.brynosaurus.com/cachedir/' &gt;&gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
</exec>
<mkdir dir="${builddir}/export/${shortversion}/data/backup" />
<mkdir dir="${builddir}/export/${shortversion}/data/lucene" />
<mkdir dir="${builddir}/export/${shortversion}/data/staging" />
<mkdir dir="${builddir}/export/${shortversion}/pear" />
<mkdir dir="${builddir}/export/${shortversion}/www" />
<mkdir dir="${builddir}/export/${shortversion}/www/ext" />
<mkdir dir="${builddir}/export/${shortversion}/seeddms-${version}" />
<if>
<matches string="${mode}" pattern="^development" />
<then></then>
<else>
<mkdir dir="${builddir}/export/${shortversion}/seeddms-${version}" />
</else>
</if>
<copy file="${srcdir}/conf/settings.xml.template" tofile="${builddir}/export/${shortversion}/conf/settings.xml">
<filterchain>
<replaceregexp>
<replaceregexp>
<regexp pattern="_DBC_DBTYPE_" replace="${dbtype}"/>
<regexp pattern="_DBC_DBSERVER_" replace="${dbhost}"/>
<regexp pattern="_DBC_DBNAME_" replace="${dbname}"/>
<regexp pattern="_DBC_DBUSER_" replace="${dbuser}"/>
<regexp pattern="_DBC_DBPASS_" replace="${dbpass}"/>
<regexp pattern="_SHORT_VERSION_" replace="${shortversion}"/>
</replaceregexp>
</replaceregexp>
</filterchain>
</copy>
<copy file="${srcdir}/conf/.htaccess" tofile="${builddir}/export/${shortversion}/conf/.htaccess" />
<copy todir="${builddir}/export/${shortversion}/seeddms-${version}">
<fileset refid="distfiles" />
</copy>
<copy todir="${builddir}/export/${shortversion}/pear/vendor">
<fileset dir="${srcdir}/vendor" defaultexcludes="false" />
</copy>
<copy todir="${builddir}/export/${shortversion}/www/ext/example">
<fileset dir="${srcdir}/ext/example" defaultexcludes="false" />
</copy>
<!-- copy todir="${builddir}/export/${shortversion}/pear/SeedDMS">
<fileset dir="SeedDMS_Core">
<include name="Core/**" />
<include name="Core.php" />
</fileset>
<fileset dir="SeedDMS_Preview">
<include name="Preview/**" />
<include name="Preview.php" />
</fileset>
<fileset dir="SeedDMS_Lucene">
<include name="Lucene/**" />
<include name="Lucene.php" />
</fileset -->
<!-- fileset dir="SeedDMS_SQLiteFTS">
<include name="SQLiteFTS/**" />
<include name="SQLiteFTS.php" />
</fileset>
</copy -->
<!-- copy todir="${builddir}/export/${shortversion}/pear">
<fileset dir="../seeddms-ext/http_webdav_server">
<include name="HTTP/WebDAV/Server/**" />
<include name="HTTP/WebDAV/Server.php" />
</fileset>
</copy>
<copy todir="${builddir}/export/${shortversion}/pear/HTTP/WebDAV">
<fileset dir="../seeddms-ext/http_webdav_server">
<include name="Tools/**" />
</fileset>
</copy -->
<copy tofile="${builddir}/export/${shortversion}/pear/composer.json" file="composer-dist.json">
</copy>
<phingcall target="composer">
<property name="composer_extra_params" value="--working-dir=${builddir}/export/${shortversion}/pear/" />
<property name="composer_envv" value="COMPOSER=${srcdir}/composer-dist.json" />
</phingcall>
<exec command="cd ${builddir}/export/${shortversion} &amp;&amp; ln -s seeddms-${version} seeddms" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/op" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/out" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/inc" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/controllers" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/languages" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/views" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/restapi" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/styles" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/pdfviewer" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/install" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/webdav" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/index.php" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/.htaccess" />
<if>
<matches string="${mode}" pattern="^development" />
<then>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}">
<arg line="-s ${srcdir} seeddms" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/op" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/out" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/inc" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/controllers" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/languages" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/views" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/restapi" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/styles" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/install" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/webdav" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/www/index.php" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ${srcdir}/www/.htaccess" />
</exec>
</then>
<else>
<copy todir="${builddir}/export/${shortversion}/seeddms-${version}">
<fileset refid="distfiles" />
</copy>
<copy todir="${builddir}/export/${shortversion}/www/ext/example">
<fileset dir="${srcdir}/www/ext/example" defaultexcludes="false" />
</copy>
<if>
<available file="${srcdir}/www/ext/pdfviewer/conf.php"/>
<then>
<copy todir="${builddir}/export/${shortversion}/www/ext/pdfviewer">
<fileset dir="${srcdir}/www/ext/pdfviewer/" expandsymboliclinks="true" defaultexcludes="false">
<include name="**/*" />
</fileset>
</copy>
</then>
<else>
<echo level="warning" message="I didn't find the extension 'pdfviewer'. You need to install it manually." />
</else>
</if>
<copy tofile="${builddir}/export/${shortversion}/composer.json" file="composer-dist.json">
<filterchain>
<replaceregexp>
<regexp pattern="/home/cvs/seeddms-ext/" replace="${srcdir}/../"/>
<regexp pattern="__CORE_BRANCH__" replace="seeddms-${majorversion}.${minorversion}.x"/>
</replaceregexp>
</filterchain>
</copy>
<phingcall target="composer">
<property name="composer_extra_params" value="--working-dir=${builddir}/export/${shortversion}/" />
<property name="composer_envv" value="COMPOSER=${srcdir}/composer-dist.json" />
</phingcall>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}">
<arg line="-s seeddms-${version} seeddms" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/op" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/out" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/inc" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/controllers" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/languages" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/views" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/restapi" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/styles" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/install" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/webdav" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/www/index.php" />
</exec>
<exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<arg line="-s ../seeddms/www/.htaccess" />
</exec>
</else>
</if>
<exec command="cat ${srcdir}/install/create_tables-sqlite3.sql | sqlite3 ${builddir}/export/${shortversion}/data/content.db" />
<!-- create initial empty database -->
<echo message="Creating sqlite3 database ..." />
<exec executable="bash" passthru="true">
<arg value="-c"/>
<arg line='"cat ${srcdir}/install/create_tables-sqlite3.sql | sqlite3 ${builddir}/export/${shortversion}/data/content.db"' />
</exec>
<!-- build the standard tar.gz archive -->
<echo message="Building .tar.gz...." />
<exec command="cd ${builddir}/export ; tar czf ${builddir}/packages/seeddms-quickstart-${version}.tar.gz ${shortversion}" checkreturn="true" />
<!-- build the standard tar.gz archive -->
<echo message="Building .tar.gz ..." />
<exec executable="tar" passthru="true" checkreturn="true" dir="${builddir}/export">
<arg line="czf ../packages/seeddms-quickstart-${version}.tar.gz ${shortversion}" />
</exec>
<echo message="Built in ${builddir}/packages/seeddms-quickstart-${version}.tar.gz" />
</target>
<target name="install" description="Install SeedDMS">
<phingcall target="package">
</phingcall>
<exec executable="tar" passthru="true" checkreturn="true" dir="${installpath}">
<arg line="-xzvf ${builddir}/packages/seeddms-quickstart-${version}.tar.gz ${shortversion} --strip-components=1" />
</exec>
<copy file="${srcdir}/conf/apache.virtualhost.template" tofile="${installpath}/conf/apache.virtualhost.conf">
<filterchain>
<replaceregexp>
<regexp pattern="_INSTALL_PATH_" replace="${installpath}"/>
<regexp pattern="_DOMAIN_" replace="${domain}"/>
</replaceregexp>
</filterchain>
</copy>
<exec executable="bash" passthru="true" dir="${installpath}">
<arg value="-c"/>
<arg line="'sudo chown -R www-data:www-data ${installpath}/data ${installpath}/conf'" />
</exec>
<echo message="Create a link in /etc/apache2/sites-enabled/" />
<echo message="sudo -u www-data ln -s ${installpath}/conf/apache.virtualhost.conf /etc/apache2/sites-enabled/001-seeddms.conf" />
</target>
</project>

View File

@ -6,6 +6,8 @@
},
"require": {
"robthree/twofactorauth": "^3.0",
"pear/http_request2": "2.5.0",
"robthree/twofactorauth": "^1.5",
"slim/slim": "^4.0",
"guzzlehttp/psr7": "*",
"erusev/parsedown": "*",
@ -28,7 +30,7 @@
"php-di/php-di": "^6.4",
"slim/psr7": "^1.7",
"bacon/bacon-qr-code": "^3.0",
"seeddms/core": "dev-master",
"seeddms/core": "dev-__CORE_BRANCH__",
"seeddms/lucene": "dev-master",
"seeddms/preview": "dev-master",
"seeddms/sqlitefts": "dev-master",

116
composer.json Normal file
View File

@ -0,0 +1,116 @@
{
"name": "seeddms/dms",
"description": "Open Source Document Management System",
"type": "project",
"license": "GPL 2",
"authors": [
{
"name": "Uwe Steinmann",
"email": "steinm@debian.org"
}
],
"minimum-stability": "stable",
"config": {
"platform": {
"php": "8.2"
},
"allow-plugins": {
"composer/package-versions-deprecated": true,
"wikimedia/composer-merge-plugin": true
}
},
"require": {
"php": ">=8.2.0",
"phing/phing": "3.*",
"pear/http_request2": "2.5.0",
"robthree/twofactorauth": "^3.0",
"php-mime-mail-parser/php-mime-mail-parser": "*",
"slim/slim": "^4.0",
"guzzlehttp/psr7": "*",
"erusev/parsedown": "*",
"erusev/parsedown-extra": "*",
"mibe/feedwriter": "^1.1",
"phpoffice/phpspreadsheet": "*",
"sabre/xml": "*",
"sabre/dav": "^4.",
"pear/log": "*",
"pear/mail": "*",
"pear/mail_mime": "*",
"pear/net_smtp": "*",
"pear/auth_sasl": "*",
"pear/db": "*",
"dragonmantank/cron-expression": "^3.1",
"alecrabbit/php-console-colour": "*",
"zf1/zend-search-lucene": "*",
"symfony/http-foundation": "^5.4",
"php-di/php-di": "^6.4",
"slim/psr7": "^1.7",
"bacon/bacon-qr-code": "^3.0",
"seeddms/core": "dev-seeddms-5.1.x",
"seeddms/lucene": "dev-master",
"seeddms/preview": "dev-master",
"seeddms/sqlitefts": "dev-master",
"seeddms/http_webdav_server": "dev-master"
},
"require-dev": {
"composer/composer": "dev-main",
"behat/mink": "1.8.1",
"behat/mink-selenium2-driver": "1.4.0",
"dmore/chrome-mink-driver": "2.8.0",
"friendsofphp/php-cs-fixer": "3.87.2",
"phpunit/phpunit": "9.5.9",
"squizlabs/php_codesniffer": "3.6.0",
"phpstan/phpstan": "^2.1"
},
"repositories": [
{
"type": "path",
"url": "../core",
"options": {
"symlink": false
}
},
{
"type": "path",
"url": "../lucene",
"options": {
"symlink": false
}
},
{
"type": "path",
"url": "../preview",
"options": {
"symlink": false
}
},
{
"type": "path",
"url": "../sqlitefts",
"options": {
"symlink": false
}
},
{
"type": "path",
"url": "../http_webdav_server",
"options": {
"symlink": false
}
}
],
"extra": {
"merge-plugin": {
"include": [
"composer.local.json"
],
"recurse": true,
"replace": true,
"ignore-duplicates": false,
"merge-dev": true,
"merge-extra": false,
"merge-extra-deep": false,
"merge-scripts": true
}
}
}

View File

@ -0,0 +1,27 @@
<VirtualHost _default_:443>
ServerName _DOMAIN_
ErrorLog /var/log/apache2/seeddms-error.log
CustomLog /var/log/apache2/seeddms-access.log combined
DocumentRoot _INSTALL_PATH_/www
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
# SSLCertificateChainFile /just/if/needed/fullchain.cer
<Directory _INSTALL_PATH_>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
# Apache 2.4.10+ can proxy to unix socket
SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
# Consider to install the webdav_checkout extension
Alias /checkout _INSTALL_PATH_/www/ext/webdav_checkout/op/remote.php
</VirtualHost>

View File

@ -254,6 +254,29 @@ in your current installation with new versions from the quickstart archive.
contain database updates.
Installing from git
====================
SeedDMS is hosted at https://codeberg.org/SeedDMS
In order to install SeedDMS you need to:
1. Create a directory, e.g. seeddms
`mkdir seeddms`
2. Change into that directory
`cd seeddms`
3. Clone the various SeedDMS repositories
`git clone https://codeberg.org/SeedDMS/seeddms.git`
`git clone -b seeddms-5.1.x https://codeberg.org/SeedDMS/core.git`
`git clone https://codeberg.org/SeedDMS/preview.git`
`git clone https://codeberg.org/SeedDMS/lucene.git`
`git clone https://codeberg.org/SeedDMS/ѕqlitefts.git`
`git clone https://codeberg.org/SeedDMS/http_webdav_server.git`
4. Run composer
`composer update`
5. Create an installable distribution
`vendor/bin/phing -Dversion=$(php -r 'include "inc/inc.Version.php"; echo (new SeedDMS_Version())->version();') package`
THE LONG STORY
================

View File

@ -93,6 +93,18 @@ class SeedDMS_Download_Mgr {
*/
protected $filenames;
/**
* @var bool $includereviewers whether to include reviewers
* @access protected
*/
protected $includereviewers;
/**
* @var bool $includeapprovers whether to include approvers
* @access protected
*/
protected $includeapprovers;
/**
* @var boolean $skipdefaultcols skip default columns, will only export extracols
* @access protected

View File

@ -1875,13 +1875,13 @@ class Settings { /* {{{ */
* Check if extension is disabled
*
* @param string $extname name of extension
* @return true if extension is disabled
* @return true if extension is disabled or extension could not be found in configuration
*/
public function extensionIsDisabled($extname) { /* {{{ */
if(array_key_exists($extname, $this->_extensions))
return $this->_extensions[$extname]['__disable__'];
return false;
return true;
} /* }}} */
/**

View File

@ -22,11 +22,17 @@ $extMgr = new SeedDMS_Extension_Mgr($settings->_rootDir."/ext", $settings->_cach
$version = new SeedDMS_Version;
foreach($extMgr->getExtensionConfiguration() as $extname=>$extconf) {
if($extconf['disable']) {
$settings->disableExtension($extname);
continue;
}
if(!$settings->extensionIsDisabled($extname)) {
$disabled = true;
$disabled = false;
if($extMgr->checkExtensionByName($extname, $extconf)) {
$disabled = false;
$settings->enableExtension($extname);
} else {
$disabled = true;
$settings->disableExtension($extname);
// echo $extMgr->getErrorMsg();
}
@ -66,5 +72,9 @@ foreach($extMgr->getExtensionConfiguration() as $extname=>$extconf) {
}
}
}
} else {
// Ensure $settings->_extensions has an entry for the extension, even if
// the extension is disabled already.
$settings->disableExtension($extname);
}
}

View File

@ -60,7 +60,7 @@ if($settings->_dbDriver == 'sqlite' && empty($settings->_dbDatabase)) {
$settings->_dbDatabase = $__datadir."/content.db";
}
ini_set('include_path', $settings->_rootDir.'pear'. PATH_SEPARATOR .ini_get('include_path'));
ini_set('include_path', $settings->_rootDir.'..'. PATH_SEPARATOR .ini_get('include_path'));
if(!empty($settings->_extraPath)) {
ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path'));
}
@ -75,12 +75,8 @@ if(isset($settings->_maxExecutionTime)) {
* relative to it.
*/
ini_set('include_path', $settings->_rootDir. PATH_SEPARATOR .ini_get('include_path'));
/* Add root Dir.'../pear'. Needed because the SeedDMS_Core, etc. are included
* relative to it.
*/
ini_set('include_path', $settings->_rootDir.'../pear'. PATH_SEPARATOR .ini_get('include_path'));
/* composer is installed in pear directory, but install tool does not need it */
/* composer is installed in vendor directory, but install tool does not need it */
if(!defined("SEEDDMS_INSTALL"))
require_once 'vendor/autoload.php';

View File

@ -247,7 +247,9 @@ $status = isset($get['status']) ? $get['status'] : array();
//
// Default page to display is always one.
$pageNumber=1;
if (isset($get["pg"])) {
if (isset($get['action']) && $get['action'] == 'export') {
$pageNumber = 'all';
} elseif (isset($get["pg"])) {
if (is_numeric($get["pg"]) && $get["pg"]>0) {
$pageNumber = (int) $get["pg"];
}
@ -368,7 +370,7 @@ if($fullsearch) {
'filesize_start'=>$filesize['from'],
'filesize_end'=>$filesize['to'],
'attributes'=>$attributes
), ($pageNumber == 'all' ? array() : array('limit'=>$limit, 'offset'=>$limit * ($pageNumber-1))), $order);
), ($pageNumber == 'all' ? array('limit'=>1000) : array('limit'=>$limit, 'offset'=>$limit * ($pageNumber-1))), $order);
if($searchresult === false) {
$session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm')));
$dcount = 0;

View File

@ -268,6 +268,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Theme_Style {
echo "SeedDMSUpload.setMaxFileSizeMsg('".getMLText("uploading_maxsize")."');";
}
?>
$(document).ready( function() {
$("#form1").validate({
ignore: [],
@ -640,7 +641,7 @@ $(document).ready( function() {
$this->contentHeading(getMLText("preview"));
?>
<div style="width:100%; height: 0; position:relative; padding-top: 141%;">
<iframe src="<?= $settings->_httpRoot ?>pdfviewer/web/viewer.html?file=<?php echo urlencode($settings->_httpRoot.'op/op.ViewOnline.php?documentid='.$latestContent->getDocument()->getID().'&version='.$latestContent->getVersion()); ?>" _width="100%" _height="100%" style="position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height: 100%"></iframe>
<iframe src="<?= $settings->_httpRoot ?>ext/pdfviewer/res/web/viewer.html?file=<?php echo urlencode($settings->_httpRoot.'op/op.ViewOnline.php?documentid='.$latestContent->getDocument()->getID().'&version='.$latestContent->getVersion()); ?>" _width="100%" _height="100%" style="position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height: 100%"></iframe>
</div>
<?php
break;
@ -667,7 +668,7 @@ $(document).ready( function() {
if(is_string($txt))
echo $txt;
if($converttopdf) {
if($converttopdf && !$settings->extensionIsDisabled('pdfviewer')) {
$pdfpreviewer = new SeedDMS_Preview_PdfPreviewer($cachedir, $timeout, $xsendfile);
if($conversionmgr)
$pdfpreviewer->setConversionMgr($conversionmgr);
@ -677,7 +678,7 @@ $(document).ready( function() {
$this->contentHeading(getMLText("preview_pdf"));
?>
<div style="width:100%; height: 0; position:relative; padding-top: 141%;">
<iframe src="<?= $settings->_httpRoot ?>pdfviewer/web/viewer.html?file=<?php echo urlencode($settings->_httpRoot.'op/op.PdfPreview.php?documentid='.$latestContent->getDocument()->getID().'&version='.$latestContent->getVersion()); ?>" _width="100%" _height="700px" style="position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height: 100%"></iframe>
<iframe src="<?= $settings->_httpRoot ?>ext/pdfviewer/res/web/viewer.html?file=<?php echo urlencode($settings->_httpRoot.'op/op.PdfPreview.php?documentid='.$latestContent->getDocument()->getID().'&version='.$latestContent->getVersion()); ?>" _width="100%" _height="700px" style="position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height: 100%"></iframe>
</div>
<?php
}

View File

@ -27,13 +27,13 @@ RewriteRule "^out/images.*$" "-" [L]
RewriteRule "^styles/.*$" "-" [L]
# Accessing a file in an extension is only possible in one
# of the directories op, out. res
# of the directories op, out, res, node_modules
# Added for old extensions which do not use routes
RewriteRule ^ext/[^/]+/icon.(?:png|svg)$ - [L]
RewriteCond %{REQUEST_URI} "ext/[^/]+/"
RewriteRule !^ext/[^/]+/.*(?:op|out|res|node_modules) - [F]
RewriteCond %{REQUEST_URI} "ext/[^/]+/res/.*$" [NC]
RewriteRule !^ext/[^/]+/res/.*\.(?:css|js|png|gif|svg|ico|html|woff|ttf) - [F]
RewriteRule !^ext/[^/]+/res/.*\.(?:css|js|mjs|ftl|png|gif|svg|ico|html|woff|ttf) - [F]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ext/.*$ - [L]