mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2026-10-03 07:55:22 -04:00
The three profiles' settings were aliased by a switch with one arm per profile, each repeating the same 18 define() calls against a different ZM_WEB_<H|M|L>_ prefix. Sixty three lines in which only a single letter differed, and nothing held the arms in step: a setting added to one and not the others is undefined for two thirds of users, which is the same blank page the missing default case caused, just narrower. Name the settings once and build both sides from the prefix. The two settings that carried a defined() guard keep it, as a separate list with the fallback each one uses, so a genuinely absent setting is still distinguishable from a mistyped one - the rest go through constant() and fail loudly. Looking up an unknown profile now yields the low prefix instead of skipping every define, so the skin config no longer depends on skin.php having clamped the cookie first; that clamp remains the place a bad value is corrected. Verified by diffing every resulting ZM_WEB_ constant against the previous implementation for each of the three profiles: 49 constants, identical values. The test drops the checks that only made sense against the switch and gains ones for the new shape. It loads the skin config in a child process, once per profile probed, because constants cannot be redefined and loading it is itself what can fail. It now catches a mistyped setting name, a removed fallback, a profile the whitelist does not know, and a setting dropped from the alias list - the last by way of the per-profile config options, which are the authority on which settings exist and are independent of the lists under test. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015Y6FieTwEXuLhhR4e2yiax