hasPermission("HACHEPORTAL_VIEW")) { header("Location: ../app.php?msg=no_permission"); die(); } use Dompdf\Dompdf; // Load all families $familylist = $database->select("families", "familyid", ["ORDER" => ["familyname"]]); $families = []; foreach ($familylist as $f) { $fam = (new Family())->load($f); if ($fam->getPrivate()) { continue; } $families[] = $fam; } $format = "html"; if (!empty($_GET["format"])) { $format = $_GET["format"]; } $date = date("F j Y"); if ($format == "html") { $icons = ".grad { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMjMwNCIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMjMwNCAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzc0IDgzNmwxOCAzMTZxNCA2OS04MiAxMjh0LTIzNSA5My41LTMyMyAzNC41LTMyMy0zNC41LTIzNS05My41LTgyLTEyOGwxOC0zMTYgNTc0IDE4MXEyMiA3IDQ4IDd0NDgtN3ptNTMwLTMyNHEwIDIzLTIyIDMxbC0xMTIwIDM1MnEtNCAxLTEwIDF0LTEwLTFsLTY1Mi0yMDZxLTQzIDM0LTcxIDExMS41dC0zNCAxNzguNXE2MyAzNiA2MyAxMDkgMCA2OS01OCAxMDdsNTggNDMzcTIgMTQtOCAyNS05IDExLTI0IDExaC0xOTJxLTE1IDAtMjQtMTEtMTAtMTEtOC0yNWw1OC00MzNxLTU4LTM4LTU4LTEwNyAwLTczIDY1LTExMSAxMS0yMDcgOTgtMzMwbC0zMzMtMTA0cS0yMi04LTIyLTMxdDIyLTMxbDExMjAtMzUycTQtMSAxMC0xdDEwIDFsMTEyMCAzNTJxMjIgOCAyMiAzMXoiLz48L3N2Zz4='); } .phone { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjAwIDEyNDBxMCAyNy0xMCA3MC41dC0yMSA2OC41cS0yMSA1MC0xMjIgMTA2LTk0IDUxLTE4NiA1MS0yNyAwLTUzLTMuNXQtNTcuNS0xMi41LTQ3LTE0LjUtNTUuNS0yMC41LTQ5LTE4cS05OC0zNS0xNzUtODMtMTI3LTc5LTI2NC0yMTZ0LTIxNi0yNjRxLTQ4LTc3LTgzLTE3NS0zLTktMTgtNDl0LTIwLjUtNTUuNS0xNC41LTQ3LTEyLjUtNTcuNS0zLjUtNTNxMC05MiA1MS0xODYgNTYtMTAxIDEwNi0xMjIgMjUtMTEgNjguNS0yMXQ3MC41LTEwcTE0IDAgMjEgMyAxOCA2IDUzIDc2IDExIDE5IDMwIDU0dDM1IDYzLjUgMzEgNTMuNXEzIDQgMTcuNSAyNXQyMS41IDM1LjUgNyAyOC41cTAgMjAtMjguNSA1MHQtNjIgNTUtNjIgNTMtMjguNSA0NnEwIDkgNSAyMi41dDguNSAyMC41IDE0IDI0IDExLjUgMTlxNzYgMTM3IDE3NCAyMzV0MjM1IDE3NHEyIDEgMTkgMTEuNXQyNCAxNCAyMC41IDguNSAyMi41IDVxMTggMCA0Ni0yOC41dDUzLTYyIDU1LTYyIDUwLTI4LjVxMTQgMCAyOC41IDd0MzUuNSAyMS41IDI1IDE3LjVxMjUgMTUgNTMuNSAzMXQ2My41IDM1IDU0IDMwcTcwIDM1IDc2IDUzIDMgNyAzIDIxeiIvPjwvc3ZnPg=='); } .email { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjY0IDE1MDR2LTc2OHEtMzIgMzYtNjkgNjYtMjY4IDIwNi00MjYgMzM4LTUxIDQzLTgzIDY3dC04Ni41IDQ4LjUtMTAyLjUgMjQuNWgtMnEtNDggMC0xMDIuNS0yNC41dC04Ni41LTQ4LjUtODMtNjdxLTE1OC0xMzItNDI2LTMzOC0zNy0zMC02OS02NnY3NjhxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNDcycTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTAtMTA1MXYtMjQuNWwtLjUtMTMtMy0xMi41LTUuNS05LTktNy41LTE0LTIuNWgtMTQ3MnEtMTMgMC0yMi41IDkuNXQtOS41IDIyLjVxMCAxNjggMTQ3IDI4NCAxOTMgMTUyIDQwMSAzMTcgNiA1IDM1IDI5LjV0NDYgMzcuNSA0NC41IDMxLjUgNTAuNSAyNy41IDQzIDloMnEyMCAwIDQzLTl0NTAuNS0yNy41IDQ0LjUtMzEuNSA0Ni0zNy41IDM1LTI5LjVxMjA4LTE2NSA0MDEtMzE3IDU0LTQzIDEwMC41LTExNS41dDQ2LjUtMTMxLjV6bTEyOC0zN3YxMDg4cTAgNjYtNDcgMTEzdC0xMTMgNDdoLTE0NzJxLTY2IDAtMTEzLTQ3dC00Ny0xMTN2LTEwODhxMC02NiA0Ny0xMTN0MTEzLTQ3aDE0NzJxNjYgMCAxMTMgNDd0NDcgMTEzeiIvPjwvc3ZnPg=='); } .mapmarker { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMTUyIDY0MHEwLTEwNi03NS0xODF0LTE4MS03NS0xODEgNzUtNzUgMTgxIDc1IDE4MSAxODEgNzUgMTgxLTc1IDc1LTE4MXptMjU2IDBxMCAxMDktMzMgMTc5bC0zNjQgNzc0cS0xNiAzMy00Ny41IDUydC02Ny41IDE5LTY3LjUtMTktNDYuNS01MmwtMzY1LTc3NHEtMzMtNzAtMzMtMTc5IDAtMjEyIDE1MC0zNjJ0MzYyLTE1MCAzNjIgMTUwIDE1MCAzNjJ6Ii8+PC9zdmc+'); } .nocamera { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjEwOTYuNTEwNyIKICAgaGVpZ2h0PSIxMDk2LjUxMDYiCiAgIHZpZXdCb3g9IjAgMCAxMDk2LjUxMDcgMTA5Ni41MTA2IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc5MDUiCiAgIHNvZGlwb2RpOmRvY25hbWU9Im5vLWNhbWVyYS5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMyAoMjQwNTU0NiwgMjAxOC0wMy0xMSkiCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvc2t5bGFyL0RvY3VtZW50cy9Bc3NldHMvR3JhcGhpY3Mvbm8tY2FtZXJhLnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjEuNDAwODA3MyIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjEuNDAwODA3MyI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOTExIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzOTA5IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDExIgogICAgIGlkPSJuYW1lZHZpZXc5MDciCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMjA5ODIxNDMiCiAgICAgaW5rc2NhcGU6Y3g9Ii0yNjIuODIyNTUiCiAgICAgaW5rc2NhcGU6Y3k9IjQ4OC43NDczNSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzkwNSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJzdHJva2Utd2lkdGg6Mi4yMTA3MDY5NSIKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgIGQ9Ik0gNTQ4LjI1NTI4LDAgQyAyNDUuNDYzNiwwIDAsMjQ1LjQ2MTQzIDAsNTQ4LjI1NTMzIGMgMCwzMDIuNzkzODggMjQ1LjQ2MzYsNTQ4LjI1NTI3IDU0OC4yNTUyOCw1NDguMjU1MjcgMzAyLjc5MTgsMCA1NDguMjU1NTIsLTI0NS40NjM1OSA1NDguMjU1NTIsLTU0OC4yNTUyNyBDIDEwOTYuNTEwOCwyNDUuNDYzNjQgODUxLjA0OTI4LDAgNTQ4LjI1NTI4LDAgWiBtIDI4Ny42MzA4LDI2MC42MjQ2NyBjIDE0NC42ODYzLDE0NC42ODYzNyAxNTQuNzQ5NSwzNjUuODMwMDcgNDUuNzEwOCw1MjAuOTI0MzQgTCAzMTQuOTU5NDEsMjE0LjkxNjA5IGMgMTU1LjIwMDQsLTEwOS4xMTE2NSAzNzYuMzE5ODcsLTk4Ljg5NTk4IDUyMC45MjY2Nyw0NS43MDg1OCB6IE0gMjYwLjYyNDYsODM1Ljg4NTkxIEMgMTE1LjkzODMsNjkxLjE5OTYxIDEwNS44NzUyLDQ3MC4wNTYwMyAyMTQuOTEzOCwzMTQuOTYxNjQgbCA1NjYuNjM3NDgsNTY2LjYzMjk3IGMgLTE1NS4xOTgzLDEwOS4xMTE2IC0zNzYuMzE5ODcsOTguODk4MSAtNTIwLjkyNjY4LC00NS43MDg3IHoiCiAgICAgaWQ9InBhdGgxMDQxIiAvPgogIDxwYXRoCiAgICAgZD0ibSA1NDguMjU1MzgsNDg5LjkyOTA2IHEgNDMuMzgwMSwwIDc0LjE4MzcsMzAuODAzNTUgMzAuODAzNSwzMC44MDM1NCAzMC44MDM1LDc0LjE4MzY5IDAsNDMuMzgwMTUgLTMwLjgwMzUsNzQuMTgzNzEgLTMwLjgwMzYsMzAuODAzNSAtNzQuMTgzNywzMC44MDM1IC00My4zODAxNywwIC03NC4xODM2NywtMzAuODAzNSAtMzAuODAzNTUsLTMwLjgwMzU2IC0zMC44MDM1NSwtNzQuMTgzNzEgMCwtNDMuMzgwMTUgMzAuODAzNTUsLTc0LjE4MzY5IDMwLjgwMzUsLTMwLjgwMzU1IDc0LjE4MzY3LC0zMC44MDM1NSB6IG0gMjU2LjYzNTUsLTE1MS42NDgyMyBxIDM4LjY0MTEsMCA2NS45ODE1LDI3LjM0MDQyIDI3LjM0MDQsMjcuMzQwNDMgMjcuMzQwNCw2NS45ODE1NyB2IDMyNi42MjY5OSBxIDAsMzguNjQxMSAtMjcuMzQwNCw2NS45ODE2IC0yNy4zNDA0LDI3LjM0MDQgLTY1Ljk4MTUsMjcuMzQwNCBIIDI5MS42MTk5MyBxIC0zOC42NDExOCwwIC02NS45ODE1OCwtMjcuMzQwNCAtMjcuMzQwNCwtMjcuMzQwNSAtMjcuMzQwNCwtNjUuOTgxNiBWIDQzMS42MDI4MiBxIDAsLTM4LjY0MTEzIDI3LjM0MDQsLTY1Ljk4MTU3IDI3LjM0MDQsLTI3LjM0MDQyIDY1Ljk4MTU4LC0yNy4zNDA0MiBoIDgxLjY1Njc0IGwgMTguNTkxNDksLTQ5LjU3NzMxIHEgNi45MjYyNCwtMTcuODYyNDEgMjUuMzM1NDYsLTMwLjgwMzU0IDE4LjQwOTIyLC0xMi45NDExNCAzNy43Mjk3OSwtMTIuOTQxMTQgaCAxODYuNjQzOTcgcSAxOS4zMjA1LDAgMzcuNzI5OCwxMi45NDExNCAxOC40MDkyLDEyLjk0MTEzIDI1LjMzNTQsMzAuODAzNTQgbCAxOC41OTE1LDQ5LjU3NzMxIHogbSAtMjU2LjYzNTUsNDE5Ljk0ODk4IHEgNjcuNDM5NywwIDExNS4zNzY2LC00Ny45MzY5IDQ3LjkzNjksLTQ3LjkzNjkgNDcuOTM2OSwtMTE1LjM3NjYgMCwtNjcuNDM5NzIgLTQ3LjkzNjksLTExNS4zNzY2IC00Ny45MzY5LC00Ny45MzY4OCAtMTE1LjM3NjYsLTQ3LjkzNjg4IC02Ny40Mzk3LDAgLTExNS4zNzY1OCw0Ny45MzY4OCAtNDcuOTM2ODgsNDcuOTM2ODggLTQ3LjkzNjg4LDExNS4zNzY2IDAsNjcuNDM5NyA0Ny45MzY4OCwxMTUuMzc2NiA0Ny45MzY4OCw0Ny45MzY5IDExNS4zNzY1OCw0Ny45MzY5IHoiCiAgICAgaWQ9InBhdGg5MDMiCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICBzdHlsZT0ic3Ryb2tlLXdpZHRoOjAuMzY0NTM5MDMiIC8+CiAgPHBhdGgKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjIuMjEwNzA2OTUiCiAgICAgZD0ibSAzOTEuMDE3MDgsMjY3Ljk2NjI2IC0xNy43NDAyLDQ3LjMwNjYgaCAtODEuNjU2MyBjIC0xNS43ODY4LDAgLTMwLjE1NzcsMy40MjgyIC00My4xMTUyLDEwLjI3MzQgbCAxNjAuNTQzLDE2MC41NDExIGMgNi41OTM2LC0xMC40MDExIDE0LjUzMDEsLTIwLjI1NDcgMjMuODMwMSwtMjkuNTU0NyAyOC4xMjA4LC0yOC4xMjA5IDYxLjI3ODgsLTQzLjg2MzkgOTkuNDY2NywtNDcuMjQwMyB6IG0gMTU3LjIzODMsMTk4Ljk1NSBjIC0yOC45MjAxLDAgLTUzLjY0NzksMTAuMjY3MSAtNzQuMTgzNiwzMC44MDI4IC05LjU1NTgsOS41NTU4IC0xNi44ODQ5LDIwLjAyMTMgLTIxLjk5NDEsMzEuMzkyNiBsIDEzOC45NzA3LDEzOC45Njg3NSBjIDExLjM3MDQsLTUuMTA5MyAyMS44MzU0LC0xMi40MzkxIDMxLjM5MDYsLTIxLjk5NDE1IDIwLjUzNTcsLTIwLjUzNTcgMzAuODAyNywtNDUuMjYzNSAzMC44MDI3LC03NC4xODM2IDAsLTIzLjI3NTYgLTYuNjU1MiwtNDMuODMzMSAtMTkuOTU3LC02MS42Nzc4IGwgLTIzLjM0NzcsLTIzLjM0NTcgYyAtMTcuODQ1NywtMTMuMzA0MSAtMzguNDA0MSwtMTkuOTYyOSAtNjEuNjgxNiwtMTkuOTYyOSB6IG0gMTYyLjYxNzIsMTIwLjg5NjUgYyAtMy4zNzYsMzguMTg4OSAtMTkuMTE4OSw3MS4zNDU0NSAtNDcuMjQwMiw5OS40NjY4NSAtOS4yOTk2LDkuMjk5NSAtMTkuMTU0MiwxNy4yMzY3IC0yOS41NTQ3LDIzLjgzMDEgbCAxMTcuNDMxNiwxMTcuNDI5NiBoIDUzLjM4MDkgYyAyNS43NjA3LDAgNDcuNzU1NSwtOS4xMTI5IDY1Ljk4MjQsLTI3LjMzOTggMTguMjI2OSwtMTguMjI3MSAyNy4zMzk4LC00MC4yMjE4IDI3LjMzOTgsLTY1Ljk4MjUgdiAtMi40MDA0IGMgLTUuMTk1OSw4Ljc0NzcgLTEwLjcyMDcsMTcuMzM0NiAtMTYuNjE1MiwyNS43MTg5IHogbSAtNTEyLjU3NDIsMTQ1LjExMzM1IHYgMi4yOTEgYyAwLDI1Ljc2MDcgOS4xMTI5LDQ3Ljc1NTQgMjcuMzM5OCw2NS45ODI0IDE0LjM4MTMsMTQuMzgxMyAzMS4xMTAyLDIzLjA4MyA1MC4xODE3LDI2LjExNzIgLTUuMTUwNywtNC42NTc3IC0xMC4yMjAxLC05LjQ2OCAtMTUuMTk1MywtMTQuNDQzMyAtMjQuNjYyNCwtMjQuNjYyNCAtNDUuNDA5OCwtNTEuNTQ3OCAtNjIuMzI2MiwtNzkuOTQ3MyB6IgogICAgIGlkPSJwYXRoMTA0MS0zIiAvPgo8L3N2Zz4K'); }"; $htmltop = << HACHE Member Directory

HACHE Member Directory

Updated: $date
Icon key: : Graduated student | : Photo permission denied
You agree to use the information in this directory for homeschool use ONLY. All other purposes, such as soliciting, is strictly prohibited.

END; $htmlmiddle = ""; $currentletter = " "; foreach ($families as $f) { // Add headings for letters if (strtoupper($f->getName()[0]) > $currentletter) { $currentletter = strtoupper($f->getName()[0]); $htmlmiddle .= "\n

$currentletter

\n"; } $famhtml = "\n
\n" . "\t" . $f->getName() . ", " . $f->getFather() . " and " . $f->getMother() . "\n"; if (!$f->getPhotoPermission()) { $famhtml .= "\t\n"; } $famhtml .= "\t
" . $f->getAddress() . ", " . $f->getCity() . ", " . $f->getState() . " " . $f->getZip() . "\n" . "\t
getPhone() . "\">" . $f->getPhone() . "    getEmail() . "\">" . $f->getEmail() . "\n"; foreach ($f->getChildren() as $child) { $famhtml .= "\t
\n"; if ($child->isGraduated()) { $famhtml .= "\t\t\n"; } else { $famhtml .= "\t\t\n"; } $famhtml .= "\t\t" . $child->getName() . ", " . date("M y", $child->getBirthday()) . "\n"; $famhtml .= "\t
\n"; } $famhtml .= "
\n"; $htmlmiddle .= $famhtml; } $htmlbottom = << END; $html = $htmltop . $htmlmiddle . $htmlbottom; header("Content-Type: text/html; charset=UTF-8"); echo $html; } else { \PhpOffice\PhpWord\Settings::setOutputEscapingEnabled(true); $phpWord = new \PhpOffice\PhpWord\PhpWord(); $properties = $phpWord->getDocInfo(); $properties->setCreator('HACHE Membership Portal'); $properties->setCompany('HACHE'); $properties->setTitle('HACHE Member Directory'); $phpWord->addTitleStyle(1, ['bold' => true, 'size' => 24, 'alignment' => \PhpOffice\PhpWord\SimpleType\Jc::CENTER]); $phpWord->addTitleStyle(2, ['bold' => true, 'size' => 16]); $header = $phpWord->addSection(["paperSize" => "Letter", 'marginLeft' => 600, 'marginRight' => 600, 'marginTop' => 600, 'marginBottom' => 600]); $header->addTitle("HACHE Member Directory\n", 1); $updated = $header->addTextRun(); $updated->addText("Updated: ", ['bold' => true]); $updated->addText("$date"); $iconkey = $header->addTextRun(); $iconkey->addText("Icon key: ", ['bold' => true]); $iconkey->addText("●: Graduated student | ►: Photo permission denied"); $header->addText($Strings->get("You agree to use the information in this directory for homeschool use ONLY. All other purposes, such as soliciting, is strictly prohibited.", false)); $header->addTextBreak(2); $body = $phpWord->addSection(['breakType' => 'continuous', 'colsNum' => 2, "paperSize" => "Letter", 'marginLeft' => 600, 'marginRight' => 600, 'marginTop' => 600, 'marginBottom' => 600]); $currentletter = " "; foreach ($families as $f) { // Add headings for letters if (strtoupper($f->getName()[0]) > $currentletter) { $currentletter = strtoupper($f->getName()[0]); $body->addTitle("$currentletter", 2); } $famtext = $body->addTextRun(); if (!$f->getPhotoPermission()) { $famtext->addText("►"); } $famtext->addText($f->getName(), ['bold' => true]); $famtext->addText(", " . $f->getFather() . " and " . $f->getMother()); $body->addText($f->getAddress() . ", " . $f->getCity() . ", " . $f->getState() . " " . $f->getZip()); $links = $body->addTextRun(); $links->addLink("tel:" . $f->getPhone(), $f->getPhone()); $links->addText(" "); $links->addLink("mailto:" . $f->getEmail(), $f->getEmail()); foreach ($f->getChildren() as $child) { $chtext = $body->addTextRun(["indent" => 1440]); if ($child->isGraduated()) { $chtext->addText(" ● "); } else { $chtext->addText(" "); } $chtext->addText($child->getName() . ", " . date("M y", $child->getBirthday())); } $body->addTextBreak(1); } header("Content-Description: File Transfer"); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Expires: 0'); switch ($format) { case "docx": $phpWord->getCompatibility()->setOoxmlVersion(15); $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); header("Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document"); header("Content-disposition: attachment; filename=\"HACHE_Directory_" . date("Y-m-d") . ".docx\""); break; case "odt": default: // Paper size is stuck at A4 and margins don't work. // See https://github.com/PHPOffice/PHPWord/issues/1531 // Hopefully they'll get this fixed. $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'ODText'); header("Content-Type: application/vnd.oasis.opendocument.text"); header("Content-disposition: attachment; filename=\"HACHE_Directory_" . date("Y-m-d") . ".odt\""); break; } $objWriter->save('php://output'); } ?>