Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 54 additions & 1 deletion l10n/nl.js
Original file line number Diff line number Diff line change
Expand Up @@ -3576,7 +3576,60 @@ OC.L10N.register(
"Transform of row {number}:": "Omzetting van rij {number}:",
"You are not signed in. Sign in and try again.": "Je bent niet aangemeld. Meld je aan en probeer het opnieuw.",
"{label} of row {number}": "{label} van rij {number}",
"Another pack already has this slug. Choose a different slug.": "Een ander pakket heeft deze slug al. Kies een andere slug."
"Another pack already has this slug. Choose a different slug.": "Een ander pakket heeft deze slug al. Kies een andere slug.",
"Wait for an answer": "Wachten op een antwoord",
"Pause until someone approves, rejects, or another system reports back.": "Pauzeer tot iemand goedkeurt of afwijst, of tot een ander systeem iets terugmeldt.",
"Evaluate a decision table": "Beslistabel toepassen",
"Apply a table of rules to each item and write the outcome onto it.": "Pas een tabel met regels toe op elk item en schrijf de uitkomst erop.",
"End": "Einde",
"End the flow here, optionally as an error with a message.": "Beëindig de flow hier, als je wilt als fout met een melding.",
"Explode": "Opsplitsen",
"Turn a list on the item into one item per entry, so later steps act on each.": "Maak van een lijst op het item één item per regel, zodat volgende stappen elk apart behandelen.",
"Filter": "Filteren",
"Keep only the items matching a condition.": "Houd alleen de items over die aan een voorwaarde voldoen.",
"Flow state": "Flowgeheugen",
"Remember something between runs of this flow — a counter, a cursor, or a table of slots.": "Onthoud iets tussen uitvoeringen van deze flow: een teller, een positie of een tabel met plekken.",
"Repeat until done": "Herhalen tot klaar",
"Run a chain of steps once per batch, until the source runs out.": "Voer een reeks stappen uit per portie, tot de bron leeg is.",
"Lock an object": "Object vergrendelen",
"Hold an object for this run so nobody else can change it. If another run holds it, this step waits and tries again.": "Houd een object vast voor deze uitvoering, zodat niemand anders het wijzigt. Houdt een andere uitvoering het vast, dan wacht deze stap en probeert het opnieuw.",
"Batch items": "Items in porties delen",
"Split the items into fixed-size batches for a step that needs them a slice at a time.": "Verdeel de items in porties van vaste grootte, voor een stap die ze per deel verwerkt.",
"Map": "Mappen",
"Reshape each item through a stored mapping.": "Zet elk item om met een opgeslagen mapping.",
"Combine the items arriving from several branches into one list.": "Voeg de items uit meerdere takken samen tot één lijst.",
"Read objects": "Objecten lezen",
"Find objects in a register and put them on the item.": "Zoek objecten in een register en zet ze op het item.",
"Write an object": "Object schrijven",
"Create, update, upsert or delete an OpenRegister object for every item — as the person who started the run, with their permissions.": "Maak, wijzig of verwijder een OpenRegister-object voor elk item. Dat gebeurt als de persoon die de uitvoering startte, met diens rechten.",
"Ask a party outside the organisation": "Een partij buiten de organisatie iets vragen",
"Ask the applicant or another party on the case, through the portal, and wait for their answer or upload. For someone in the organisation use \"Ask a person\"; for a system that will call back use \"Wait for an answer\".": "Vraag de aanvrager of een andere partij op de zaak iets via het portaal en wacht op het antwoord of de upload. Voor iemand in de organisatie gebruik je \"Een persoon of groep iets vragen\". Voor een systeem dat terugbelt gebruik je \"Wachten op een antwoord\".",
"Route items": "Items verdelen",
"Send each item down a different branch, chosen per item by a rule.": "Stuur elk item naar een eigen tak, per item gekozen met een regel.",
"Send an email": "E-mail versturen",
"Send an email to people, at this point in the flow.": "Stuur op dit punt in de flow een e-mail naar mensen.",
"Send a notification": "Melding versturen",
"Send an in-app notification to people, at this point in the flow.": "Stuur op dit punt in de flow een melding in Nextcloud naar mensen.",
"Send a Talk message": "Talk-bericht versturen",
"Post a chat message to a Talk conversation, as the user this flow runs as.": "Plaats een chatbericht in een Talk-gesprek, als de gebruiker waarmee deze flow draait.",
"Edit fields": "Velden bewerken",
"Set, rename or remove fields on every item passing through.": "Vul velden, hernoem ze of haal ze weg op elk item dat langskomt.",
"Run a flow": "Flow uitvoeren",
"Run another flow as a step — wait for its result, or start it and carry on.": "Voer een andere flow uit als stap. Wacht op het resultaat, of start hem en ga door.",
"Switch": "Wissel",
"Send the flow down one of several branches, chosen by the condition on each.": "Stuur de flow naar een van meerdere takken, gekozen op de voorwaarde van elke tak.",
"When someone runs it": "Als iemand hem start",
"Start the flow on demand. Says \"a person starts this\" out loud, which a flow with no trigger at all cannot.": "Start de flow wanneer iemand dat wil. Zo staat er zichtbaar dat een persoon hem start, wat een flow zonder trigger niet zegt.",
"When an object changes": "Als een object verandert",
"Start the flow when one kind of object is created, updated or deleted. One event, one register, one schema — use a mapping node to normalise other shapes.": "Start de flow als een soort object wordt aangemaakt, gewijzigd of verwijderd. Eén gebeurtenis, één register, één schema. Gebruik een mappingstap om andere vormen gelijk te trekken.",
"On a schedule": "Volgens schema",
"Start the flow on a cron schedule. The run begins with no object — the first node has to fetch what it works on.": "Start de flow volgens een cronschema. De uitvoering begint zonder object, dus de eerste stap haalt op waarmee hij werkt.",
"Unlock an object": "Object ontgrendelen",
"Release an object this run is holding, so others can change it again. The run releases its locks when it ends anyway; this frees them sooner.": "Laat een object los dat deze uitvoering vasthoudt, zodat anderen het weer kunnen wijzigen. Aan het eind laat de uitvoering het toch los, deze stap doet dat eerder.",
"Ask a person or group": "Een persoon of groep iets vragen",
"Ask a person, a group or an agent to do something, and wait for the answer. For a system that will call back, use \"Wait for an answer\" instead.": "Vraag een persoon, groep of agent iets te doen en wacht op het antwoord. Voor een systeem dat terugbelt gebruik je \"Wachten op een antwoord\".",
"Wait": "Wachten",
"Pause the flow for a while, then carry on where it left off.": "Pauzeer de flow een tijd en ga daarna verder waar hij was."
},
"nplurals=2; plural=(n != 1);"
)
55 changes: 54 additions & 1 deletion l10n/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -3463,7 +3463,60 @@
"You may not save this object.": "U mag dit object niet opslaan.",
"This draft is not complete yet. Check the fields marked below.": "Dit concept is nog niet compleet. Controleer de gemarkeerde velden.",
"Please sign in to make this draft definitive.": "Log in om dit concept definitief te maken.",
"The draft could not be made definitive right now. Nothing was changed; try again later.": "Het concept kon nu niet definitief worden gemaakt. Er is niets gewijzigd; probeer het later opnieuw."
"The draft could not be made definitive right now. Nothing was changed; try again later.": "Het concept kon nu niet definitief worden gemaakt. Er is niets gewijzigd; probeer het later opnieuw.",
"Wait for an answer": "Wachten op een antwoord",
"Pause until someone approves, rejects, or another system reports back.": "Pauzeer tot iemand goedkeurt of afwijst, of tot een ander systeem iets terugmeldt.",
"Evaluate a decision table": "Beslistabel toepassen",
"Apply a table of rules to each item and write the outcome onto it.": "Pas een tabel met regels toe op elk item en schrijf de uitkomst erop.",
"End": "Einde",
"End the flow here, optionally as an error with a message.": "Beëindig de flow hier, als je wilt als fout met een melding.",
"Explode": "Opsplitsen",
"Turn a list on the item into one item per entry, so later steps act on each.": "Maak van een lijst op het item één item per regel, zodat volgende stappen elk apart behandelen.",
"Filter": "Filteren",
"Keep only the items matching a condition.": "Houd alleen de items over die aan een voorwaarde voldoen.",
"Flow state": "Flowgeheugen",
"Remember something between runs of this flow — a counter, a cursor, or a table of slots.": "Onthoud iets tussen uitvoeringen van deze flow: een teller, een positie of een tabel met plekken.",
"Repeat until done": "Herhalen tot klaar",
"Run a chain of steps once per batch, until the source runs out.": "Voer een reeks stappen uit per portie, tot de bron leeg is.",
"Lock an object": "Object vergrendelen",
"Hold an object for this run so nobody else can change it. If another run holds it, this step waits and tries again.": "Houd een object vast voor deze uitvoering, zodat niemand anders het wijzigt. Houdt een andere uitvoering het vast, dan wacht deze stap en probeert het opnieuw.",
"Batch items": "Items in porties delen",
"Split the items into fixed-size batches for a step that needs them a slice at a time.": "Verdeel de items in porties van vaste grootte, voor een stap die ze per deel verwerkt.",
"Map": "Mappen",
"Reshape each item through a stored mapping.": "Zet elk item om met een opgeslagen mapping.",
"Combine the items arriving from several branches into one list.": "Voeg de items uit meerdere takken samen tot één lijst.",
"Read objects": "Objecten lezen",
"Find objects in a register and put them on the item.": "Zoek objecten in een register en zet ze op het item.",
"Write an object": "Object schrijven",
"Create, update, upsert or delete an OpenRegister object for every item — as the person who started the run, with their permissions.": "Maak, wijzig of verwijder een OpenRegister-object voor elk item. Dat gebeurt als de persoon die de uitvoering startte, met diens rechten.",
"Ask a party outside the organisation": "Een partij buiten de organisatie iets vragen",
"Ask the applicant or another party on the case, through the portal, and wait for their answer or upload. For someone in the organisation use \"Ask a person\"; for a system that will call back use \"Wait for an answer\".": "Vraag de aanvrager of een andere partij op de zaak iets via het portaal en wacht op het antwoord of de upload. Voor iemand in de organisatie gebruik je \"Een persoon of groep iets vragen\". Voor een systeem dat terugbelt gebruik je \"Wachten op een antwoord\".",
"Route items": "Items verdelen",
"Send each item down a different branch, chosen per item by a rule.": "Stuur elk item naar een eigen tak, per item gekozen met een regel.",
"Send an email": "E-mail versturen",
"Send an email to people, at this point in the flow.": "Stuur op dit punt in de flow een e-mail naar mensen.",
"Send a notification": "Melding versturen",
"Send an in-app notification to people, at this point in the flow.": "Stuur op dit punt in de flow een melding in Nextcloud naar mensen.",
"Send a Talk message": "Talk-bericht versturen",
"Post a chat message to a Talk conversation, as the user this flow runs as.": "Plaats een chatbericht in een Talk-gesprek, als de gebruiker waarmee deze flow draait.",
"Edit fields": "Velden bewerken",
"Set, rename or remove fields on every item passing through.": "Vul velden, hernoem ze of haal ze weg op elk item dat langskomt.",
"Run a flow": "Flow uitvoeren",
"Run another flow as a step — wait for its result, or start it and carry on.": "Voer een andere flow uit als stap. Wacht op het resultaat, of start hem en ga door.",
"Switch": "Wissel",
"Send the flow down one of several branches, chosen by the condition on each.": "Stuur de flow naar een van meerdere takken, gekozen op de voorwaarde van elke tak.",
"When someone runs it": "Als iemand hem start",
"Start the flow on demand. Says \"a person starts this\" out loud, which a flow with no trigger at all cannot.": "Start de flow wanneer iemand dat wil. Zo staat er zichtbaar dat een persoon hem start, wat een flow zonder trigger niet zegt.",
"When an object changes": "Als een object verandert",
"Start the flow when one kind of object is created, updated or deleted. One event, one register, one schema — use a mapping node to normalise other shapes.": "Start de flow als een soort object wordt aangemaakt, gewijzigd of verwijderd. Eén gebeurtenis, één register, één schema. Gebruik een mappingstap om andere vormen gelijk te trekken.",
"On a schedule": "Volgens schema",
"Start the flow on a cron schedule. The run begins with no object — the first node has to fetch what it works on.": "Start de flow volgens een cronschema. De uitvoering begint zonder object, dus de eerste stap haalt op waarmee hij werkt.",
"Unlock an object": "Object ontgrendelen",
"Release an object this run is holding, so others can change it again. The run releases its locks when it ends anyway; this frees them sooner.": "Laat een object los dat deze uitvoering vasthoudt, zodat anderen het weer kunnen wijzigen. Aan het eind laat de uitvoering het toch los, deze stap doet dat eerder.",
"Ask a person or group": "Een persoon of groep iets vragen",
"Ask a person, a group or an agent to do something, and wait for the answer. For a system that will call back, use \"Wait for an answer\" instead.": "Vraag een persoon, groep of agent iets te doen en wacht op het antwoord. Voor een systeem dat terugbelt gebruik je \"Wachten op een antwoord\".",
"Wait": "Wachten",
"Pause the flow for a while, then carry on where it left off.": "Pauzeer de flow een tijd en ga daarna verder waar hij was."
},
"pluralForm": "nplurals=2; plural=(n != 1);",
"plurals": {
Expand Down
4 changes: 3 additions & 1 deletion lib/Db/MagicMapper/MagicSearchHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
use OCA\OpenRegister\Service\Search\SearchTermParser;
use OCA\OpenRegister\Service\Search\SearchTermSqlCompiler;
use OCA\OpenRegister\Support\FilterParams;
use OCA\OpenRegister\Support\NullFilter;
use OCA\OpenRegister\Support\QueryLimit;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\DB\QueryBuilder\IQueryFunction;
Expand Down Expand Up @@ -1715,9 +1716,10 @@ private function likeConditionSql(string $column, mixed $value, object $connecti
* @param mixed $value The raw operator value as the request layer delivered it.
*
* @return bool True when the caller asked for IS NULL.
* @spec openspec/changes/aggregation-null-filters/specs/aggregation-api/spec.md
*/
private function isNullOperatorAsksForNull(mixed $value): bool {
return filter_var($value, FILTER_VALIDATE_BOOLEAN) === true;
return NullFilter::isNullOperatorAsksForNull(value: $value);
}//end isNullOperatorAsksForNull()

/**
Expand Down
7 changes: 6 additions & 1 deletion lib/Db/MagicMapper/NestedPathFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
namespace OCA\OpenRegister\Db\MagicMapper;

use OCA\OpenRegister\Db\LikeOperator;
use OCA\OpenRegister\Support\NullFilter;

/**
* Reads nested-path filters out of a filter map and writes their SQL.
Expand Down Expand Up @@ -221,12 +222,16 @@ private static function setConditions(string $expression, array $value, callable
* @param callable $bind Value to SQL.
*
* @return list<string> The conditions.
*
* @SuppressWarnings(PHPMD.StaticAccess) NullFilter is the one reader of the isnull value, shared with the list and aggregation paths.
*
* @spec openspec/changes/aggregation-null-filters/specs/aggregation-api/spec.md
*/
private static function presenceConditions(string $expression, array $value, callable $bind): array {
$conditions = [];
if (array_key_exists('isnull', $value) === true) {
$predicate = 'IS NOT NULL';
if (filter_var($value['isnull'], FILTER_VALIDATE_BOOLEAN) === true) {
if (NullFilter::isNullOperatorAsksForNull(value: $value['isnull']) === true) {
$predicate = 'IS NULL';
}

Expand Down
Loading
Loading