{ lib, pkgs, cfg, allPhones, intercomEntries }:
let
baseUrl = "http://${cfg.serverAddress}:${toString cfg.directoryPort}";
hasPageExtensions = lib.any (e: e.mode == "page") (lib.attrValues cfg.extensions);
# Deduplicated directory entries: one per extension, using the displayName from
# allPhones (all phones sharing an extension have the same displayName).
extensionEntries =
lib.attrValues (lib.foldlAttrs (acc: _key: phone:
if lib.hasAttr phone.extension acc || phone.displayName == "" then acc
else acc // { ${phone.extension} = { inherit (phone) extension displayName; }; }
) {} allPhones);
menuXml = ''
${cfg.directoryName} Telefonbuch
Ihre Wahl
'' + lib.optionalString (intercomEntries != [] || hasPageExtensions) ''
'' + ''
'';
listXml = ''
${cfg.directoryName} Telefonbuch
Ihre Wahl
'' + lib.concatMapStringsSep "\n" (e: ''
${e.displayName}
${e.extension}
'') extensionEntries
+ ''
'';
intercomXml = ''
Intercom / Durchsage
Ihre Wahl
'' + lib.concatStringsSep "\n" (lib.mapAttrsToList (ext: extCfg:
lib.optionalString (extCfg.mode == "page" && extCfg.displayName != "") ''
${extCfg.displayName}
${ext}
'') cfg.extensions)
+ lib.concatMapStringsSep "\n" (ic: ''
${ic.displayName}
${ic.extension}
'') intercomEntries
+ ''
'';
in {
menuFile = pkgs.writeText "directory.xml" menuXml;
listFile = pkgs.writeText "directory-list.xml" listXml;
intercomFile = pkgs.writeText "intercom.xml" intercomXml;
}