function showClientPrograms($lClientID, $lNumCProgs, $cProgs)
{
    //---------------------------------------------------------------------
    //
    //---------------------------------------------------------------------
    global $genumDateFormat;
    $attributes = new stdClass();
    $attributes->divID = 'clientProgs';
    $attributes->divImageID = 'clientProgsDivImg';
    $attributes->bStartOpen = false;
    $attributes->lTableWidth = 1100;
    $attributes->lUnderscoreWidth = 350;
    openBlock('Programs <span style="font-size: 9pt;">(' . $lNumCProgs . ')</span>', '', $attributes);
    $attributes->lTableWidth = 900;
    $attributes->lUnderscoreWidth = 373;
    $attributes->lTitleFontSize = 10;
    foreach ($cProgs as $cprog) {
        if ($cprog->bShowCProgLink) {
            $lCProgID = $cprog->lKeyID;
            // set up link to utility that allows the user to
            // reassign an attendance to a different enrollment
            $strLinkMoveAttend = '';
            $lNumEnroll = $cprog->lNumEnrollments;
            if ($lNumEnroll > 1) {
                if ($cprog->lTotAttend > 0) {
                    $strLinkMoveAttend = strLinkUtil_CProgMoveAttend($lClientID, $lCProgID, 'Transfer attendance between enrollments', true) . '&nbsp;' . strLinkUtil_CProgMoveAttend($lClientID, $lCProgID, 'Transfer attendance between enrollments', false);
                }
            }
            $strOut = '';
            $strProgSafeName = htmlspecialchars($cprog->strProgramName);
            $attributes->divID = 'clientProg' . $lCProgID;
            $attributes->divImageID = 'clientProg' . $lCProgID . 'DivImg';
            $attributes->bCloseDiv = false;
            // it's the little things that make a house a home
            openBlock($strProgSafeName . ' <span style="font-size: 9pt;">(' . $lNumEnroll . ' enrollment' . ($lNumEnroll == 1 ? '' : 's') . ')</span>', '', $attributes);
            $strOut .= '<b><span style="vertical-align: bottom;"> ' . $strProgSafeName . '</b>' . "\n";
            if ($cprog->bEnrolled) {
                $strOut .= '<br>Currently enrolled:<br>
                         <ul style="margin-top: 0px;">';
                $lETableID = $cprog->lEnrollmentTableID;
                $lATableID = $cprog->lAttendanceTableID;
                $bAnyActiveEnrollment = false;
                foreach ($cprog->erecs as $erec) {
                    $lERecID = $erec->lKeyID;
                    $bCurrentlyEnrolled = $erec->bCurrentlyEnrolled;
                    if ($bCurrentlyEnrolled) {
                        $bAnyActiveEnrollment = true;
                    }
                    $strOut .= '<li style="margin-bottom: 6px;">' . ($bCurrentlyEnrolled ? '<font>' : '<font style="color: #999;">') . strLinkView_UFMFRecordViaRecID($lETableID, $lClientID, $lERecID, 'View enrollment record', true) . '&nbsp;' . date($genumDateFormat, $erec->dteStart) . ' - ';
                    if (is_null($erec->dteMysqlEnd)) {
                        $strOut .= '<i>ongoing</i>' . "\n";
                    } else {
                        $strOut .= date($genumDateFormat, $erec->dteEnd);
                    }
                    if (!$bCurrentlyEnrolled) {
                        $strOut .= ' <i>(inactive)</i>';
                    }
                    if ($erec->lNumAttend > 0) {
                        $strViewA = '&nbsp;' . strLinkView_UFMFRecordsViaFID(CENUM_CONTEXT_CLIENT, $lATableID, $lClientID, 'View attendance records', true, '', $lERecID) . '&nbsp;&nbsp;&nbsp;';
                    } else {
                        $strViewA = '';
                    }
                    $strOut .= '<br>Attendance records: ' . $erec->lNumAttend . $strViewA . '&nbsp;&nbsp;&nbsp;&nbsp;';
                    if ($bCurrentlyEnrolled) {
                        $strOut .= strLinkAdd_CProgAttendance(false, $lClientID, $lCProgID, $lERecID, 'Add attendance record', true) . '&nbsp;' . strLinkAdd_CProgAttendance(false, $lClientID, $lCProgID, $lERecID, 'Add attendance record', false);
                    }
                    $strOut .= '</li>' . "\n";
                    $strOut .= '</font>';
                }
                if (!$bAnyActiveEnrollment) {
                    $strOut .= '<li style="list-style-type: none;"><br>' . strLinkAdd_CProgEnrollment($lClientID, $lCProgID, 'Add additional enrollment', true) . '&nbsp;' . strLinkAdd_CProgEnrollment($lClientID, $lCProgID, 'Add additional enrollment', false) . '
                       </li>
                         </ul></span>';
                }
            } else {
                $strOut .= '<span style="text-align: bottom;">: Not enrolled. ' . strLinkAdd_CProgEnrollment($lClientID, $lCProgID, 'Enroll this client', true) . '&nbsp;' . strLinkAdd_CProgEnrollment($lClientID, $lCProgID, 'Enroll this client', false) . '</span><br>';
            }
            $strOut .= $strLinkMoveAttend;
            echoT($strOut);
            $attributes->bCloseDiv = true;
            closeBlock($attributes);
        }
    }
    $attributes->bCloseDiv = true;
    closeBlock($attributes);
}
<?php

echoT('
    You have successfully enrolled <b>' . $client->strSafeName . '</b> in <b>' . htmlspecialchars($cprog->strProgramName) . '</b>.<br><br>');
echoT(strLinkAdd_CProgAttendance(false, $lClientID, $lCProgID, $lEnrollRecID, 'Add ' . $cprog->strSafeAttendLabel . ' Record', true) . '&nbsp;' . strLinkAdd_CProgAttendance(false, $lClientID, $lCProgID, $lEnrollRecID, 'Add ' . $cprog->strSafeAttendLabel . ' Record', false) . '<br><br>');
echoT(strLinkView_CProgEnrollRec($lTableID, $lClientID, $lEnrollRecID, 'View ' . $cprog->strSafeEnrollLabel . ' record', true) . '&nbsp;' . strLinkView_CProgEnrollRec($lTableID, $lClientID, $lEnrollRecID, 'View ' . $cprog->strSafeEnrollLabel . ' record', false) . '<br><br>');
echoT(strLinkView_ClientRecord($lClientID, 'View client record', true) . '&nbsp;' . strLinkView_ClientRecord($lClientID, 'View client record', false) . '<br><br>');
/*
*/
function writeMRecRows($lTableID, $lFID, &$utable, &$mRecs, $lEnrollRecID)
{
    //---------------------------------------------------------------------
    //
    //---------------------------------------------------------------------
    global $genumDateFormat;
    $strFNPrefix = $utable->strFieldPrefix;
    $strFNKeyID = $strFNPrefix . '_lKeyID';
    if ($utable->bCProg) {
        $lCProgID = $utable->cprog->lKeyID;
    }
    $bReadOnly = $utable->bReadOnly;
    foreach ($mRecs as $mrec) {
        echoT('<tr class="makeStripe">');
        $lRecID = $mrec->{$strFNKeyID};
        if ($utable->bCProg && !$utable->bEnrollment) {
            $strClone = '<br>' . strLinkClone_CPAttendance($lCProgID, $lRecID, 'Clone attendance record', true);
        } else {
            $strClone = '';
        }
        if ($bReadOnly) {
            $strEditLink = '';
        } else {
            $strEditLink = strLinkEdit_UFMultiRecEntry($utable->enumTType, $lTableID, $lFID, $lRecID, true, 'Edit record', '', $lEnrollRecID);
        }
        echoT('
            <td class="enpRpt" style="text-align: center;">' . str_pad($lRecID, 5, '0', STR_PAD_LEFT) . '&nbsp;' . strLinkView_UFMFRecordViaRecID($lTableID, $lFID, $lRecID, 'View', true) . '
            </td>');
        echoT('
            <td class="enpRpt" style="text-align: center;">' . $strEditLink . $strClone . '
            </td>');
        if (!$bReadOnly) {
            echoT('
               <td class="enpRpt" style="text-align: center;">' . strLinkRem_UFMultiRecEntry($utable->enumTType, $lTableID, $lFID, $lRecID, 'Remove', true, true) . '
               </td>');
        }
        if ($utable->bCProg) {
            //-----------------------------
            // enrollment records
            //-----------------------------
            if ($utable->bEnrollment) {
                echoT('
                  <td class="enpRpt">' . date($genumDateFormat, $mrec->dteStart) . '&nbsp;
                  </td>');
                if (is_null($mrec->dteMysqlEnd)) {
                    $strEnd = '<i>Ongoing</i>';
                } else {
                    $strEnd = date($genumDateFormat, $mrec->dteEnd);
                }
                echoT('
                     <td class="enpRpt" style="text-align: center;">' . $strEnd . '
                     </td>
                     <td class="enpRpt" style="text-align: center;">' . ($mrec->bCurrentlyEnrolled ? 'Yes' : 'No') . '
                     </td>
                     <td class="enpRpt" style="text-align: center;">' . strLinkAdd_CProgAttendance(false, $lFID, $utable->cprog->lKeyID, $lRecID, 'Add attendance record', true) . '
                     </td>
                     ');
            } else {
                //-----------------------------
                // attendance records
                //-----------------------------
                echoT('
                  <td class="enpRpt" style="text-align: center;">' . str_pad($mrec->lEnrollRecordID, 5, '0', STR_PAD_LEFT) . '&nbsp;' . strLinkView_UFMFRecordViaRecID($utable->cprog->lEnrollmentTableID, $lFID, $mrec->lEnrollRecordID, 'View enrollment record', true) . '
                  </td>
                  <td class="enpRpt">' . date($genumDateFormat, $mrec->dteAttendance) . '&nbsp;
                  </td>
                  <td class="enpRpt" style="text-align: right;">' . number_format($mrec->dDuration, 2) . '&nbsp;
                  </td>
                  <td class="enpRpt" style="width: 220pt;">' . nl2br(htmlspecialchars($mrec->strCaseNotes)) . '&nbsp;
                  </td>
                  ');
                $utable->dTotDuration += $mrec->dDuration;
            }
        }
        if ($utable->lNumFields > 0) {
            foreach ($utable->ufields as $ufield) {
                displayField($mrec, $ufield);
            }
        }
        echoT('</tr>');
    }
}