You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
18 KiB
PHP

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

<?php
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
require_once __DIR__ . "/../required.php";
dieifnotloggedin();
$user = new User($_SESSION['uid']);
if (!$user->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 = <<<END
<!DOCTYPE html>
<title>HACHE Member Directory</title>
<style nonce="$SECURE_NONCE">
html, body {
font-family: Roboto, DejaVu Sans, Arial, sans-serif;
}
#memberlist {
column-count: 2;
}
.family {
margin-bottom: 15px;
}
.child {
margin-left: 10px;
}
.letterheading {
margin-top: 15px;
border-top: 1px solid black;
border-bottom: 1px solid black;
text-align: center;
}
.icon {
width: 16px;
height: 16px;
display: inline-block;
margin-bottom: -3px;
background-size: 16px 16px;
-webkit-print-color-adjust: exact !important;
color-adjust: exact !important;
}
$icons
</style>
<h1>HACHE Member Directory</h1>
<p>
<b>Updated:</b> $date
<br />
<b>Icon key:</b>
<span class="icon grad"></span>: Graduated student | <span class="icon nocamera"></span>: Photo permission denied
<br />
You agree to use the information in this directory for homeschool use ONLY. All other purposes, such as soliciting, is strictly prohibited.
</p>
<div id="memberlist">
END;
$htmlmiddle = "";
$currentletter = " ";
foreach ($families as $f) {
// Add headings for letters
if (strtoupper($f->getName()[0]) > $currentletter) {
$currentletter = strtoupper($f->getName()[0]);
$htmlmiddle .= "\n<h3 class=\"letterheading\">$currentletter</h3>\n";
}
$famhtml = "\n<div class=\"family\">\n"
. "\t<b>" . $f->getName() . "</b>, ";
if (!empty($f->getFather()) && !empty($f->getMother())) {
$famhtml .= $f->getFather() . " and " . $f->getMother() . "\n";
} else if (!empty($f->getFather())) {
$famhtml .= $f->getFather() . "\n";
} else if (!empty($f->getMother())) {
$famhtml .= $f->getMother() . "\n";
}
if (!$f->getPhotoPermission()) {
$famhtml .= "\t<span class=\"icon nocamera\"></span>\n";
}
$famhtml .= "\t<br /><span class=\"icon mapmarker\"></span> " . $f->getAddress() . ", " . $f->getCity() . ", " . $f->getState() . " " . $f->getZip() . "\n"
. "\t<br /><span class=\"icon phone\"></span> <a href=\"tel:" . $f->getPhone() . "\">" . $f->getPhone() . "</a> &nbsp;&nbsp; <span class=\"icon email\"></span> <a href=\"mailto:" . $f->getEmail() . "\">" . $f->getEmail() . "</a>\n";
foreach ($f->getChildren() as $child) {
$famhtml .= "\t<div class=\"child\">\n";
if ($child->isGraduated()) {
$famhtml .= "\t\t<span class=\"icon grad\"></span>\n";
} else {
$famhtml .= "\t\t<span class=\"icon\"></span>\n";
}
$famhtml .= "\t\t" . $child->getName() . ", " . date("M y", $child->getBirthday()) . "\n";
$famhtml .= "\t</div>\n";
}
$famhtml .= "</div>\n";
$htmlmiddle .= $famhtml;
}
$htmlbottom = <<<END
</div>
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);
$header->addText("Updated: ", ['bold' => true]);
$header->addText("$date");
$header->addText("Icon key: ", ['bold' => true]);
$header->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]);
if (!empty($f->getFather()) && !empty($f->getMother())) {
$famtext->addText(", " . $f->getFather() . " and " . $f->getMother());
} else if (!empty($f->getFather())) {
$famtext->addText(", " . $f->getFather());
} else if (!empty($f->getMother())) {
$famtext->addText(", " . $f->getMother());
}
$famtext = $body->addTextRun();
$famtext->addText($f->getAddress() . ", " . $f->getCity() . ", " . $f->getState() . " " . $f->getZip());
$famtext = $body->addTextRun();
$famtext->addLink("tel:" . $f->getPhone(), $f->getPhone());
$famtext->addText(" ");
$famtext->addLink("mailto:" . $f->getEmail(), $f->getEmail());
foreach ($f->getChildren() as $child) {
$famtext = $body->addTextRun();
if ($child->isGraduated()) {
$famtext->addText("");
} else {
$famtext->addText("");
}
$famtext->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');
}
?>