Alle Commits

GitHub Commit
  • Arbeitsplatz: Filter auf dem Handy als wischbare Chip-Zeile, Aufgabenkopf ohne Kategoriefarbe lesbar, Vorschau-Knöpfe mit Sprache, Kommentar-Box mit Text, Nachbar-Links auf Touch-Geräten beschriftet, Gast ohne nutzlose Knöpfe, Kartentitel neben dem Symbol de.yourecom.workplace 6.2
    23. Oktober 2026 um 10:45
    -10 Löschungen +123 Hinzufügungen 133 Gesamt 11 Dateien
  • Champions League: Abgleich auf die neuen Runden 1–8 von TheSportsDB umgestellt, Qualifikationsspiele vor dem 1.9. aussortiert, alte Runde 400 blockiert nicht mehr; CL wieder in den Texten (#917); Version 6.2.57 Beta 100 de.yourecom.website 6.2
    23. Oktober 2026 um 10:41
    -14 Löschungen +106 Hinzufügungen 120 Gesamt 6 Dateien
  • Branch 'agent/915-agb-support' in 6.2 übernommen de.yourecom.website 6.2
    23. Oktober 2026 um 09:38
    -5 Löschungen +5 Hinzufügungen 10 Gesamt 3 Dateien
  • Cloud-AGB § 12 Abs. 4 und AVV Punkt 5: Support über den Arbeitsplatz auf yourecom.de, daneben per E-Mail (#915); Version 6.2.57 Beta 99 de.yourecom.website 6.2
    23. Oktober 2026 um 09:36
    -5 Löschungen +5 Hinzufügungen 10 Gesamt 3 Dateien
  • Arbeitsplatz: Status-Badge deckend zeichnen, wie die Schriftfarbe berechnet wird Review-Befund: Eine Statusfarbe mit Alpha (z. B. rgba(0, 0, 0, 0.2)) erschien hell, bekam aber weiße Schrift. getColor() liefert die Farbe jetzt ohne Alpha. de.yourecom.workplace 6.2
    23. Oktober 2026 um 09:33
    -6 Löschungen +29 Hinzufügungen 35 Gesamt 4 Dateien
  • Integrationstests: Status-Map mit Textfarbe prüfen de.yourecom.workplace 6.2
    23. Oktober 2026 um 09:17
    -1 Löschungen +6 Hinzufügungen 7 Gesamt 1 Dateien
  • Arbeitsplatz: Schrift der Status-Badges nach Helligkeit der Statusfarbe Weiße Schrift auf hellen Statusfarben (z. B. Grün für Erledigt) hatte nur etwa 2:1 Kontrast. TaskStatusColor wählt hell oder dunkel nach WCAG-Kontrast; Template und Status-Map (InteractionState) setzen --task-status-text-color. de.yourecom.workplace 6.2
    23. Oktober 2026 um 09:08
    -7 Löschungen +137 Hinzufügungen 144 Gesamt 10 Dateien
  • Standard: Kommentare bereinigt (314 Methodenkommentare ergänzt, lange Kommentare auf einen Satz, Inline- und lose Kommentare entfernt, @inheritDoc), commentsKnown leer, Kommentar-Prüfung aktualisiert Entfernte Kommentare (Wozu, zum Nachlesen): - eventListener.xml: UserAction UserAction UserExportGdprAction - files/acp/global.php: define paths; include config; @noinspection PhpIncludeInspection include WCF; @noinspection PhpIncludeInspection - files/acp/install_de.yourecom.bgs.php: Make important thinks for the installation; `getColumns()` builds `SHOW COLUMNS FROM \`{$tableName}\`` and lets Database::prepare() rewrite the; `app1_` table prefix to the real installation number. A bound `?` parameter on an information_schema; query would bypass that rewrite and always miss on installations with WCF_N != 1.; `getIndexInformation()` builds `SHOW INDEX FROM \`{$tableName}\`` and lets Database::prepare() rewrite; the `app1_` table prefix to the real installation number, unlike a bound `?` parameter on an; information_schema query (see `ensureDatabaseColumn()` above for the full explanation).; `Database::prepare()` rewrites the `app1_` table prefix to the real installation number only in the literal SQL text, never in a bound parameter value. `getTableNames()` runs `SHOW TABLES`, which already returns the real, rewritten names, so the name being checked for is rewritten the same way before the comparison instead of being bound to an information_schema query. - files/global.php: include config; @noinspection PhpIncludeInspection include wcf - files/lib/action/CityAction.class.php: Returns all buildings and active constructions including the standard API response payload. - files/lib/data/building/type/AbstractBuildingType.class.php: Constructor that stores dynamic building data. Magic getter for dynamic access to data array keys as properties.; The server is the source of truth for unlocks. The client may use the resulting building list for display, but manipulated requests still end up here. Always include money with scaling factor; Add wood starting from level 5; Returns all produced resource types. Buildings with a single output can keep overriding getProducedResourceType() only. - files/lib/data/building/type/Sawmill.class.php: Bretter sind wertvoller, deshalb langsamer als Holz; etwas flacher skalierend - files/lib/data/city/City.class.php: update population; Sync A: makes cityID and all other columns available via $this->; (magic getter reads $this->data) before any of the methods below; are called - they run before parent::handleData($data) at the; bottom, which is otherwise the only place $this->data gets set.; Sync B: simulate() just changed populationDetails/unemployed/etc.; The production service below reads those via $this->, so it must; see the post-simulation values, not the Sync A snapshot.; Sync C: covers the (currently unlikely) case that; getGridSizeBySurveyLevel() below ends up depending on anything set; in this method - cheap insurance, no behavioural downside.; Beispielwert; 15% Kinder und Jugendliche; 55% Erwerbsfähige; 20% Ältere; 10% Senioren; Berechne die Anzahl der Menschen pro Altersgruppe; Verteilung der Bevölkerung pro Altersgruppe; Verteile jeweils eine Person; Verteile jeweils eine Person; Survey offices remain the authority for expansion, but callers should prefer these semantic bounds over legacy row/column-only grid size. - files/lib/data/community/CommunityAction.class.php: Delete removed images.; Store uploaded image. - files/lib/data/player/PlayerAction.class.php: create town hall; create house; create lumberjack hut with initial workers so the first city; immediately has an understandable production loop. - files/lib/data/resource/PlayerResourceService.class.php: Initializes and loads the player's resource data from the database.; buildingID:int, resourceType:string, amount:float }>; Update Cache; Merke geänderte Werte für späteres SQL - files/lib/data/resource/ResourceStockAction.class.php: Used during initial city setup. cityID:int, buildingID:int, resourceType:string, amount:int|float }> $rows string|int, string|int|float|array{raw:string} > $updateFields - files/lib/data/resource/ResourceType.class.php: Extend this class as new resource types are introduced. - files/lib/system/ServerAPI.class.php: reload player data is needed, because of creating city etc.; Finde den Typ basierend auf dem Suffix des Klassennamens; choose folder; Check if file exists - files/lib/system/exception/BgsApiException.class.php: IMPORTANT: - scalar properties only - no previous exception - safe for JSON serialization - files/lib/system/exception/BgsErrorType.class.php: IMPORTANT: - Do not invent new error types ad-hoc. - Extend this registry first. Generic; Auth / Security; Ownership / Access; City / State; Buildings; Grid / Placement; Workers; Actions; static only - files/lib/system/game/BuildingMechanicsService.class.php: Client code may display these rules, but only this service is trusted for unlocks, queue capacity, costs and construction timing. - files/lib/system/game/CityGuidanceService.class.php: The service returns stable identifiers and phrase keys instead of localized text. This keeps the game rules on the server while letting each client localize presentation. - files/lib/system/game/CityRandomEventService.class.php: Events are deterministic per time slot and exposed through one generic snapshot shape, so later event types can be added as definitions. - files/lib/system/game/CitySnapshotService.class.php: Lightweight metadata snapshot for actions that already return their changed building/road explicitly. Lightweight snapshot for road mutations. Roads affect event chances, city profile and district activation, so these status objects must refresh immediately after build/upgrade/remove without returning a full city payload. Public city visits need the same visible blocker state as the owner map, but must never receive stocks, rates, costs or other economy details. - files/lib/system/game/CommunityVisitService.class.php: The API request already owns the sender player transaction lock. Consume first;; the outer request transaction rolls both sides back if the credit fails.; This keeps participation requirements stable while making role choice tangible. Otherwise the strongest currently visible city feature decides. Seventy percent participation keeps larger communities collaborative without; requiring every member, while a two-city community still needs both players. - files/lib/system/game/PlayerEntitlementService.class.php: The shop integration should grant time-limited entitlements on the player. Game rules must read them through this service instead of trusting client flags or request parameters. - files/lib/system/game/QuestDefinitionService.class.php: Dynamic daily/weekly IDs are still created in QuestRewardService because they depend on the current date. Ordered one-time quests live here so reward, guidance and tests cannot drift apart silently. - files/lib/system/game/ShopEntitlementService.class.php: This is intentionally signature-free: it must only be called from trusted PHP code in the same WSC installation. Public HTTP callbacks must use grantFromShopPayload(). - files/lib/system/game/WorldBoundsService.class.php: Survey offices remain the progression gate. The returned structure is wider than the legacy rows/cols grid size so the client and server can move toward chunked or direction-based expansion without changing every caller at once. Current design: odd survey levels expand downward, even levels expand right.; Keeping this here makes later expansion shapes a local rules change. - files/lib/system/simulation/CitySimulationService.class.php: The City object performs the actual catch-up simulation in handleData(). This service guarantees that only one request can simulate a city at once. - files/lib/system/simulation/SimulationContext.class.php: Prevents architectural bypass of the simulation gate. - files/lib/system/simulation/SimulationLogger.class.php: Can be enabled/disabled via constant. de.yourecom.bgs 6.2
    23. Oktober 2026 um 08:33
    -298 Löschungen +446 Hinzufügungen 744 Gesamt 71 Dateien
  • Arbeitsplatz: Status-Badge ohne Farbe in beiden Stilen lesbar, Reste des Prozenttexts entfernt Review-Befunde zu 619ed7c: Grau aus wcfContentDimmedText hatte im dunklen Stil nur 3,4:1 Kontrast zu weißer Schrift; festes Dunkelgrau erreicht in beiden Stilen AA, auch bei erledigten Status. Ungenutzte progressPercent-Regel, span und data-percent entfernt. de.yourecom.workplace 6.2
    23. Oktober 2026 um 08:20
    -21 Löschungen +6 Hinzufügungen 27 Gesamt 3 Dateien
  • Arbeitsplatz: Board-Karten mit lesbaren Daten, Kategorie-Balken ohne Prozenttext, Status-Badge ohne Farbe lesbar In schmalen Board-Spalten wurden Start- und Fälligkeitsdatum buchstabenweise umbrochen; die Fußzeile bricht jetzt um. Die Prozentzahl im 8px-Balken war unlesbar (das Badge zeigt den Stand). Status ohne Farbe: weiße Schrift auf hellgrau. de.yourecom.workplace 6.2
    23. Oktober 2026 um 08:07
    -21 Löschungen +10 Hinzufügungen 31 Gesamt 2 Dateien
  • Integrationstests: wirkungslose lastEditTime-Umgehung entfernt Seit taskListView() fest nach Erstellzeit sortiert, ist das Hochsetzen der Bearbeitungszeit überflüssig (Review-Befund zu #912). de.yourecom.workplace 6.2
    23. Oktober 2026 um 07:57
    -3 Löschungen +1 Hinzufügungen 4 Gesamt 2 Dateien
  • Integrationstests: Liste in Tests fest nach Erstellzeit sortieren Die Tests suchen ihre Aufgaben auf der ersten Seite der Liste; mit der Sortierung aus dem ACP hing das an Einstellung und Datenbestand des Dev-Systems (Review-Befund zu #912). taskListView() sortiert neueste zuerst. de.yourecom.workplace 6.2
    23. Oktober 2026 um 07:50
    -24 Löschungen +30 Hinzufügungen 54 Gesamt 10 Dateien
  • Standard: Kommentare bereinigt (lange Kommentare auf einen Satz, Inline-, Template- und lose Kommentare entfernt, @inheritDoc), Kommentar-Prüfung aktualisiert, geänderte Dateien auf LF Entfernte Kommentare (Wozu, zum Nachlesen): - eventListener.xml: UserAction UserExportGdprAction UserMergeForm - files/acp/install_de.yourecom.multihunter_2.0.0_logUnknownUpdate.php: update new data for userAgents; get all logs; update log entry - files/acp/install_de.yourecom.multihunter_2.0.0_userString.php: create a random string for every user during the installation. - files/lib/acp/action/MultiHunterAddWhitelistIPAction.class.php: ip adress already insert; create whitelist entry - files/lib/acp/action/MultiHunterAddWhitelistProviderAction.class.php: user already insert; create whitelist entry - files/lib/acp/action/MultiHunterGetAllTrashmailsAction.class.php: fetch files; add trashmails; get trashmails; Delete; Update; Insert; forward to next step; All files were processed - files/lib/acp/form/MultiHunterSearchForm.class.php: user; network; fingerprints; system; urls; language; screen; flags; meta; store search result - files/lib/acp/page/MultiHunterDetailPage.class.php: update trashmail; get userOptions of the current user; update userOption - files/lib/acp/page/MultiHunterListPage.class.php: Can be 'all' or an array of column names. get logs; call countItems event; get user search from database - files/lib/acp/page/MultiHunterTrashmailListPage.class.php: dont select deleted trashmails - files/lib/bootstrap/de.yourecom.multihunter2.php: Registers the RPC API endpoints of the Multihunter with WCF's ApiAction dispatcher. - files/lib/data/multiHunter/MultiHunter.class.php: select log; enforce data type 'array'; Returns the first check chosen as blocking reason (comma separated in `$checks`) that hit for this log, in the order register, cookie, canvas, ip, trashmail, or null if none of them hit. A check hits with a value other than null and 0. Mobile & Special Apps; Mainstream Desktop; Asian Browsers; Alternative Browsers; Safari and Apple Devices; Special Cases; Windows; Linux / Unix / BSD / Other Open Systems; Apple; Mobile Systems; Other Mobile & Embedded; Java-Based Mobile; Gaming Devices; Hobby Systems; Feed Readers and Special Apps - files/lib/data/multiHunter/MultiHunterAction.class.php: validate log objects; check if a correct logID is given; load and clear session; abort if log is invalid; discard anything that isn't a recognized column before writing to the database; Only allow specific types to prevent SQL injection; Prepare conditions; Build and prepare query - files/lib/data/multiHunter/MultiHunterEditor.class.php: Do not ban administrators; Only ban users who are not already banned; Clear whitelist matching cache; Update user options - files/lib/data/multiHunter/trashmail/MultiHunterTrashmailAction.class.php: create competition; read objects - files/lib/data/multiHunter/trashmail/MultiHunterTrashmailEditor.class.php: save object; return new object - files/lib/data/multiHunter/whiteListGlobal/MultiHunterWhiteListGlobal.class.php: select log; enforce data type 'array' - files/lib/data/multiHunter/whiteListGlobal/MultiHunterWhiteListGlobalAction.class.php: validate log objects; check if a correct logID is given - files/lib/data/multiHunter/whiteListGlobal/MultiHunterWhiteListGlobalEditor.class.php: validate log objects; reset cache; update userOption - files/lib/data/multiHunter/whiteListGlobal/MultiHunterWhiteListGlobalList.class.php: Creates a new ViewableCommentList object. - files/lib/data/multiHunter/whiteListIP/MultiHunterWhiteListIPAction.class.php: validate log objects; check if a correct logID is given - files/lib/data/multiHunter/whiteListMatching/MultiHunterWhiteListMatching.class.php: Loads the whitelist matching entry including the usernames of both related users.; select log; enforce data type 'array' - files/lib/data/multiHunter/whiteListMatching/MultiHunterWhiteListMatchingAction.class.php: remove ban entry only for active entries, not for pending petitions; validate log objects; check if a correct logID is given; read objects - files/lib/data/multiHunter/whiteListProvider/MultiHunterWhiteListProviderAction.class.php: validate log objects; check if a correct logID is given - files/lib/data/multiHunter/whiteListProvider/MultiHunterWhiteListProviderEditor.class.php: validate log objects; reset cache - files/lib/data/multiHunter/whiteListSuspend/MultiHunterWhiteListSuspend.class.php: select log; enforce data type 'array' - files/lib/data/multiHunter/whiteListSuspend/MultiHunterWhiteListSuspendAction.class.php: validate log objects; check if a correct logID is given - files/lib/data/multiHunter/whiteListSuspend/MultiHunterWhiteListSuspendEditor.class.php: validate log objects; reset cache - files/lib/data/multiHunter/whiteListSuspend/MultiHunterWhiteListSuspendList.class.php: Creates a new ViewableCommentList object. - files/lib/form/MultihunterPetitionAddForm.class.php: A petition must be reviewed by a team member before it takes effect; Self-Insert verhindern - files/lib/system/box/MultihunterLastLogsBoxController.class.php: check permission and if the plugin is activated; get userID; get Last logs - files/lib/system/cronjob/MultiHunterAutomaticBanCronjob.class.php: if modul is in installation or deactivated; get unknown informations; Delete all obsollette block entries - files/lib/system/cronjob/MultiHunterCleanUpCronjob.class.php: check if the plugin is enable - files/lib/system/cronjob/MultiHunterGetNewTrashmails.class.php: check if the plugin is enable; Load and process YoureCom JSON file; get trashmails; update own trashmail; insert trashmail; delete trashmail - files/lib/system/cronjob/MultiHunterSendUnknownCronjob.class.php: check if the plugin and the option to send the unknown data is enable; entries of other types (formerly mailed user agents) are no longer collected; get unknown informations; send trashmails; truncate table; send languageCodes; JSON in the body: the former serialize() in the URL broke on codes with "&", ";" or "#"; truncate table - files/lib/system/event/listener/MultiHunterJsInfoListener.class.php: if modul is in installation; if modul is deactivate or user is a guest and check suspend whitelist; get logID; is it a multi?; Add curent userID; get userOptions of the current user; save a new possible multi; update userOption; get cache to check global whitelist; get cache to check matching whitelist; check notification option; automatic ban; optional user group assignment (does nothing without a configured group), independent of the blocking mode; send notification - files/lib/system/event/listener/MultiHunterListener.class.php: if modul is in installation or deactivated; check if user is not logged in; check if login has saved; check suspend whitelist; create; send notification if the browser cookies was manipulated; trashmail info; if extension not correct; Try to fetch the current request's host and URI once; Validate URL scheme (use https if available); Remove session IDs or query strings for cleaner URL; In case of an invalid type; Fallback if no valid URL found; Normalisierung; check IP whitelist; check IPAdress for double account; check IP whitelist; coookie check enable; exist cookie; cokie with annother userString; users created by script, ACP or import have no userString; the registration match is based on the IP address, too, so a whitelisted provider cancels it (the session keeps it); update last log time - files/lib/system/event/listener/MultiHunterRegisterListener.class.php: if modul is in installation or deactivated; if modul is deactivate; do register test - files/lib/system/event/listener/MultihunterUserActionListener.class.php: if modul is in installation or deactivated - objectType.xml: Clipboard Notifications box controllers moderated content - templates/moderationLog.tpl: registerCheck ipCheck Local Storage Indexed DB canvas trashmailCheck Verbleibende commentsKnown-Einträge: Inline-@var, die PHPStan braucht (Parameter von Condition Buildern, Cache-Werte, Formulardaten, Zeilen von Abfragen); ein Entfernen wurde getestet und von PHPStan abgelehnt. Template email_notification_multihunterWhiteListAdd: das leere {* *} hält das Leerzeichen am Zeilenende. de.yourecom.multihunter 6.2
    23. Oktober 2026 um 07:44
    -296 Löschungen +57 Hinzufügungen 353 Gesamt 58 Dateien
  • Integrationstests: Testaufgaben mit Bearbeitungszeit anlegen Die Liste sortiert standardmäßig nach letzter Bearbeitung (20 pro Seite). Aufgaben aus createTask() hatten lastEditTime 0 und fielen hinter die Aufgaben des Dev-Systems, dadurch waren RepeatingTaskListTest und TaskBoardViewTest rot (Arbeitsplatz #912). de.yourecom.workplace 6.2
    23. Oktober 2026 um 07:40
    -3 Löschungen +5 Hinzufügungen 8 Gesamt 1 Dateien
  • Branch 'agent/917-cl-texte' in 6.2 übernommen de.yourecom.website 6.2
    23. Oktober 2026 um 07:18
    -9 Löschungen +9 Hinzufügungen 18 Gesamt 3 Dateien
  • Landingpages: Champions League aus Startseite und Cloud-Tippspiel genommen, der CL-Abgleich liefert seit der Qualifikation nichts (#917); Version 6.2.57 Beta 98 de.yourecom.website 6.2
    23. Oktober 2026 um 07:13
    -9 Löschungen +9 Hinzufügungen 18 Gesamt 3 Dateien
  • Branch 'agent/879-fileid-stilllegen' in 6.2 übernommen de.yourecom.website 6.2
    23. Oktober 2026 um 06:30
    -94 Löschungen +30 Hinzufügungen 124 Gesamt 4 Dateien
  • Produkteditor: setWoltlabFileID stillgelegt, die FileID schreibt nur noch der Team-Editor mit Freigabe-Code (#879); Version 6.2.57 Beta 97 de.yourecom.website 6.2
    23. Oktober 2026 um 06:28
    -94 Löschungen +30 Hinzufügungen 124 Gesamt 4 Dateien
  • Branch 'agent/810-support-texte' in 6.2 übernommen de.yourecom.website 6.2
    23. Oktober 2026 um 06:19
    -14 Löschungen +14 Hinzufügungen 28 Gesamt 3 Dateien
  • Cloud-Support: Texte von „per E-Mail“ auf Support über den Arbeitsplatz umgestellt (Startseite, Cloud-Seiten, Tarife); Version 6.2.57 Beta 96 de.yourecom.website 6.2
    23. Oktober 2026 um 06:15
    -14 Löschungen +14 Hinzufügungen 28 Gesamt 3 Dateien

Bereit, deine Community smarter zu machen?

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

Direkter Support vom Entwickler