/[dtapublic]/to_be_filed/webprojs/fboprime/sw/phplib/rscsx.inc
ViewVC logotype

Contents of /to_be_filed/webprojs/fboprime/sw/phplib/rscsx.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 31 - (show annotations) (download)
Sat Oct 8 18:44:20 2016 UTC (7 years, 5 months ago) by dashley
File size: 97566 byte(s)
Initial commit.
1 <?php
2 //$Header: /home/dashley/cvsrep/e3ft_gpl01/e3ft_gpl01/webprojs/fboprime/sw/phplib/rscsx.inc,v 1.16 2006/11/05 01:07:30 dashley Exp $
3 //--------------------------------------------------------------------------------------------------------------
4 //rscsx.inc--FboPrime Database rscs Table Manipulation Functions Not Required by Day View Scheduler
5 //Copyright (C) 2006 David T. Ashley
6 //
7 //This program is free software; you can redistribute it and/or
8 //modify it under the terms of the GNU General Public License
9 //as published by the Free Software Foundation; either version 2
10 //of the License, or (at your option) any later version.
11 //
12 //This program is distributed in the hope that it will be useful,
13 //but WITHOUT ANY WARRANTY; without even the implied warranty of
14 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 //GNU General Public License for more details.
16 //
17 //You should have received a copy of the GNU General Public License
18 //along with this program; if not, write to the Free Software
19 //Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 //********************************************************************************
21 //
22 //-------------------------------------------------------------------------------------------------
23 //Copyright 2006 David T. Ashley
24 //-------------------------------------------------------------------------------------------------
25 //This source code and any program in which it is compiled/used is provided under the GNU GENERAL
26 //PUBLIC LICENSE, Version 3, full license text below.
27 //-------------------------------------------------------------------------------------------------
28 // GNU GENERAL PUBLIC LICENSE
29 // Version 3, 29 June 2007
30 //
31 // Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
32 // Everyone is permitted to copy and distribute verbatim copies
33 // of this license document, but changing it is not allowed.
34 //
35 // Preamble
36 //
37 // The GNU General Public License is a free, copyleft license for
38 //software and other kinds of works.
39 //
40 // The licenses for most software and other practical works are designed
41 //to take away your freedom to share and change the works. By contrast,
42 //the GNU General Public License is intended to guarantee your freedom to
43 //share and change all versions of a program--to make sure it remains free
44 //software for all its users. We, the Free Software Foundation, use the
45 //GNU General Public License for most of our software; it applies also to
46 //any other work released this way by its authors. You can apply it to
47 //your programs, too.
48 //
49 // When we speak of free software, we are referring to freedom, not
50 //price. Our General Public Licenses are designed to make sure that you
51 //have the freedom to distribute copies of free software (and charge for
52 //them if you wish), that you receive source code or can get it if you
53 //want it, that you can change the software or use pieces of it in new
54 //free programs, and that you know you can do these things.
55 //
56 // To protect your rights, we need to prevent others from denying you
57 //these rights or asking you to surrender the rights. Therefore, you have
58 //certain responsibilities if you distribute copies of the software, or if
59 //you modify it: responsibilities to respect the freedom of others.
60 //
61 // For example, if you distribute copies of such a program, whether
62 //gratis or for a fee, you must pass on to the recipients the same
63 //freedoms that you received. You must make sure that they, too, receive
64 //or can get the source code. And you must show them these terms so they
65 //know their rights.
66 //
67 // Developers that use the GNU GPL protect your rights with two steps:
68 //(1) assert copyright on the software, and (2) offer you this License
69 //giving you legal permission to copy, distribute and/or modify it.
70 //
71 // For the developers' and authors' protection, the GPL clearly explains
72 //that there is no warranty for this free software. For both users' and
73 //authors' sake, the GPL requires that modified versions be marked as
74 //changed, so that their problems will not be attributed erroneously to
75 //authors of previous versions.
76 //
77 // Some devices are designed to deny users access to install or run
78 //modified versions of the software inside them, although the manufacturer
79 //can do so. This is fundamentally incompatible with the aim of
80 //protecting users' freedom to change the software. The systematic
81 //pattern of such abuse occurs in the area of products for individuals to
82 //use, which is precisely where it is most unacceptable. Therefore, we
83 //have designed this version of the GPL to prohibit the practice for those
84 //products. If such problems arise substantially in other domains, we
85 //stand ready to extend this provision to those domains in future versions
86 //of the GPL, as needed to protect the freedom of users.
87 //
88 // Finally, every program is threatened constantly by software patents.
89 //States should not allow patents to restrict development and use of
90 //software on general-purpose computers, but in those that do, we wish to
91 //avoid the special danger that patents applied to a free program could
92 //make it effectively proprietary. To prevent this, the GPL assures that
93 //patents cannot be used to render the program non-free.
94 //
95 // The precise terms and conditions for copying, distribution and
96 //modification follow.
97 //
98 // TERMS AND CONDITIONS
99 //
100 // 0. Definitions.
101 //
102 // "This License" refers to version 3 of the GNU General Public License.
103 //
104 // "Copyright" also means copyright-like laws that apply to other kinds of
105 //works, such as semiconductor masks.
106 //
107 // "The Program" refers to any copyrightable work licensed under this
108 //License. Each licensee is addressed as "you". "Licensees" and
109 //"recipients" may be individuals or organizations.
110 //
111 // To "modify" a work means to copy from or adapt all or part of the work
112 //in a fashion requiring copyright permission, other than the making of an
113 //exact copy. The resulting work is called a "modified version" of the
114 //earlier work or a work "based on" the earlier work.
115 //
116 // A "covered work" means either the unmodified Program or a work based
117 //on the Program.
118 //
119 // To "propagate" a work means to do anything with it that, without
120 //permission, would make you directly or secondarily liable for
121 //infringement under applicable copyright law, except executing it on a
122 //computer or modifying a private copy. Propagation includes copying,
123 //distribution (with or without modification), making available to the
124 //public, and in some countries other activities as well.
125 //
126 // To "convey" a work means any kind of propagation that enables other
127 //parties to make or receive copies. Mere interaction with a user through
128 //a computer network, with no transfer of a copy, is not conveying.
129 //
130 // An interactive user interface displays "Appropriate Legal Notices"
131 //to the extent that it includes a convenient and prominently visible
132 //feature that (1) displays an appropriate copyright notice, and (2)
133 //tells the user that there is no warranty for the work (except to the
134 //extent that warranties are provided), that licensees may convey the
135 //work under this License, and how to view a copy of this License. If
136 //the interface presents a list of user commands or options, such as a
137 //menu, a prominent item in the list meets this criterion.
138 //
139 // 1. Source Code.
140 //
141 // The "source code" for a work means the preferred form of the work
142 //for making modifications to it. "Object code" means any non-source
143 //form of a work.
144 //
145 // A "Standard Interface" means an interface that either is an official
146 //standard defined by a recognized standards body, or, in the case of
147 //interfaces specified for a particular programming language, one that
148 //is widely used among developers working in that language.
149 //
150 // The "System Libraries" of an executable work include anything, other
151 //than the work as a whole, that (a) is included in the normal form of
152 //packaging a Major Component, but which is not part of that Major
153 //Component, and (b) serves only to enable use of the work with that
154 //Major Component, or to implement a Standard Interface for which an
155 //implementation is available to the public in source code form. A
156 //"Major Component", in this context, means a major essential component
157 //(kernel, window system, and so on) of the specific operating system
158 //(if any) on which the executable work runs, or a compiler used to
159 //produce the work, or an object code interpreter used to run it.
160 //
161 // The "Corresponding Source" for a work in object code form means all
162 //the source code needed to generate, install, and (for an executable
163 //work) run the object code and to modify the work, including scripts to
164 //control those activities. However, it does not include the work's
165 //System Libraries, or general-purpose tools or generally available free
166 //programs which are used unmodified in performing those activities but
167 //which are not part of the work. For example, Corresponding Source
168 //includes interface definition files associated with source files for
169 //the work, and the source code for shared libraries and dynamically
170 //linked subprograms that the work is specifically designed to require,
171 //such as by intimate data communication or control flow between those
172 //subprograms and other parts of the work.
173 //
174 // The Corresponding Source need not include anything that users
175 //can regenerate automatically from other parts of the Corresponding
176 //Source.
177 //
178 // The Corresponding Source for a work in source code form is that
179 //same work.
180 //
181 // 2. Basic Permissions.
182 //
183 // All rights granted under this License are granted for the term of
184 //copyright on the Program, and are irrevocable provided the stated
185 //conditions are met. This License explicitly affirms your unlimited
186 //permission to run the unmodified Program. The output from running a
187 //covered work is covered by this License only if the output, given its
188 //content, constitutes a covered work. This License acknowledges your
189 //rights of fair use or other equivalent, as provided by copyright law.
190 //
191 // You may make, run and propagate covered works that you do not
192 //convey, without conditions so long as your license otherwise remains
193 //in force. You may convey covered works to others for the sole purpose
194 //of having them make modifications exclusively for you, or provide you
195 //with facilities for running those works, provided that you comply with
196 //the terms of this License in conveying all material for which you do
197 //not control copyright. Those thus making or running the covered works
198 //for you must do so exclusively on your behalf, under your direction
199 //and control, on terms that prohibit them from making any copies of
200 //your copyrighted material outside their relationship with you.
201 //
202 // Conveying under any other circumstances is permitted solely under
203 //the conditions stated below. Sublicensing is not allowed; section 10
204 //makes it unnecessary.
205 //
206 // 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
207 //
208 // No covered work shall be deemed part of an effective technological
209 //measure under any applicable law fulfilling obligations under article
210 //11 of the WIPO copyright treaty adopted on 20 December 1996, or
211 //similar laws prohibiting or restricting circumvention of such
212 //measures.
213 //
214 // When you convey a covered work, you waive any legal power to forbid
215 //circumvention of technological measures to the extent such circumvention
216 //is effected by exercising rights under this License with respect to
217 //the covered work, and you disclaim any intention to limit operation or
218 //modification of the work as a means of enforcing, against the work's
219 //users, your or third parties' legal rights to forbid circumvention of
220 //technological measures.
221 //
222 // 4. Conveying Verbatim Copies.
223 //
224 // You may convey verbatim copies of the Program's source code as you
225 //receive it, in any medium, provided that you conspicuously and
226 //appropriately publish on each copy an appropriate copyright notice;
227 //keep intact all notices stating that this License and any
228 //non-permissive terms added in accord with section 7 apply to the code;
229 //keep intact all notices of the absence of any warranty; and give all
230 //recipients a copy of this License along with the Program.
231 //
232 // You may charge any price or no price for each copy that you convey,
233 //and you may offer support or warranty protection for a fee.
234 //
235 // 5. Conveying Modified Source Versions.
236 //
237 // You may convey a work based on the Program, or the modifications to
238 //produce it from the Program, in the form of source code under the
239 //terms of section 4, provided that you also meet all of these conditions:
240 //
241 // a) The work must carry prominent notices stating that you modified
242 // it, and giving a relevant date.
243 //
244 // b) The work must carry prominent notices stating that it is
245 // released under this License and any conditions added under section
246 // 7. This requirement modifies the requirement in section 4 to
247 // "keep intact all notices".
248 //
249 // c) You must license the entire work, as a whole, under this
250 // License to anyone who comes into possession of a copy. This
251 // License will therefore apply, along with any applicable section 7
252 // additional terms, to the whole of the work, and all its parts,
253 // regardless of how they are packaged. This License gives no
254 // permission to license the work in any other way, but it does not
255 // invalidate such permission if you have separately received it.
256 //
257 // d) If the work has interactive user interfaces, each must display
258 // Appropriate Legal Notices; however, if the Program has interactive
259 // interfaces that do not display Appropriate Legal Notices, your
260 // work need not make them do so.
261 //
262 // A compilation of a covered work with other separate and independent
263 //works, which are not by their nature extensions of the covered work,
264 //and which are not combined with it such as to form a larger program,
265 //in or on a volume of a storage or distribution medium, is called an
266 //"aggregate" if the compilation and its resulting copyright are not
267 //used to limit the access or legal rights of the compilation's users
268 //beyond what the individual works permit. Inclusion of a covered work
269 //in an aggregate does not cause this License to apply to the other
270 //parts of the aggregate.
271 //
272 // 6. Conveying Non-Source Forms.
273 //
274 // You may convey a covered work in object code form under the terms
275 //of sections 4 and 5, provided that you also convey the
276 //machine-readable Corresponding Source under the terms of this License,
277 //in one of these ways:
278 //
279 // a) Convey the object code in, or embodied in, a physical product
280 // (including a physical distribution medium), accompanied by the
281 // Corresponding Source fixed on a durable physical medium
282 // customarily used for software interchange.
283 //
284 // b) Convey the object code in, or embodied in, a physical product
285 // (including a physical distribution medium), accompanied by a
286 // written offer, valid for at least three years and valid for as
287 // long as you offer spare parts or customer support for that product
288 // model, to give anyone who possesses the object code either (1) a
289 // copy of the Corresponding Source for all the software in the
290 // product that is covered by this License, on a durable physical
291 // medium customarily used for software interchange, for a price no
292 // more than your reasonable cost of physically performing this
293 // conveying of source, or (2) access to copy the
294 // Corresponding Source from a network server at no charge.
295 //
296 // c) Convey individual copies of the object code with a copy of the
297 // written offer to provide the Corresponding Source. This
298 // alternative is allowed only occasionally and noncommercially, and
299 // only if you received the object code with such an offer, in accord
300 // with subsection 6b.
301 //
302 // d) Convey the object code by offering access from a designated
303 // place (gratis or for a charge), and offer equivalent access to the
304 // Corresponding Source in the same way through the same place at no
305 // further charge. You need not require recipients to copy the
306 // Corresponding Source along with the object code. If the place to
307 // copy the object code is a network server, the Corresponding Source
308 // may be on a different server (operated by you or a third party)
309 // that supports equivalent copying facilities, provided you maintain
310 // clear directions next to the object code saying where to find the
311 // Corresponding Source. Regardless of what server hosts the
312 // Corresponding Source, you remain obligated to ensure that it is
313 // available for as long as needed to satisfy these requirements.
314 //
315 // e) Convey the object code using peer-to-peer transmission, provided
316 // you inform other peers where the object code and Corresponding
317 // Source of the work are being offered to the general public at no
318 // charge under subsection 6d.
319 //
320 // A separable portion of the object code, whose source code is excluded
321 //from the Corresponding Source as a System Library, need not be
322 //included in conveying the object code work.
323 //
324 // A "User Product" is either (1) a "consumer product", which means any
325 //tangible personal property which is normally used for personal, family,
326 //or household purposes, or (2) anything designed or sold for incorporation
327 //into a dwelling. In determining whether a product is a consumer product,
328 //doubtful cases shall be resolved in favor of coverage. For a particular
329 //product received by a particular user, "normally used" refers to a
330 //typical or common use of that class of product, regardless of the status
331 //of the particular user or of the way in which the particular user
332 //actually uses, or expects or is expected to use, the product. A product
333 //is a consumer product regardless of whether the product has substantial
334 //commercial, industrial or non-consumer uses, unless such uses represent
335 //the only significant mode of use of the product.
336 //
337 // "Installation Information" for a User Product means any methods,
338 //procedures, authorization keys, or other information required to install
339 //and execute modified versions of a covered work in that User Product from
340 //a modified version of its Corresponding Source. The information must
341 //suffice to ensure that the continued functioning of the modified object
342 //code is in no case prevented or interfered with solely because
343 //modification has been made.
344 //
345 // If you convey an object code work under this section in, or with, or
346 //specifically for use in, a User Product, and the conveying occurs as
347 //part of a transaction in which the right of possession and use of the
348 //User Product is transferred to the recipient in perpetuity or for a
349 //fixed term (regardless of how the transaction is characterized), the
350 //Corresponding Source conveyed under this section must be accompanied
351 //by the Installation Information. But this requirement does not apply
352 //if neither you nor any third party retains the ability to install
353 //modified object code on the User Product (for example, the work has
354 //been installed in ROM).
355 //
356 // The requirement to provide Installation Information does not include a
357 //requirement to continue to provide support service, warranty, or updates
358 //for a work that has been modified or installed by the recipient, or for
359 //the User Product in which it has been modified or installed. Access to a
360 //network may be denied when the modification itself materially and
361 //adversely affects the operation of the network or violates the rules and
362 //protocols for communication across the network.
363 //
364 // Corresponding Source conveyed, and Installation Information provided,
365 //in accord with this section must be in a format that is publicly
366 //documented (and with an implementation available to the public in
367 //source code form), and must require no special password or key for
368 //unpacking, reading or copying.
369 //
370 // 7. Additional Terms.
371 //
372 // "Additional permissions" are terms that supplement the terms of this
373 //License by making exceptions from one or more of its conditions.
374 //Additional permissions that are applicable to the entire Program shall
375 //be treated as though they were included in this License, to the extent
376 //that they are valid under applicable law. If additional permissions
377 //apply only to part of the Program, that part may be used separately
378 //under those permissions, but the entire Program remains governed by
379 //this License without regard to the additional permissions.
380 //
381 // When you convey a copy of a covered work, you may at your option
382 //remove any additional permissions from that copy, or from any part of
383 //it. (Additional permissions may be written to require their own
384 //removal in certain cases when you modify the work.) You may place
385 //additional permissions on material, added by you to a covered work,
386 //for which you have or can give appropriate copyright permission.
387 //
388 // Notwithstanding any other provision of this License, for material you
389 //add to a covered work, you may (if authorized by the copyright holders of
390 //that material) supplement the terms of this License with terms:
391 //
392 // a) Disclaiming warranty or limiting liability differently from the
393 // terms of sections 15 and 16 of this License; or
394 //
395 // b) Requiring preservation of specified reasonable legal notices or
396 // author attributions in that material or in the Appropriate Legal
397 // Notices displayed by works containing it; or
398 //
399 // c) Prohibiting misrepresentation of the origin of that material, or
400 // requiring that modified versions of such material be marked in
401 // reasonable ways as different from the original version; or
402 //
403 // d) Limiting the use for publicity purposes of names of licensors or
404 // authors of the material; or
405 //
406 // e) Declining to grant rights under trademark law for use of some
407 // trade names, trademarks, or service marks; or
408 //
409 // f) Requiring indemnification of licensors and authors of that
410 // material by anyone who conveys the material (or modified versions of
411 // it) with contractual assumptions of liability to the recipient, for
412 // any liability that these contractual assumptions directly impose on
413 // those licensors and authors.
414 //
415 // All other non-permissive additional terms are considered "further
416 //restrictions" within the meaning of section 10. If the Program as you
417 //received it, or any part of it, contains a notice stating that it is
418 //governed by this License along with a term that is a further
419 //restriction, you may remove that term. If a license document contains
420 //a further restriction but permits relicensing or conveying under this
421 //License, you may add to a covered work material governed by the terms
422 //of that license document, provided that the further restriction does
423 //not survive such relicensing or conveying.
424 //
425 // If you add terms to a covered work in accord with this section, you
426 //must place, in the relevant source files, a statement of the
427 //additional terms that apply to those files, or a notice indicating
428 //where to find the applicable terms.
429 //
430 // Additional terms, permissive or non-permissive, may be stated in the
431 //form of a separately written license, or stated as exceptions;
432 //the above requirements apply either way.
433 //
434 // 8. Termination.
435 //
436 // You may not propagate or modify a covered work except as expressly
437 //provided under this License. Any attempt otherwise to propagate or
438 //modify it is void, and will automatically terminate your rights under
439 //this License (including any patent licenses granted under the third
440 //paragraph of section 11).
441 //
442 // However, if you cease all violation of this License, then your
443 //license from a particular copyright holder is reinstated (a)
444 //provisionally, unless and until the copyright holder explicitly and
445 //finally terminates your license, and (b) permanently, if the copyright
446 //holder fails to notify you of the violation by some reasonable means
447 //prior to 60 days after the cessation.
448 //
449 // Moreover, your license from a particular copyright holder is
450 //reinstated permanently if the copyright holder notifies you of the
451 //violation by some reasonable means, this is the first time you have
452 //received notice of violation of this License (for any work) from that
453 //copyright holder, and you cure the violation prior to 30 days after
454 //your receipt of the notice.
455 //
456 // Termination of your rights under this section does not terminate the
457 //licenses of parties who have received copies or rights from you under
458 //this License. If your rights have been terminated and not permanently
459 //reinstated, you do not qualify to receive new licenses for the same
460 //material under section 10.
461 //
462 // 9. Acceptance Not Required for Having Copies.
463 //
464 // You are not required to accept this License in order to receive or
465 //run a copy of the Program. Ancillary propagation of a covered work
466 //occurring solely as a consequence of using peer-to-peer transmission
467 //to receive a copy likewise does not require acceptance. However,
468 //nothing other than this License grants you permission to propagate or
469 //modify any covered work. These actions infringe copyright if you do
470 //not accept this License. Therefore, by modifying or propagating a
471 //covered work, you indicate your acceptance of this License to do so.
472 //
473 // 10. Automatic Licensing of Downstream Recipients.
474 //
475 // Each time you convey a covered work, the recipient automatically
476 //receives a license from the original licensors, to run, modify and
477 //propagate that work, subject to this License. You are not responsible
478 //for enforcing compliance by third parties with this License.
479 //
480 // An "entity transaction" is a transaction transferring control of an
481 //organization, or substantially all assets of one, or subdividing an
482 //organization, or merging organizations. If propagation of a covered
483 //work results from an entity transaction, each party to that
484 //transaction who receives a copy of the work also receives whatever
485 //licenses to the work the party's predecessor in interest had or could
486 //give under the previous paragraph, plus a right to possession of the
487 //Corresponding Source of the work from the predecessor in interest, if
488 //the predecessor has it or can get it with reasonable efforts.
489 //
490 // You may not impose any further restrictions on the exercise of the
491 //rights granted or affirmed under this License. For example, you may
492 //not impose a license fee, royalty, or other charge for exercise of
493 //rights granted under this License, and you may not initiate litigation
494 //(including a cross-claim or counterclaim in a lawsuit) alleging that
495 //any patent claim is infringed by making, using, selling, offering for
496 //sale, or importing the Program or any portion of it.
497 //
498 // 11. Patents.
499 //
500 // A "contributor" is a copyright holder who authorizes use under this
501 //License of the Program or a work on which the Program is based. The
502 //work thus licensed is called the contributor's "contributor version".
503 //
504 // A contributor's "essential patent claims" are all patent claims
505 //owned or controlled by the contributor, whether already acquired or
506 //hereafter acquired, that would be infringed by some manner, permitted
507 //by this License, of making, using, or selling its contributor version,
508 //but do not include claims that would be infringed only as a
509 //consequence of further modification of the contributor version. For
510 //purposes of this definition, "control" includes the right to grant
511 //patent sublicenses in a manner consistent with the requirements of
512 //this License.
513 //
514 // Each contributor grants you a non-exclusive, worldwide, royalty-free
515 //patent license under the contributor's essential patent claims, to
516 //make, use, sell, offer for sale, import and otherwise run, modify and
517 //propagate the contents of its contributor version.
518 //
519 // In the following three paragraphs, a "patent license" is any express
520 //agreement or commitment, however denominated, not to enforce a patent
521 //(such as an express permission to practice a patent or covenant not to
522 //sue for patent infringement). To "grant" such a patent license to a
523 //party means to make such an agreement or commitment not to enforce a
524 //patent against the party.
525 //
526 // If you convey a covered work, knowingly relying on a patent license,
527 //and the Corresponding Source of the work is not available for anyone
528 //to copy, free of charge and under the terms of this License, through a
529 //publicly available network server or other readily accessible means,
530 //then you must either (1) cause the Corresponding Source to be so
531 //available, or (2) arrange to deprive yourself of the benefit of the
532 //patent license for this particular work, or (3) arrange, in a manner
533 //consistent with the requirements of this License, to extend the patent
534 //license to downstream recipients. "Knowingly relying" means you have
535 //actual knowledge that, but for the patent license, your conveying the
536 //covered work in a country, or your recipient's use of the covered work
537 //in a country, would infringe one or more identifiable patents in that
538 //country that you have reason to believe are valid.
539 //
540 // If, pursuant to or in connection with a single transaction or
541 //arrangement, you convey, or propagate by procuring conveyance of, a
542 //covered work, and grant a patent license to some of the parties
543 //receiving the covered work authorizing them to use, propagate, modify
544 //or convey a specific copy of the covered work, then the patent license
545 //you grant is automatically extended to all recipients of the covered
546 //work and works based on it.
547 //
548 // A patent license is "discriminatory" if it does not include within
549 //the scope of its coverage, prohibits the exercise of, or is
550 //conditioned on the non-exercise of one or more of the rights that are
551 //specifically granted under this License. You may not convey a covered
552 //work if you are a party to an arrangement with a third party that is
553 //in the business of distributing software, under which you make payment
554 //to the third party based on the extent of your activity of conveying
555 //the work, and under which the third party grants, to any of the
556 //parties who would receive the covered work from you, a discriminatory
557 //patent license (a) in connection with copies of the covered work
558 //conveyed by you (or copies made from those copies), or (b) primarily
559 //for and in connection with specific products or compilations that
560 //contain the covered work, unless you entered into that arrangement,
561 //or that patent license was granted, prior to 28 March 2007.
562 //
563 // Nothing in this License shall be construed as excluding or limiting
564 //any implied license or other defenses to infringement that may
565 //otherwise be available to you under applicable patent law.
566 //
567 // 12. No Surrender of Others' Freedom.
568 //
569 // If conditions are imposed on you (whether by court order, agreement or
570 //otherwise) that contradict the conditions of this License, they do not
571 //excuse you from the conditions of this License. If you cannot convey a
572 //covered work so as to satisfy simultaneously your obligations under this
573 //License and any other pertinent obligations, then as a consequence you may
574 //not convey it at all. For example, if you agree to terms that obligate you
575 //to collect a royalty for further conveying from those to whom you convey
576 //the Program, the only way you could satisfy both those terms and this
577 //License would be to refrain entirely from conveying the Program.
578 //
579 // 13. Use with the GNU Affero General Public License.
580 //
581 // Notwithstanding any other provision of this License, you have
582 //permission to link or combine any covered work with a work licensed
583 //under version 3 of the GNU Affero General Public License into a single
584 //combined work, and to convey the resulting work. The terms of this
585 //License will continue to apply to the part which is the covered work,
586 //but the special requirements of the GNU Affero General Public License,
587 //section 13, concerning interaction through a network will apply to the
588 //combination as such.
589 //
590 // 14. Revised Versions of this License.
591 //
592 // The Free Software Foundation may publish revised and/or new versions of
593 //the GNU General Public License from time to time. Such new versions will
594 //be similar in spirit to the present version, but may differ in detail to
595 //address new problems or concerns.
596 //
597 // Each version is given a distinguishing version number. If the
598 //Program specifies that a certain numbered version of the GNU General
599 //Public License "or any later version" applies to it, you have the
600 //option of following the terms and conditions either of that numbered
601 //version or of any later version published by the Free Software
602 //Foundation. If the Program does not specify a version number of the
603 //GNU General Public License, you may choose any version ever published
604 //by the Free Software Foundation.
605 //
606 // If the Program specifies that a proxy can decide which future
607 //versions of the GNU General Public License can be used, that proxy's
608 //public statement of acceptance of a version permanently authorizes you
609 //to choose that version for the Program.
610 //
611 // Later license versions may give you additional or different
612 //permissions. However, no additional obligations are imposed on any
613 //author or copyright holder as a result of your choosing to follow a
614 //later version.
615 //
616 // 15. Disclaimer of Warranty.
617 //
618 // THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
619 //APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
620 //HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
621 //OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
622 //THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
623 //PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
624 //IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
625 //ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
626 //
627 // 16. Limitation of Liability.
628 //
629 // IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
630 //WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
631 //THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
632 //GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
633 //USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
634 //DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
635 //PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
636 //EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
637 //SUCH DAMAGES.
638 //
639 // 17. Interpretation of Sections 15 and 16.
640 //
641 // If the disclaimer of warranty and limitation of liability provided
642 //above cannot be given local legal effect according to their terms,
643 //reviewing courts shall apply local law that most closely approximates
644 //an absolute waiver of all civil liability in connection with the
645 //Program, unless a warranty or assumption of liability accompanies a
646 //copy of the Program in return for a fee.
647 //
648 // END OF TERMS AND CONDITIONS
649 //
650 // How to Apply These Terms to Your New Programs
651 //
652 // If you develop a new program, and you want it to be of the greatest
653 //possible use to the public, the best way to achieve this is to make it
654 //free software which everyone can redistribute and change under these terms.
655 //
656 // To do so, attach the following notices to the program. It is safest
657 //to attach them to the start of each source file to most effectively
658 //state the exclusion of warranty; and each file should have at least
659 //the "copyright" line and a pointer to where the full notice is found.
660 //
661 // <one line to give the program's name and a brief idea of what it does.>
662 // Copyright (C) <year> <name of author>
663 //
664 // This program is free software: you can redistribute it and/or modify
665 // it under the terms of the GNU General Public License as published by
666 // the Free Software Foundation, either version 3 of the License, or
667 // (at your option) any later version.
668 //
669 // This program is distributed in the hope that it will be useful,
670 // but WITHOUT ANY WARRANTY; without even the implied warranty of
671 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
672 // GNU General Public License for more details.
673 //
674 // You should have received a copy of the GNU General Public License
675 // along with this program. If not, see <http://www.gnu.org/licenses/>.
676 //
677 //Also add information on how to contact you by electronic and paper mail.
678 //
679 // If the program does terminal interaction, make it output a short
680 //notice like this when it starts in an interactive mode:
681 //
682 // <program> Copyright (C) <year> <name of author>
683 // This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
684 // This is free software, and you are welcome to redistribute it
685 // under certain conditions; type `show c' for details.
686 //
687 //The hypothetical commands `show w' and `show c' should show the appropriate
688 //parts of the General Public License. Of course, your program's commands
689 //might be different; for a GUI interface, you would use an "about box".
690 //
691 // You should also get your employer (if you work as a programmer) or school,
692 //if any, to sign a "copyright disclaimer" for the program, if necessary.
693 //For more information on this, and how to apply and follow the GNU GPL, see
694 //<http://www.gnu.org/licenses/>.
695 //
696 // The GNU General Public License does not permit incorporating your program
697 //into proprietary programs. If your program is a subroutine library, you
698 //may consider it more useful to permit linking proprietary applications with
699 //the library. If this is what you want to do, use the GNU Lesser General
700 //Public License instead of this License. But first, please read
701 //<http://www.gnu.org/philosophy/why-not-lgpl.html>.
702 //-------------------------------------------------------------------------------------------------
703 require_once("cslx.inc");
704 require_once("datefunc.inc");
705 require_once("db.inc");
706 require_once("global.inc");
707 require_once("rscs.inc");
708 require_once("sguid.inc");
709 //
710 //--------------------------------------------------------------------------------------------------------------
711 //The set of characters allowed in the initials field.
712 //
713 define("RSCS_INITIALS_ALLOWEDCHARS", " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:-_.,;'0123456789");
714 define("RSCS_SHORTDESC_ALLOWEDCHARS", " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:-_.,;'0123456789");
715 define("RSCS_LONGDESC_ALLOWEDCHARS", " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:-_.,;'0123456789");
716 //
717 //--------------------------------------------------------------------------------------------------------------
718 //Modifies a RSCS record. The record is keyed by the index of the record in.
719 //All errors are tolerated except three:
720 // a)Record does not exist, so can't modify it. No changes made.
721 // b)Editing collision: SGUID shows concurrent editing. In this case, no changes are made.
722 // c)Unknown query failure. Presumably no changes made.
723 //
724 //All error flags are FALSE if no error, TRUE if error.
725 //
726 //If all are FALSE, operation probably succeeded.
727 //
728 function RSCS_modify_record(
729 $record_in,
730 &$record_noexist_error_out,
731 &$editing_collision_error_out,
732 &$query_failure_error_out
733 )
734 {
735 global $GLOBAL_dbhandle;
736 global $GLOBAL_dblocked;
737
738 //Assume by default no errors.
739 $record_noexist_error_out = FALSE;
740 $editing_collision_error_out = FALSE;
741 $query_failure_error_out = FALSE;
742
743 //Grab a new SGUID. This will be used for the mod stamp in the event we can commit
744 //the changes.
745 $new_sguid = SGUID_sguid();
746
747 //Lock the database using the recursive critical section method (discussed in the
748 //manual). This is necessary because the test for presence and the modification have to
749 //be combined atomically.
750 //
751 $db_was_locked = $GLOBAL_dblocked;
752 if (! $GLOBAL_dblocked)
753 {
754 DB_db_lock();
755 $GLOBAL_dblocked = TRUE;
756 }
757 //
758 //Try to yank the record with the specified idx.
759 $existing_record = RSCS_retrieve_by_idx($record_in["idx"]);
760
761 //If the record doesn't already exist, we can't go forward. Error out.
762 if ($existing_record === FALSE)
763 {
764 //Unlock the database (if it was locked) using the recursive critical section
765 //method.
766 if (! $db_was_locked)
767 {
768 DB_db_unlock();
769 $GLOBAL_dblocked = FALSE;
770 }
771
772 $record_noexist_error_out = TRUE;
773
774 return; //Back to caller.
775 }
776
777 //Test for an editing collision.
778 if ($existing_record["crmodsguid"] != $record_in["crmodsguid"])
779 {
780 //Unlock the database (if it was locked) using the recursive critical section
781 //method.
782 if (! $db_was_locked)
783 {
784 DB_db_unlock();
785 $GLOBAL_dblocked = FALSE;
786 }
787
788 $editing_collision_error_out = TRUE;
789
790 return; //Back to caller.
791 }
792
793 //Build the query string with each successive parameter.
794 //
795 //type
796 //------
797 if (! isset($record_in["type"]))
798 $pushval = RSCS_TYPE_AIRCRAFT;
799 else
800 $pushval = $record_in["type"];
801 $query_string = "UPDATE rscs SET type=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"";
802 //
803 //status
804 //------
805 if (! isset($record_in["status"]))
806 $pushval = RSCS_STATUS_ONLINE;
807 else
808 $pushval = $record_in["status"];
809 $query_string .= (", status=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
810 //
811 //disporder
812 //---------
813 if (! isset($record_in["disporder"]))
814 $pushval = 0;
815 else
816 $pushval = $record_in["disporder"];
817 $query_string .= (", disporder=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
818 //
819 //longdesc
820 //--------
821 if (! isset($record_in["longdesc"]))
822 $pushval = "";
823 else
824 $pushval = $record_in["longdesc"];
825 $query_string .= (", longdesc=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
826 //
827 //shortdesc
828 //---------
829 if (! isset($record_in["shortdesc"]))
830 $pushval = "";
831 else
832 $pushval = $record_in["shortdesc"];
833 $query_string .= (", shortdesc=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
834 //
835 //initials
836 //--------
837 if (! isset($record_in["initials"]))
838 $pushval = "";
839 else
840 $pushval = $record_in["initials"];
841 $query_string .= (", initials=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
842 //
843 //rstdtime
844 //--------
845 if (! isset($record_in["rstdtime"]))
846 $pushval = "UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU";
847 else
848 $pushval = $record_in["rstdtime"];
849 $query_string .= (", rstdtime=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
850 //
851 //schedaheadhrs
852 //-------------
853 if (! isset($record_in["schedaheadhrs"]))
854 $pushval = (int) 0;
855 else
856 $pushval = $record_in["schedaheadhrs"];
857 $query_string .= (", schedaheadhrs=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
858 //
859 //usercorres
860 //----------
861 if (! isset($record_in["usercorres"]))
862 $pushval = (int) 0;
863 else
864 $pushval = $record_in["usercorres"];
865 $query_string .= (", usercorres=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
866 //
867 //crmodsguid
868 //----------
869 $pushval = $new_sguid;
870 $query_string .= (", crmodsguid=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
871 //
872 //echo " " . $query_string . " ";
873 //
874 //idx qualifier
875 //-------------
876 $pushval = $record_in["idx"];
877 $query_string .= (" WHERE idx=\"" . mysql_real_escape_string ($pushval, $GLOBAL_dbhandle) . "\"");
878
879 //echo "<br>";
880 //print_r($query_string);
881 //echo "<br>";
882
883 //Execute the query to insert the record.
884 $result = mysql_query($query_string, $GLOBAL_dbhandle);
885 //
886 //If the update failed, set the query failure flag.
887 if ($result == FALSE)
888 {
889 $query_failure_error_out = TRUE;
890 }
891
892 //Unlock the database (if it was locked) using the recursive critical section
893 //method.
894 if (! $db_was_locked)
895 {
896 DB_db_unlock();
897 $GLOBAL_dblocked = FALSE;
898 }
899 }
900 //
901 //--------------------------------------------------------------------------------------------------------------
902 //Retrieves an associative array containing full information about the resource whose index is
903 //passed, or FALSE if it can't be located.
904 //
905 function RSCS_retrieve_by_idx($idx)
906 {
907 global $GLOBAL_dbhandle;
908
909 //Form the query string.
910 $query_string = "SELECT * FROM rscs WHERE idx=\""
911 .
912 mysql_real_escape_string($idx, $GLOBAL_dbhandle)
913 .
914 "\"";
915
916 //Execute the query.
917 $result = mysql_query($query_string, $GLOBAL_dbhandle);
918
919 if ($result === FALSE)
920 {
921 //Unknown query failure. Return FALSE to the caller. No need to free,
922 //as this is not a result.
923 $rv = FALSE;
924 }
925 else
926 {
927 //Figure out how many rows in the result.
928 $nrows = mysql_num_rows($result);
929
930 if ($nrows == 0)
931 {
932 //No rows in the result. The query failed to give us a record, but still
933 //we need to free the result set.
934
935 //Free the result.
936 mysql_free_result($result);
937
938 //The caller gets FALSE. No record with that SID.
939 $rv = FALSE;
940 }
941 else
942 {
943 //We have at least one record. Assume just one, because the IDX is supposed
944 //to be unique.
945 $rv = mysql_fetch_assoc($result); //Get the associative record.
946
947 //Free the result.
948 mysql_free_result($result);
949 }
950
951 //Return the value to the caller.
952 return($rv);
953 }
954 }
955 //
956 //--------------------------------------------------------------------------------------------------------------
957 //Retrieves an array containing the indices of all flight instructors in the resources
958 //table that are online, or FALSE if none exist.
959 //
960 function RSCS_get_fi_online_idxs()
961 {
962 global $GLOBAL_dbhandle;
963
964 //Form the query string.
965 $query_string = "SELECT idx FROM rscs WHERE type=\""
966 .
967 mysql_real_escape_string((string)RSCS_TYPE_FLIGHTINSTRUCTOR, $GLOBAL_dbhandle)
968 .
969 "\" AND status=\""
970 .
971 mysql_real_escape_string((string)RSCS_STATUS_ONLINE, $GLOBAL_dbhandle)
972 .
973 "\"";
974
975 //Execute the query.
976 $result = mysql_query($query_string, $GLOBAL_dbhandle);
977
978 if ($result === FALSE)
979 {
980 //Unknown query failure. Return FALSE to the caller. No need to free,
981 //as this is not a result.
982 $rv = FALSE;
983 }
984 else
985 {
986 //Figure out how many rows in the result.
987 $nrows = mysql_num_rows($result);
988
989 if ($nrows == 0)
990 {
991 //No rows in the result. The query failed to give us a record, but still
992 //we need to free the result set.
993
994 //Free the result.
995 mysql_free_result($result);
996
997 //The caller gets FALSE. No records.
998 $rv = FALSE;
999 }
1000 else
1001 {
1002 //We have at least one record. Grab the indices.
1003 //
1004 for ($i=0; $i<$nrows; $i++)
1005 {
1006 $temp = mysql_fetch_assoc($result);
1007 $rv[$i] = $temp["idx"];
1008 }
1009
1010 //Free the result.
1011 mysql_free_result($result);
1012 }
1013
1014 //Return the value to the caller.
1015 return($rv);
1016 }
1017 }
1018 //
1019 //--------------------------------------------------------------------------------------------------------------
1020 //Retrieves an array containing the indices of all aircraft/simulators in the resources
1021 //table that are online, or FALSE if none exist.
1022 //
1023 function RSCS_get_acftsim_online_idxs()
1024 {
1025 global $GLOBAL_dbhandle;
1026
1027 //Form the query string.
1028 $query_string = "SELECT idx FROM rscs WHERE ( type=\""
1029 .
1030 mysql_real_escape_string((string)RSCS_TYPE_AIRCRAFT, $GLOBAL_dbhandle)
1031 .
1032 "\" OR type=\""
1033 .
1034 mysql_real_escape_string((string)RSCS_TYPE_SIMULATOR, $GLOBAL_dbhandle)
1035 .
1036 "\" ) AND status=\""
1037 .
1038 mysql_real_escape_string((string)RSCS_STATUS_ONLINE, $GLOBAL_dbhandle)
1039 .
1040 "\"";
1041
1042 //Execute the query.
1043 $result = mysql_query($query_string, $GLOBAL_dbhandle);
1044
1045 if ($result === FALSE)
1046 {
1047 //Unknown query failure. Return FALSE to the caller. No need to free,
1048 //as this is not a result.
1049 $rv = FALSE;
1050 }
1051 else
1052 {
1053 //Figure out how many rows in the result.
1054 $nrows = mysql_num_rows($result);
1055
1056 if ($nrows == 0)
1057 {
1058 //No rows in the result. The query failed to give us a record, but still
1059 //we need to free the result set.
1060
1061 //Free the result.
1062 mysql_free_result($result);
1063
1064 //The caller gets FALSE. No records.
1065 $rv = FALSE;
1066 }
1067 else
1068 {
1069 //We have at least one record. Grab the indices.
1070 //
1071 for ($i=0; $i<$nrows; $i++)
1072 {
1073 $temp = mysql_fetch_assoc($result);
1074 $rv[$i] = $temp["idx"];
1075 }
1076
1077 //Free the result.
1078 mysql_free_result($result);
1079 }
1080
1081 //Return the value to the caller.
1082 return($rv);
1083 }
1084 }
1085 //
1086 //--------------------------------------------------------------------------------------------------------------
1087 //Retrieves an array containing the indices of _all_ resources, ordered by status, sort index, then index
1088 //for display on the resource list page.
1089 //
1090 function RSCS_get_idxs_all_rscslist_a()
1091 {
1092 global $GLOBAL_dbhandle;
1093
1094 //Form the query string.
1095 $query_string = "SELECT idx FROM rscs ORDER BY status DESC, disporder ASC, idx ASC";
1096
1097 //Execute the query.
1098 $result = mysql_query($query_string, $GLOBAL_dbhandle);
1099
1100 if ($result === FALSE)
1101 {
1102 //Unknown query failure. Return FALSE to the caller. No need to free,
1103 //as this is not a result.
1104 $rv = FALSE;
1105 }
1106 else
1107 {
1108 //Figure out how many rows in the result.
1109 $nrows = mysql_num_rows($result);
1110
1111 if ($nrows == 0)
1112 {
1113 //No rows in the result. The query failed to give us a record, but still
1114 //we need to free the result set.
1115
1116 //Free the result.
1117 mysql_free_result($result);
1118
1119 //The caller gets FALSE. No records.
1120 $rv = FALSE;
1121 }
1122 else
1123 {
1124 //We have at least one record. Grab the indices.
1125 //
1126 for ($i=0; $i<$nrows; $i++)
1127 {
1128 $temp = mysql_fetch_assoc($result);
1129 $rv[$i] = $temp["idx"];
1130 }
1131
1132 //Free the result.
1133 mysql_free_result($result);
1134 }
1135
1136 //Return the value to the caller.
1137 return($rv);
1138 }
1139 }
1140 //
1141 //--------------------------------------------------------------------------------------------------------------
1142 //Retrieves an array containing the short description, medium description, database index, status, and
1143 //corresponding user for each entry in the resources table. The array returned is indexed by the database index
1144 //(not sequentially), meaning that some gaps in the indexing may occur.
1145 //
1146 //Returns FALSE if no records.
1147 //
1148 function RSCS_get_key_info_rscslist_a()
1149 {
1150 global $GLOBAL_dbhandle;
1151
1152 //Form the query string.
1153 $query_string = "SELECT idx,type,status,initials,shortdesc,usercorres FROM rscs";
1154
1155 //Execute the query.
1156 $result = mysql_query($query_string, $GLOBAL_dbhandle);
1157
1158 if ($result === FALSE)
1159 {
1160 //Unknown query failure. Return FALSE to the caller. No need to free,
1161 //as this is not a result.
1162 $rv = FALSE;
1163 }
1164 else
1165 {
1166 //Figure out how many rows in the result.
1167 $nrows = mysql_num_rows($result);
1168
1169 if ($nrows == 0)
1170 {
1171 //No rows in the result. The query failed to give us a record, but still
1172 //we need to free the result set.
1173
1174 //Free the result.
1175 mysql_free_result($result);
1176
1177 //The caller gets FALSE. No records.
1178 $rv = FALSE;
1179 }
1180 else
1181 {
1182 //We have at least one record. Grab the data.
1183 //
1184 for ($i=0; $i<$nrows; $i++)
1185 {
1186 $temp = mysql_fetch_assoc($result);
1187 $rv[$temp["idx"]] = $temp;
1188 }
1189
1190 //Free the result.
1191 mysql_free_result($result);
1192 }
1193
1194 //Return the value to the caller.
1195 return($rv);
1196 }
1197 }
1198 //
1199 //--------------------------------------------------------------------------------------------------------------
1200 //Renumbers the disporder fields of the resource table at a fixed interval.
1201 //
1202 function RSCS_renumber_disporder_autointerval()
1203 {
1204 global $GLOBAL_dblocked;
1205 global $GLOBAL_dbhandle;
1206
1207 $renumber_interval = 100; //Interval to use. 100 should be large enough for any practical
1208 //number of resources.
1209
1210 //Lock the database using the recursive locking protocol to ensure that there won't be
1211 //any changes while we are going through tampering with each resource.
1212 //
1213 $db_was_locked = $GLOBAL_dblocked;
1214 if (! $GLOBAL_dblocked)
1215 {
1216 DB_db_lock();
1217 $GLOBAL_dblocked = TRUE;
1218 }
1219 //-----------------------------------------------
1220 //Get the complete set of indices from the resource table. We want to preserve the old
1221 //order, so primary sort key is the display order, but then we have a couple (somewhat
1222 //arbitrary) tiebreakers. We calculate the value FALSE (in place of an array)
1223 //if something goes wrong.
1224 //
1225 //Form the query string.
1226 $query_string = "SELECT idx FROM rscs ORDER BY disporder ASC, status DESC, idx ASC";
1227
1228 //Execute the query.
1229 $result = mysql_query($query_string, $GLOBAL_dbhandle);
1230
1231 if ($result === FALSE)
1232 {
1233 //Unknown query failure. Return FALSE to the caller. No need to free,
1234 //as this is not a result.
1235 $indices = FALSE;
1236 }
1237 else
1238 {
1239 //Figure out how many rows in the result.
1240 $nrows = mysql_num_rows($result);
1241
1242 if ($nrows == 0)
1243 {
1244 //No rows in the result. The query failed to give us a record, but still
1245 //we need to free the result set.
1246
1247 //Free the result.
1248 mysql_free_result($result);
1249
1250 //The caller gets FALSE. No records.
1251 $indices = FALSE;
1252 }
1253 else
1254 {
1255 //We have at least one record. Grab the indices.
1256 //
1257 for ($i=0; $i<$nrows; $i++)
1258 {
1259 $temp = mysql_fetch_assoc($result);
1260 $indices[$i] = $temp["idx"];
1261 }
1262
1263 //Free the result.
1264 mysql_free_result($result);
1265 }
1266 }
1267
1268 //-----------------------------------------------
1269 //If we had success in getting the list of indices (in the order we want),
1270 //loop through them all and give them the right values. We loop backwards to avoid
1271 //changing resource order in the event that the httpd process dies in the middle of this.
1272 //We also need to change the modification sguid to make sure any editing collisions
1273 //will be detected.
1274 //
1275 if ($indices !== FALSE)
1276 {
1277 $n = count($indices);
1278 $number_to_assign = $n * $renumber_interval;
1279
1280 for ($i=0; $i<$n; $i++)
1281 {
1282 $sguid = SGUID_sguid();
1283
1284 $target = $indices[$n-1-$i];
1285
1286 mysql_query("UPDATE rscs SET disporder=\""
1287 .
1288 (string)(($n - $i) * $renumber_interval)
1289 .
1290 "\", crmodsguid=\""
1291 .
1292 $sguid
1293 .
1294 "\" WHERE idx=\""
1295 .
1296 $target
1297 .
1298 "\"", $GLOBAL_dbhandle);
1299 }
1300 }
1301
1302 //-----------------------------------------------
1303 //Unlock the database using the recursive locking protocol.
1304 //
1305 if (! $db_was_locked)
1306 {
1307 DB_db_unlock();
1308 $GLOBAL_dblocked = FALSE;
1309 }
1310 }
1311 //
1312 //--------------------------------------------------------------------------------------------------------------
1313 //Maps from the resource status to a short description for the resource views.
1314 //
1315 function RSCS_status_map_long($status_in)
1316 {
1317 switch($status_in)
1318 {
1319 default:
1320 {
1321 $rv = "Unknown";
1322
1323 break;
1324 }
1325 case RSCS_STATUS_OFFLINE :
1326 {
1327 $rv = "Offline";
1328
1329 break;
1330 }
1331 case RSCS_STATUS_ONLINE :
1332 {
1333 $rv = "Online";
1334
1335 break;
1336 }
1337 }
1338
1339 return($rv);
1340 }
1341 //--------------------------------------------------------------------------------------------------------------
1342 //Maps from the resource status to a short description for the resource views.
1343 //
1344 function RSCS_type_map_long($status_in)
1345 {
1346 switch($status_in)
1347 {
1348 default:
1349 {
1350 $rv = "Unknown";
1351
1352 break;
1353 }
1354 case RSCS_TYPE_AIRCRAFT :
1355 {
1356 $rv = "Aircraft";
1357
1358 break;
1359 }
1360 case RSCS_TYPE_SIMULATOR :
1361 {
1362 $rv = "Simulator";
1363
1364 break;
1365 }
1366 case RSCS_TYPE_FLIGHTINSTRUCTOR :
1367 {
1368 $rv = "Flight Instructor";
1369
1370 break;
1371 }
1372 }
1373
1374 return($rv);
1375 }
1376 //--------------------------------------------------------------------------------------------------------------
1377 //--------------------------------------------------------------------------------------------------------------
1378 //Returns the HTML that should be used to identify the resource index on the EDIT and ADD pages. HTML may
1379 //be marked up with <i> and <b> and includes the trailing colon.
1380 //
1381 function RSCS_idx_id_html_01()
1382 {
1383 return("<i>idx:</i>");
1384 }
1385 //--------------------------------------------------------------------------------------------------------------
1386 //Returns the HTML that should be used to display the resource index on the EDIT and ADD pages.
1387 //
1388 function RSCS_idx_disp_html_01($idx_in)
1389 {
1390 $rv = number_format($idx_in);
1391 return($rv);
1392 }
1393 //--------------------------------------------------------------------------------------------------------------
1394 //Returns the HTML that should be used to identify the resource index description on the EDIT and ADD pages.
1395 //HTML may be marked up with <i>, <b>, and <b>.
1396 //
1397 function RSCS_idx_desc_html_01()
1398 {
1399 $rv = "The <i>idx</i> field is assigned automatically by the database "
1400 . "when a resource is created and may not be modified.";
1401
1402 return($rv);
1403 }
1404 //--------------------------------------------------------------------------------------------------------------
1405 //--------------------------------------------------------------------------------------------------------------
1406 //Returns the HTML that should be used to identify the resource type on the EDIT and ADD pages. HTML may
1407 //be marked up with <i> and <b> and includes the trailing colon.
1408 //
1409 function RSCS_type_id_html_01()
1410 {
1411 return("<i>type:</i>");
1412 }
1413 //--------------------------------------------------------------------------------------------------------------
1414 //Returns the HTML that should be used to display the resource type select control on the EDIT and ADD pages.
1415 //
1416 function RSCS_type_disp_html_01($type_in)
1417 {
1418 //Turn the input into a numeric value. If it can't be turned into a numeric value,
1419 //make it an aircraft.
1420 if (is_numeric($type_in))
1421 {
1422 $type_in = (int)$type_in;
1423 if (
1424 ($type_in != RSCS_TYPE_AIRCRAFT)
1425 &&
1426 ($type_in != RSCS_TYPE_SIMULATOR)
1427 &&
1428 ($type_in != RSCS_TYPE_FLIGHTINSTRUCTOR)
1429 )
1430 {
1431 //This is nothing we recognize. Assume aircraft.
1432 $type_in = (int)RSCS_TYPE_AIRCRAFT;
1433 }
1434 }
1435 else
1436 {
1437 //This is nothing we recognize. Assume aircraft.
1438 $type_in = (int)RSCS_TYPE_AIRCRAFT;
1439 }
1440
1441 //Do the control.
1442 $rv = "<select name=\"type\">";
1443 //--------
1444 $rv .= "<option value=\"" . (string)RSCS_TYPE_AIRCRAFT . "\"";
1445 if ($type_in == RSCS_TYPE_AIRCRAFT)
1446 $rv .= " SELECTED";
1447 $rv .= ">Aircraft";
1448 //--------
1449 $rv .= "<option value=\"" . (string)RSCS_TYPE_SIMULATOR . "\"";
1450 if ($type_in == RSCS_TYPE_SIMULATOR)
1451 $rv .= " SELECTED";
1452 $rv .= ">Simulator";
1453 //--------
1454 $rv .= "<option value=\"" . (string)RSCS_TYPE_FLIGHTINSTRUCTOR . "\"";
1455 if ($type_in == RSCS_TYPE_FLIGHTINSTRUCTOR)
1456 $rv .= " SELECTED";
1457 $rv .= ">Flight Instructor";
1458 //
1459 $rv .= "</SELECT>";
1460
1461 return($rv);
1462 }
1463 //--------------------------------------------------------------------------------------------------------------
1464 //Returns the HTML that should be used to identify the resource index description on the EDIT and ADD pages.
1465 //HTML may be marked up with <i>, <b>, and <b>.
1466 //
1467 function RSCS_type_desc_html_01()
1468 {
1469 $rv = "The <i>type</i> identifies whether the resource is an aircraft, a simulator, "
1470 . "or a flight instructor.";
1471
1472 return($rv);
1473 }
1474 //--------------------------------------------------------------------------------------------------------------
1475 //--------------------------------------------------------------------------------------------------------------
1476 //Returns the HTML that should be used to identify the resource status on the EDIT and ADD pages. HTML may
1477 //be marked up with <i> and <b> and includes the trailing colon.
1478 //
1479 function RSCS_status_id_html_01()
1480 {
1481 return("<i>status:</i>");
1482 }
1483 //--------------------------------------------------------------------------------------------------------------
1484 //Returns the HTML that should be used to display the resource status select control on the EDIT and ADD pages.
1485 //
1486 function RSCS_status_disp_html_01($status_in)
1487 {
1488 //Turn the input into a numeric value. If it can't be turned into a numeric value,
1489 //make it online.
1490 if (is_numeric($status_in))
1491 {
1492 $status_in = (int)$status_in;
1493 if (
1494 ($status_in != RSCS_STATUS_OFFLINE)
1495 &&
1496 ($status_in != RSCS_STATUS_ONLINE)
1497 )
1498 {
1499 //This is nothing we recognize. Assume online.
1500 $status_in = (int)RSCS_STATUS_ONLINE;
1501 }
1502 }
1503 else
1504 {
1505 //This is nothing we recognize. Assume online.
1506 $status_in = (int)RSCS_STATUS_ONLINE;
1507 }
1508
1509 //Do the control.
1510 $rv = "<select name=\"status\">";
1511 //--------
1512 $rv .= "<option value=\"" . (string)RSCS_STATUS_OFFLINE . "\"";
1513 if ($status_in == RSCS_STATUS_OFFLINE)
1514 $rv .= " SELECTED";
1515 $rv .= ">Offline";
1516 //--------
1517 $rv .= "<option value=\"" . (string)RSCS_STATUS_ONLINE . "\"";
1518 if ($status_in == RSCS_STATUS_ONLINE)
1519 $rv .= " SELECTED";
1520 $rv .= ">Online";
1521 //--------
1522 $rv .= "</SELECT>";
1523
1524 return($rv);
1525 }
1526 //--------------------------------------------------------------------------------------------------------------
1527 //Returns the HTML that should be used to identify the resource index description on the EDIT and ADD pages.
1528 //HTML may be marked up with <i>, <b>, and <b>.
1529 //
1530 function RSCS_status_desc_html_01()
1531 {
1532 $rv = "The <i>status</i> identifies whether a resource is in service.&nbsp; A resource that is <i>offline</i> "
1533 . "is not displayed in scheduling views and cannot be scheduled.&nbsp; Placing a resource <i>offline</i> "
1534 . "will make the resource invisible without deleting information about the resource.";
1535
1536 return($rv);
1537 }
1538 //--------------------------------------------------------------------------------------------------------------
1539 //--------------------------------------------------------------------------------------------------------------
1540 //Returns the HTML that should be used to identify the disporderstatus on the EDIT and ADD pages. HTML may
1541 //be marked up with <i> and <b> and includes the trailing colon.
1542 //
1543 function RSCS_disporder_id_html_01()
1544 {
1545 return("<i>disporder:</i>");
1546 }
1547 //--------------------------------------------------------------------------------------------------------------
1548 //Returns the HTML that should be used to display the disporder form field on the EDIT and ADD pages.
1549 //
1550 function RSCS_disporder_disp_html_01($disporder_in)
1551 {
1552 //Turn the input into a numeric value. If it can't be turned into a numeric value,
1553 //make it online.
1554 if (is_numeric($disporder_in))
1555 {
1556 $disporder_in = (int)$disporder_in;
1557 if ($disporder_in <= 0)
1558 {
1559 //Can't be non-positive integer.
1560 $disporder_in = 1;
1561 }
1562 }
1563 else
1564 {
1565 //This is nothing we recognize. Assume number 1.
1566 $disporder_in = 1;
1567 }
1568
1569 //Do the text input field.
1570 $rv = "<input type=\"text\" name=\"disporder\" size=\"15\" value=\""
1571 .
1572 (string)$disporder_in
1573 .
1574 "\">";
1575
1576 return($rv);
1577 }
1578 //--------------------------------------------------------------------------------------------------------------
1579 //Returns the HTML that should be used to identify the resource index description on the EDIT and ADD pages.
1580 //HTML may be marked up with <i>, <b>, and <b>.
1581 //
1582 function RSCS_disporder_desc_html_01()
1583 {
1584 $rv = "The <i>disporder</i> is a positive integer that defines which resource is displayed first "
1585 . "in contexts where information about more than one resource may be displayed.&nbsp; Resources "
1586 . "with the smaller <i>disporder</i> field are displayed first.&nbsp; An option to renumber the "
1587 . "<i>disporder</i> fields exists on the resource list page.";
1588
1589 return($rv);
1590 }
1591 //--------------------------------------------------------------------------------------------------------------
1592 //--------------------------------------------------------------------------------------------------------------
1593 //Returns the HTML that should be used to identify the initials on the EDIT and ADD pages. HTML may
1594 //be marked up with <i> and <b> and includes the trailing colon.
1595 //
1596 function RSCS_initials_id_html_01()
1597 {
1598 return("<i>initials:</i>");
1599 }
1600 //--------------------------------------------------------------------------------------------------------------
1601 //Returns the HTML that should be used to display the initials form field on the EDIT and ADD pages.
1602 //
1603 function RSCS_initials_disp_html_01($initials_in)
1604 {
1605 //Do the text input field.
1606 $rv = "<input type=\"text\" name=\"initials\" size=\"15\" value=\""
1607 .
1608 htmlentities((string)$initials_in)
1609 .
1610 "\">";
1611
1612 return($rv);
1613 }
1614 //--------------------------------------------------------------------------------------------------------------
1615 //Returns the HTML that should be used to identify the resource index description on the EDIT and ADD pages.
1616 //HTML may be marked up with <i>, <b>, and <b>.
1617 //
1618 function RSCS_initials_desc_html_01()
1619 {
1620 $rv = "The <i>initials</i> field is the shortest possible description to uniquely identify an "
1621 . "aircraft, simulator, or flight instructor.&nbsp; For an aircraft, this field traditionally "
1622 . "is the registration number of the aircraft (i.e. &quot;N1234N&quot;).&nbsp; For a flight instructor, "
1623 . "this field traditionally holds just the instructor's initials (i.e. &quot;J.S.&quot;).";
1624
1625 return($rv);
1626 }
1627 //--------------------------------------------------------------------------------------------------------------
1628 //--------------------------------------------------------------------------------------------------------------
1629 //Returns the HTML that should be used to identify the shortdesc on the EDIT and ADD pages. HTML may
1630 //be marked up with <i> and <b> and includes the trailing colon.
1631 //
1632 function RSCS_shortdesc_id_html_01()
1633 {
1634 return("<i>shortdesc:</i>");
1635 }
1636 //--------------------------------------------------------------------------------------------------------------
1637 //Returns the HTML that should be used to display the shortdesc form field on the EDIT and ADD pages.
1638 //
1639 function RSCS_shortdesc_disp_html_01($shortdesc_in)
1640 {
1641 //Do the text input field.
1642 $rv = "<input type=\"text\" name=\"shortdesc\" size=\"50\" value=\""
1643 .
1644 htmlentities((string)$shortdesc_in)
1645 .
1646 "\">";
1647
1648 return($rv);
1649 }
1650 //--------------------------------------------------------------------------------------------------------------
1651 //Returns the HTML that should be used to identify the resource shortdesc description on the EDIT and ADD pages.
1652 //HTML may be marked up with <i>, <b>, and <b>.
1653 //
1654 function RSCS_shortdesc_desc_html_01()
1655 {
1656 $rv = "The <i>shortdesc</i> field is the medium-length description to uniquely identify an "
1657 . "aircraft, simulator, or flight instructor.&nbsp; For an aircraft, this field traditionally "
1658 . "is the registration number of the aircraft (i.e. &quot;N1234N&quot;).&nbsp; For a flight instructor, "
1659 . "this field traditionally holds the instructor's first initial and last name (i.e. &quot;J. Smith&quot;).";
1660
1661 return($rv);
1662 }
1663 //--------------------------------------------------------------------------------------------------------------
1664 //--------------------------------------------------------------------------------------------------------------
1665 //Returns the HTML that should be used to identify the longdesc on the EDIT and ADD pages. HTML may
1666 //be marked up with <i> and <b> and includes the trailing colon.
1667 //
1668 function RSCS_longdesc_id_html_01()
1669 {
1670 return("<i>longdesc:</i>");
1671 }
1672 //--------------------------------------------------------------------------------------------------------------
1673 //Returns the HTML that should be used to display the longdesc form field on the EDIT and ADD pages.
1674 //
1675 function RSCS_longdesc_disp_html_01($longdesc_in)
1676 {
1677 //Do the text input field.
1678 $rv = "<input type=\"text\" name=\"longdesc\" size=\"100\" value=\""
1679 .
1680 htmlentities((string)$longdesc_in)
1681 .
1682 "\">";
1683
1684 return($rv);
1685 }
1686 //--------------------------------------------------------------------------------------------------------------
1687 //Returns the HTML that should be used to identify the resource longdesc description on the EDIT and ADD pages.
1688 //HTML may be marked up with <i>, <b>, and <b>.
1689 //
1690 function RSCS_longdesc_desc_html_01()
1691 {
1692 $rv = "The <i>longdesc</i> field is the longest description to uniquely identify an "
1693 . "aircraft, simulator, or flight instructor.&nbsp; For an aircraft, this field traditionally "
1694 . "is the registration number of the aircraft followed by the manufacturer and model "
1695 . "(i.e. &quot;N1234N Cessna 172P&quot;).&nbsp; For a flight instructor, "
1696 . "this field traditionally holds the instructor's last name, a comma, and then the first "
1697 . "name (i.e. &quot;Smith, John&quot;).";
1698
1699 return($rv);
1700 }
1701 //--------------------------------------------------------------------------------------------------------------
1702 //--------------------------------------------------------------------------------------------------------------
1703 //Returns the HTML that should be used to identify the schedaheadhrs on the EDIT and ADD pages. HTML may
1704 //be marked up with <i> and <b> and includes the trailing colon.
1705 //
1706 function RSCS_schedaheadhrs_id_html_01()
1707 {
1708 return("<i>schedaheadhrs:</i>");
1709 }
1710 //--------------------------------------------------------------------------------------------------------------
1711 //Returns the HTML that should be used to display the schedaheadhrs form field on the EDIT and ADD pages.
1712 //
1713 function RSCS_schedaheadhrs_disp_html_01($schedaheadhrs_in)
1714 {
1715 //Turn the input into a numeric value. If it can't be turned into a numeric value,
1716 //make it online.
1717 if (is_numeric($schedaheadhrs_in))
1718 {
1719 $schedaheadhrs_in = (int)$schedaheadhrs_in;
1720 if ($schedaheadhrs_in < 0)
1721 {
1722 //Can't be negative integer.
1723 $schedaheadhrs_in = 0;
1724 }
1725 }
1726 else
1727 {
1728 //This is nothing we recognize. Assume number 0.
1729 $schedaheadhrs_in = 0;
1730 }
1731
1732 //Do the text input field.
1733 $rv = "<input type=\"text\" name=\"schedaheadhrs\" size=\"15\" value=\""
1734 .
1735 (string)$schedaheadhrs_in
1736 .
1737 "\">";
1738
1739 return($rv);
1740 }
1741 //--------------------------------------------------------------------------------------------------------------
1742 //Returns the HTML that should be used to identify the schedaheadhrs description on the EDIT and ADD pages.
1743 //HTML may be marked up with <i>, <b>, and <b>.
1744 //
1745 function RSCS_schedaheadhrs_desc_html_01()
1746 {
1747 $rv = "The <i>schedaheadhrs</i> is a non-negative integer that specifies the minimum number of hours that a "
1748 . "reservation must be made ahead of its start time by those without permission to violate scheduling rules.&nbsp; A "
1749 . "typical value for this field is 8.&nbsp; The intent "
1750 . "of the scheduling rules facilitated by this field is to ensure that an FBO has enough time to prepare an aircraft "
1751 . "and/or that a flight instructor has enough time to plan ahead for a lesson.&nbsp; A reservation that must be made "
1752 . "too close to the start time is typically made by calling the FBO.";
1753
1754 return($rv);
1755 }
1756 //--------------------------------------------------------------------------------------------------------------
1757 //--------------------------------------------------------------------------------------------------------------
1758 //Returns the HTML that should be used to identify the usercorres on the EDIT and ADD pages. HTML may
1759 //be marked up with <i> and <b> and includes the trailing colon.
1760 //
1761 function RSCS_usercorres_id_html_01()
1762 {
1763 return("<i>usercorres:</i>");
1764 }
1765 //--------------------------------------------------------------------------------------------------------------
1766 //Returns the HTML that should be used to display the usercorres form field on the EDIT and ADD pages.
1767 //
1768 function RSCS_usercorres_disp_html_01($usercorres_in)
1769 {
1770 //Turn the input into a numeric value. If it can't be turned into a numeric value,
1771 //make it 0.
1772 if (is_numeric($usercorres_in))
1773 {
1774 $usercorres_in = (int)$usercorres_in;
1775 if ($usercorres_in < 0)
1776 {
1777 //Can't be negative integer.
1778 $usercorres_in = 0;
1779 }
1780 }
1781 else
1782 {
1783 //This is nothing we recognize. Assume number 0.
1784 $usercorres_in = 0;
1785 }
1786
1787 //If the integer is non-zero, try to look up the user with that index.
1788 if ($usercorres_in != 0)
1789 {
1790 $userdata = USRS_retrieve_by_idx($usercorres_in);
1791 if ($userdata !== FALSE)
1792 {
1793 $userid = $userdata["userid"];
1794 }
1795 else
1796 {
1797 $userid = $usercorres_in;
1798 }
1799 }
1800 else
1801 {
1802 $userid = 0;
1803 }
1804
1805 //Do the text input field.
1806 $rv = "<input type=\"text\" name=\"usercorres\" size=\"20\" value=\""
1807 .
1808 (string)$userid
1809 .
1810 "\">";
1811
1812 return($rv);
1813 }
1814 //--------------------------------------------------------------------------------------------------------------
1815 //Returns the HTML that should be used to identify the schedaheadhrs description on the EDIT and ADD pages.
1816 //HTML may be marked up with <i>, <b>, and <b>.
1817 //
1818 function RSCS_usercorres_desc_html_01()
1819 {
1820 $rv = "The <i>usercorres</i> field specifies the user account of the flight instructor corresponding to the "
1821 . "resource, if the resource is a flight instructor.&nbsp; (It is not required that a flight instructor "
1822 . "resource be linked to a user account, but such linkage is the usual case.)&nbsp; If provided, this link "
1823 . "allows the scheduling software to send the flight instructor notification e-mails when a relevant scheduling "
1824 . "change is made, and to make other intelligent decisions about scheduling, permissions, and notification.&nbsp; "
1825 . "The user account must be specified as the userid of the account (i.e. &quot;jsmith&quot;).&nbsp; If "
1826 . "no user account should be linked to the resource, the integer "
1827 . "&quot;0&quot; should be used.";
1828
1829 return($rv);
1830 }
1831 //--------------------------------------------------------------------------------------------------------------
1832 //--------------------------------------------------------------------------------------------------------------
1833 //Returns the HTML that should be used to identify the rstdtime on the EDIT and ADD pages. HTML may
1834 //be marked up with <i> and <b> and includes the trailing colon.
1835 //
1836 function RSCS_rstdtime_id_html_01()
1837 {
1838 return("<i>rstdtime:</i>");
1839 }
1840 //--------------------------------------------------------------------------------------------------------------
1841 //Returns the HTML that should be used to display the rstdtime form field on the EDIT and ADD pages.
1842 //
1843 function RSCS_rstdtime_disp_html_01($rstdtime_in)
1844 {
1845 $rv = "";
1846
1847 $rstdtime_in = (string)$rstdtime_in; //Be sure it is a string.
1848
1849 for ($i=0; $i<48; $i++) //For each half-hour time slot.
1850 {
1851 $hour_start = (int)($i >> 1);
1852 $minute_start = (int)(($i % 2) * 30);
1853
1854 $hour_end = (int)((($i+1) % 48) >> 1);
1855 $minute_end = (int)(((($i+1) % 48) % 2) * 30);
1856
1857 $time_string_start = DATEFUNC_stdtimenosec($hour_start, $minute_start);
1858 $time_string_end = DATEFUNC_stdtimenosec($hour_end, $minute_end);
1859
1860 $is_restricted = FALSE;
1861 if (strlen($rstdtime_in) >= ($i+1))
1862 {
1863 if (SubStr($rstdtime_in, $i, 1) == "R")
1864 $is_restricted = TRUE;
1865 }
1866
1867 $rv .= "<input type=\"checkbox\" name=\"";
1868 $rv .= sprintf("rstdtime%02d", $i);
1869 $rv .= "\"";
1870 if ($is_restricted)
1871 $rv .= " checked";
1872 $rv .= ">&nbsp;";
1873 $rv .= $time_string_start . " - " . $time_string_end;
1874 if ($i != 47)
1875 $rv .= "<br>";
1876 }
1877
1878 return($rv);
1879 }
1880 //--------------------------------------------------------------------------------------------------------------
1881 //Returns the HTML that should be used to identify the schedaheadhrs description on the EDIT and ADD pages.
1882 //HTML may be marked up with <i>, <b>, and <b>.
1883 //
1884 function RSCS_rstdtime_desc_html_01()
1885 {
1886 $rv = "The <i>rstdtime</i> field specifies those half-hour time slots of a 24-hour day during which "
1887 . "a user without permission to break scheduling rules may not reserve a resource.&nbsp; This field "
1888 . "is intended to prevent students and aircraft renters from reserving flight instructors at times "
1889 . "of the day during which they do not desire to teach or aircraft during times of the day when they "
1890 . "are not available for rental.";
1891
1892 return($rv);
1893 }
1894 //--------------------------------------------------------------------------------------------------------------
1895 //--------------------------------------------------------------------------------------------------------------
1896 //Returns the HTML that should be used to identify the password on the EDIT and ADD pages. HTML may
1897 //be marked up with <i> and <b> and includes the trailing colon.
1898 //
1899 function RSCS_password_id_html_01($curuserinfo_in)
1900 {
1901 return("<i>Password for user <b>" . $curuserinfo_in["userid"] . "</b>:</i>");
1902 }
1903 //--------------------------------------------------------------------------------------------------------------
1904 //Returns the HTML that should be used to display the rstdtime form field on the EDIT and ADD pages.
1905 //
1906 function RSCS_password_disp_html_01()
1907 {
1908 return("<input type=\"password\" name=\"password\" size=\"20\">");
1909 }
1910 //--------------------------------------------------------------------------------------------------------------
1911 //Returns the HTML that should be used to identify the schedaheadhrs description on the EDIT and ADD pages.
1912 //HTML may be marked up with <i>, <b>, and <b>.
1913 //
1914 function RSCS_password_desc_html_01()
1915 {
1916 $rv = "The <i>password</i> field is used to verify that the logged-in user is actually the individual "
1917 . "attempting to make this change.&nbsp; This is an attempt to guard against data modification or "
1918 . "destruction due to unattended computers.&nbsp; If the password entered is incorrect, the user "
1919 . "will be automatically logged out.";
1920
1921 return($rv);
1922 }
1923 //--------------------------------------------------------------------------------------------------------------
1924 //--------------------------------------------------------------------------------------------------------------
1925 function RSCS_idx_validate_a(
1926 $field_val_in, //Value to be considered.
1927 $action_in, //"A" for add or "M" for modify.
1928 &$field_val_out, //May be sanitized.
1929 &$errors_out, //Appended errors.
1930 &$warnings_out //Appended warnings
1931 )
1932 {
1933 //Restrict the field value in to just digits.
1934 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, "0123456789", 12);
1935
1936 //See if can pack it into an integer. Errors create "0", which will fail as a commit
1937 //attempt.
1938 if (is_numeric($field_val_in))
1939 {
1940 $field_val_in = (int)$field_val_in;
1941 if ($field_val_in < 0)
1942 $field_val_in = 0;
1943 }
1944 else
1945 {
1946 $field_val_in = 0;
1947 }
1948
1949 //If the value is 0, this is suspicious.
1950 if ($field_val_in == 0)
1951 {
1952 $errors_out[] = "The <i>idx</i> field is not a valid integer index.";
1953 }
1954
1955 //Return the sanitized output.
1956 $field_val_out = (string)$field_val_in;
1957 }
1958 //--------------------------------------------------------------------------------------------------------------
1959 function RSCS_type_validate_a(
1960 $field_val_in, //Value to be considered.
1961 $action_in, //"A" for add or "M" for modify.
1962 &$field_val_out, //May be sanitized.
1963 &$errors_out, //Appended errors.
1964 &$warnings_out //Appended warnings
1965 )
1966 {
1967 //Restrict the field value in to just one digit.
1968 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, "0123456789", 1);
1969
1970 //See if can pack it into an integer. Errors create "-1", which will fail as a commit
1971 //attempt.
1972 if (is_numeric($field_val_in))
1973 {
1974 $field_val_in = (int)$field_val_in;
1975 if ($field_val_in < 0)
1976 $field_val_in = -1;
1977 }
1978 else
1979 {
1980 $field_val_in = -1;
1981 }
1982
1983 //If the value is -1, this is suspicious.
1984 if ($field_val_in == -1)
1985 {
1986 $errors_out[] = "The <i>type</i> field is not a valid integer type.";
1987 }
1988 else if (
1989 ($field_val_in != RSCS_TYPE_AIRCRAFT)
1990 &&
1991 ($field_val_in != RSCS_TYPE_SIMULATOR)
1992 &&
1993 ($field_val_in != RSCS_TYPE_FLIGHTINSTRUCTOR)
1994 )
1995 {
1996 //This isn't an allowed value.
1997 $errors_out[] = "The <i>type</i> field is not a valid type (aircraft, simulator, or flight instructor).";
1998 }
1999
2000 //Return the sanitized output.
2001 $field_val_out = (string)$field_val_in;
2002 }
2003 //--------------------------------------------------------------------------------------------------------------
2004 function RSCS_status_validate_a(
2005 $field_val_in, //Value to be considered.
2006 $action_in, //"A" for add or "M" for modify.
2007 &$field_val_out, //May be sanitized.
2008 &$errors_out, //Appended errors.
2009 &$warnings_out //Appended warnings
2010 )
2011 {
2012 //Restrict the field value in to just one digit.
2013 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, "0123456789", 1);
2014
2015 //See if can pack it into an integer. Errors create "-1", which will fail as a commit
2016 //attempt.
2017 if (is_numeric($field_val_in))
2018 {
2019 $field_val_in = (int)$field_val_in;
2020 if ($field_val_in < 0)
2021 $field_val_in = -1;
2022 }
2023 else
2024 {
2025 $field_val_in = -1;
2026 }
2027
2028 //If the value is -1, this is suspicious.
2029 if ($field_val_in == -1)
2030 {
2031 $errors_out[] = "The <i>status</i> field is not a valid integer.";
2032 }
2033 else if (
2034 ($field_val_in != RSCS_STATUS_OFFLINE)
2035 &&
2036 ($field_val_in != RSCS_STATUS_ONLINE)
2037 )
2038 {
2039 //This isn't an allowed value.
2040 $errors_out[] = "The <i>status</i> field is not a valid integer (offline or online).";
2041 }
2042
2043 //Return the sanitized output.
2044 $field_val_out = (string)$field_val_in;
2045 }
2046 //--------------------------------------------------------------------------------------------------------------
2047 function RSCS_disporder_validate_a(
2048 $field_val_in, //Value to be considered.
2049 $action_in, //"A" for add or "M" for modify.
2050 &$field_val_out, //May be sanitized.
2051 &$errors_out, //Appended errors.
2052 &$warnings_out //Appended warnings
2053 )
2054 {
2055 //Restrict the field value in to 12 digits.
2056 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, "0123456789", 12);
2057
2058 //See if can pack it into an integer. Errors create "0", which is acceptable for disporder.
2059 if (is_numeric($field_val_in))
2060 {
2061 $field_val_in = (int)$field_val_in;
2062 if ($field_val_in <= 0)
2063 $field_val_in = -1;
2064 }
2065 else
2066 {
2067 $field_val_in = -1;
2068 }
2069
2070 //If the value is -1, this means an error was encountered.
2071 if ($field_val_in == -1)
2072 {
2073 $errors_out[] = "The <i>disporder</i> field is not a valid positive integer.";
2074 $field_val_in = 1;
2075 }
2076
2077 //Return the sanitized output.
2078 $field_val_out = (string)$field_val_in;
2079 }
2080 //--------------------------------------------------------------------------------------------------------------
2081 function RSCS_initials_validate_a(
2082 $field_val_in, //Value to be considered.
2083 $action_in, //"A" for add or "M" for modify.
2084 &$field_val_out, //May be sanitized.
2085 &$errors_out, //Appended errors.
2086 &$warnings_out //Appended warnings
2087 )
2088 {
2089 //Restrict the field value in a set of characters and to 25 characters.
2090 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, RSCS_INITIALS_ALLOWEDCHARS, 25);
2091
2092 //Trim both sides.
2093 $field_val_in = Trim($field_val_in);
2094
2095 //The only error is if this is zero length.
2096 if (strlen($field_val_in) == 0)
2097 {
2098 $errors_out[] = "The <i>initials</i> field may not be left blank.";
2099 }
2100
2101 //Return the sanitized output.
2102 $field_val_out = (string)$field_val_in;
2103 }
2104 //--------------------------------------------------------------------------------------------------------------
2105 function RSCS_shortdesc_validate_a(
2106 $field_val_in, //Value to be considered.
2107 $action_in, //"A" for add or "M" for modify.
2108 &$field_val_out, //May be sanitized.
2109 &$errors_out, //Appended errors.
2110 &$warnings_out //Appended warnings
2111 )
2112 {
2113 //Restrict the field value in a set of characters and to 50 characters.
2114 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, RSCS_SHORTDESC_ALLOWEDCHARS, 50);
2115
2116 //Trim both sides.
2117 $field_val_in = Trim($field_val_in);
2118
2119 //The only error is if this is zero length.
2120 if (strlen($field_val_in) == 0)
2121 {
2122 $errors_out[] = "The <i>shortdesc</i> field may not be left blank.";
2123 }
2124
2125 //Return the sanitized output.
2126 $field_val_out = (string)$field_val_in;
2127 }
2128 //--------------------------------------------------------------------------------------------------------------
2129 function RSCS_longdesc_validate_a(
2130 $field_val_in, //Value to be considered.
2131 $action_in, //"A" for add or "M" for modify.
2132 &$field_val_out, //May be sanitized.
2133 &$errors_out, //Appended errors.
2134 &$warnings_out //Appended warnings
2135 )
2136 {
2137 //Restrict the field value in a set of characters and to 100 characters.
2138 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, RSCS_LONGDESC_ALLOWEDCHARS, 100);
2139
2140 //Trim both sides.
2141 $field_val_in = Trim($field_val_in);
2142
2143 //The only error is if this is zero length.
2144 if (strlen($field_val_in) == 0)
2145 {
2146 $errors_out[] = "The <i>longdesc</i> field may not be left blank.";
2147 }
2148
2149 //Return the sanitized output.
2150 $field_val_out = (string)$field_val_in;
2151 }
2152 //--------------------------------------------------------------------------------------------------------------
2153 function RSCS_schedaheadhrs_validate_a(
2154 $field_val_in, //Value to be considered.
2155 $action_in, //"A" for add or "M" for modify.
2156 &$field_val_out, //May be sanitized.
2157 &$errors_out, //Appended errors.
2158 &$warnings_out //Appended warnings
2159 )
2160 {
2161 //Restrict the field value in to 12 digits.
2162 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, "0123456789", 12);
2163
2164 //See if can pack it into an integer. Errors create "0", which is acceptable for schedaheadhrs.
2165 if (is_numeric($field_val_in))
2166 {
2167 $field_val_in = (int)$field_val_in;
2168 if ($field_val_in < 0)
2169 $field_val_in = -1;
2170 }
2171 else
2172 {
2173 $field_val_in = -1;
2174 }
2175
2176 //If the value is -1, this means an error was encountered.
2177 if ($field_val_in == -1)
2178 {
2179 $errors_out[] = "The <i>schedaheadhrs</i> field is not a valid non-negative integer.";
2180 $field_val_in = 0;
2181 }
2182
2183 //Return the sanitized output.
2184 $field_val_out = (string)$field_val_in;
2185 }
2186 //--------------------------------------------------------------------------------------------------------------
2187 function RSCS_usercorres_validate_a(
2188 $field_val_in, //Value to be considered.
2189 $action_in, //"A" for add or "M" for modify.
2190 &$field_val_out, //May be sanitized.
2191 &$errors_out, //Appended errors.
2192 &$warnings_out //Appended warnings
2193 )
2194 {
2195 //Restrict the field value in a set of characters and to 20 characters.
2196 $field_val_in = STRFUNC_force_stringtype_subset_truncate($field_val_in, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 20);
2197
2198 //Force the upper-case elements of the string to lower-case.
2199 $field_val_in = StrToLower($field_val_in);
2200
2201 if (strlen($field_val_in) == 0)
2202 {
2203 //The string length seems to be zero. This may be a synonym for "no linked user". Just
2204 //say "0".
2205 $field_val_out = "0";
2206 return;
2207 }
2208 else if ($field_val_in == "0")
2209 {
2210 //"0".
2211 $field_val_out = "0";
2212 return;
2213 }
2214 else
2215 {
2216 if (! USRS_userid_membership_test($field_val_in))
2217 {
2218 $errors_out[] = "The <i>usercorres</i> cannot be parsed.";
2219 $field_val_out = "0";
2220 return;
2221 }
2222
2223 //See if this is a user.
2224 $result = USRS_userid_idx_map($field_val_in);
2225 if ($result === FALSE)
2226 {
2227 //No such user can be found. This is an error.
2228 $errors_out[] = "The <i>usercorres</i> user <i>" . $field_val_in . "</i> does not exist.";
2229 $field_val_out = "0";
2230 return;
2231 }
2232 else
2233 {
2234 //User found.
2235 $field_val_out = (string)$result;
2236 return;
2237 }
2238 }
2239 }
2240 //--------------------------------------------------------------------------------------------------------------
2241 //Given a comma-separated list of integers (direct from the schedalonerscs), and an associative array
2242 //of resources indexed by idx then field, creates a comma-separated list of short descriptors. Used to format resources
2243 //for display of what each user is allowed to rent without an instructor. Any indices that don't correspond
2244 //to resources are just ignored.
2245 //
2246 function RSCS_csl_to_short_rscs_list_a($csl_in, $rscs_in)
2247 {
2248 //If the resource list is non-existent, can't do much, anyway.
2249 if ($rscs_in === FALSE)
2250 return("");
2251
2252 $exploded_list = CSL_csl_to_string_array($csl_in);
2253
2254 if ($exploded_list === FALSE)
2255 {
2256 return("");
2257 }
2258
2259 $rv = "";
2260
2261 for ($i=0; $i<count($exploded_list); $i++)
2262 {
2263 $index = (int)$exploded_list[$i];
2264
2265 if (isset($rscs_in[$index]["initials"]))
2266 {
2267 $rv = $rv
2268 . $rscs_in[$index]["initials"]
2269 . ", ";
2270 }
2271 }
2272
2273 //If we're here, we just need to remove the final two characters.
2274 $rv = SubStr($rv, 0, strlen($rv) - 2);
2275
2276 return($rv);
2277 }
2278 //
2279 //--------------------------------------------------------------------------------------------------------------
2280 //End of $RCSfile: rscsx.inc,v $.
2281 //--------------------------------------------------------------------------------------------------------------
2282 ?>

dashley@gmail.com
ViewVC Help
Powered by ViewVC 1.1.25