00001 <?PHP
00002
00003 #
00004 # Axis--StandardLibrary.php
00005 # A Collection of Utility Routines
00006 #
00007 # Copyright 1999-2002 Axis Data
00008 # This code is free software that can be used or redistributed under the
00009 # terms of Version 2 of the GNU General Public License, as published by the
00010 # Free Software Foundation (http://www.fsf.org).
00011 #
00012 # Author: Edward Almasy (almasy@axisdata.com)
00013 #
00014 # Part of the AxisPHP library v1.2.4
00015 # For more information see http://www.axisdata.com/AxisPHP/
00016 #
00017
00018
00019 # (accepts a date string in the form YYYY-MM-DD and adds or subtracts days)
00020 function CalcDate($DateString, $DaysToAdd)
00021 {
00022 # parse date string
00023 $Pieces = explode("-", $DateString);
00024
00025 # convert to value of date in seconds (a la Unix timestamp)
00026 $DateInSeconds = mktime(1, 1, 1, $Pieces[1], $Pieces[2], $Pieces[0]);
00027
00028 # perform date arithmetic
00029 $DateInSeconds = $DateInSeconds + ($DaysToAdd * (60 * 60 * 24));
00030
00031 # return YYYY-MM-DD date string to caller
00032 return date("Y-m-d", $DateInSeconds);
00033 }
00034
00035 function GetHtmlEscapedString($String)
00036 {
00037 return htmlentities(stripslashes($String));
00038 }
00039
00040 function GetUnHtmlEscapedString($String)
00041 {
00042 $TranslationTable = get_html_translation_table(HTML_ENTITIES);
00043 $TranslationTable = array_flip($TranslationTable);
00044 return strtr($String, $TranslationTable);
00045 }
00046
00047 function HtmlSafePrint($String)
00048 {
00049 print(GetHtmlEscapedString($String));
00050 }
00051
00052 function PrintAutoRefreshPage($Title, $NewUrl)
00053 {
00054 </script>
00055
00056 <html>
00057 <head>
00058 <title><?php printf("%s", $Title); ?></title>
00059 <meta http-equiv="refresh" content="0; URL=<?php print($NewUrl); ?>">
00060 </head>
00061 <body bgcolor="white">
00062 </body>
00063 </html>
00064
00065 <script language="php">
00066 }
00067
00068 function GetOrdinalSuffix($Number)
00069 {
00070 if (($Number > 10) && ($Number < 20))
00071 {
00072 $Suffix = "th";
00073 }
00074 else
00075 {
00076 $Digit = $Number % 10;
00077 if ($Digit == 1)
00078 {
00079 $Suffix = "st";
00080 }
00081 elseif ($Digit == 2)
00082 {
00083 $Suffix = "nd";
00084 }
00085 elseif ($Digit == 3)
00086 {
00087 $Suffix = "rd";
00088 }
00089 else
00090 {
00091 $Suffix = "th";
00092 }
00093 }
00094
00095 return $Suffix;
00096 }
00097
00098 function GetOrdinalNumber($Number)
00099 {
00100 return $Number.GetOrdinalSuffix($Number);
00101 }
00102
00103 function GetMonthName($MonthNumber)
00104 {
00105 $MonthNames = array(
00106 1 => "January",
00107 2 => "February",
00108 3 => "March",
00109 4 => "April",
00110 5 => "May",
00111 6 => "June",
00112 7 => "July",
00113 8 => "August",
00114 9 => "September",
00115 10 => "October",
00116 11 => "November",
00117 12 => "December");
00118
00119 return $MonthNames[$MonthNumber];
00120 }
00121
00122 function PrintOptionList($ResultVar, $Items,
00123 $SelectedValue = NULL,
00124 $SubmitOnChange = "",
00125 $Size = 1,
00126 $PrintEvenIfEmpty = 1,
00127 $MultipleAllowed = false,
00128 $OnChangeAction = NULL,
00129 $Width = NULL,
00130 $DisabledOptions = NULL)
00131 {
00132 if ((count($Items) > 0) || $PrintEvenIfEmpty)
00133 {
00134 # determine forced display width for option list (if needed)
00135 if ($Width)
00136 {
00137 # width given in px
00138 if (is_numeric($Width))
00139 {
00140 $ForcedWidthAttrib = " style=\"width: ".$Width."px;\"";
00141 }
00142
00143 # width given with type specifier (%, px, etc)
00144 else
00145 {
00146 $ForcedWidthAttrib = " style=\"width: ".$Width.";\"";
00147 }
00148 }
00149 else
00150 {
00151 $Labels = $Items;
00152 sort($Labels);
00153 $MatchingCharThreshold = 11;
00154 $MaxMatchingChars = $MatchingCharThreshold;
00155 foreach ($Labels as $Label)
00156 {
00157 if (isset($PreviousLabel))
00158 {
00159 $Len = ($MaxMatchingChars + 1);
00160 while (substr($Label, 0, $Len) ==
00161 substr($PreviousLabel, 0, $Len)
00162 && ($Len < strlen($Label)))
00163 {
00164 $MaxMatchingChars = $Len;
00165 $Len++;
00166 }
00167 }
00168 $PreviousLabel = $Label;
00169 }
00170 if ($MaxMatchingChars > $MatchingCharThreshold)
00171 {
00172 $ExtraCharsToDisplayBeyondMatch = 6;
00173 $ForcedWidth = $MaxMatchingChars + $ExtraCharsToDisplayBeyondMatch;;
00174 $ForcedWidthAttrib = " style=\"width: ".$ForcedWidth."ex;\"";
00175 }
00176 else
00177 {
00178 $ForcedWidthAttrib = " style=\"width: auto;\"";
00179 }
00180 }
00181
00182 # print option list begin
00183 print("<select name=\"".$ResultVar."\""
00184 ." size=\"".$Size."\""
00185 ." id=\"".$ResultVar."\""
00186 .($SubmitOnChange ? " onChange=\"submit()\"" : "")
00187 .($OnChangeAction ? " onChange=\"".$OnChangeAction."\"" : "")
00188 .($MultipleAllowed ? " multiple" : "")
00189 .$ForcedWidthAttrib
00190 .">\n");
00191
00192 # for each element in list
00193 reset($Items);
00194 while (list($Value, $Label) = each($Items))
00195 {
00196 # print option list item
00197 printf(" <option value=\"%s\"", htmlspecialchars($Value));
00198 if ((is_array($SelectedValue) && in_array($Value, $SelectedValue))
00199 || ($Value == $SelectedValue)) { printf(" selected"); }
00200 if ( !is_null($DisabledOptions)
00201 && isset($DisabledOptions[$Label]))
00202 {
00203 printf(" disabled");
00204 }
00205 printf(">%s</option>\n", GetHtmlEscapedString($Label));
00206 }
00207
00208 # print option list end
00209 printf("</select>\n");
00210 }
00211 }
00212
00213 function PrintOptionListsOfDateComponents($FieldPrefix, $AllowNullDate = 0, $Year = -1, $Month = -1, $Day = -1, $SubmitOnChange = "")
00214 {
00215 # if no date passed in
00216 if (($Year == -1) && ($AllowNullDate))
00217 {
00218 # if null date allowed
00219 if ($AllowNullDate)
00220 {
00221 # use null date
00222 $Year = 0;
00223 $Month = 0;
00224 $Day = 0;
00225 }
00226 else
00227 {
00228 # use current date
00229 $Year = date("Y");
00230 $Month = date("n");
00231 $Day = date("j");
00232 }
00233 }
00234
00235 # if date string passed in
00236 if ((strlen($Year) > 4) && ($Month == -1))
00237 {
00238 # split into component parts
00239 list($Year, $Month, $Day) = split("[-/]", $Year);
00240 }
00241
00242 # print option list for months if month value supplied
00243 if ($Month != -1)
00244 {
00245 $Index = 1;
00246 print("\n <select name=\"".$FieldPrefix."Month\""
00247 ." id=\"".$FieldPrefix."Month\""
00248 .($SubmitOnChange ? " onChange='submit()'" : "")
00249 .">\n");
00250 if ($AllowNullDate)
00251 {
00252 print("<option value='0'>--</option>\n");
00253 }
00254 while ($Index <= 12)
00255 {
00256 if ($Index == $Month)
00257 {
00258 printf(" <option value='%s' selected>%s</option>\n", $Index, GetMonthName($Index));
00259 }
00260 else
00261 {
00262 printf(" <option value='%s'>%s</option>\n", $Index, GetMonthName($Index));
00263 }
00264 $Index++;
00265 }
00266 printf(" </select>\n");
00267 }
00268
00269 # print option list for days if day value supplied
00270 if ($Day != -1)
00271 {
00272 $Index = 1;
00273 print("\n <select name=\"".$FieldPrefix."Day\""
00274 ." id=\"".$FieldPrefix."Day\""
00275 .($SubmitOnChange ? " onChange='submit()'" : "")
00276 .">\n");
00277 if ($AllowNullDate)
00278 {
00279 print("<option value='0'>--</option>\n");
00280 }
00281 while ($Index <= 31)
00282 {
00283 if ($Index == $Day)
00284 {
00285 printf(" <option value='%s' selected>%s</option>\n", $Index, GetOrdinalNumber($Index));
00286 }
00287 else
00288 {
00289 printf(" <option value='%s'>%s</option>\n", $Index, GetOrdinalNumber($Index));
00290 }
00291 $Index++;
00292 }
00293 printf(" </select>\n");
00294 }
00295
00296 # print option list for years
00297 $Index = date("Y") - 45;
00298 $EndIndex = $Index + 45;
00299 print("\n <select name=\"".$FieldPrefix."Year\""
00300 ." id=\"".$FieldPrefix."Year\""
00301 .($SubmitOnChange ? " onChange='submit()'" : "")
00302 .">\n");
00303 if ($AllowNullDate)
00304 {
00305 print("<option value='0'>--</option>\n");
00306 }
00307 while ($Index <= $EndIndex)
00308 {
00309 if ($Index == $Year)
00310 {
00311 printf(" <option value=\"%s\" selected>%s</option>\n", $Index, $Index);
00312 }
00313 else
00314 {
00315 printf(" <option value=\"%s\">%s</option>\n", $Index, $Index);
00316 }
00317 $Index++;
00318 }
00319 printf(" </select>\n");
00320 }
00321
00322 function PrintOptionListsOfTimeComponents($FieldPrefix, $Hour = -1, $Minute = -1)
00323 {
00324 # use current date if no date passed in
00325 if ($Hour == -1)
00326 {
00327 $Hour = date("G");
00328 $Minute = date("i");
00329 }
00330
00331 # print option list for hours if hour value supplied
00332 $Index = 0;
00333 print("\n <select name=\"".$FieldPrefix."Hour\" id=\"".$FieldPrefix."Hour\">\n");
00334 while ($Index < 24)
00335 {
00336 if ($Index == $Hour)
00337 {
00338 printf(" <option value='%s' selected>%d</option>\n", $Index, $Index);
00339 }
00340 else
00341 {
00342 printf(" <option value='%s'>%d</option>\n", $Index, $Index);
00343 }
00344 $Index++;
00345 }
00346 printf(" </select>\n");
00347
00348 # print option list for minutes if minute value supplied
00349 if ($Minute != -1)
00350 {
00351 $Index = 0;
00352 print("\n <select name=\"".$FieldPrefix."Minute\" id=\"".$FieldPrefix."Minute\">\n");
00353 while ($Index < 60)
00354 {
00355 if ($Index == $Minute)
00356 {
00357 printf(" <option value='%s' selected>%02d</option>\n", $Index, $Index);
00358 }
00359 else
00360 {
00361 printf(" <option value='%s'>%02d</option>\n", $Index, $Index);
00362 }
00363 $Index++;
00364 }
00365 printf(" </select>\n");
00366 }
00367 }
00368
00369 function LongestStringLineLength($String)
00370 {
00371 # split string on newlines
00372 $Pieces = explode("\n", $String);
00373
00374 # for each line in string
00375 $MaxLen = 0;
00376 for ($Index = 0; $Index < count($Pieces); $Index++)
00377 {
00378 # save length if longer than current max
00379 if (strlen($Pieces[$Index]) > $MaxLen)
00380 {
00381 $MaxLen = strlen($Pieces[$Index]);
00382 }
00383 }
00384
00385 # return length of longest segment to caller
00386 return $MaxLen;
00387 }
00388
00389 function PrintOptionListFromDB($DB, $Table, $Condition, $SortBy, $ResultVar, $ValueQuery, $LabelQuery, $SelectedValue, $Size = 1, $SubmitOnChange = "", $PrintEvenIfEmpty = 0)
00390 {
00391 # set up condition and sorting parameters
00392 if ($Condition != "") { $Condition = "WHERE ".$Condition; }
00393 if ($SortBy != "") { $SortBy = "ORDER BY ".$SortBy; }
00394
00395 # grab records to be listed from database
00396 $QueryString = sprintf("SELECT * FROM %s %s %s",
00397 $Table, $Condition, $SortBy);
00398 $DB->Query($QueryString);
00399
00400 # if records were found
00401 if ($DB->NumRowsSelected() > 0)
00402 {
00403 # build array of items
00404 while ($Row = $DB->FetchRow())
00405 {
00406 $Items[$Row[$ValueQuery]] = $Row[$LabelQuery];
00407 }
00408
00409 # sort array if not already sorted
00410 if ($SortBy == "") { asort($Items); }
00411 }
00412
00413 # print option list
00414 PrintOptionList($ResultVar, $Items, $SelectedValue, $SubmitOnChange, $Size, $PrintEvenIfEmpty);
00415 }
00416
00417
00418 ?>