History log of /dokuwiki/_test/tests/inc/ (Results 1 – 25 of 575)
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
36ba8ead12-May-2026 Andreas Gohr <andi@splitbrain.org>

test: add tests to catch #4637

Issue #4637 was fixed in 7686f2030b19f948d2e50df1613ef6592fa44b46 but I
didn't like that no test had caught the issue.

This adds a specific test for the issue as a Ha

test: add tests to catch #4637

Issue #4637 was fixed in 7686f2030b19f948d2e50df1613ef6592fa44b46 but I
didn't like that no test had caught the issue.

This adds a specific test for the issue as a HandlerTest. Additionally a
simple smoke test is added that renders the wiki:syntax page and
inspects the created DOM. It's not comprehensive but might help flagging
similar issue in the future.

show more ...

01e8d73925-Apr-2026 Andreas Gohr <andi@splitbrain.org>

refactor(changelog): persist external-edit detection on first read

This addresses the flaky test that makes tests randomly fail (mostly on
windows runners).

The flake in common_saveWikiText_test::t

refactor(changelog): persist external-edit detection on first read

This addresses the flaky test that makes tests randomly fail (mostly on
windows runners).

The flake in common_saveWikiText_test::test_savesequence5 came from
this line in ChangeLog::getCurrentRevisionInfo():

'date' => max($lastRev + 1, time() - 1)

The synthesized "external delete" entry was kept in memory only and
only persisted later, when saveWikiText next called detectExternalEdit.
That meant the formula was evaluated twice on different ChangeLog
instances — once during the test's inspection, and again during the
following saveWikiText — and the two evaluations could pick different
seconds depending on how long the surrounding I/O took. The test
cached the first result in $expectExternal and asserted it against the
on-disk entry written during the second call. On the slower Windows
runner the second call sometimes crossed a second boundary, producing
the off-by-one date mismatch.

The questions I had was, why are we persisting external file deletions
(or edits) only when a page is saved when we are obviously already
detecting it earlier during the changelog read already?

Instead of recording the external delete at the time a new page is
written, it makes sense to record it as soon as we detect it (when the
changelog is requested by a user or a bot). This will make the recoded
timestamp closer to the actual deletion.

This patch refactors the changelog accordingly, but still tries to be
minimal invasive (I think the changelog handling would need much more
refactoring, but that's beyond the scope of this change).

To enable proper locking (when logging an external edit and copying
the attic file), locking had to be moved to the Changelog class,
duplicating some code of io_saveFile.

PageFile::detectExternalEdit() and the deprecated procedural wrapper
detectExternalEdit() in inc/common.php are removed. A codesearch.dokuwiki.org
check confirmed no plugin calls the method directly; the only external
caller of the procedural function is the farmsync plugin, which needs
a parallel update.

show more ...

90c2f6e318-Apr-2026 Andreas Gohr <andi@splitbrain.org>

Clean up stale realip references after client_ip_header rename

Update docblocks in Ip.php and common.php, fix old tests to use
the new config key, remove outdated translations, fix method casing
in

Clean up stale realip references after client_ip_header rename

Update docblocks in Ip.php and common.php, fix old tests to use
the new config key, remove outdated translations, fix method casing
in test, and add example to English config description.

show more ...

504c13e818-Apr-2026 Andreas Gohr <andi@splitbrain.org>

migrate parser tests to modern namespaced classes

Move old-style parser tests from _test/tests/inc/parser/ to namespaced
test classes under _test/tests/Parsing/ParserMode/ and
_test/tests/Parsing/Le

migrate parser tests to modern namespaced classes

Move old-style parser tests from _test/tests/inc/parser/ to namespaced
test classes under _test/tests/Parsing/ParserMode/ and
_test/tests/Parsing/Lexer/.

- Add ParserTestBase with assertCalls() helper for comparing handler
call sequences with byte index stripping
- Split lexer.test.php into ParallelRegexTest, StateStackTest, and
LexerTest with a RecordingHandler that extends Handler
- Merge handler_parse_highlight_options tests into CodeTest
- Add new tests for previously untested modes: Nocache, Notoc, Rss,
and all individual formatting modes (Strong, Emphasis, etc.)
- Modernize test code: [] syntax, lowercase null, correct assertEquals
argument order, replace deprecated withConsecutive and string callables
- Renderer tests remain in old location (renderers not yet migrated)

show more ...

71096e4618-Apr-2026 Andreas Gohr <andi@splitbrain.org>

move handler methods into ParserMode classes and rename Handler

Each ParserMode class now implements handle() from ModeInterface,
containing the token handling logic that previously lived as individ

move handler methods into ParserMode classes and rename Handler

Each ParserMode class now implements handle() from ModeInterface,
containing the token handling logic that previously lived as individual
methods on Doku_Handler.

The Handler class (formerly Doku_Handler) is the single dispatch point:
Lexer passes tokens to Handler::handleToken() which routes to mode
objects, plugins, or returns false. The Lexer only tokenizes and
resolves mapHandler aliases.

Key changes:
- Add handle() to ModeInterface, implemented by all mode classes
- Move Doku_Handler to dokuwiki\Parsing\Handler namespace
- File extends Code (shared parsing via $type property)
- Quotes uses mapHandler() + Handler::getModeName() for sub-modes
- Media::parseMedia() replaces Doku_Handler_Parse_Media()
- Code::parseHighlightOptions() replaces parse_highlight_options()
- Per-parse state (footnote, doublequote) stays on Handler
- Deprecated wrappers kept for base/header/internallink/media
- Class alias and rector rules added for backward compatibility

show more ...


/dokuwiki/_test/rector.php
/dokuwiki/_test/tests/Parsing/HandlerTest.php
/dokuwiki/_test/tests/Parsing/ModeRegistryTest.php
parser/handler_parse_highlight_options.test.php
parser/lexer.test.php
parser/parser.inc.php
parser/parser_quotes.test.php
/dokuwiki/inc/Cache/CacheParser.php
/dokuwiki/inc/Extension/SyntaxPlugin.php
/dokuwiki/inc/Parsing/Handler.php
/dokuwiki/inc/Parsing/Handler/CallWriter.php
/dokuwiki/inc/Parsing/Lexer/Lexer.php
/dokuwiki/inc/Parsing/ModeRegistry.php
/dokuwiki/inc/Parsing/Parser.php
/dokuwiki/inc/Parsing/ParserMode/AbstractFormatting.php
/dokuwiki/inc/Parsing/ParserMode/Acronym.php
/dokuwiki/inc/Parsing/ParserMode/Base.php
/dokuwiki/inc/Parsing/ParserMode/Camelcaselink.php
/dokuwiki/inc/Parsing/ParserMode/Code.php
/dokuwiki/inc/Parsing/ParserMode/Deleted.php
/dokuwiki/inc/Parsing/ParserMode/Emaillink.php
/dokuwiki/inc/Parsing/ParserMode/Emphasis.php
/dokuwiki/inc/Parsing/ParserMode/Entity.php
/dokuwiki/inc/Parsing/ParserMode/Eol.php
/dokuwiki/inc/Parsing/ParserMode/Externallink.php
/dokuwiki/inc/Parsing/ParserMode/File.php
/dokuwiki/inc/Parsing/ParserMode/Filelink.php
/dokuwiki/inc/Parsing/ParserMode/Footnote.php
/dokuwiki/inc/Parsing/ParserMode/Header.php
/dokuwiki/inc/Parsing/ParserMode/Hr.php
/dokuwiki/inc/Parsing/ParserMode/Internallink.php
/dokuwiki/inc/Parsing/ParserMode/Linebreak.php
/dokuwiki/inc/Parsing/ParserMode/Listblock.php
/dokuwiki/inc/Parsing/ParserMode/Media.php
/dokuwiki/inc/Parsing/ParserMode/ModeInterface.php
/dokuwiki/inc/Parsing/ParserMode/Monospace.php
/dokuwiki/inc/Parsing/ParserMode/Multiplyentity.php
/dokuwiki/inc/Parsing/ParserMode/Nocache.php
/dokuwiki/inc/Parsing/ParserMode/Notoc.php
/dokuwiki/inc/Parsing/ParserMode/Preformatted.php
/dokuwiki/inc/Parsing/ParserMode/Quote.php
/dokuwiki/inc/Parsing/ParserMode/Quotes.php
/dokuwiki/inc/Parsing/ParserMode/Rss.php
/dokuwiki/inc/Parsing/ParserMode/Smiley.php
/dokuwiki/inc/Parsing/ParserMode/Strong.php
/dokuwiki/inc/Parsing/ParserMode/Subscript.php
/dokuwiki/inc/Parsing/ParserMode/Superscript.php
/dokuwiki/inc/Parsing/ParserMode/Table.php
/dokuwiki/inc/Parsing/ParserMode/Underline.php
/dokuwiki/inc/Parsing/ParserMode/Unformatted.php
/dokuwiki/inc/Parsing/ParserMode/Windowssharelink.php
/dokuwiki/inc/Parsing/ParserMode/Wordblock.php
/dokuwiki/inc/deprecated.php
/dokuwiki/inc/legacy.php
/dokuwiki/inc/load.php
/dokuwiki/inc/parserutils.php
1f44347616-Apr-2026 Andreas Gohr <andi@splitbrain.org>

split Formatting into individual classes per formatting type

Introduce AbstractFormatting as a base class and seven concrete
classes (Strong, Emphasis, Underline, Monospace, Subscript,
Superscript,

split Formatting into individual classes per formatting type

Introduce AbstractFormatting as a base class and seven concrete
classes (Strong, Emphasis, Underline, Monospace, Subscript,
Superscript, Deleted) that each define their own patterns and
sort order. Delete the old Formatting class and update tests
to use the new classes directly. ModeRegistry now treats
formatting modes as regular built-in modes.

show more ...

c8dd1b9d16-Apr-2026 Andreas Gohr <andi@splitbrain.org>

introduce ModeRegistry to encapsulate parser mode categories

Replace the global $PARSER_MODES definition in inc/parser/parser.php
with a ModeRegistry singleton that initializes and manages the mode

introduce ModeRegistry to encapsulate parser mode categories

Replace the global $PARSER_MODES definition in inc/parser/parser.php
with a ModeRegistry singleton that initializes and manages the mode
categories. The global array is still populated for backward
compatibility with plugins that access it directly.

Mode constructors now use ModeRegistry::getModesForCategories()
instead of accessing the global directly. p_get_parsermodes() and
p_sort_modes() are moved to inc/deprecated.php as thin wrappers.

show more ...

8ab4ec3016-Apr-2026 Andreas Gohr <gohr@cosmocode.de>

remove dead ParallelRegex::apply() method

Remove apply() which was never called from production code. Rewrite
the inherited SimpleTest tests to use split() instead, and add a
test for pre/post-match

remove dead ParallelRegex::apply() method

Remove apply() which was never called from production code. Rewrite
the inherited SimpleTest tests to use split() instead, and add a
test for pre/post-match splitting.

show more ...


/dokuwiki/_test/rector.php
parser/lexer.test.php
/dokuwiki/composer.lock
/dokuwiki/data/deleted.files
/dokuwiki/inc/ErrorHandler.php
/dokuwiki/inc/Ip.php
/dokuwiki/inc/Manifest.php
/dokuwiki/inc/Parsing/Lexer/Lexer.php
/dokuwiki/inc/Parsing/Lexer/ParallelRegex.php
/dokuwiki/inc/PassHash.php
/dokuwiki/inc/fulltext.php
/dokuwiki/inc/lang/de-informal/lang.php
/dokuwiki/inc/lang/de/lang.php
/dokuwiki/inc/lang/en/lang.php
/dokuwiki/inc/lang/pl/lang.php
/dokuwiki/inc/lang/ru/lang.php
/dokuwiki/inc/parserutils.php
/dokuwiki/lib/images/larger.svg
/dokuwiki/lib/images/smaller.svg
/dokuwiki/lib/images/wrap.svg
/dokuwiki/lib/plugins/extension/Extension.php
/dokuwiki/lib/plugins/logviewer/style.less
/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
/dokuwiki/lib/scripts/editor.js
/dokuwiki/lib/scripts/page.js
/dokuwiki/lib/styles/screen.css
/dokuwiki/lib/tpl/dokuwiki/css/content.less
/dokuwiki/lib/tpl/dokuwiki/css/pagetools.less
/dokuwiki/vendor/composer/installed.json
/dokuwiki/vendor/composer/installed.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve25519.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve448.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/Common.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/OpenSSH.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS8.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/openssl.cnf
fe6048cc14-Apr-2026 Alexander Lehmann <alexlehm@gmail.com>

remove realip option, add default in conf/dokuwiki.php

bfc167db11-Apr-2026 Andreas Gohr <andi@splitbrain.org>

Limit namespace depth in io_createNamespace() #4613

Throw a RuntimeException when the given ID contains 128 or more
colon-separated segments, preventing creation of excessively deep
directory hierar

Limit namespace depth in io_createNamespace() #4613

Throw a RuntimeException when the given ID contains 128 or more
colon-separated segments, preventing creation of excessively deep
directory hierarchies.

show more ...


/dokuwiki/_test/rector.php
io_createnamespace.test.php
/dokuwiki/composer.lock
/dokuwiki/inc/ErrorHandler.php
/dokuwiki/inc/Ip.php
/dokuwiki/inc/Manifest.php
/dokuwiki/inc/PassHash.php
/dokuwiki/inc/fulltext.php
/dokuwiki/inc/io.php
/dokuwiki/inc/lang/de-informal/lang.php
/dokuwiki/inc/lang/de/lang.php
/dokuwiki/inc/lang/en/lang.php
/dokuwiki/inc/lang/pl/lang.php
/dokuwiki/inc/parserutils.php
/dokuwiki/lib/plugins/extension/Extension.php
/dokuwiki/lib/scripts/page.js
/dokuwiki/lib/styles/screen.css
/dokuwiki/lib/tpl/dokuwiki/css/content.less
/dokuwiki/vendor/composer/installed.json
/dokuwiki/vendor/composer/installed.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve25519.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve448.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/Common.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/OpenSSH.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS8.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/openssl.cnf
5e9d26e307-Apr-2026 Andreas Gohr <andi@splitbrain.org>

SearchIndex: move search() function tests back to tests/inc/search/

The search.test.php file tests the search() function from inc/search.php,
not the Search namespace classes. It was incorrectly mov

SearchIndex: move search() function tests back to tests/inc/search/

The search.test.php file tests the search() function from inc/search.php,
not the Search namespace classes. It was incorrectly moved into
tests/Search/ during the test suite reorganization. Move it and its
data files (ns1/, ns2/) back to their original location, keeping only
searchtest.txt in tests/Search/data/ where it belongs.

show more ...

e1272c0807-Apr-2026 Andreas Gohr <andi@splitbrain.org>

SearchIndex: add backward compatibility wrappers

Add deprecated wrappers for idx_* and ft_* functions that were removed
when inc/indexer.php and inc/fulltext.php were replaced by the new
Search clas

SearchIndex: add backward compatibility wrappers

Add deprecated wrappers for idx_* and ft_* functions that were removed
when inc/indexer.php and inc/fulltext.php were replaced by the new
Search classes. These wrappers delegate to the new architecture and
ensure existing plugins continue to work.

Deprecated standalone functions: idx_get_indexer, idx_getIndex,
idx_lookup, idx_listIndexLengths, idx_indexLengths, ft_pageSearch,
ft_backlinks, ft_mediause, ft_pageLookup, ft_snippet, ft_pagesorter,
ft_snippet_re_preprocess, ft_queryParser.

Deprecated methods on Indexer: lookupKey, getPages, addMetaKeys,
renameMetaValue, getPID, lookup.

Also migrates remaining core callers (Ajax, FeedCreator, ApiCore) to
use the new classes directly and fixes a UTF-8 case folding bug in
MetadataSearch title lookups.

show more ...

74a9499c07-Apr-2026 Andreas Gohr <andi@splitbrain.org>

SearchIndex: remove legacy intermediate classes from PR #2943

Remove FulltextIndex, MetadataIndex, and the old AbstractIndex which
were introduced as a stepping stone in #2943. All callers now use t

SearchIndex: remove legacy intermediate classes from PR #2943

Remove FulltextIndex, MetadataIndex, and the old AbstractIndex which
were introduced as a stepping stone in #2943. All callers now use the
Collection/Index architecture directly.

Also fix a bug in detail.php where mediause() was called with
ignore_perms=true, leaking references from hidden/protected pages
to unprivileged users. This bug existed on master as well.

Old test files replaced by their modernized equivalents in tests/Search/.

show more ...

ede4646606-Apr-2026 Andreas Gohr <andi@splitbrain.org>

SearchIndex: reorganize and expand test suite

Move all Search tests from _test/tests/inc/Search/ to _test/tests/Search/
to match the dokuwiki\test autoloader convention. Fix namespaces from
tests\*

SearchIndex: reorganize and expand test suite

Move all Search tests from _test/tests/inc/Search/ to _test/tests/Search/
to match the dokuwiki\test autoloader convention. Fix namespaces from
tests\* to dokuwiki\test\* so all tests work in isolation.

Extract inline test helpers into separate autoloadable mock files:
TestDirectCollection → MockDirectCollection, TestLookupCollection →
MockLookupCollection, TestFrequencyCollection → MockFrequencyCollection.

Rename AbstractIndexTest → AbstractIndexTestCase to fix PHPUnit warning
about abstract classes with Test suffix.

Replace dead xxxRealWord() with proper testWildcardSearch() verifying
exact token matches and frequencies for all three wildcard types.
Add testTokenizedPageSearch() using a dedicated test data file. Add
testNoMatchReturnsEmptyFrequencies() which exposed a bug in Term where
uninitialized $tokens/$frequencies caused crashes on zero-match terms.

Replace fulltext_query.test.php with modern QueryParserTest in the
Search\Query namespace.

Add new test files:
- LockTest: acquire/release, reference counting, stale lock override,
foreign lock rejection, releaseAll, independent locks
- NamespacePredicateTest: filter/exclude, sub-namespaces, partial prefix
safety, empty sets, score preservation
- PageSetTest: intersect, unite, subtract, isEmpty
- QueryEvaluatorTest: word lookups, AND/OR/NOT, namespace filtering,
combined queries, partial namespace prefix safety

Fix Term.php: initialize $tokens and $frequencies to [] instead of null.

show more ...


/dokuwiki/_test/tests/Search/Collection/DirectCollectionTest.php
/dokuwiki/_test/tests/Search/Collection/FrequencyCollectionSearchTest.php
/dokuwiki/_test/tests/Search/Collection/FrequencyCollectionTest.php
/dokuwiki/_test/tests/Search/Collection/LookupCollectionTest.php
/dokuwiki/_test/tests/Search/Collection/MockDirectCollection.php
/dokuwiki/_test/tests/Search/Collection/MockFrequencyCollection.php
/dokuwiki/_test/tests/Search/Collection/MockLookupCollection.php
/dokuwiki/_test/tests/Search/Collection/TermTest.php
/dokuwiki/_test/tests/Search/Index/AbstractIndexTestCase.php
/dokuwiki/_test/tests/Search/Index/FileIndexTest.php
/dokuwiki/_test/tests/Search/Index/LockTest.php
/dokuwiki/_test/tests/Search/Index/MemoryIndexTest.php
/dokuwiki/_test/tests/Search/Index/TupleOpsTest.php
/dokuwiki/_test/tests/Search/IndexerTest.php
/dokuwiki/_test/tests/Search/Query/NamespacePredicateTest.php
/dokuwiki/_test/tests/Search/Query/PageSetTest.php
/dokuwiki/_test/tests/Search/Query/QueryEvaluatorTest.php
/dokuwiki/_test/tests/Search/Query/QueryParserTest.php
/dokuwiki/_test/tests/Search/data/ns1/ns3/page3.txt
/dokuwiki/_test/tests/Search/data/ns1/page1.txt
/dokuwiki/_test/tests/Search/data/ns1/page2.txt
/dokuwiki/_test/tests/Search/data/ns2/nopage.ext
/dokuwiki/_test/tests/Search/data/ns2/page1.txt
/dokuwiki/_test/tests/Search/data/searchtest.txt
/dokuwiki/_test/tests/Search/search.test.php
/dokuwiki/inc/Action/Search.php
/dokuwiki/inc/Remote/ApiCore.php
/dokuwiki/inc/Search/Collection/Term.php
/dokuwiki/inc/Search/FulltextSearch.php
/dokuwiki/inc/Search/MetadataSearch.php
/dokuwiki/inc/Search/Query/NamespacePredicate.php
/dokuwiki/inc/Search/Query/NegatedEntry.php
/dokuwiki/inc/Search/Query/PageSet.php
/dokuwiki/inc/Search/Query/QueryEvaluator.php
/dokuwiki/inc/Search/Query/QueryParser.php
/dokuwiki/inc/Search/Query/StackEntry.php
/dokuwiki/inc/Ui/Search.php
/dokuwiki/inc/Ui/SearchState.php
83b3accc06-Apr-2026 Andreas Gohr <andi@splitbrain.org>

SearchIndex: rewrite Indexer to use Collection classes

Replace the intermediate #2943 classes (FulltextIndex, MetadataIndex)
with the new Collection-based architecture. The Indexer is now a thin
sta

SearchIndex: rewrite Indexer to use Collection classes

Replace the intermediate #2943 classes (FulltextIndex, MetadataIndex)
with the new Collection-based architecture. The Indexer is now a thin
stateless orchestrator that delegates all index work to collections.

Key changes:
- Indexer no longer extends AbstractIndex; page name passed to methods
- addPage/deletePage/clear use PageTitleCollection,
PageFulltextCollection, and PageMetaCollection
- New PageMetaCollection replaces separate ReferencesCollection and
MediaCollection with a single class that handles arbitrary metadata
keys dynamically
- Shared writable FileIndex('page') passed to all collections
- Logger callback replaces verbose parameter
- Methods return void instead of bool
- Index classes implement IteratorAggregate for clean data access
- Indexer tests consolidated into namespaced IndexerTest.php
- All callers updated to new stateless API

show more ...

c66b5ec605-Apr-2026 Andreas Gohr <andi@splitbrain.org>

SearchIndex: rewrite Lock as static registry with reference counting

Replace the instance-based Lock class with a static registry that
tracks held locks per-process with reference counting. This sol

SearchIndex: rewrite Lock as static registry with reference counting

Replace the instance-based Lock class with a static registry that
tracks held locks per-process with reference counting. This solves
three problems:

- Split indexes (w3, w4, ...) share a single lock name and now
coordinate naturally via the registry
- Multiple callers can acquire the same lock without conflict
- Indexes enforce their own writability through lock()/unlock()
methods on AbstractIndex

The Lock registry manages both the filesystem lock (mkdir) and the
in-process tracking. The first acquire creates the directory, subsequent
acquires increment the refcount. Release decrements, and only removes
the directory when the count reaches zero.

Note: I am not sure if implementing this as a static object is a great
idea or if we should pass an instance through the collection to the
indexes...

show more ...

d92c078c05-Apr-2026 Andreas Gohr <andi@splitbrain.org>

SearchIndex: add DirectCollection for 1:1 entity-token mappings

Introduce DirectCollection as a third collection type alongside
FrequencyCollection and LookupCollection. Direct collections store
exa

SearchIndex: add DirectCollection for 1:1 entity-token mappings

Introduce DirectCollection as a third collection type alongside
FrequencyCollection and LookupCollection. Direct collections store
exactly one token per entity at the entity's position in the token
index (entity.RID === token.RID), with no frequency or reverse indexes.

AbstractCollection now accepts optional frequency/reverse index names
(default to '') and skips locking empty index names.

Adds PageTitleCollection as the first concrete direct collection
for the page -> title mapping.

show more ...

f2bbffb505-Apr-2026 Andreas Gohr <andi@splitbrain.org>

SearchIndex: extract Collection base class hierarchy

Introduce AbstractCollection as the shared base for all index
collections, with FrequencyCollection and LookupCollection as
the two abstract subc

SearchIndex: extract Collection base class hierarchy

Introduce AbstractCollection as the shared base for all index
collections, with FrequencyCollection and LookupCollection as
the two abstract subclasses differing only in how tokens are
counted (frequency vs dedup).

Key design decisions:
- splitByLength is a constructor parameter on AbstractCollection
controlling whether token/frequency indexes use length-based
file splitting. This is independent of the collection type.
- The reverse index format is self-describing: entries with *
have a group prefix (split), entries without don't (non-split).
No branching needed in parse/format methods.
- addEntity, resolveTokens, updateIndexes, and reverse index
handling all live in AbstractCollection. Subclasses only
implement countTokens().

Concrete collections: PageFulltextCollection (frequency, split),
MediaCollection and ReferencesCollection (lookup, non-split).

Renames FulltextCollection -> PageFulltextCollection and
FulltextCollectionSearch -> FrequencyCollectionSearch.

show more ...

e7a87ee207-Mar-2026 Andreas Gohr <andi@splitbrain.org>

fix http tests

The response at httpbingo has changed, tests needed updates


/dokuwiki/.github/workflows/autoFix.yml
/dokuwiki/.github/workflows/deletedFiles.yml
/dokuwiki/.github/workflows/phpCS.yml
/dokuwiki/.github/workflows/release-build.yml
/dokuwiki/.github/workflows/testLinux.yml
/dokuwiki/.github/workflows/testWindows.yml
/dokuwiki/.github/workflows/todoChecker.yml
/dokuwiki/_test/composer.json
/dokuwiki/_test/composer.lock
/dokuwiki/_test/core/DokuWikiTest.php
/dokuwiki/_test/phpcs.xml
/dokuwiki/_test/tests/Feed/FeedCreatorValidationTest.php
/dokuwiki/_test/tests/TreeBuilder/PageTreeBuilderTest.php
httpclient_http.test.php
/dokuwiki/bin/gittool.php
/dokuwiki/bin/indexer.php
/dokuwiki/composer.json
/dokuwiki/composer.lock
/dokuwiki/inc/ChangeLog/ChangeLog.php
/dokuwiki/inc/ChangeLog/ChangeLogTrait.php
/dokuwiki/inc/PassHash.php
/dokuwiki/inc/PrefCookie.php
/dokuwiki/inc/TreeBuilder/PageTreeBuilder.php
/dokuwiki/inc/Ui/Editor.php
/dokuwiki/inc/Ui/Login.php
/dokuwiki/inc/Utf8/Conversion.php
/dokuwiki/inc/actions.php
/dokuwiki/inc/auth.php
/dokuwiki/inc/fulltext.php
/dokuwiki/inc/infoutils.php
/dokuwiki/inc/init.php
/dokuwiki/inc/lang/ca/lang.php
/dokuwiki/inc/lang/de/lang.php
/dokuwiki/inc/lang/en/install.html
/dokuwiki/inc/lang/en/lang.php
/dokuwiki/inc/lang/es/denied.txt
/dokuwiki/inc/lang/es/edit.txt
/dokuwiki/inc/lang/es/editrev.txt
/dokuwiki/inc/lang/es/lang.php
/dokuwiki/inc/lang/es/register.txt
/dokuwiki/inc/lang/it/lang.php
/dokuwiki/inc/pageutils.php
/dokuwiki/install.php
/dokuwiki/lib/exe/js.php
/dokuwiki/lib/plugins/acl/lang/es/help.txt
/dokuwiki/lib/plugins/acl/lang/es/lang.php
/dokuwiki/lib/plugins/authad/lang/es/lang.php
/dokuwiki/lib/plugins/authad/lang/es/settings.php
/dokuwiki/lib/plugins/authldap/auth.php
/dokuwiki/lib/plugins/authldap/lang/ca/settings.php
/dokuwiki/lib/plugins/authldap/lang/es/settings.php
/dokuwiki/lib/plugins/authldap/lang/it/settings.php
/dokuwiki/lib/plugins/authldap/lang/pt-br/settings.php
/dokuwiki/lib/plugins/authpdo/lang/ca/settings.php
/dokuwiki/lib/plugins/config/lang/es/intro.txt
/dokuwiki/lib/plugins/config/lang/es/lang.php
/dokuwiki/lib/plugins/config/lang/it/lang.php
/dokuwiki/lib/plugins/config/lang/ko/lang.php
/dokuwiki/lib/plugins/extension/Extension.php
/dokuwiki/lib/plugins/extension/Installer.php
/dokuwiki/lib/plugins/extension/_test/InstallerTest.php
/dokuwiki/lib/plugins/extension/_test/testdata/plugin3/syntax.php
/dokuwiki/lib/plugins/extension/cli.php
/dokuwiki/lib/plugins/extension/lang/ca/lang.php
/dokuwiki/lib/plugins/extension/lang/en/lang.php
/dokuwiki/lib/plugins/extension/lang/es/intro_install.txt
/dokuwiki/lib/plugins/extension/lang/es/intro_search.txt
/dokuwiki/lib/plugins/extension/lang/es/intro_templates.txt
/dokuwiki/lib/plugins/extension/lang/es/lang.php
/dokuwiki/lib/plugins/extension/lang/it/lang.php
/dokuwiki/lib/plugins/logviewer/lang/it/intro.txt
/dokuwiki/lib/plugins/logviewer/lang/it/lang.php
/dokuwiki/lib/plugins/logviewer/lang/it/nolog.txt
/dokuwiki/lib/plugins/popularity/lang/es/intro.txt
/dokuwiki/lib/plugins/styling/lang/es/lang.php
/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
/dokuwiki/lib/scripts/editor.js
/dokuwiki/lib/tpl/dokuwiki/css/_edit.css
/dokuwiki/vendor/composer/autoload_static.php
/dokuwiki/vendor/composer/installed.json
/dokuwiki/vendor/composer/installed.php
/dokuwiki/vendor/composer/platform_check.php
/dokuwiki/vendor/paragonie/constant_time_encoding/README.md
/dokuwiki/vendor/paragonie/constant_time_encoding/composer.json
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Base32.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Base32Hex.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Base64.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Binary.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/EncoderInterface.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Encoding.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/Hex.php
/dokuwiki/vendor/paragonie/constant_time_encoding/src/RFC4648.php
/dokuwiki/vendor/phpseclib/phpseclib/BACKERS.md
/dokuwiki/vendor/phpseclib/phpseclib/README.md
/dokuwiki/vendor/phpseclib/phpseclib/SECURITY.md
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Strings.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/JWK.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PuTTY.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/StreamCipher.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS1.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PuTTY.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Montgomery.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Prime.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/TwistedEdwards.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/XML.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/PublicKeyLoader.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/MSBLOB.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS1.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PuTTY.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/File/X509.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Base.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/BuiltIn.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/Barrett.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/EvalBarrett.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/Engine.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Barrett.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField/Integer.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php
/dokuwiki/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
/dokuwiki/vendor/simplepie/simplepie/CHANGELOG.md
/dokuwiki/vendor/simplepie/simplepie/LICENSES/BSD-3-Clause.txt
/dokuwiki/vendor/simplepie/simplepie/LICENSES/MIT.txt
/dokuwiki/vendor/simplepie/simplepie/README.markdown
/dokuwiki/vendor/simplepie/simplepie/autoloader.php
/dokuwiki/vendor/simplepie/simplepie/composer.json
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Author.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Cache.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Caption.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Category.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Core.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Credit.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Exception.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/File.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/IRI.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Item.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Locator.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Misc.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Parser.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Rating.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Registry.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/Source.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
/dokuwiki/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
/dokuwiki/vendor/simplepie/simplepie/phpstan.dist.neon
/dokuwiki/vendor/simplepie/simplepie/src/Author.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/Base.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/BaseDataCache.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/CallableNameFilter.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/DB.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/DataCache.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/File.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/Memcache.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/Memcached.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/MySQL.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/NameFilter.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/Psr16.php
/dokuwiki/vendor/simplepie/simplepie/src/Cache/Redis.php
/dokuwiki/vendor/simplepie/simplepie/src/Caption.php
/dokuwiki/vendor/simplepie/simplepie/src/Category.php
/dokuwiki/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php
/dokuwiki/vendor/simplepie/simplepie/src/Copyright.php
/dokuwiki/vendor/simplepie/simplepie/src/Credit.php
/dokuwiki/vendor/simplepie/simplepie/src/Enclosure.php
/dokuwiki/vendor/simplepie/simplepie/src/Exception.php
/dokuwiki/vendor/simplepie/simplepie/src/File.php
/dokuwiki/vendor/simplepie/simplepie/src/Gzdecode.php
/dokuwiki/vendor/simplepie/simplepie/src/HTTP/Client.php
/dokuwiki/vendor/simplepie/simplepie/src/HTTP/ClientException.php
/dokuwiki/vendor/simplepie/simplepie/src/HTTP/FileClient.php
/dokuwiki/vendor/simplepie/simplepie/src/HTTP/Parser.php
/dokuwiki/vendor/simplepie/simplepie/src/HTTP/Psr18Client.php
/dokuwiki/vendor/simplepie/simplepie/src/HTTP/Psr7Response.php
/dokuwiki/vendor/simplepie/simplepie/src/HTTP/RawTextResponse.php
/dokuwiki/vendor/simplepie/simplepie/src/HTTP/Response.php
/dokuwiki/vendor/simplepie/simplepie/src/IRI.php
/dokuwiki/vendor/simplepie/simplepie/src/Item.php
/dokuwiki/vendor/simplepie/simplepie/src/Locator.php
/dokuwiki/vendor/simplepie/simplepie/src/Misc.php
/dokuwiki/vendor/simplepie/simplepie/src/Net/IPv6.php
/dokuwiki/vendor/simplepie/simplepie/src/Parse/Date.php
/dokuwiki/vendor/simplepie/simplepie/src/Parser.php
/dokuwiki/vendor/simplepie/simplepie/src/Rating.php
/dokuwiki/vendor/simplepie/simplepie/src/Registry.php
/dokuwiki/vendor/simplepie/simplepie/src/RegistryAware.php
/dokuwiki/vendor/simplepie/simplepie/src/Restriction.php
/dokuwiki/vendor/simplepie/simplepie/src/Sanitize.php
/dokuwiki/vendor/simplepie/simplepie/src/SimplePie.php
/dokuwiki/vendor/simplepie/simplepie/src/Source.php
/dokuwiki/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php
/dokuwiki/vendor/simplepie/simplepie/utils/PHPStan/README.md
/dokuwiki/vendor/simplepie/simplepie/utils/PHPStan/RegistryCallMethodReturnTypeExtension.php
/dokuwiki/vendor/simplepie/simplepie/utils/PHPStan/extension.neon
/dokuwiki/vendor/splitbrain/php-archive/src/Tar.php
/dokuwiki/vendor/splitbrain/php-cli/src/Options.php
8f178b7019-Jan-2026 Alexander Lehmann <alexlehm@gmail.com>

convert tests to data provider

6f0cf24e17-Jan-2026 Alexander Lehmann <alexlehm@gmail.com>

add comment to the real-ip test

2b760c9f15-Jan-2026 Alexander Lehmann <alexlehm@gmail.com>

add custom client_ip_header


/dokuwiki/.github/workflows/testLinux.yml
/dokuwiki/.github/workflows/testWindows.yml
/dokuwiki/_test/phpcs.xml
IpTest.php
/dokuwiki/bin/gittool.php
/dokuwiki/bin/indexer.php
/dokuwiki/inc/Ip.php
/dokuwiki/inc/PrefCookie.php
/dokuwiki/inc/Ui/Login.php
/dokuwiki/inc/auth.php
/dokuwiki/inc/fulltext.php
/dokuwiki/inc/init.php
/dokuwiki/inc/lang/ca/lang.php
/dokuwiki/inc/lang/en/install.html
/dokuwiki/inc/lang/es/denied.txt
/dokuwiki/inc/lang/es/edit.txt
/dokuwiki/inc/lang/es/editrev.txt
/dokuwiki/inc/lang/es/lang.php
/dokuwiki/inc/lang/es/register.txt
/dokuwiki/inc/lang/it/lang.php
/dokuwiki/lib/exe/js.php
/dokuwiki/lib/plugins/acl/lang/es/help.txt
/dokuwiki/lib/plugins/acl/lang/es/lang.php
/dokuwiki/lib/plugins/authad/lang/es/lang.php
/dokuwiki/lib/plugins/authad/lang/es/settings.php
/dokuwiki/lib/plugins/authldap/auth.php
/dokuwiki/lib/plugins/authldap/lang/ca/settings.php
/dokuwiki/lib/plugins/authldap/lang/es/settings.php
/dokuwiki/lib/plugins/authldap/lang/it/settings.php
/dokuwiki/lib/plugins/authldap/lang/pt-br/settings.php
/dokuwiki/lib/plugins/authpdo/lang/ca/settings.php
/dokuwiki/lib/plugins/config/lang/en/lang.php
/dokuwiki/lib/plugins/config/lang/es/intro.txt
/dokuwiki/lib/plugins/config/lang/es/lang.php
/dokuwiki/lib/plugins/config/lang/it/lang.php
/dokuwiki/lib/plugins/config/lang/ko/lang.php
/dokuwiki/lib/plugins/config/settings/config.metadata.php
/dokuwiki/lib/plugins/extension/Extension.php
/dokuwiki/lib/plugins/extension/Installer.php
/dokuwiki/lib/plugins/extension/_test/InstallerTest.php
/dokuwiki/lib/plugins/extension/_test/testdata/plugin3/syntax.php
/dokuwiki/lib/plugins/extension/cli.php
/dokuwiki/lib/plugins/extension/lang/ca/lang.php
/dokuwiki/lib/plugins/extension/lang/es/intro_install.txt
/dokuwiki/lib/plugins/extension/lang/es/intro_search.txt
/dokuwiki/lib/plugins/extension/lang/es/intro_templates.txt
/dokuwiki/lib/plugins/extension/lang/es/lang.php
/dokuwiki/lib/plugins/extension/lang/it/lang.php
/dokuwiki/lib/plugins/logviewer/lang/it/intro.txt
/dokuwiki/lib/plugins/logviewer/lang/it/lang.php
/dokuwiki/lib/plugins/logviewer/lang/it/nolog.txt
/dokuwiki/lib/plugins/popularity/lang/es/intro.txt
/dokuwiki/lib/plugins/styling/lang/es/lang.php
/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
2f70db9004-Dec-2025 WillForan <willforan@gmail.com>

fix: 32bit IP tests w/string of decimal representation, overflows

Math in PHP is hard!
sprintf("%.0f",0x7FFFFFFFFFFFFFFF) == sprintf("%.0f",0x7FFFFFFFFFFFFF00)

Changes
* 32bit gets own version o

fix: 32bit IP tests w/string of decimal representation, overflows

Math in PHP is hard!
sprintf("%.0f",0x7FFFFFFFFFFFFFFF) == sprintf("%.0f",0x7FFFFFFFFFFFFF00)

Changes
* 32bit gets own version of tests where expected values are strings
* decimalToBinary32 to replace `sprintf("%032b%032b"...)`, avoids overflow
* overflow check in ipv4 too
* refactor
* partsTo64 for 32bit parts into dec value as str (bcmath)
* Ip32::$b32 as class constant
* condition always PHP_INT_SIZE == 4 for 32bit (instead of == 8 for 64)

show more ...

a060f5a004-Dec-2025 WillForan <willforan@gmail.com>

refactor(ip): PSR-12 functions

bitmask64_32 -> bitmask64On32
make_bitmask_32 -> makeBitmaskOn32
ipv6_upper_lower_32 -> ipv6UpperLowerOn32

also
* uncomment working 7FFF ipv6 test a

refactor(ip): PSR-12 functions

bitmask64_32 -> bitmask64On32
make_bitmask_32 -> makeBitmaskOn32
ipv6_upper_lower_32 -> ipv6UpperLowerOn32

also
* uncomment working 7FFF ipv6 test and
* fix README suggested podman to use `docker://wpstaging`

show more ...

3152848f30-Oct-2025 Andreas Gohr <gohr@cosmocode.de>

updated fulltextCollectionTest for new tuple format

frequency of 1 is now written without a count

12345678910>>...23