function run()
 {
     $fp = fopen('php://output', 'w');
     header('Content-type: application/force-download');
     header("Content-Type: application/download");
     header('Content-type: text/csv');
     header('Content-Disposition: attachment; filename="jethro_' . date('Y-m-d_h:i') . '.csv"');
     $GLOBALS['system']->includeDBClass('family');
     $GLOBALS['system']->includeDBClass('person');
     switch (array_get($_REQUEST, 'merge_type')) {
         case 'family':
             $merge_data = Family::getFamilyDataByMemberIDs($_POST['personid']);
             $dummy = new Family();
             $dummy_family = NULL;
             break;
         case 'person':
         default:
             $merge_data = $GLOBALS['system']->getDBObjectData('person', array('id' => (array) $_POST['personid']));
             $dummy = new Person();
             $dummy_family = new Family();
             break;
     }
     $headerrow = array('ID');
     foreach (array_keys(reset($merge_data)) as $header) {
         if ($header == 'familyid') {
             continue;
         }
         $headerrow[] = strtoupper($dummy->getFieldLabel($header));
     }
     fputcsv($fp, $headerrow);
     foreach ($merge_data as $id => $row) {
         @$dummy->populate($id, $row);
         $outputrow = array($id);
         foreach ($row as $k => $v) {
             if ($k == 'history') {
                 continue;
             }
             if ($k == 'familyid') {
                 continue;
             }
             if ($dummy->hasField($k)) {
                 $outputrow[] = $dummy->getFormattedValue($k, $v);
                 // pass value to work around read-only fields
             } else {
                 if ($dummy_family && $dummy_family->hasField($k)) {
                     $outputrow[] = $dummy_family->getFormattedValue($k, $v);
                 } else {
                     $outputrow[] = $v;
                 }
             }
         }
         fputcsv($fp, $outputrow);
     }
     fclose($fp);
 }
Example #2
0
 function run()
 {
     // Ref: http://en.wikipedia.org/wiki/VCard
     header('Content-type: text/vcf');
     header('Content-Disposition: attachment; filename="contacts_' . date('Y-m-d_h:i') . '.vcf"');
     $GLOBALS['system']->includeDBClass('person');
     $GLOBALS['system']->includeDBClass('family');
     $merge_data = $GLOBALS['system']->getDBObjectData('person', array('id' => $_REQUEST['personid']));
     $dummy = new Person();
     $family = new Family();
     foreach ($merge_data as $id => $row) {
         $dummy->populate($id, $row);
         $family->setvalue('home_tel', $row['home_tel']);
         echo "BEGIN:VCARD\n";
         echo "VERSION:3.0\n";
         echo "N:" . $row['last_name'] . ";" . $row['first_name'] . ";;;\n";
         echo "FN:" . $row['first_name'] . " " . $row['last_name'] . "\n";
         echo "EMAIL;type=INTERNET;type=HOME:" . $row['email'] . "\n";
         echo "ADR;type=HOME:;;" . $row['address_street'] . ";" . $row['address_suburb'] . ";" . $row['address_state'] . ";" . $row['address_postcode'] . ";\n";
         echo "TEL;type=HOME:" . $family->getFormattedValue('home_tel') . "\n";
         echo "TEL;type=WORK:" . $dummy->getFormattedValue('work_tel') . "\n";
         echo "TEL;type=MOBILE:" . $dummy->getFormattedValue('mobile_tel') . "\n";
         echo "TEL;type=CELL:" . $dummy->getFormattedValue('mobile_tel') . "\n";
         if ($g = $dummy->getValue('Gender')) {
             echo "GENDER:" . strtoupper($g[0]) . "\n";
         }
         echo "CATEGORIES:" . $row['congregation'] . "\n";
         echo "ORG:" . $dummy->getFormattedValue('congregationid') . "\n";
         echo "NOTES:" . $dummy->getFormattedValue('congregationid') . "\n";
         echo "ROLE:" . $dummy->getFormattedValue('status') . "\n";
         echo "TITLE:" . $dummy->getFormattedValue('status') . "\n";
         echo "SOURCE:" . build_url(array('personid' => array($id))) . "\n";
         // where to get vcard from
         echo "URL:" . build_url(array('call' => NULL, 'view' => 'persons', 'personid' => $id)) . "\n";
         // definitive location for full details
         echo "UID:" . build_url(array('call' => NULL, 'view' => 'persons', 'personid' => $id)) . "\n";
         echo "END:VCARD\n\n";
     }
 }
    function printResults($with_links = FALSE)
    {
        $db = $GLOBALS['db'];
        $groupid = (int) $_REQUEST['groupid'];
        $all_member_details = array_get($_REQUEST, 'all_member_details', 0);
        if (empty($groupid)) {
            return;
        }
        $sql = '
		select family.id as familyid, family.family_name, family.home_tel, 
			person.*, congregation.long_name as congname,
			address_street, address_suburb, address_state, address_postcode
		from family 
		join person on family.id = person.familyid
		left join congregation on person.congregationid = congregation.id
		where person.status <> "archived"
		and family.id in 
		(select familyid 
		from person join person_group_membership pgm on person.id = pgm.personid
		where pgm.groupid = ' . (int) $groupid;
        if (!empty($_REQUEST['congregationid'])) {
            $sql .= '
				AND person.congregationid in (' . implode(',', array_map(array($db, 'quote'), $_REQUEST['congregationid'])) . ')';
        }
        $sql .= ')
		order by family_name asc, age_bracket asc, gender desc
		';
        $res = $db->queryAll($sql, null, null, true, true, true);
        check_db_result($res);
        if (empty($res)) {
            ?>
<p><i>No families to show</i></p><?php 
            return;
        }
        $sql = '
		select personid
		from person_group_membership pgm
		where pgm.groupid = ' . (int) $groupid;
        $signups = $db->queryCol($sql);
        check_db_result($signups);
        $GLOBALS['system']->includeDBClass('family');
        $GLOBALS['system']->includeDBClass('person');
        $dummy_family = new Family();
        $dummy_person = new Person();
        ?>

		<table class="contact-list">
		<?php 
        foreach ($res as $familyid => $family_members) {
            $adults = array();
            $children = array();
            $adults_use_full = false;
            $children_use_full = false;
            foreach ($family_members as $member) {
                if (empty($_REQUEST['age_bracket']) || in_array($member['age_bracket'], $_REQUEST['age_bracket'])) {
                    $adults[] = $member;
                    if ($member['last_name'] != $member['family_name']) {
                        $adults_use_full = true;
                    }
                } else {
                    $children[] = $member;
                    if ($member['last_name'] != $member['family_name']) {
                        $children_use_full = true;
                    }
                }
            }
            $first_member = reset($family_members);
            ?>
			<tr><td colspan="4"><h2 style="margin-bottom: 0px"><?php 
            echo $first_member['family_name'];
            ?>
</h2></td></tr>
			<?php 
            if ($first_member['home_tel']) {
                $dummy_family->setValue('home_tel', $first_member['home_tel']);
                echo '<tr><td colspan="4"><h3 style="border: 0px; margin: 0px; padding: 0px">';
                echo ents($dummy_family->getFormattedValue('home_tel'));
                echo '</h3></td></tr>';
            }
            if (!empty($_REQUEST['include_address']) && $first_member['address_street']) {
                echo '<tr><td colspan="4">' . nl2br(ents($first_member['address_street'])) . '<br />';
                echo ents($first_member['address_suburb'] . ' ' . $first_member['address_state'] . ' ' . $first_member['address_postcode']);
                echo '</td></tr>';
            }
            $fn = $with_links ? 'printFieldValue' : 'getFormattedValue';
            foreach ($adults as $adult) {
                $dummy_person->populate($adult['id'], $adult);
                ?>
				<tr>
					<td><?php 
                echo ents($adults_use_full ? $adult['first_name'] . ' ' . $adult['last_name'] : $adult['first_name']);
                ?>
</td>
					<td><?php 
                echo ents($adult['congname']);
                ?>
</td>
					<td><?php 
                if ($all_member_details || in_array($adult['id'], $signups)) {
                    echo ents($dummy_person->getFormattedValue('mobile_tel'));
                }
                ?>
</td>
					<td><?php 
                if ($all_member_details || in_array($adult['id'], $signups)) {
                    echo ents($dummy_person->{$fn}('email'));
                }
                ?>
</td>
				</tr>
				<?php 
            }
            $child_names = array();
            foreach ($children as $child) {
                $child_names[] = $children_use_full ? $child['first_name'] . ' ' . $child['last_name'] : $child['first_name'];
            }
            if ($child_names) {
                ?>
				<tr>
					<td colspan="4"><?php 
                echo ents(implode(', ', $child_names));
                ?>
</td
				</tr>
				<?php 
            }
            ?>
			<?php 
        }
        ?>
		</table>
		<?php 
    }