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 *.tar.gz
SeedDMS_*/*.tgz SeedDMS_*/*.tgz
ext/* ext/*
vendor
webapp/* webapp/*
www/ext

View File

@ -6,7 +6,11 @@ NODISTFILES=utils/importmail.php utils/seedddms-importmail utils/remote-email-up
PHPDOC=~/Downloads/phpDocumentor.phar PHPDOC=~/Downloads/phpDocumentor.phar
dist: INSTALL_PATH=/home/www-data/seeddms-test
all: dist
olddist:
mkdir -p tmp/seeddms-$(VERSION) mkdir -p tmp/seeddms-$(VERSION)
cp -a $(SRC) tmp/seeddms-$(VERSION) cp -a $(SRC) tmp/seeddms-$(VERSION)
mkdir -p tmp/seeddms-$(VERSION)/views 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)) (cd tmp; tar --exclude=.svn --exclude=.gitignore -czvf ../seeddms-$(VERSION).tar.gz seeddms-$(VERSION))
rm -rf tmp rm -rf tmp
dist:
php vendor/bin/phing -Dversion=$(VERSION) dist
quickstart: quickstart:
php8.2 vendor/bin/phing -Dversion=$(VERSION) package 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: unittest:
vendor/bin/phing -Dversion=$(VERSION) phpunitfast vendor/bin/phing -Dversion=$(VERSION) phpunitfast
@ -95,4 +108,4 @@ PKGFILE=SeedDMS_Core/package.xml
changelog: 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' @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"?> <?xml version="1.0" encoding="UTF-8"?>
<project name="seeddms" basedir="." default="main"> <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="package" value="${phing.project.name}" override="true" />
<property name="seeddmsurl" value="http://localhost/seeddms51x" /> <property name="seeddmsurl" value="http://localhost/seeddms51x" />
<property name="builddir" value="${tmp}/build/${phing.project.name}" override="true" /> <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"/> <propertyregex property="shortversion" subject="${version} kk" pattern="([56])\.([0-9]).*" replace="seeddms$1$2x" override="true"/>
<property name="majorversion" value="${version}" /> <property name="majorversion" value="${version}" />
<propertyregex property="majorversion" subject="${version}" pattern="([56])\..*" replace="$1" override="true"/> <propertyregex property="majorversion" subject="${version}" pattern="([56])\..*" replace="$1" override="true"/>
<property name="composer_version" value="2.8.5" /> <property name="minorversion" value="${version}" />
<property name="composer_extra_params" value="" /> <propertyregex property="minorversion" subject="${version}" pattern="[56]\.([0-9])\..*" replace="$1" override="true"/>
<property name="composer_env" value="" /> <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="mink_driver" value="chrome" />
<property name="snooze_multiplier" value="1" /> <property name="snooze_multiplier" value="1" />
@ -35,44 +39,43 @@
<include name="webdav/**" /> <include name="webdav/**" />
<include name="install/**" /> <include name="install/**" />
<include name="restapi/**" /> <include name="restapi/**" />
<include name="pdfviewer/**" /> <include name="www/index.php" />
<include name="index.php" />
<include name="CHANGELOG" /> <include name="CHANGELOG" />
<include name=".htaccess" /> <include name="www/.htaccess" />
<include name="LICENSE" /> <include name="LICENSE" />
</fileset> </fileset>
<target name="main"> <target name="main">
<echo>Hello</echo> <echo>Hello</echo>
</target> </target>
<!-- PHP CodeSniffer --> <!-- PHP CodeSniffer -->
<target name="phpcbf"> <target name="phpcbf">
<exec command="${srcdir}/vendor/bin/phpcbf --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" /> <exec executable="bash" line="${srcdir}/vendor/bin/phpcbf --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" />
</target> </target>
<target name="phpcs"> <target name="phpcs">
<exec command="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml --report=checkstyle &gt; ${builddir}/reports/checkstyle.xml" escape="false" /> <exec executable="bash" line="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml --report=checkstyle &gt; ${builddir}/reports/checkstyle.xml" escape="false" />
</target> </target>
<target name="phpcs-console"> <target name="phpcs-console">
<exec command="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" /> <exec executable="bash" line="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" />
</target> </target>
<target name="php-cs-fixer-dryrun"> <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" /> <exec executable="bash" line="${srcdir}/vendor/bin/php-cs-fixer fix --dry-run -vvv --diff ${srcdir}/inc" passthru="true" escape="false" checkreturn="true" />
</target> </target>
<!-- PHPUnit --> <!-- PHPUnit -->
<target name="phpunitfast" description="Run tests"> <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" / --> <!-- 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>
<target name="composer" description="Install dependencies with Composer"> <target name="composer" description="Install dependencies with Composer">
<if> <if>
<equals arg1="${composer_version}" arg2="latest-2.x" /> <equals arg1="${composer_version}" arg2="latest-2.x" />
<then> <then>
<httpget url="https://getcomposer.org/composer-2.phar" sslVerifyPeer="false" dir="${srcdir}" filename="composer.phar" /> <httpget url="https://getcomposer.org/composer-2.phar" sslVerifyPeer="false" dir="${srcdir}" filename="composer.phar" />
</then> </then>
<else> <else>
<if> <if>
<not><available file="composer.phar" /></not> <not><available file="composer.phar" /></not>
@ -80,10 +83,13 @@
<httpget url="https://getcomposer.org/download/${composer_version}/composer.phar" sslVerifyPeer="false" dir="${srcdir}" /> <httpget url="https://getcomposer.org/download/${composer_version}/composer.phar" sslVerifyPeer="false" dir="${srcdir}" />
</then> </then>
</if> </if>
</else> </else>
</if> </if>
<echo message="Installing dependencies..." /> <echo message="Installing dependencies..." />
<exec command="${composer_env} php ${srcdir}/composer.phar install ${composer_extra_params}" passthru="true" checkreturn="true" /> <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>
<target name="dist" description="build SeedDMS tar archive"> <target name="dist" description="build SeedDMS tar archive">
@ -92,7 +98,7 @@
<then><fail msg="Pass version as property 'version'" /></then> <then><fail msg="Pass version as property 'version'" /></then>
</if> </if>
<echo msg="This is ${shortversion}" /> <echo msg="This is ${version}" />
<delete file="./seeddms-${version}.tar.gz" failonerror="false" /> <delete file="./seeddms-${version}.tar.gz" failonerror="false" />
<tar destfile="./seeddms-${version}.tar.gz" prefix="seeddms-${version}" compression="gzip"> <tar destfile="./seeddms-${version}.tar.gz" prefix="seeddms-${version}" compression="gzip">
@ -107,6 +113,9 @@
</if> </if>
<echo msg="This is ${shortversion}" /> <echo msg="This is ${shortversion}" />
<echo msg="Major version ${majorversion}" />
<echo msg="Minor version ${minorversion}" />
<echo msg="Subminor version ${subminorversion}" />
<if> <if>
<matches string="${version}" pattern="^6\.0\..*" /> <matches string="${version}" pattern="^6\.0\..*" />
@ -114,103 +123,202 @@
<else><echo msg="This is version 5" /></else> <else><echo msg="This is version 5" /></else>
</if> </if>
<!-- make sure the work area is empty, then rebuild it --> <!-- make sure the work area is empty, then rebuild it -->
<delete dir="${builddir}/packages" includeemptydirs="true" failonerror="false" /> <delete dir="${builddir}/packages" includeemptydirs="true" failonerror="false" />
<mkdir dir="${builddir}/packages" /> <mkdir dir="${builddir}/packages" />
<delete dir="${builddir}/export" includeemptydirs="true" failonerror="false" /> <delete dir="${builddir}/export" includeemptydirs="true" failonerror="false" />
<mkdir dir="${builddir}/export" />
<mkdir dir="${builddir}/export/${shortversion}" /> <mkdir dir="${builddir}/export/${shortversion}" />
<mkdir dir="${builddir}/export/${shortversion}/conf" /> <mkdir dir="${builddir}/export/${shortversion}/conf" />
<mkdir dir="${builddir}/export/${shortversion}/data" /> <mkdir dir="${builddir}/export/${shortversion}/data" />
<mkdir dir="${builddir}/export/${shortversion}/data/1048576" /> <mkdir dir="${builddir}/export/${shortversion}/data/1048576" />
<mkdir dir="${builddir}/export/${shortversion}/data/log" /> <mkdir dir="${builddir}/export/${shortversion}/data/log" />
<mkdir dir="${builddir}/export/${shortversion}/data/cache" /> <mkdir dir="${builddir}/export/${shortversion}/data/cache" />
<exec command="echo 'Signature: 8a477f597d28d172789f06886806bc55' &gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" /> <exec executable="echo" passthru="true" checkreturn="true">
<exec command="echo '# This file is a cache directory tag created by seeddms.' &gt;&gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" /> <arg line="'Signature: 8a477f597d28d172789f06886806bc55' &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>
<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/backup" />
<mkdir dir="${builddir}/export/${shortversion}/data/lucene" /> <mkdir dir="${builddir}/export/${shortversion}/data/lucene" />
<mkdir dir="${builddir}/export/${shortversion}/data/staging" /> <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" />
<mkdir dir="${builddir}/export/${shortversion}/www/ext" /> <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"> <copy file="${srcdir}/conf/settings.xml.template" tofile="${builddir}/export/${shortversion}/conf/settings.xml">
<filterchain> <filterchain>
<replaceregexp> <replaceregexp>
<regexp pattern="_DBC_DBTYPE_" replace="${dbtype}"/> <regexp pattern="_DBC_DBTYPE_" replace="${dbtype}"/>
<regexp pattern="_DBC_DBSERVER_" replace="${dbhost}"/> <regexp pattern="_DBC_DBSERVER_" replace="${dbhost}"/>
<regexp pattern="_DBC_DBNAME_" replace="${dbname}"/> <regexp pattern="_DBC_DBNAME_" replace="${dbname}"/>
<regexp pattern="_DBC_DBUSER_" replace="${dbuser}"/> <regexp pattern="_DBC_DBUSER_" replace="${dbuser}"/>
<regexp pattern="_DBC_DBPASS_" replace="${dbpass}"/> <regexp pattern="_DBC_DBPASS_" replace="${dbpass}"/>
<regexp pattern="_SHORT_VERSION_" replace="${shortversion}"/> <regexp pattern="_SHORT_VERSION_" replace="${shortversion}"/>
</replaceregexp> </replaceregexp>
</filterchain> </filterchain>
</copy> </copy>
<copy file="${srcdir}/conf/.htaccess" tofile="${builddir}/export/${shortversion}/conf/.htaccess" /> <copy file="${srcdir}/conf/.htaccess" tofile="${builddir}/export/${shortversion}/conf/.htaccess" />
<copy todir="${builddir}/export/${shortversion}/seeddms-${version}"> <if>
<fileset refid="distfiles" /> <matches string="${mode}" pattern="^development" />
</copy> <then>
<copy todir="${builddir}/export/${shortversion}/pear/vendor"> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}">
<fileset dir="${srcdir}/vendor" defaultexcludes="false" /> <arg line="-s ${srcdir} seeddms" />
</copy> </exec>
<copy todir="${builddir}/export/${shortversion}/www/ext/example"> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<fileset dir="${srcdir}/ext/example" defaultexcludes="false" /> <arg line="-s ${srcdir}/op" />
</copy> </exec>
<!-- copy todir="${builddir}/export/${shortversion}/pear/SeedDMS"> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<fileset dir="SeedDMS_Core"> <arg line="-s ${srcdir}/out" />
<include name="Core/**" /> </exec>
<include name="Core.php" /> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
</fileset> <arg line="-s ${srcdir}/inc" />
<fileset dir="SeedDMS_Preview"> </exec>
<include name="Preview/**" /> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<include name="Preview.php" /> <arg line="-s ${srcdir}/controllers" />
</fileset> </exec>
<fileset dir="SeedDMS_Lucene"> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<include name="Lucene/**" /> <arg line="-s ${srcdir}/languages" />
<include name="Lucene.php" /> </exec>
</fileset --> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<!-- fileset dir="SeedDMS_SQLiteFTS"> <arg line="-s ${srcdir}/views" />
<include name="SQLiteFTS/**" /> </exec>
<include name="SQLiteFTS.php" /> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
</fileset> <arg line="-s ${srcdir}/restapi" />
</copy --> </exec>
<!-- copy todir="${builddir}/export/${shortversion}/pear"> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<fileset dir="../seeddms-ext/http_webdav_server"> <arg line="-s ${srcdir}/styles" />
<include name="HTTP/WebDAV/Server/**" /> </exec>
<include name="HTTP/WebDAV/Server.php" /> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
</fileset> <arg line="-s ${srcdir}/install" />
</copy> </exec>
<copy todir="${builddir}/export/${shortversion}/pear/HTTP/WebDAV"> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<fileset dir="../seeddms-ext/http_webdav_server"> <arg line="-s ${srcdir}/webdav" />
<include name="Tools/**" /> </exec>
</fileset> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
</copy --> <arg line="-s ${srcdir}/www/index.php" />
<copy tofile="${builddir}/export/${shortversion}/pear/composer.json" file="composer-dist.json"> </exec>
</copy> <exec executable="ln" passthru="true" dir="${builddir}/export/${shortversion}/www">
<phingcall target="composer"> <arg line="-s ${srcdir}/www/.htaccess" />
<property name="composer_extra_params" value="--working-dir=${builddir}/export/${shortversion}/pear/" /> </exec>
<property name="composer_envv" value="COMPOSER=${srcdir}/composer-dist.json" /> </then>
</phingcall> <else>
<exec command="cd ${builddir}/export/${shortversion} &amp;&amp; ln -s seeddms-${version} seeddms" /> <copy todir="${builddir}/export/${shortversion}/seeddms-${version}">
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/op" /> <fileset refid="distfiles" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/out" /> </copy>
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/inc" /> <copy todir="${builddir}/export/${shortversion}/www/ext/example">
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/controllers" /> <fileset dir="${srcdir}/www/ext/example" defaultexcludes="false" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/languages" /> </copy>
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/views" /> <if>
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/restapi" /> <available file="${srcdir}/www/ext/pdfviewer/conf.php"/>
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/styles" /> <then>
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/pdfviewer" /> <copy todir="${builddir}/export/${shortversion}/www/ext/pdfviewer">
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/install" /> <fileset dir="${srcdir}/www/ext/pdfviewer/" expandsymboliclinks="true" defaultexcludes="false">
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/webdav" /> <include name="**/*" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/index.php" /> </fileset>
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/.htaccess" /> </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 --> <!-- build the standard tar.gz archive -->
<echo message="Building .tar.gz...." /> <echo message="Building .tar.gz ..." />
<exec command="cd ${builddir}/export ; tar czf ${builddir}/packages/seeddms-quickstart-${version}.tar.gz ${shortversion}" checkreturn="true" /> <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" /> <echo message="Built in ${builddir}/packages/seeddms-quickstart-${version}.tar.gz" />
</target> </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> </project>

View File

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

View File

@ -93,6 +93,18 @@ class SeedDMS_Download_Mgr {
*/ */
protected $filenames; 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 * @var boolean $skipdefaultcols skip default columns, will only export extracols
* @access protected * @access protected

View File

@ -1875,13 +1875,13 @@ class Settings { /* {{{ */
* Check if extension is disabled * Check if extension is disabled
* *
* @param string $extname name of extension * @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) { /* {{{ */ public function extensionIsDisabled($extname) { /* {{{ */
if(array_key_exists($extname, $this->_extensions)) if(array_key_exists($extname, $this->_extensions))
return $this->_extensions[$extname]['__disable__']; 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; $version = new SeedDMS_Version;
foreach($extMgr->getExtensionConfiguration() as $extname=>$extconf) { foreach($extMgr->getExtensionConfiguration() as $extname=>$extconf) {
if($extconf['disable']) {
$settings->disableExtension($extname);
continue;
}
if(!$settings->extensionIsDisabled($extname)) { if(!$settings->extensionIsDisabled($extname)) {
$disabled = true; $disabled = false;
if($extMgr->checkExtensionByName($extname, $extconf)) { if($extMgr->checkExtensionByName($extname, $extconf)) {
$disabled = false; $disabled = false;
$settings->enableExtension($extname);
} else { } else {
$disabled = true;
$settings->disableExtension($extname); $settings->disableExtension($extname);
// echo $extMgr->getErrorMsg(); // 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"; $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)) { if(!empty($settings->_extraPath)) {
ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path')); ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path'));
} }
@ -75,12 +75,8 @@ if(isset($settings->_maxExecutionTime)) {
* relative to it. * relative to it.
*/ */
ini_set('include_path', $settings->_rootDir. PATH_SEPARATOR .ini_get('include_path')); 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")) if(!defined("SEEDDMS_INSTALL"))
require_once 'vendor/autoload.php'; 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. // Default page to display is always one.
$pageNumber=1; $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) { if (is_numeric($get["pg"]) && $get["pg"]>0) {
$pageNumber = (int) $get["pg"]; $pageNumber = (int) $get["pg"];
} }
@ -368,7 +370,7 @@ if($fullsearch) {
'filesize_start'=>$filesize['from'], 'filesize_start'=>$filesize['from'],
'filesize_end'=>$filesize['to'], 'filesize_end'=>$filesize['to'],
'attributes'=>$attributes '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) { if($searchresult === false) {
$session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm'))); $session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm')));
$dcount = 0; $dcount = 0;

View File

@ -268,6 +268,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Theme_Style {
echo "SeedDMSUpload.setMaxFileSizeMsg('".getMLText("uploading_maxsize")."');"; echo "SeedDMSUpload.setMaxFileSizeMsg('".getMLText("uploading_maxsize")."');";
} }
?> ?>
$(document).ready( function() { $(document).ready( function() {
$("#form1").validate({ $("#form1").validate({
ignore: [], ignore: [],
@ -640,7 +641,7 @@ $(document).ready( function() {
$this->contentHeading(getMLText("preview")); $this->contentHeading(getMLText("preview"));
?> ?>
<div style="width:100%; height: 0; position:relative; padding-top: 141%;"> <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> </div>
<?php <?php
break; break;
@ -667,7 +668,7 @@ $(document).ready( function() {
if(is_string($txt)) if(is_string($txt))
echo $txt; echo $txt;
if($converttopdf) { if($converttopdf && !$settings->extensionIsDisabled('pdfviewer')) {
$pdfpreviewer = new SeedDMS_Preview_PdfPreviewer($cachedir, $timeout, $xsendfile); $pdfpreviewer = new SeedDMS_Preview_PdfPreviewer($cachedir, $timeout, $xsendfile);
if($conversionmgr) if($conversionmgr)
$pdfpreviewer->setConversionMgr($conversionmgr); $pdfpreviewer->setConversionMgr($conversionmgr);
@ -677,7 +678,7 @@ $(document).ready( function() {
$this->contentHeading(getMLText("preview_pdf")); $this->contentHeading(getMLText("preview_pdf"));
?> ?>
<div style="width:100%; height: 0; position:relative; padding-top: 141%;"> <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> </div>
<?php <?php
} }

View File

@ -27,13 +27,13 @@ RewriteRule "^out/images.*$" "-" [L]
RewriteRule "^styles/.*$" "-" [L] RewriteRule "^styles/.*$" "-" [L]
# Accessing a file in an extension is only possible in one # 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 # Added for old extensions which do not use routes
RewriteRule ^ext/[^/]+/icon.(?:png|svg)$ - [L] RewriteRule ^ext/[^/]+/icon.(?:png|svg)$ - [L]
RewriteCond %{REQUEST_URI} "ext/[^/]+/" RewriteCond %{REQUEST_URI} "ext/[^/]+/"
RewriteRule !^ext/[^/]+/.*(?:op|out|res|node_modules) - [F] RewriteRule !^ext/[^/]+/.*(?:op|out|res|node_modules) - [F]
RewriteCond %{REQUEST_URI} "ext/[^/]+/res/.*$" [NC] 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 RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ext/.*$ - [L] RewriteRule ^ext/.*$ - [L]