qcubed/framework

View on GitHub
assets/php/calendar.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php
    function CastToInt($strNumber) {
        settype($strNumber, "int");
        return $strNumber;
    }

    if ((!array_key_exists("intTimestamp", $_GET)) || (!$_GET["intTimestamp"])) {
        $intTimestamp = time();
    } else
        $intTimestamp = $_GET["intTimestamp"];
        
    $strFormId = htmlentities($_GET["strFormId"]);
    $strId = htmlentities($_GET["strId"]);
        
    $intSelectedMonth = CastToInt(date("n", $intTimestamp));
    $intSelectedDay = CastToInt(date("j", $intTimestamp));
    $intSelectedYear = CastToInt(date("Y", $intTimestamp));
    $intTimestamp = mktime(0,0,0, $intSelectedMonth, $intSelectedDay, $intSelectedYear);
    $dttToday = mktime(0,0,0, date("n"), date("j"), date("Y"));
    
    $intMonthStartsOn = CastToInt(date("w", mktime(0,0,0, $intSelectedMonth, 1, $intSelectedYear)));
    $intMonthDays = CastToInt(date("t", $intTimestamp));
    $intPreviousMonthDays = CastToInt(date("t", mktime(0,0,0, $intSelectedMonth - 1, 1, $intSelectedYear)));
    
    $strQueryArgs = sprintf("&strFormId=%s&strId=%s", $strFormId, $strId);
    $strChangeCommand = sprintf('window.opener.document.forms["%s"].elements["%s"].value = "%s"; ',
        $strFormId,
        $strId,
        date("M j Y", $intTimestamp));
    $strChangeCommand .= sprintf('window.opener.document.forms["%s"].elements["%s_intTimestamp"].value = "%s"; ',
        $strFormId,
        $strId,
        $intTimestamp);
    $strChangeCommand .= sprintf('if (window.opener.document.forms["%s"].elements["%s"].onchange) window.opener.document.forms["%s"].elements["%s"].onchange();',
        $strFormId,
        $strId,
        $strFormId,
        $strId);
?>
<html>
<head>
    <title>Calendar</title>
    <script type="text/javascript">
        function selectDate(intTimestamp) {
            document.location = "calendar.php?intTimestamp=" + intTimestamp + "<?php print($strQueryArgs); ?>";
        }

        function cancel() {
            window.close();
        }

        function done() {
            <?php print($strChangeCommand); ?>
            window.close();
        }
    </script>
    <style>
        .main {
            font-family: verdana, arial, helvetica, sans-serif;
            font-size: 9px;
            text-align: center;
            color: #004d5d
        }
        
        A {
            text-decoration: none;
        }

        .dropdown {
            background-color: #e5e5e5;
            font-family: arial, helvetica, sans-serif;
            font-size: 8pt;
        }
        
        .button {
            font-family: verdana, arial, helvetica, sans-serif;
            font-size: 7.5pt;
            font-weight: bold;
            color: #ffffff;
            background-color: #004d5d;
            text-align: center;
            vertical-align: middle;
            height: 18px;
            border: thin solid #223344;
        }

        .offMonth {
            color: #999999;
            background-color: #f0f0f0;
        }
        
        .onMonth {
            color: #005599;
            background-color: #e0f0f0;
        }
        
        .onMonthWeekend {
            color: #80aabb;
            background-color: #ffffff;
        }

        .selected {
            color: #ffffff;
            background-color: #ee0000;
        }
        
        .today {
            color: #ffffff;
            background-color: #80aabb;
        }
    </style>
</head>
<body><form method="get" name="myForm"><center>
    <select name="dttMonth" class="dropdown" onchange="selectDate(document.myForm.dttMonth.options[document.myForm.dttMonth.selectedIndex].value)">
<?php
    for ($intMonth = 1; $intMonth <= 12; $intMonth++) {
        $intTimestampLabel = mktime(0,0,0, $intMonth, 1, $intSelectedYear);
        $strLabel = date("F", $intTimestampLabel);
        $strSelected = ($intMonth == $intSelectedMonth) ? "selected" : "";
        printf('<option value="%s" %s>%s</option>', $intTimestampLabel, $strSelected, $strLabel);
    }
?>
    </select> &nbsp; 
    <select name="dttYear" class="dropdown" onchange="selectDate(document.myForm.dttYear.options[document.myForm.dttYear.selectedIndex].value)">
<?php
    for ($intYear = 1970; $intYear <= 2020; $intYear++) {
        $intTimestampLabel = mktime(0,0,0, $intSelectedMonth, 1, $intYear);
        $strLabel = date("Y", $intTimestampLabel);
        $strSelected = ($intYear == $intSelectedYear) ? 'selected="selected"' : '';
        printf('<option value="%s" %s>%s</option>', $intTimestampLabel, $strSelected, $strLabel);
    }
?>
    </select>
    <table cellspacing="2" cellpadding="2" border="0" class="main">
        <tr>
            <td>Su</td>
            <td>Mo</td>
            <td>Tu</td>
            <td>We</td>
            <td>Th</td>
            <td>Fr</td>
            <td>Sa</td>
        </tr>
<?php
    $intDaysBack = ($intMonthStartsOn == 0) ? 7 : $intMonthStartsOn;
    $intIndex = 1 - $intDaysBack;
    $intRowCount = 0;

    while ($intRowCount < 6) {
        print('<tr>');
        for ($intDayOfWeek = 0; $intDayOfWeek <= 6; $intDayOfWeek++) {
            if ($intIndex < 1) {
                $intLabel = $intPreviousMonthDays + $intIndex;
                $intTimestampLabel = mktime(0,0,0, $intSelectedMonth - 1, $intLabel, $intSelectedYear);
                $strCssclass = "offMonth";
            } else if ($intIndex > $intMonthDays) {
                $intLabel = $intIndex - $intMonthDays;
                $intTimestampLabel = mktime(0,0,0, $intSelectedMonth + 1, $intLabel, $intSelectedYear);
                $strCssclass = "offMonth";
            } else {
                $intLabel = $intIndex;
                $intTimestampLabel = mktime(0,0,0, $intSelectedMonth, $intLabel, $intSelectedYear);
                $strCssclass = "onMonth";
                if ((date("w", $intTimestampLabel) == 0) || (date("w", $intTimestampLabel) == 6))
                    $strCssclass = "onMonthWeekend";
                else
                    $strCssclass = "onMonth";
            }

            if ($intTimestampLabel == $intTimestamp)
                $strCssclass = "selected";
            else if ($intTimestampLabel == $dttToday)
                $strCssclass = "today";

            printf('<td class="%s"><a class="%s" href="#" onclick="selectDate(%s)">%s</a></td>', $strCssclass, $strCssclass, $intTimestampLabel, $intLabel);
            $intIndex++;
        }
        print('</tr>');
        $intRowCount++;
    }
?>
        <tr>
            <td colspan="7">Selected Day: <?php print(date("n/j/Y", $intTimestamp)); ?><br />&nbsp;</td>
        </tr>
    </table>
    <input type="button" class="button" name="Done" value="DONE" onclick="done()" /> &nbsp; 
    <input type="button" class="button" name="Cancel" value="CANCEL" onclick="cancel()" />
</center></form></body></html>