1. YoureCom
    1. Über mich
  2. Lösungen
    1. Tipprunde
    2. Aufgaben & Support
    3. Mitglieder-Netzwerk
    4. Online-Shop
    5. Alle Lösungen & Preise
  3. Für Admins
    1. Plugins
    2. ByteMon
    3. ByteMon: Community verwalten
    4. ByteMon: Portalidentität
    5. Individuelle Entwicklung
    6. WSC 6.3 Alpha
    7. GitHub
  4. Neuigkeiten
    1. Kurzmeldungen
  5. Support
  6. Mein Konto
  7. Lösungen testen
  • Anmelden
  • Registrieren
  • Warenkorb 0
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Aufgaben
  • Produkte
  • Pulse-Beiträge
  • Erweiterte Suche
  1. YoureCom – Software für Vereine, Teams & Communities
  2. Repository-Liste
  3. de.yourecom.wcf.api.mpdf

YoureCom Standard automatisch aktualisiert (verwaltete Dateien aus _dev/standard)

  • Marcel Beckers
  • +72 Hinzufügungen
  • 72 Gesamt
  • 1 Dateien
  • 18. Oktober 2026 um 10:31
  • tests/lint/check-php.php
    <pre>@@ -12,6 +12,9 @@
    * - classes, interfaces, traits and enums have a docblock with a description, `@author` and `@license`
    * - notifications (`files/lib/system/user/notification/`) link to an ACP controller of the package only with
    * `'isACP' => true`; without it LinkHandler takes the frontend in the frontend and in cronjobs (the link leads nowhere)
    + * - a `'message-id'` of a notification event (`files/lib/system/user/notification/event/`) contains the notification ID
    + * (or a comment or response ID), or is left out (the core then makes a unique one); a second mail with the same
    + * Message-ID is dropped silently by Gmail and others (IUserNotificationEvent::getEmailMessage(): it MUST never repeat)
    *
    * Methods (`#[\Override]` or a docblock) and strict comparisons are checked by PHPStan (phpstan.standard.neon).
    *
    @@ -55,6 +58,12 @@
    }
    }
    + if (\str_starts_with($relative, 'files/lib/system/user/notification/event/')) {
    + foreach (messageIdsWithoutUniquePart($source) as [$line, $value]) {
    + $errors[] = "{$relative}:{$line}: 'message-id' => {$value} repeats for a second mail about the same object, append \$this->getNotification()->notificationID (or leave it out)";
    + }
    + }
    +
    $tokens = \token_get_all($source);
    foreach ($tokens as $index => $token) {
    if (!\is_array($token)) {
    @@ -257,3 +266,66 @@ function classDocComment(array $tokens, int $index): ?string
    return null;
    }
    +
    +/**
    + * Returns the `'message-id'` entries of a notification event whose value contains no part that never repeats
    + * (notificationID, commentID or responseID). A value that is a plain variable is followed to its assignment in the file.
    + *
    + * @return list<array{0: int, 1: string}> line and value
    + */
    +function messageIdsWithoutUniquePart(string $source): array
    +{
    + $tokens = \token_get_all($source);
    + $found = [];
    + foreach ($tokens as $index => $token) {
    + if (!\is_array($token) || $token[0] !== \T_CONSTANT_ENCAPSED_STRING || \strtolower(\trim($token[1], '\'"')) !== 'message-id') {
    + continue;
    + }
    + $arrow = nextToken($tokens, $index, 1);
    + if ($arrow === null || !\is_array($tokens[$arrow]) || $tokens[$arrow][0] !== \T_DOUBLE_ARROW) {
    + continue;
    + }
    + $value = expressionAfter($tokens, $arrow + 1, [',', ']', ')', ';']);
    + if (\preg_match('~^\$(\w+)$~', $value, $match)) {
    + foreach ($tokens as $i => $t) {
    + if (\is_array($t) && $t[0] === \T_VARIABLE && $t[1] === '$' . $match[1]) {
    + $next = nextToken($tokens, $i, 1);
    + if ($next !== null && $tokens[$next] === '=') {
    + $value .= ' = ' . expressionAfter($tokens, $next + 1, [';']);
    + }
    + }
    + }
    + }
    + if (!\preg_match('~notificationID|commentID|responseID~', $value)) {
    + $found[] = [$token[2], (string)\preg_replace('~\s+~', ' ', $value)];
    + }
    + }
    +
    + return $found;
    +}
    +
    +/**
    + * Returns the source of the expression starting at $start up to the first of $ends outside of brackets.
    + *
    + * @param list<array{0: int, 1: string, 2: int}|string> $tokens
    + * @param list<string> $ends
    + */
    +function expressionAfter(array $tokens, int $start, array $ends): string
    +{
    + $depth = 0;
    + $text = '';
    + for ($i = $start, $n = \count($tokens); $i < $n; $i++) {
    + $part = \is_array($tokens[$i]) ? $tokens[$i][1] : $tokens[$i];
    + if ($depth === 0 && \in_array($part, $ends, true)) {
    + break;
    + }
    + if (\in_array($part, ['(', '[', '{'], true) || (\is_array($tokens[$i]) && \in_array($tokens[$i][0], [\T_CURLY_OPEN, \T_DOLLAR_OPEN_CURLY_BRACES], true))) {
    + $depth++;
    + } elseif (\in_array($part, [')', ']', '}'], true)) {
    + $depth--;
    + }
    + $text .= $part;
    + }
    +
    + return \trim($text);
    +}
Es wurden keine Einträge gefunden.

Bereit, deine Community smarter zu machen?

Ob fertiges Produkt oder individuelle Softwarelösung – überzeuge dich selbst.

Jetzt kaufen Demo testen

Direkter Support vom Entwickler

Zuletzt erledigte Aufgaben

  1. Multihunter meldet jede Anmeldung als Doppelaccount Multihunter (Doppelaccount Jäger)

    villain Erledigt am 26. Oktober 2026 um 14:41
  2. Optionen vom "Dateien Feld-Typ" sprechen von Bildern Database: Medienfelder

    doerek Erledigt am 25. Oktober 2026 um 18:20
  3. Nach Installation ohne Popup Begriffserklärung

    mbbaureihen.de Erledigt am 24. Oktober 2026 um 23:33
  4. Fehlermeldung beim Hinzufügen einer neuen Clanseite Clan Verwaltung

    BMWTom Erledigt am 24. Oktober 2026 um 23:16
  5. neue Dateiendungen werden nicht übernommen. Database: Medienfelder

    doerek Erledigt am 24. Oktober 2026 um 19:46
  6. Overlay beim Verschieben eines Themas Clan Verwaltung Clan Verwaltung: Foren

    Marcel Beckers Erledigt am 23. Oktober 2026 um 22:10
Arbeitsplatz
YoureCom – Software für Vereine, Teams & Communities

YoureCom – Software für Vereine, Teams & Communities. Seit 2004.

Fertig eingerichtete Lösungen für Verein, Team und Community, dazu Erweiterungen für die WoltLab Suite. Aus Wuppertal, für Kunden weltweit.

Lösungen

  • Tipprunde
  • Aufgaben & Support
  • Mitglieder-Netzwerk
  • Online-Shop
  • Alle Lösungen & Preise

Für Administratoren

  • Plugins
  • Clan Verwaltung
  • Wettbewerbe
  • MultiHunter
  • ByteMon
  • Individuelle Entwicklung

YoureCom

  • Über mich
  • Shop
  • Kontakt
  • Neuigkeiten
  • GitHub

Cloud-Verträge

  • AGB Cloud
  • AVV Cloud
  • Rechtswidrige Inhalte melden
  • Datenwechsel

Rechtliches

  • Datenschutzerklärung
  • Impressum
  • AGB
  • Vertrag widerrufen
  • Abonnements kündigen
  • Widerrufsbelehrung
© 2026 YoureCom · Marcel Beckers